Package lupos.engine.operators.singleinput.generate

Examples of lupos.engine.operators.singleinput.generate.Generate


    startNode = generate;
  }

  @Override
  protected boolean checkPrecondition(final Map<String, BasicOperator> mso) {
    final Generate generate = (Generate) mso.get("generate");
    // While Generate has more than one successor
    return (generate.getSucceedingOperators().size() > 1)
        && generate.getPrecedingOperators().size() == 1;
  }
View Full Code Here


  public Tuple<Collection<BasicOperator>, Collection<BasicOperator>> transformOperatorGraph(
      final Map<String, BasicOperator> mso,
      final BasicOperator rootOperator) {
    final Collection<BasicOperator> deleted = new LinkedList<BasicOperator>();
    final Collection<BasicOperator> added = new LinkedList<BasicOperator>();
    final Generate generate = (Generate) mso.get("generate");

    final LinkedList<BasicOperator> pres = (LinkedList<BasicOperator>) generate
        .getPrecedingOperators();
    if (pres.size() > 1) {
      throw (new UnsupportedOperationException(
          "Generate has more predecessors => Correct RuleSplitGenerate!!!"));
    } else {
      final List<OperatorIDTuple> succs = generate
          .getSucceedingOperators();

      final BasicOperator pre = pres.get(0);

      Generate generate_new;

      pre.removeSucceedingOperator(generate);
      deleted.add(generate);

      // For each successor
      for (int i = 0; i < succs.size(); i++) {
        // generate a new Generate and connect it to the i-th successor
        generate_new = new Generate((TriplePattern) succs.get(i)
            .getOperator(), generate.getValueOrVariable());
        added.add(generate_new);
        // connect the new one instead of the old Generate to the
        // predecessors
        generate_new.setPrecedingOperators(pres);
        pre.addSucceedingOperator(new OperatorIDTuple(generate_new, 0));
      }

      rootOperator.deleteParents();
      rootOperator.setParents();
View Full Code Here

public class RuleReplaceGenPat extends Rule {

  @Override
  protected void init() {
    final Generate generate = new Generate();
    final TriplePattern pat = new TriplePattern();

    generate.setSucceedingOperator(new OperatorIDTuple(pat, -1));

    pat.setPrecedingOperator(generate);

    subGraphMap = new HashMap<BasicOperator, String>();
    subGraphMap.put(generate, "generate");
View Full Code Here

    startNode = generate;
  }

  @Override
  protected boolean checkPrecondition(final Map<String, BasicOperator> mso) {
    final Generate generate = (Generate) mso.get("generate");

    final LinkedList<OperatorIDTuple> succs = (LinkedList<OperatorIDTuple>) generate
        .getSucceedingOperators();
    // First finish RuleSplitGenerates
    return ((succs.size() == 1) && (succs.get(0).getOperator() instanceof TriplePattern));
  }
View Full Code Here

  public Tuple<Collection<BasicOperator>, Collection<BasicOperator>> transformOperatorGraph(
      final Map<String, BasicOperator> mso,
      final BasicOperator rootOperator) {
    final Collection<BasicOperator> deleted = new LinkedList<BasicOperator>();
    final Collection<BasicOperator> added = new LinkedList<BasicOperator>();
    final Generate generate = (Generate) mso.get("generate");
    final TriplePattern pat = (TriplePattern) mso.get("pat");
    final Item[] patItems = pat.getItems();
    final Item[] generateItems = generate.getValueOrVariable();

    // System.out.println(generate.toString() + "---" + pat.toString());

    Filter filter = null;
    final ReplaceVar replaceVar = new ReplaceVar();
    replaceVar.setIntersectionVariables(new HashSet<Variable>());
    replaceVar.setUnionVariables(replaceVar.getIntersectionVariables());

    final LinkedList<Variable> addBindingsVar = new LinkedList<Variable>();
    final LinkedList<Literal> addBindingsLit = new LinkedList<Literal>();

    String filterConstraint = "Filter( ";
    for (int i = 0; i < 3; i++) {
      final Item patItem = patItems[i];
      final Item generateItem = generateItems[i];
      if ((!patItem.isVariable()) && generateItem.isVariable()) {
        filterConstraint += generateItems[i].toString() + " = "
            + patItems[i].toString() + " && ";
      } else if (patItem.isVariable() && generateItem.isVariable()) {
        replaceVar.addSubstitution((Variable) patItem,
            (Variable) generateItem);
        replaceVar.getIntersectionVariables().add((Variable) patItem);
      } else if (patItem.isVariable() && (!generateItem.isVariable())) {
        addBindingsVar.add((Variable) patItem);
        addBindingsLit.add((Literal) generateItem);
      } else if (!patItem.isVariable() && !generateItem.isVariable()
          && !generateItem.equals(patItem)) {
        // cannot match, remove generate.
        for (final BasicOperator parent : generate
            .getPrecedingOperators())
          parent.removeSucceedingOperator(generate);
        generate.getPrecedingOperators().clear();
        generate.removeFromOperatorGraph();
        return null;
      }
    }

    // If (?x = ?a) and (?x = ?b) then (valueOf(?a) = value(?b)) must be
    // fulfilled
    for (int i = 0; i < 2; i++) {
      for (int x = i + 1; x < 3; x++) {
        if (patItems[i].equals(patItems[x])) {
          filterConstraint += generateItems[i].toString() + " = "
              + generateItems[x].toString() + " && ";
        }
      }
    }

    if (!filterConstraint.equals("Filter( ")) {
      filterConstraint = filterConstraint.substring(0,
          filterConstraint.length() - 3)
          + ") ";

      try {
        final ASTFilterConstraint ASTfilter = (ASTFilterConstraint) SPARQL1_1Parser
            .parseFilter(filterConstraint);
        filter = new Filter(ASTfilter);
      } catch (final Exception e) {
        System.err
            .println("This should never happen in RuleReplaceGenPat!");
        System.err.println(e);
        e.printStackTrace();
      }
    }

    // Only Operators with a not empty definition are put into the
    // operatorgraph
    final LinkedList<BasicOperator> order = new LinkedList<BasicOperator>();
    if (filter != null) {
      order.add(filter);
      added.add(filter);
    }

    final int substVar = replaceVar.getSubstitutionsVariableLeft().size();

    if (substVar > 0) {
      order.add(replaceVar);
      added.add(replaceVar);
    } else {
      final Projection p = new Projection();
      p.setIntersectionVariables(new HashSet<Variable>());
      p.setUnionVariables(p.getUnionVariables());
      order.add(p);
      added.add(p);
    }
    if (addBindingsVar.size() > 0) {
      final Iterator<Literal> lit_it = addBindingsLit.iterator();
      final HashSet<Variable> hsv = new HashSet<Variable>();
      hsv.addAll(replaceVar.getUnionVariables());
      for (final Variable v : addBindingsVar) {
        final AddBinding ab = new AddBinding(v, lit_it.next());
        hsv.add(v);
        ab.setIntersectionVariables((HashSet<Variable>) hsv.clone());
        ab.setUnionVariables(ab.getIntersectionVariables());
        order.add(ab);
        added.add(ab);
      }
    }

    // In case that Generate or TriplePattern has minimum one variable, than
    // minimum one operator has to be inserted
    if (order.size() > 0) {
      final List<BasicOperator> pres = (List<BasicOperator>) generate
          .getPrecedingOperators();
      BasicOperator pre;
      for (int i = 0; i < pres.size(); i++) {
        pre = pres.get(i);
        pre.addSucceedingOperator(new OperatorIDTuple(order.getFirst(),
            0));
        if (filter != null) {
          Collection<Variable> vars = filter
              .getIntersectionVariables();
          if (vars == null)
            vars = new HashSet<Variable>();
          vars.addAll(pre.getIntersectionVariables());
          filter.setIntersectionVariables(vars);
          filter.setUnionVariables(vars);
        }
        pre.removeSucceedingOperator(generate);
        order.getFirst().addPrecedingOperator(pre);
      }

      for (int i = 0; i < order.size() - 1; i++) {
        order.get(i + 1).setPrecedingOperator(order.get(i));
        order.get(i).setSucceedingOperator(
            new OperatorIDTuple(order.get(i + 1), 0));
      }

      final LinkedList<OperatorIDTuple> succs = (LinkedList<OperatorIDTuple>) pat
          .getSucceedingOperators();
      for (int i = 0; i < succs.size(); i++) {
        succs.get(i).getOperator()
            .addPrecedingOperator(order.getLast());
      }

      final LinkedList<OperatorIDTuple> sops = new LinkedList<OperatorIDTuple>();
      sops.addAll(pat.getSucceedingOperators());
      order.getLast().setSucceedingOperators(sops);
    } else {
      final LinkedList<BasicOperator> pres = (LinkedList<BasicOperator>) generate
          .getPrecedingOperators();
      final LinkedList<OperatorIDTuple> succs = (LinkedList<OperatorIDTuple>) pat
          .getSucceedingOperators();
      BasicOperator pre;
      BasicOperator succ;
View Full Code Here

    for(final BasicOperator bo: new LinkedList<BasicOperator>(resultInference.getPrecedingOperators())){
      if(bo instanceof Construct){
        final Construct construct = (Construct)bo;
        // split construct and replace them with Generate operators!
        for(final TriplePattern tp: construct.getTemplates()){
          final Generate generate = new Generate(tp);
          for(final BasicOperator father: construct.getPrecedingOperators()){
            father.addSucceedingOperator(generate);
            generate.addPrecedingOperator(father);
          }
          listOfConstructedTripel.add(generate);
          // remove old construct
          for(final BasicOperator father: new HashSet<BasicOperator>(construct.getPrecedingOperators())){
            father.removeSucceedingOperator(construct);
            construct.removePrecedingOperator(father);
          }
        }
      } else if(bo instanceof ConstructPredicate){
        final ConstructPredicate cp = (ConstructPredicate) bo;
        boolean toDelete = true;
        for(final Tuple<URILiteral, List<Item>> tuple: cp.getPredicatePattern()){
          if(BasicIndexRuleEvaluator.rif_error.equals(tuple.getFirst())){
            // predicates as result of detecting errors in the ontology should remain!
            toDelete = false;
            break;
          }
        }
        if(toDelete){
          deletePrecedingOperators(bo);
        } else {
          cp.setSucceedingOperator(new OperatorIDTuple(resultQuery, 0));
          resultQuery.addPrecedingOperator(cp);
        }
      } else {
        deletePrecedingOperators(bo);
      }
    }
    // now connect generate operations with triple patterns/index scans of the query operator graph
    final LinkedList<BasicOperator> toBeConnectedTo = determine1stLevelTriplePatternOrIndexScans(rootQuery);
    for(final Generate generate: listOfConstructedTripel){
      generate.getSucceedingOperators().clear();
      final Item[] generateItems = generate.getValueOrVariable();
      for(final BasicOperator tpOrIndexScan: new LinkedList<BasicOperator>(toBeConnectedTo)){
        if(tpOrIndexScan instanceof TriplePattern){
          final TriplePattern tpi = (TriplePattern) tpOrIndexScan;
          if(BasicIndexRuleEvaluator.isMatching(tpi, generateItems)){
            generate.addSucceedingOperator(tpOrIndexScan);
          }
        } else {
          final BasicIndexScan bi = (BasicIndexScan) tpOrIndexScan;
          if(bi.getTriplePattern()!=null && bi.getTriplePattern().size()>0){
            final LinkedList<TriplePattern> matchingTPs = new LinkedList<TriplePattern>();
            for(final TriplePattern inIndexScan: bi.getTriplePattern()){
              if(BasicIndexRuleEvaluator.isMatching(inIndexScan, generateItems)){
                matchingTPs.add(inIndexScan);
                break;
              }
            }
            if(matchingTPs.size()>0){
              // modify BasicIndex in toBeConnectedTo! (delete tp in current bi, add new BasicIndex with tp, join both operators and additionally add tp for generate operator!)
              for(final TriplePattern tp: matchingTPs){
                final TriplePattern newTP = new TriplePattern(tp.getPos(0), tp.getPos(1), tp.getPos(2));
                newTP.recomputeVariables();
                generate.addSucceedingOperator(newTP);
                newTP.addPrecedingOperator(generate);

                if(bi.getTriplePattern().size()==1){
                  newTP.addSucceedingOperators(new LinkedList<OperatorIDTuple>(bi.getSucceedingOperators()));
                  for(final OperatorIDTuple opID: bi.getSucceedingOperators()){
                    opID.getOperator().addPrecedingOperator(newTP);
                  }
                } else {
                  bi.getTriplePattern().remove(tp);
                  final Join join = new Join();
                  join.setUnionVariables(bi.getUnionVariables());
                  bi.recomputeVariables();
                  tp.recomputeVariables();
                  final HashSet<Variable> joinVars = new HashSet<Variable>(tp.getUnionVariables());
                  joinVars.retainAll(bi.getUnionVariables());
                  join.setIntersectionVariables(joinVars);
                  for(final OperatorIDTuple opID: bi.getSucceedingOperators()){
                    final BasicOperator suc = opID.getOperator();
                    suc.removePrecedingOperator(bi);
                    suc.addPrecedingOperator(join);
                  }
                  join.setSucceedingOperators(bi.getSucceedingOperators());
                  bi.setSucceedingOperator(new OperatorIDTuple(join, 0));
                  join.addPrecedingOperator(bi);

                  final LinkedList<TriplePattern> tpList = new LinkedList<TriplePattern>();
                  tpList.add(tp);
                  final BasicIndexScan newIndex = ((Root)rootQuery).newIndexScan(new OperatorIDTuple(join, 1), tpList, bi.getGraphConstraint());
                  newIndex.recomputeVariables();
                  join.addPrecedingOperator(newIndex);
                  rootQuery.addSucceedingOperator(newIndex);
                  newIndex.addPrecedingOperator(rootQuery);
                  newTP.addSucceedingOperator(new OperatorIDTuple(join, 1));
                  join.addPrecedingOperator(newTP);

                  toBeConnectedTo.add(newIndex);
                }
              }
            }
          }
        }
      }
      if(generate.getSucceedingOperators().size()==0){
        // this generate operator is not connected to any other operator and thus can be deleted!
        deletePrecedingOperators(generate);
      }
    }
View Full Code Here

public class RuleEliminateUnnecessaryGenerate extends Rule {

  @Override
  protected void init() {
    final TriplePattern tp = new TriplePattern();
    final Generate generate = new Generate();

    tp.setSucceedingOperator(new OperatorIDTuple(generate, 0));
    generate.setPrecedingOperator(tp);

    subGraphMap = new HashMap<BasicOperator, String>();
    subGraphMap.put(tp, "triplepattern");
    subGraphMap.put(generate, "generate");
View Full Code Here

    startNode = generate;
  }

  @Override
  protected boolean checkPrecondition(final Map<String, BasicOperator> mso) {
    final Generate generate = (Generate) mso.get("generate");
    final TriplePattern tp = (TriplePattern) mso.get("triplepattern");

    final Item[] itemsGenerate = generate.getValueOrVariable();
    final Item[] itemsTriplePattern = tp.getItems();

    for (int i = 0; i < 3; i++) {
      if (!itemsGenerate[i].equals(itemsTriplePattern[i]))
        return false;
View Full Code Here

  public Tuple<Collection<BasicOperator>, Collection<BasicOperator>> transformOperatorGraph(
      final Map<String, BasicOperator> mso,
      final BasicOperator rootOperator) {
    final Collection<BasicOperator> deleted = new LinkedList<BasicOperator>();
    final Collection<BasicOperator> added = new LinkedList<BasicOperator>();
    final Generate generate = (Generate) mso.get("generate");
    final TriplePattern tp = (TriplePattern) mso.get("triplepattern");
    // remove the generate operator...
    for (final OperatorIDTuple oit : generate.getSucceedingOperators()) {
      oit.getOperator().removePrecedingOperator(generate);
    }
    for (final BasicOperator bo : generate.getPrecedingOperators()) {
      bo.removeSucceedingOperator(generate);
    }
    deleted.add(generate);
    // generate.setPrecedingOperators(null);
    // generate.setSucceedingOperators(null);
View Full Code Here

TOP

Related Classes of lupos.engine.operators.singleinput.generate.Generate

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.