Package com.alvazan.orm.layer9z.spi.db.inmemory

Source Code of com.alvazan.orm.layer9z.spi.db.inmemory.Table

package com.alvazan.orm.layer9z.spi.db.inmemory;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

import com.alvazan.orm.api.z8spi.Row;
import com.alvazan.orm.api.z8spi.action.Column;
import com.alvazan.orm.api.z8spi.action.IndexColumn;
import com.alvazan.orm.api.z8spi.conv.ByteArray;
import com.alvazan.orm.layer9z.spi.db.inmemory.IndexedRow.OurKey;

public class Table {

  private Map<ByteArray, Row> keyToRow = new HashMap<ByteArray, Row>();
  private String columnFamilyName;
  private SortType columnSortType;
  static final Comparator<ByteArray> UTF_COMPARATOR = new Utf8Comparator();
  static final Comparator<ByteArray> INTEGER_COMPARATOR = new IntegerComparator();
  static final Comparator<ByteArray> DECIMAL_COMPARATOR = new DecimalComparator();
  private static Comparator<OurKey> utfPrefixComparator = new PrefixComparator(UTF_COMPARATOR);
  private static Comparator<OurKey> integerPrefixComparator = new PrefixComparator(INTEGER_COMPARATOR);
  private static Comparator<OurKey> decimalPrefixComparator = new PrefixComparator(DECIMAL_COMPARATOR);
 
  public Table(String columnFamily, SortType sortType) {
    this.columnSortType = sortType;
    this.columnFamilyName = columnFamily;
  }

  public Row findOrCreateRow(byte[] key) {
    ByteArray array = new ByteArray(key);
    Row row = keyToRow.get(array);
    if(row == null) {
      row = createSortedMap();
      row.setKey(key);
      keyToRow.put(new ByteArray(key), row);
    }
    return row;
  }

  private Row createSortedMap() {
    TreeMap<ByteArray, Column> tree;
    Row row;
    switch (columnSortType) {
    case BYTES:
      tree = new TreeMap<ByteArray, Column>();
      row = new RowImpl(tree);
      break;
    case UTF8:
      tree = new TreeMap<ByteArray, Column>(UTF_COMPARATOR);
      row = new RowImpl(tree);
      break;
    case INTEGER:
      tree = new TreeMap<ByteArray, Column>(INTEGER_COMPARATOR);
      row = new RowImpl(tree);
      break;
    case DECIMAL:
      tree = new TreeMap<ByteArray, Column>(DECIMAL_COMPARATOR);
      row = new RowImpl(tree);
      break;
    case DECIMAL_PREFIX:
      TreeMap<OurKey, IndexColumn> map = new TreeMap<OurKey, IndexColumn>(decimalPrefixComparator);
      row = new IndexedRow(map);
      break;
    case INTEGER_PREFIX:
      TreeMap<OurKey, IndexColumn> map2 = new TreeMap<OurKey, IndexColumn>(integerPrefixComparator);
      row = new IndexedRow(map2);
      break;
    case UTF8_PREFIX:
      TreeMap<OurKey, IndexColumn> map3 = new TreeMap<OurKey, IndexColumn>(utfPrefixComparator);
      row = new IndexedRow(map3);
      break;
    default:
      throw new UnsupportedOperationException("not supported type="+columnSortType);
    }
   
    return row;
  }

  public void removeRow(byte[] rowKey) {
    ByteArray key = new ByteArray(rowKey);
    keyToRow.remove(key);
  }

  public Row getRow(byte[] rowKey) {
    ByteArray key = new ByteArray(rowKey);
    Row row = keyToRow.get(key);
    return row;
  }

  @Override
  public String toString() {
    String t = "";
    t += "columnFamilyName="+columnFamilyName+" columnSortType="+columnSortType;
    for(Row r : keyToRow.values()) {
      ByteArray b = new ByteArray(r.getKey());
      t += "\nrowkey="+b.asString()+" row="+r;
    }
    return t;
  }
 
 
}
TOP

Related Classes of com.alvazan.orm.layer9z.spi.db.inmemory.Table

TOP
Copyright © 2018 www.massapi.com. 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.