Package lupos.engine.operators

Examples of lupos.engine.operators.OperatorIDTuple


  @Override
  protected void init() {
    final ReplaceLit repLit = new ReplaceLit();
    final ReplaceVar repVar = new ReplaceVar();

    repLit.setSucceedingOperator(new OperatorIDTuple(repVar, 0));
    repVar.setPrecedingOperator(repLit);

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


        .getSucceedingOperators();

    BasicOperator pre;
    for (int i = 0; i < pres.size(); i++) {
      pre = pres.get(i);
      pre.addSucceedingOperator(new OperatorIDTuple(repVar_new, 0));
      pre.removeSucceedingOperator(repLit);
    }

    repVar_new.setPrecedingOperators(pres);
    repVar_new.setSucceedingOperator(new OperatorIDTuple(repLit_new, 0));

    repLit_new.setPrecedingOperator(repVar_new);
    repLit_new.setSucceedingOperators(succs);

    BasicOperator succ;
View Full Code Here

        i1++;
      }
      collationOrder1 = this.fill(collationOrder1, i1);
      final CollationOrder co1 = getCollationOrder(collationOrder1);
      this.setCollationOrder(co1);
      ic.setSucceedingOperator(new OperatorIDTuple(this, 0));
      return ic;
    }
    this.optimizeJoinOrderAccordingToMostRestrictionsForMergeJoin();
    final Collection<BasicOperator> remainingJoins = new LinkedList<BasicOperator>();
    final Iterator<TriplePattern> itp = this.triplePatterns.iterator();
    while (itp.hasNext()) {
      final Collection<TriplePattern> c1 = new LinkedList<TriplePattern>();
      c1.add(itp.next());
      final RDF3XIndexScan index1 = new RDF3XIndexScan((OperatorIDTuple) null,
          c1, this.getGraphConstraint(), this.root);
      index1.intersectionVariables = new HashSet<Variable>();
      index1.unionVariables = new HashSet<Variable>();
      for (final TriplePattern tp : c1) {
        for (final Item i : tp.getItems()) {
          if (i.isVariable()) {
            index1.intersectionVariables.add((Variable) i);
            index1.unionVariables.add((Variable) i);
          }
        }
      }
      if (itp.hasNext()) {
        final Collection<TriplePattern> c2 = new LinkedList<TriplePattern>();
        c2.add(itp.next());
        final RDF3XIndexScan index2 = new RDF3XIndexScan(
            (OperatorIDTuple) null, c2, this.getGraphConstraint(), this.root);
        index2.intersectionVariables = new HashSet<Variable>();
        index2.unionVariables = new HashSet<Variable>();
        for (final TriplePattern tp : c2) {
          for (final Item i : tp.getItems()) {
            if (i.isVariable()) {
              index2.intersectionVariables.add((Variable) i);
              index2.unionVariables.add((Variable) i);
            }
          }
        }
        final HashSet<Variable> hsv = new HashSet<Variable>();
        hsv.addAll(index1.unionVariables);
        hsv.retainAll(index2.unionVariables);
        int[] collationOrder1 = { -1, -1, -1 };
        int[] collationOrder2 = { -1, -1, -1 };
        int i1 = 0;
        int i2 = 0;
        for (int i = 0; i < 3; i++) {
          if (!index1.getTriplePattern().iterator().next().getPos(i)
              .isVariable()) {
            collationOrder1[i1] = i;
            i1++;
          }
        }
        for (int i = 0; i < 3; i++) {
          if (!index2.getTriplePattern().iterator().next().getPos(i)
              .isVariable()) {
            collationOrder2[i2] = i;
            i2++;
          }
        }
        for (final Variable v : hsv) {
          collationOrder1[i1] = index1.getTriplePattern().iterator()
              .next().getPos(v);
          collationOrder2[i2] = index2.getTriplePattern().iterator()
              .next().getPos(v);
          i1++;
          i2++;
        }
        collationOrder1 = this.fill(collationOrder1, i1);
        collationOrder2 = this.fill(collationOrder2, i2);
        final CollationOrder co1 = getCollationOrder(collationOrder1);
        final CollationOrder co2 = getCollationOrder(collationOrder2);
        index1.setCollationOrder(co1);
        index2.setCollationOrder(co2);
        final Join join = new MergeJoinWithoutSorting();
        join.setIntersectionVariables(hsv);
        join.setUnionVariables(new HashSet<Variable>());
        join.getUnionVariables().addAll(index1.getUnionVariables());
        join.getUnionVariables().addAll(index2.getUnionVariables());
        index1.setSucceedingOperator(new OperatorIDTuple(join, 0));
        index2.setSucceedingOperator(new OperatorIDTuple(join, 1));
        ic.addSucceedingOperator(new OperatorIDTuple(index1, 0));
        ic.addSucceedingOperator(new OperatorIDTuple(index2, 0));
        remainingJoins.add(join);
      } else {
        int[] collationOrder1 = { -1, -1, -1 };
        int i1 = 0;
        for (int i = 0; i < 3; i++) {
          if (!index1.getTriplePattern().iterator().next().getPos(i)
              .isVariable()) {
            collationOrder1[i1] = i;
            i1++;
          }
        }
        for (final Variable v : index1.unionVariables) {
          collationOrder1[i1] = index1.getTriplePattern().iterator()
              .next().getPos(v);
          i1++;
        }
        collationOrder1 = this.fill(collationOrder1, i1);
        final CollationOrder co1 = getCollationOrder(collationOrder1);
        index1.setCollationOrder(co1);
        ic.addSucceedingOperator(new OperatorIDTuple(index1, 0));
        remainingJoins.add(index1);
      }
    }
    while (remainingJoins.size() > 1) {
      // choose best combination
      final Collection<BasicOperator> co = this.getNextJoin(remainingJoins);
      final Iterator<BasicOperator> io = co.iterator();
      final BasicOperator first = io.next();
      final BasicOperator second = io.next();
      final Join join = new Join();
      join.setIntersectionVariables(new HashSet<Variable>());
      join.setUnionVariables(new HashSet<Variable>());
      join.getUnionVariables().addAll(first.getUnionVariables());
      join.getUnionVariables().addAll(second.getUnionVariables());
      first.setSucceedingOperator(new OperatorIDTuple(join, 0));
      second.setSucceedingOperator(new OperatorIDTuple(join, 1));
      remainingJoins.remove(first);
      remainingJoins.remove(second);
      remainingJoins.add(join);
    }
    remainingJoins.iterator().next().setSucceedingOperators(
View Full Code Here

    final Collection<JSONObject> nodesJSON = newLinkedList();
    final Collection<JSONObject> edgesJSON = newLinkedList();

    this.id_counter = 0;

    this.serializeNode(new OperatorIDTuple(operator, 0), nodesJSON,
        edgesJSON, this.id_counter);
    final JSONObject serializedSubGraph = new JSONObject();

    try {
      serializedSubGraph.put("nodes", nodesJSON);
View Full Code Here

        if (!sortCriterium.equals(inp.getJoinPartner())) {
          // insert necessary sort operator
          last = FastSort.createInstance(root, inp.getTriplePatterns(), sortCriterium);
          join.setEstimatedCardinality(inp.getCardinality());
          last.setPrecedingOperator(join);
          join.setSucceedingOperator(new OperatorIDTuple(last, 0));
          this.moveToLeft(inp.getTriplePatterns(), root);
        } else {
          last = join;
        }
      }
      if (left instanceof RDF3XIndexScan) {
        ((RDF3XIndexScan) left).setCollationOrder(inp.getJoinPartner());
      }
      if (right instanceof RDF3XIndexScan) {
        ((RDF3XIndexScan) right).setCollationOrder(inp.getJoinPartner());
      }
    } else {
      if (inp.getJoinType() == JoinType.MERGEJOIN) {
        if (this.NARYMERGEJOIN) {
          throw new UnsupportedOperationException("Deprecated");
          // combine existing n-ary merge joins with the one which will be newly created
//          int number;
//          if (left instanceof NAryMergeJoinWithoutSorting) {
//            number = ((NAryMergeJoinWithoutSorting) left).getNumberOfOperands();
//          } else {
//            number = 1;
//          }
//          if (right instanceof NAryMergeJoinWithoutSorting) {
//            number += ((NAryMergeJoinWithoutSorting) right).getNumberOfOperands();
//          } else {
//            number += 1;
//          }
//          // determine minima and maxima...
//          Bindings min = Bindings.createNewInstance();
//          for (final Variable v : inp.getJoinPartner()) {
//            if (inp.getSelectivity() == null) {
//              min = null;
//              break;
//            }
//            final VarBucket vb = inp.getSelectivity().get(v);
//            if (vb == null) {
//              min = null;
//              break;
//            }
//            min.add(v, vb.minimum);
//          }
//          Bindings max = Bindings.createNewInstance();
//          for (final Variable v : inp.getJoinPartner()) {
//            if (inp.getSelectivity() == null) {
//              max = null;
//              break;
//            }
//            final VarBucket vb = inp.getSelectivity().get(v);
//            if (vb == null) {
//              max = null;
//              break;
//            }
//            max.add(v, vb.maximum);
//          }
//          join = new NAryMergeJoinWithoutSorting(number, min, max);
//          final BasicOperator[] bos = new BasicOperator[number];
//
//          int index2 = 0;
//          if (left instanceof NAryMergeJoinWithoutSorting) {
//            for (final BasicOperator bo : left
//                .getPrecedingOperators()) {
//              bos[index2++] = bo;
//              join.addPrecedingOperator(bo);
//            }
//          } else {
//            bos[index2++] = left;
//            join.addPrecedingOperator(left);
//          }
//          if (right instanceof NAryMergeJoinWithoutSorting) {
//            for (final BasicOperator bo : right
//                .getPrecedingOperators()) {
//              bos[index2++] = bo;
//              join.addPrecedingOperator(bo);
//            }
//          } else {
//            bos[index2++] = right;
//            join.addPrecedingOperator(right);
//          }
//          if (min != null){
//            Arrays.sort(bos, new Comparator<Object>() {
//              @Override
//              public int compare(final Object o1, final Object o2) {
//                final double sel1 = selectivity.get(
//                    ((BasicIndexScan) o1).getTriplePattern().iterator().next()).values().iterator().next().getSumDistinctLiterals();
//                final double sel2 = selectivity.get(
//                    ((BasicIndexScan) o2).getTriplePattern().iterator().next()).values().iterator().next().getSumDistinctLiterals();
//                if (sel1 < sel2){
//                  return -1;
//                } else if (sel2 < sel1){
//                  return 1;
//                } else {
//                  return 0;
//                }
//              }
//            });
//          }
//          for (int i = 0; i < bos.length; i++) {
//            bos[i].setSucceedingOperator(new OperatorIDTuple(join, i));
//          }
        } else {
          join = new MergeJoinWithoutSorting();
        }
        join.setEstimatedCardinality(inp.getCardinality());
        last = join;
        if (left instanceof RDF3XIndexScan) {
          ((RDF3XIndexScan) left).setCollationOrder(inp.getJoinPartner());
        }
        if (right instanceof RDF3XIndexScan) {
          ((RDF3XIndexScan) right).setCollationOrder(inp.getJoinPartner());
        }
      } else {
        join = new Join();
        join.setEstimatedCardinality(inp.getCardinality());
        last = join;
      }
    }

    // optimize the order of executions of the left and right operand...
    if (!(inp.getLeft() instanceof InnerNodePlan && ((InnerNodePlan) inp.getLeft()).getJoinType() == JoinType.DEFAULT)
        && (inp.getRight() instanceof InnerNodePlan && ((InnerNodePlan) inp.getRight()).getJoinType() == JoinType.DEFAULT)
        || (inp.getLeft() instanceof LeafNodePlan && inp.getRight() instanceof InnerNodePlan)) {
      this.moveToLeft(inp.getRight().getTriplePatterns(), root);
    } else if (!(inp.getRight() instanceof InnerNodePlan && ((InnerNodePlan) inp.getRight()).getJoinType() == JoinType.DEFAULT)
        && (inp.getLeft() instanceof InnerNodePlan && ((InnerNodePlan) inp.getLeft()).getJoinType() == JoinType.DEFAULT)
        || (inp.getRight() instanceof LeafNodePlan && inp.getLeft() instanceof InnerNodePlan)) {
      this.moveToLeft(inp.getLeft().getTriplePatterns(), root);
    } else if (inp.getLeft().getCost() > inp.getRight().getCost()) {
      log.debug("Card. of joins with estimated lower cost vs. est. higher cost: {} <-> {}",
          inp.getRight().getCardinality(), inp.getLeft().getCardinality());
      log.debug("Cost of joins with estimated lower cost vs. est. higher cost: {} <-> {}",
          inp.getRight().getCost(), inp.getLeft().getCost());
      this.moveToLeft(inp.getRight().getTriplePatterns(), root);
    } else {
      log.debug("Card. of joins with estimated lower cost vs. est. higher cost: {} <-> {}",
          inp.getLeft().getCardinality(), inp.getRight().getCardinality());
      log.debug("Cost of joins with estimated lower cost vs. est. higher cost: {} <-> {}",
          inp.getLeft().getCost(), inp.getRight().getCost());
      this.moveToLeft(inp.getLeft().getTriplePatterns(), root);
    }

    join.setIntersectionVariables(inp.getJoinPartner());
    final HashSet<Variable> unionVars = new HashSet<Variable>();
    for(final TriplePattern tp: inp.getTriplePatterns()){
      unionVars.addAll(tp.getVariables());
    }
    join.setUnionVariables(unionVars);
    if (!last.equals(join)) {
      final LinkedList<Variable> llv = new LinkedList<Variable>();
      llv.addAll(join.getUnionVariables());
      last.setIntersectionVariables(llv);
      last.setUnionVariables(llv);
    }
    if (!(join instanceof NAryMergeJoinWithoutSorting)) {
      left.setSucceedingOperator(new OperatorIDTuple(join, 0));
      right.setSucceedingOperator(new OperatorIDTuple(join, 1));
      join.addPrecedingOperator(left);
      join.addPrecedingOperator(right);
    }
    return last;
  }
View Full Code Here

      if (precedingOperators.get(to) == null) {
        precedingOperators.put(to, new LinkedList<BasicOperator>());
      }

      succeedingOperators.get(from).add(
          new OperatorIDTuple(to, edgeJson.getInt("edge_id")));
      precedingOperators.get(to).add(from);
    }

    for (final Entry<BasicOperator, List<OperatorIDTuple>> from : succeedingOperators
        .entrySet()) {
View Full Code Here

    final TriplePattern pat1 = new TriplePattern();
    final ReplaceLit repLit = new ReplaceLit();
    final TriplePattern pat2 = new TriplePattern();
    final BasicOperator succ = new BasicOperator();

    pat1.setSucceedingOperator(new OperatorIDTuple(repLit, 0));

    repLit.setPrecedingOperator(pat1);
    repLit.setSucceedingOperator(new OperatorIDTuple(succ, -1));

    pat2.addSucceedingOperator(new OperatorIDTuple(succ, -1));

    succ.setPrecedingOperator(repLit);
    succ.addPrecedingOperator(pat2);

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

    final GenerateAddEnv genAdd = new GenerateAddEnv(conditions, constants);

    pat1.removeSucceedingOperator(repLit);

    pat2.setSucceedingOperator(new OperatorIDTuple(genAdd, 0));

    genAdd.setPrecedingOperator(pat2);
    genAdd.setSucceedingOperators(succs);

    BasicOperator succ;
View Full Code Here

      final Map<Variable, Literal> maxima,
      final Map<TriplePattern, Map<Variable, VarBucket>> selectivity) {
    if (plan instanceof LeafNodePlan) {
      final BasicIndexScan index1 = getIndex((LeafNodePlan) plan, indexScan, sortCriterium, minima, maxima);
      selectivity.put(plan.getTriplePatterns().iterator().next(), plan.getSelectivity());
      root.addSucceedingOperator(new OperatorIDTuple(index1, 0));
      return index1;
    } else {
      final InnerNodePlan inp = (InnerNodePlan) plan;
      final BasicOperator left = generateOperatorGraph(inp.getLeft(), root, indexScan, inp.getJoinPartner(), minima, maxima, selectivity);
      final BasicOperator right = generateOperatorGraph(inp.getRight(), root, indexScan, inp.getJoinPartner(), minima, maxima, selectivity);
View Full Code Here

    boolean change = true;
    while (change) {
      change = false;
      int index = max;
      for (; index < succeedingOperators.size(); index++) {
        final OperatorIDTuple oid = succeedingOperators.get(index);
        if (oid.getOperator() instanceof BasicIndexScan) {
          final Collection<TriplePattern> ctp = ((BasicIndexScan) oid.getOperator()).getTriplePattern();
          for (final TriplePattern tp : triplePatterns)
            if (ctp.contains(tp)) {
              change = true;
              break;
            }
          if (change)
            break;
        }
      }
      if (change) {
        max = index + 1;
        final OperatorIDTuple oid = succeedingOperators.remove(index);
        succeedingOperators.add(insertPosition, oid);
        insertPosition++;
      }
    }
    root.setSucceedingOperators(succeedingOperators);
View Full Code Here

TOP

Related Classes of lupos.engine.operators.OperatorIDTuple

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.