Package dovetaildb.bagindex

Examples of dovetaildb.bagindex.BagIndex


 
  private ArrayList<EditRec> encodeBuffer(String bagName, long revNum, ApiBuffer value) {
    ArrayList<EditRec> edits = new ArrayList<EditRec>();

    BagEntry bagRec = bagIndexes.get(bagName);
    BagIndex index = bagRec.getBagIndex();
    QueryNode idQuery = null;
    Map<String,Object> entries = value.getEntries();
    QueryNode data = null;
    if (revNum > 0) {
      data = index.getRange(Range.OPEN_RANGE, revNum);
      int capacity = value.getDeletions().size()+value.getEntries().size();
      if (capacity > 0) {
        ArrayList<Bytes> idTerms = new ArrayList<Bytes>(capacity);
        for(String key : value.getDeletions()) {
          idTerms.add(new CompoundBytes(ID_BYTES, new ArrayBytes(Util.decodeString(key))));
        }
        for(String key : entries.keySet()) {
          idTerms.add(new CompoundBytes(ID_BYTES, new ArrayBytes(Util.decodeString(key))));
        }
        idQuery = index.getTerms(idTerms, revNum);
      }
    }
    long lastDocId = Long.MIN_VALUE;
    if (idQuery != null) {
      long docId = idQuery.doc();
View Full Code Here


  @Override
  public Iter query(String bag, long txnId, Object query, Map<String, Object> options) {
    BagEntry rec = bagIndexes.get(bag);
    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);
View Full Code Here

      public DbService makeDbService(final File subDbServiceHome, final DbService prevService) {
        BagIndexBridge b = new BagIndexBridge(subDbServiceHome);
        b.setBagIndexFactory(new BagEntryFactory() {
          public BagEntry makeBagEntry(String bagName) {
            BlueSteelBagIndex bsBagIndex = new FsBlueSteelBagIndex(sync);
            BagIndex bagIndex = bsBagIndex;
            bagIndex.setHomedir(new File(subDbServiceHome, "bag_"+bagName).getAbsolutePath());
            if (prevService != null) {
              BagIndex prevIndex = prevService.getBag(bagName);
              if (prevIndex != null) {
                Bytes[] table = PrefixCompressedBagIndex.determineCompressionTable(prevIndex, lengthToRowRatio);
                PrefixCompressedBagIndex pcBagIndex = new PrefixCompressedBagIndex(bsBagIndex, table);
                bagIndex = pcBagIndex;
                bsBagIndex.setTermTableDepth(pcBagIndex.getNumCompressedBytes());
View Full Code Here

  private ArrayList<EditRec> encodeBuffer(String bagName, long revNum, ApiBuffer value) {
    ArrayList<EditRec> edits = new ArrayList<EditRec>();

    // fashion directly and make a nodeiterator !!!
    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);
View Full Code Here

  @Override
  public Iter query(String bag, long txnId, Object query, Map<String, Object> options) {
    BagEntry rec = bagIndexes.get(bag);
    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);
View Full Code Here

TOP

Related Classes of dovetaildb.bagindex.BagIndex

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.