Package org.teiid.common.buffer.SPage

Examples of org.teiid.common.buffer.SPage.SearchResult


    SPage x = null;
    for (int i = header.length - 1; i >= 0; i--) {
      if (x == null) {
        x = header[i];
      }
      SearchResult s = SPage.search(x, n, places);
      if (places != null) {
        places.add(s);
      }
      if ((s.index == -1 && s.page == header[i]) || s.values.getTuples().isEmpty()) {
        x = null;
View Full Code Here


      SPage last = null;
      while (last == null || last.children != null) {
        last = findChildTail(last);
        //TODO: do this lazily
        TupleBatch batch = last.getValues();
        places.add(new SearchResult(-batch.getTuples().size() -1, last, batch));
      }
    } else {
      match = find(tuple, places);
      if (match != null) {
        if (mode != InsertMode.UPDATE) {
          return match;
        }
        SearchResult last = places.getLast();
        SPage page = last.page;
        last.values.getTuples().set(last.index, tuple);
        page.setValues(last.values);
        return match;
      }
    }
    List key = extractKey(tuple);
    int level = 0;
    if (mode != InsertMode.ORDERED) {
      if (sizeHint > -1) {
        level = Math.min(sizeHint, randomLevel());
      } else {
        level = randomLevel();
      }
    } else if (!places.isEmpty() && places.getLast().values.getTuples().size() == pageSize) {
      int row = rowCount.get();
      while (row != 0 && row%pageSize == 0) {
        row = (row - pageSize + 1)/pageSize;
        level++;
      }
    }
    assert header.length == places.size();
    if (level >= header.length) {
      header = Arrays.copyOf(header, level + 1);
    }
    rowCount.addAndGet(1);
    SPage page = null;
    for (int i = 0; i <= level; i++) {
      if (places.isEmpty()) {
        SPage newHead = new SPage(this, false);
        TupleBatch batch = newHead.getValues();
        batch.getTuples().add(key);
        newHead.setValues(batch);
        newHead.children.add(page);
        header[i] = newHead;
        page = newHead;
      } else {
        SearchResult result = places.removeLast();
        Object value = (i == 0 ? tuple : page);
        page = insert(key, result, places.peekLast(), value, mode == InsertMode.ORDERED);
      }
    }
    return null;
View Full Code Here

    if (tuple == null) {
      return null;
    }
    rowCount.addAndGet(-1);
    for (int i = 0; i < header.length; i++) {
      SearchResult searchResult = places.removeLast();
      if (searchResult.index < 0) {
        continue;
      }
      searchResult.values.getTuples().remove(searchResult.index);
      if (searchResult.page.children != null) {
View Full Code Here

      if (!isPartialKey && lowerBound != null && this.tree.comparator.compare(upperBound, lowerBound) < 0) {
        valid = false;
      }
      LinkedList<SearchResult> places = new LinkedList<SearchResult>();
      this.tree.find(upperBound, places);
      SearchResult upper = places.getLast();
      bound = upper.page;
      boundIndex = upper.index;
      if (boundIndex < 0) {
        //we are guaranteed by find to not get back the -1 index, unless
        //there are no tuples, in which case a bound of -1 is fine
View Full Code Here

  private boolean setPage(List<?> lowerBound) throws TeiidComponentException {
    LinkedList<SearchResult> places = new LinkedList<SearchResult>();
    this.tree.find(lowerBound, places);
   
    SearchResult sr = places.getLast();
    page = sr.page;
    index = sr.index;
    boolean result = true;
    if (index < 0) {
      result = false;
View Full Code Here

TOP

Related Classes of org.teiid.common.buffer.SPage.SearchResult

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.