Package lupos.engine.operators.multiinput.join

Examples of lupos.engine.operators.multiinput.join.Join


    return sogv.getFoundSubGraphs();
  }

  public static void main(final String[] args) {
    // The whole graph:
    final Operator wa = new Join();
    final Operator wb = new Projection();
    wa.setSucceedingOperator(new OperatorIDTuple(wb, 0));
    wb.setPrecedingOperator(wa);

    // Define left side of rule
    final Operator a = new Join();
    final Operator b = new Projection();
    a.setSucceedingOperator(new OperatorIDTuple(b, -1));
    b.setPrecedingOperator(a);
    final Map<BasicOperator, String> subGraphMap = new HashMap<BasicOperator, String>();
    subGraphMap.put(a, "a");
    subGraphMap.put(b, "b");
View Full Code Here


public class RuleDeleteTriggerOneTimeJoin extends Rule {

  @Override
  protected void init() {
    final TriggerOneTime trigger = new TriggerOneTime();
    final Join join = new Join();

    trigger.setSucceedingOperator(new OperatorIDTuple(join, -1));
    join.setPrecedingOperator(trigger);

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

      final Map<String, BasicOperator> mso,
      final BasicOperator rootOperator) {
    final Collection<BasicOperator> deleted = new LinkedList<BasicOperator>();
    final Collection<BasicOperator> added = new LinkedList<BasicOperator>();
    final TriggerOneTime trigger = (TriggerOneTime) mso.get("trigger");
    final Join join = (Join) mso.get("join");
    join.removePrecedingOperator(trigger);
    if (join.getPrecedingOperators().size() <= 1) {
      // remove join
      for (final OperatorIDTuple oit : join.getSucceedingOperators()) {
        oit.getOperator().removePrecedingOperator(join);
      }
      for (final BasicOperator bo : join.getPrecedingOperators()) {
        bo.removeSucceedingOperator(join);
        bo.addSucceedingOperators(join.getSucceedingOperators());
        for (final OperatorIDTuple oit : join.getSucceedingOperators()) {
          oit.getOperator().addPrecedingOperator(bo);
        }
      }
      deleted.add(join);
    }
View Full Code Here

  public JoinFormatter() {
  }

  @Override
  public JSONObject serialize(final BasicOperator operator, final int node_id) {
    final Join join = (Join) operator;
    try {
      /*
       * store intersection variables
       */
      final JSONObject json = Helper.createVariablesJSONObject(join
          .getIntersectionVariables());
      json.put("type", join.getClass().getName());
      json.put("node_id", node_id);
      /*
       * store the union variables
       */
      Collection<Variable> variables = join.getUnionVariables();
      final Collection<JSONObject> varsJSON = new LinkedList<JSONObject>();
      for (final Variable var : variables) {
        varsJSON.add(Helper.createVarAsJSONObject(var));
      }
      json.put("union", varsJSON);
View Full Code Here

              .getJSONObject(i)));
    }
    /*
     * create the join
     */
    Join result =  new Join();
    result.setIntersectionVariables(cc);
    result.setUnionVariables(unionVariables);
    return result;
  }
View Full Code Here

     
      // join the determined subgraphs and put the join back into jointree!
      BasicOperator firstOperand = firstSubGraph.getFirst();
      BasicOperator secondOperand = secondSubGraph.getFirst();
     
      Join join = new Join();
     
      HashSet<Variable> joinUnion = new HashSet<Variable>(firstOperand.getUnionVariables());
      joinUnion.addAll(secondOperand.getUnionVariables());
      join.setUnionVariables(joinUnion);
     
      HashSet<Variable> joinIntersection = new HashSet<Variable>(firstOperand.getUnionVariables());
      joinIntersection.retainAll(secondOperand.getUnionVariables());
      join.setIntersectionVariables(joinIntersection);
           
      firstOperand.addSucceedingOperator(join, 0);
      secondOperand.addSucceedingOperator(join, 1);
     
      jointree.add(new Tuple<BasicOperator, T>(join, mergeInitialInformations(firstSubGraph.getSecond(), secondSubGraph.getSecond())));     
View Full Code Here

        ((BasicIndexScan) left).setTriplePatterns(ctp);
        root.remove((BasicIndexScan) right);
        return left;
      }
    }
    final Join join = new Join();
    join.setEstimatedCardinality(inp.getCardinality());

    // TODO check if necessary (or is it just necessary for RDF3X???)!

    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());
    join.setUnionVariables(inp.getVariables());
    left.setSucceedingOperator(new OperatorIDTuple(join, 0));
    right.setSucceedingOperator(new OperatorIDTuple(join, 1));
    join.addPrecedingOperator(left);
    join.addPrecedingOperator(right);
    return join;
  }
View Full Code Here

        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);
View Full Code Here

    return getCollationOrder(collationOrder1);
  }

  @Override
  protected BasicOperator generateJoin(final InnerNodePlan inp, final Root root, final BasicOperator left, final BasicOperator right, final Collection<Variable> sortCriterium, final Map<TriplePattern, Map<Variable, VarBucket>> selectivity){
    Join join;
    Operator last;
    if (this.RDF3XSORT) {
      if (sortCriterium.size() == 0 || equalCriterium(sortCriterium, inp.getOrder())) {
        join = new MergeJoinWithoutSorting();
        join.setEstimatedCardinality(inp.getCardinality());
        last = join;
      } else {
        join = new MergeJoinWithoutSorting();
        join.setEstimatedCardinality(inp.getCardinality());
        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

    super();
  }

  @Override
  protected void init() {
    final Join join = new Join();

    subGraphMap = new HashMap<BasicOperator, String>();
    subGraphMap.put(join, "join");

    startNode = join;
View Full Code Here

TOP

Related Classes of lupos.engine.operators.multiinput.join.Join

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.