Package dovetaildb.querynode

Examples of dovetaildb.querynode.QueryNode


    BagEntry bagRec = bagIndexes.get(bagName);
    BagIndex index = bagRec.bagIndex;
    if (revNum == -1) revNum = index.getCurrentRevNum();

    // TODO: more efficient; BagIndex needs a "get multi"
    QueryNode data = index.getRange(ArrayBytes.EMPTY_BYTES, null, null, false, false, revNum);
    ArrayList<QueryNode> clauses = new ArrayList<QueryNode>(value.getDeletions().size()+value.getEntries().size());
   
    for(String key : value.getDeletions()) {
      QueryNode q = index.getTerm(new CompoundBytes(ID_BYTES, new ArrayBytes(Util.decodeString(key))), revNum);
      if (q == null) throw new RuntimeException("Object not found; id=\""+key+"\"");
      clauses.add(q);
    }
    if (clauses.size() > 0) {
      QueryNode idQuery = new OrderedOrQueryNode(clauses, null, null, null, false, false);
      do {
        long docId = idQuery.doc();
        data.skipTo(docId);
        do {
          edits.add(new EditRec(docId, data.term(), true));
        } while(data.nextTerm() == NextStatus.NEXT_TERM);
      } while(idQuery.next());
    }
   
    long insId = -1;
    for(Map.Entry<String,Object> entry : value.getEntries().entrySet()) {
      String key = entry.getKey();
      QueryNode q = index.getTerm(new CompoundBytes(ID_BYTES, new ArrayBytes(Util.decodeString(key))), revNum);
      if (q != null) {
        clauses.add(q);
      } else {
        long docId = insId--;
        DbServiceUtil.sencodeMulti(ArrayBytes.EMPTY_BYTES, entry.getValue(), edits, docId, false);
      }
    }
    if (clauses.size() > 0) {
      QueryNode idQuery = new OrderedOrQueryNode(clauses, null, null, null, false, false);
      Map<String, Object> entries = value.getEntries();
      do {
        long docId = idQuery.doc();
        Bytes idTerm = idQuery.term();
        byte[] idBytes = idTerm.subBytes(NUM_ID_BYTES, idTerm.getLength()-NUM_ID_BYTES).getBytes();
        Object val = entries.get(Util.encodeBytes(idBytes));
        DbServiceUtil.sencodeMulti(ArrayBytes.EMPTY_BYTES, val, edits, docId, false);
      } while(idQuery.next());
    }
    return edits;
  }
View Full Code Here


    }
    return templ;
  }
  public static QueryNodeTemplate applyPatternToBagIndex(Bytes prefix, Object pattern, BagIndex index, long revNum) {
    Map<String, QueryNode> vars = new HashMap<String, QueryNode>();
    QueryNode queryNode;
    if (pattern instanceof Map) {
      Map map = (Map)pattern;
      prefix = new CompoundBytes(prefix, HEADER_BYTE_MAPOPEN);
      ArrayList<QueryNode> nodes = new ArrayList<QueryNode>();
      for(Object entryObj : map.entrySet()) {
View Full Code Here

    return new QueryNodeTemplate(queryNode, vars);
  }

  public static QueryNodeTemplate applyQueryToBagIndex(Bytes prefix, List query, BagIndex index, long revNum) {
    Map<String, QueryNode> vars = new HashMap<String, QueryNode>();
    QueryNode queryNode;
    ArrayList<QueryNode> clauses;
    if (query == null) {
      queryNode = index.getRange(ArrayBytes.EMPTY_BYTES, ArrayBytes.EMPTY_BYTES, ArrayBytes.EMPTY_BYTES, false, false, revNum);
    } else {
      int opHash = query.get(0).hashCode();
      int numArgs = query.size();
      switch(opHash) {
      case DbServiceUtil.OP_HASH_AS:
        queryNode = index.getRange(prefix, null, null, false, false, revNum);
        if (query.size() > 2) {
          throw new RuntimeException("Not yet supported");
//          QueryNodeTemplate subNode=applyQueryToBagIndex(prefix, (List)query.get(2), index, revNum);
//          vars.put((String)query.get(1), ExternalTermQueryNode.make(subNode.queryNode, queryNode));
//          queryNode = subNode.queryNode;
//          vars = subNode.varMappings;
        } else {
          vars.put((String)query.get(1), queryNode);
        }
        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;
View Full Code Here

    switch(opHash) {
    case CopyOfDbServiceUtilDelme.OP_HASH_OR:
    case CopyOfDbServiceUtilDelme.OP_HASH_AND:
      ArrayList<QueryNode> clauses = new ArrayList<QueryNode>(numArgs-1);
      for(int i=0; i<numArgs; i++) {
        QueryNode node=applyQueryToBagIndex((List)query.get(i+1), index, encoder, revNum);
        if (node != null) clauses.add(node);
      }
      if (opHash == CopyOfDbServiceUtilDelme.OP_HASH_OR) {
        return new OrderedOrQueryNode(clauses, null, null, null, false, false);
      } else {
View Full Code Here

TOP

Related Classes of dovetaildb.querynode.QueryNode

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.