Package lupos.engine.operators.index

Examples of lupos.engine.operators.index.BasicIndexScan


  private static BasicIndexScan createBasicIndex(final Root ic,
      final List<OperatorIDTuple> oids, final TriplePattern tp) {
    final List<TriplePattern> tps = new LinkedList<TriplePattern>();
    tps.add(tp);
    final BasicIndexScan bi = ic.newIndexScan(null, tps, null);
    bi.setSucceedingOperators(oids);
    bi.setIntersectionVariables(tp.getIntersectionVariables());
    bi.setUnionVariables(tp.getUnionVariables());
    return bi;
  }
View Full Code Here


    Root root = sg1.getRootOfSubgraph();
    try {
      /*
       * get the both BasicIndexScan's
       */
      BasicIndexScan bis1 = getIndexScan(sg1.getRootOfSubgraph());
      BasicIndexScan bis2 = getIndexScan(sg2.getRootOfSubgraph());
      if (bis1 == null | bis2==null) return;
     
      log .debug(String.format("Rule %s: Move %s into %s",this.ruleName,sg2,sg1));
     
      /*
       * Join both TriplePattern and store them in the first SubgraphContainer
       */
      Collection<TriplePattern> patterns = bis1.getTriplePattern();
      patterns.addAll(bis2.getTriplePattern());
      bis1.setTriplePatterns(patterns);
      /*
       * remove the 2nd SubgraphContainer
       */
      root.removeSucceedingOperator(sg2);
 
View Full Code Here

    for (final OperatorIDTuple succ : succs) {
      final BasicOperator op = succ.getOperator();
      if (op instanceof BasicIndexScan) {
        return (BasicIndexScan) op;
      } else {
        BasicIndexScan res = null;
        /*
         * recursive call
         */
        if ((res = getIndexScan(op)) != null)
          return res;
View Full Code Here

      final PatternMatcher pm, final Root ic) {
    final Set<TriplePattern> visited = new HashSet<TriplePattern>();
    for (final TriplePattern tp : pm.getTriplePatterns()) {
      final List<OperatorIDTuple> succ = tp.getSucceedingOperators();
      if (!visited.contains(tp)) {
        BasicIndexScan idx;
        if (succ.size() == 1) {
          if (succ.size() == 1
              && succ.get(0).getOperator() instanceof Join) {
            final Join tj = findTopJoin((Join) succ.get(0)
                .getOperator());
            if (tj != null) {
              // final List<Join> bottomJoins = new
              // LinkedList<Join>();
              // final boolean complete = findBottomJoins(tj,
              // null,
              // bottomJoins);

              // final List<TriplePattern> tps =
              // collectPredTPs(tj,
              // bottomJoins, visited);

              final List<TriplePattern> tps = new LinkedList<TriplePattern>();
              final boolean complete = collectPredTPs(tj, tps);

              visited.addAll(tps);

              idx = ic.newIndexScan(null, tps, null);

              final HashSet<Variable> hsv = new HashSet<Variable>();
              for (final TriplePattern stp : tps) {
                hsv.addAll(stp.getUnionVariables());
              }

              idx.setIntersectionVariables(hsv);
              idx.setUnionVariables(hsv);

              if (complete) {
                idx.setSucceedingOperators(tj
                    .getSucceedingOperators());
              } else {
                for (final BasicOperator prec : tj
                    .getPrecedingOperators()) {
                  if (collectPredTPs(prec,
                      new LinkedList<TriplePattern>())) {
                    final int operandID = prec
                    .getOperatorIDTuple(tj).getId();
                    idx
                    .setSucceedingOperator(new OperatorIDTuple(
                        tj, operandID));
                  }
                }
                // delete joins which otherwise would have one
View Full Code Here

    final JSONObject json = new JSONObject(minMaxRequestSerializedAsJSONString);
    final Collection<Variable> vars = Helper.createVariablesFromJSON(json);
    final TriplePattern tp = Helper.createTriplePatternFromJSON(json);
    final Collection<TriplePattern> tps = new LinkedList<TriplePattern>();
    tps.add(tp);
    final BasicIndexScan indexScan = operatorCreator.createIndexScan(operatorCreator.createRoot(dataset), tps);
    final BindingsFactory bindingsFactory = BindingsFactory.createBindingsFactory(tp.getVariables());
    indexScan.setBindingsFactory(bindingsFactory);
    tp.setBindingsFactory(bindingsFactory);

    return indexScan.getMinMax(tp, vars);
  }
View Full Code Here

    final TriplePattern tp = Helper.createTriplePatternFromJSON(json);
    final Map<Variable, Literal> minima = Helper.createMapFromJSON(json.getJSONObject("minima"));
    final Map<Variable, Literal> maxima = Helper.createMapFromJSON(json.getJSONObject("maxima"));
    final Collection<TriplePattern> tps = new LinkedList<TriplePattern>();
    tps.add(tp);
    final BasicIndexScan indexScan = operatorCreator.createIndexScan(operatorCreator.createRoot(dataset), tps);
    final BindingsFactory bindingsFactory = BindingsFactory.createBindingsFactory(tp.getVariables());
    indexScan.setBindingsFactory(bindingsFactory);
    tp.setBindingsFactory(bindingsFactory);

    return indexScan.getVarBuckets(tp, Bindings.instanceClass, vars, minima, maxima);
  }
View Full Code Here

  public Object visit(RulePredicate obj, Object arg) throws RIFException {
    if (obj.isTriple() && arg instanceof BasicOperator) {

      final TriplePattern pattern = unitermToTriplePattern(obj);
      final BasicIndexScan index = root.newIndexScan(null,
          new ArrayList<TriplePattern>(Arrays.asList(pattern)), null);
      final BindableIndexScan bindIndex = new BindableTripleIndexScan(index);
      datasetIndex.addBindableIndex(bindIndex);
      ((BasicOperator) arg).addSucceedingOperator(bindIndex);
      return bindIndex;
View Full Code Here

      if (op instanceof BasicIndexScan && !(op instanceof IteratorIndexScan)) {
        indexes.add((BasicIndexScan) op);
      }
    }
    // 1. Mergen von Indexen
    BasicIndexScan mainIndex = null;

    if (indexes.size() > 1) {
      final Iterator<BasicIndexScan> it = indexes.iterator();
      mainIndex = it.next();
      while (it.hasNext()) {
        final BasicIndexScan mergeIndex = it.next();
        mainIndex.getTriplePattern().addAll(mergeIndex.getTriplePattern());
        for(final OperatorIDTuple opID: mergeIndex.getSucceedingOperators()){
          opID.getOperator().removePrecedingOperator(mergeIndex);
        }
        mergeIndex.getSucceedingOperators().clear();
        mergeIndex.removeFromOperatorGraph();
        operands.remove(mergeIndex);
      }
      if(arg!=null){
        mainIndex.setSucceedingOperator((OperatorIDTuple) arg);
        ((OperatorIDTuple) arg).getOperator().addPrecedingOperator(mainIndex);
View Full Code Here

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

;
      @Override
      public Object visit(final BasicOperator basicOperator) {

        if (basicOperator instanceof BasicIndexScan) {
          final BasicIndexScan basicIndex = (BasicIndexScan) basicOperator;
          final Collection<TriplePattern> triplePatterns = basicIndex
              .getTriplePattern();
          final Collection<TriplePattern> newTriplePatterns = new LinkedList<TriplePattern>();
          for (final TriplePattern t : triplePatterns) {
            final Item[] itemArray = t.getItems().clone();
            for (int i = 0; i < 3; i++) {
              if (itemArray[i].isVariable()) {
                final Literal literal = bindings
                    .get((Variable) itemArray[i]);
                if (literal != null) {
                  itemArray[i] = literal;
                }
              }
            }
            newTriplePatterns.add(new TriplePattern(itemArray));
          }
          basicIndex.setTriplePatterns(newTriplePatterns);
        } else {
          // TODO Filter
          // node.clone(false)
        }
        return null;
View Full Code Here

TOP

Related Classes of lupos.engine.operators.index.BasicIndexScan

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.