Package dovetaildb.querynode

Examples of dovetaildb.querynode.QueryNodeTemplate


    if (rec == null) return EmptyIter.EMPTY_ITER;
    BagIndex index = rec.getBagIndex();
    try {
      long revNum = txnMapper.getRevForTxn(bag, txnId);
      if (revNum == -1) return EmptyIter.EMPTY_ITER;
      QueryNodeTemplate templ = DbServiceUtil.applyPatternToBagIndex(query, index, revNum);
      //System.out.println("Query plan: "+templ.queryNode);
      if (templ.queryNode == null) return EmptyIter.EMPTY_ITER;
      if (templ.varMappings.size() == 1) {
        QueryNode display = templ.varMappings.values().iterator().next();
        return new QueryNodeIter(templ.queryNode, display, index, revNum);
View Full Code Here


    public void handleList(Bytes prefix, Bytes suffix, List<Object> val) {}
    public void handleOperation(Bytes prefix, Bytes suffix, String operaion, List<Object> list) {}
  }
 
  public static QueryNodeTemplate applyPatternToBagIndex(Object pattern, BagIndex index, long revNum) {
    QueryNodeTemplate templ = applyPatternToBagIndex(ArrayBytes.EMPTY_BYTES, pattern, index, revNum);
    if (templ.varMappings.isEmpty()) {
      templ.varMappings.put("", index.getRange(Range.OPEN_RANGE, revNum));
    }
    return templ;
  }
View Full Code Here

        Map.Entry entry = (Map.Entry) entryObj;
        String key = (String)entry.getKey();
        Object value = entry.getValue();
        Bytes curPrefix = new CompoundBytes(prefix, sencodeMapKey(key));
        curPrefix = new CompoundBytes(curPrefix, HEADER_BYTE_COLON);
        QueryNodeTemplate templ = applyPatternToBagIndex(curPrefix, value, index, revNum);
        nodes.add(templ.queryNode);
        vars.putAll(templ.varMappings);
      }
      if (map.isEmpty()) {
        queryNode = index.getRange(new Range(prefix, null, null, true, true), revNum);
      } else {
        queryNode = AndQueryNode.make(nodes);
      }
    } else if (pattern instanceof List) {
      List list = (List)pattern;
      if (list.size() > 0 && list.get(0) != null &&
          list.get(0) instanceof String &&
          SYMBOLS.contains(list.get(0).hashCode())) {
        return applyQueryToBagIndex(prefix, list, index, revNum);
      } else if (list.size() > 1) {
        throw new ApiException("QueryFormatError", "malformed list structure in query: "+pattern);
      } else {
        prefix = new CompoundBytes(prefix, HEADER_BYTE_LISTOPEN);
        if (list.isEmpty()) {
          queryNode = index.getTerm(prefix, revNum);
        } else {
          QueryNodeTemplate templ = applyPatternToBagIndex(prefix, list.get(0), index, revNum);
          queryNode = templ.queryNode;
          vars.putAll(templ.varMappings);
        }
      }
    } else {
      Bytes matchingBytes = new CompoundBytes(prefix,sencode(pattern));
      queryNode = index.getTerm(matchingBytes, revNum);
//      System.out.println(matchingBytes.toString()+" -> "+queryNode+" in "+revNum);
    }
    return new QueryNodeTemplate(queryNode, vars);
  }
View Full Code Here

        }
        List<Object> subQueries = (List<Object>)query.get(1);
        int numQueries = subQueries.size();
        clauses = new ArrayList<QueryNode>(numQueries);
        for(int i=0; i<numQueries; i++) {
          QueryNodeTemplate node=applyPatternToBagIndex(prefix, subQueries.get(i), index, revNum);
          if (node.queryNode != null) clauses.add(node.queryNode);
          vars.putAll(node.varMappings);
        }
        if (opHash == DbServiceUtil.OP_HASH_OR) {
          queryNode = OrderedOrQueryNode.make(clauses);
        } else {
          queryNode = AndQueryNode.make(clauses);
        }
        break;
      case DbServiceUtil.OP_HASH_NOT:
        QueryNode matchesSoFar = index.getRange(new Range(prefix, null, null, true, true), revNum);
        clauses = new ArrayList<QueryNode>(numArgs-1);
        for(int i=1; i<numArgs; i++) {
          QueryNodeTemplate node=applyPatternToBagIndex(prefix, query.get(i), index, revNum);
          if (node.queryNode != null) clauses.add(node.queryNode);
        }
        QueryNode negativeMatches = OrderedOrQueryNode.make(clauses);
        queryNode = AndNotQueryNode.make(matchesSoFar, negativeMatches);
        break;
      default:
        queryNode = index.getRange(parseRange(prefix, opHash, query), revNum);
      }
    }
    return new QueryNodeTemplate(queryNode, vars);
  }
View Full Code Here

    if (rec == null) return EmptyIter.EMPTY_ITER;
    BagIndex index = rec.bagIndex;
    try {
      long revNum = txnMapper.getRevForTxn(bag, txnId);
      if (revNum == -1) return EmptyIter.EMPTY_ITER;
      QueryNodeTemplate templ = DbServiceUtil.applyPatternToBagIndex(query, index, revNum);
      return QueryNodeIter.make(templ);
    } catch (TxnNotFoundException e) {
      throw new RuntimeException(e);
    }
  }
View Full Code Here

      throw new ApiException("UnencodableValue","Result of type \""+val.getClass().getName()+"\" cannot be encoded in JSON (must be a String, Number, Boolean, HashMap, or ArrayList)");
    }
  }

  public static QueryNodeTemplate applyPatternToBagIndex(Object pattern, BagIndex index, long revNum) {
    QueryNodeTemplate templ = applyPatternToBagIndex(ArrayBytes.EMPTY_BYTES, pattern, index, revNum);
    if (templ.varMappings.isEmpty()) {
      templ.varMappings.put("", index.getRange(ArrayBytes.EMPTY_BYTES, null, null, false, false, revNum));
    }
    return templ;
  }
View Full Code Here

        Map.Entry entry = (Map.Entry) entryObj;
        String key = (String)entry.getKey();
        Object value = entry.getValue();
        Bytes curPrefix = new CompoundBytes(prefix, sencodeMapKey(key));
        curPrefix = new CompoundBytes(curPrefix, HEADER_BYTE_COLON);
        QueryNodeTemplate templ = applyPatternToBagIndex(curPrefix, value, index, revNum);
        if (templ.queryNode != null) {
          nodes.add(templ.queryNode);
          vars.putAll(templ.varMappings);
        }
      }
      if (nodes.isEmpty()) {
        queryNode = index.getTerm(prefix, revNum);
      } else {
        queryNode = AndQueryNode.make(nodes);
      }
    } else if (pattern instanceof List) {
      List list = (List)pattern;
      if (list.size() > 0 && SYMBOLS.contains(list.get(0).hashCode())) {
        return applyQueryToBagIndex(prefix, list, index, revNum);
      } else if (list.size() > 1) {
        throw new RuntimeException("malformed list structure in query: "+pattern);
      } else {
        prefix = new CompoundBytes(prefix, HEADER_BYTE_LISTOPEN);
        if (list.isEmpty()) {
          queryNode = index.getTerm(prefix, revNum);
        } else {
          QueryNodeTemplate templ = applyPatternToBagIndex(prefix, list.get(0), index, revNum);
          queryNode = templ.queryNode;
          vars.putAll(templ.varMappings);
        }
      }
    } else {
      queryNode = index.getTerm(new CompoundBytes(prefix,sencode(pattern)), revNum);
    }
    return new QueryNodeTemplate(queryNode, vars);
  }
View Full Code Here

        break;
      case DbServiceUtil.OP_HASH_OR:
      case DbServiceUtil.OP_HASH_AND:
        clauses = new ArrayList<QueryNode>(numArgs-1);
        for(int i=1; i<numArgs; i++) {
          QueryNodeTemplate node=applyPatternToBagIndex(prefix, query.get(i), index, revNum);
          if (node.queryNode != null) clauses.add(node.queryNode);
          vars.putAll(node.varMappings);
        }
        if (opHash == DbServiceUtil.OP_HASH_OR) {
          queryNode = new OrderedOrQueryNode(clauses, null, null, null, false, false);
        } else {
          queryNode = AndQueryNode.make(clauses);
        }
        break;
      case DbServiceUtil.OP_HASH_NOT:
        QueryNode matchesSoFar = index.getRange(prefix, null, null, false, false, revNum);
        clauses = new ArrayList<QueryNode>(numArgs-1);
        for(int i=1; i<numArgs; i++) {
          QueryNodeTemplate node=applyPatternToBagIndex(prefix, query.get(i), index, revNum);
          if (node.queryNode != null) clauses.add(node.queryNode);
        }
        QueryNode negativeMatches = OrderedOrQueryNode.make(clauses);
        queryNode = AndNotQueryNode.make(matchesSoFar, negativeMatches);
        break;
      default:
        Bytes term1 = null;
        Bytes term2 = null;
        boolean isExclusive1 = false;
        boolean isExclusive2 = false;
        switch(opHash) {
        case DbServiceUtil.OP_HASH_AS:
        case DbServiceUtil.OP_HASH_ANY:
          break;
        case DbServiceUtil.OP_HASH_GT:
          isExclusive1 = true;
        case DbServiceUtil.OP_HASH_GE:
          term1 = sencode(query.get(1));
          break;
        case DbServiceUtil.OP_HASH_LT:
          isExclusive2 = true;
        case DbServiceUtil.OP_HASH_LE:
          term2 = sencode(query.get(1));
          break;
        case DbServiceUtil.OP_HASH_BETWEEN_EE:
          isExclusive2 = true;
        case DbServiceUtil.OP_HASH_BETWEEN_EI:
          isExclusive1 = true;
        case DbServiceUtil.OP_HASH_BETWEEN_II:
          term1 = sencode(query.get(1));
          term2 = sencode(query.get(2));
          break;
        case DbServiceUtil.OP_HASH_BETWEEN_IE:
          isExclusive2 = true;
          term1 = sencode(query.get(1));
          term2 = sencode(query.get(2));
        default:
          throw new ApiException("QueryFormatError", "Unknown query operator: \""+query.get(0)+"\"");
        }
        queryNode = index.getRange(prefix, term1, term2, isExclusive1, isExclusive2, revNum);
      }
    }
    return new QueryNodeTemplate(queryNode, vars);
  }
View Full Code Here

TOP

Related Classes of dovetaildb.querynode.QueryNodeTemplate

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.