use of org.h2.store.Data in project siena by mandubian.
the class FullText method addColumnData.
private static void addColumnData(ArrayList<String> columns, ArrayList<String> data, Expression expr) {
if (expr instanceof ConditionAndOr) {
ConditionAndOr and = (ConditionAndOr) expr;
Expression left = and.getExpression(true);
Expression right = and.getExpression(false);
addColumnData(columns, data, left);
addColumnData(columns, data, right);
} else {
Comparison comp = (Comparison) expr;
ExpressionColumn ec = (ExpressionColumn) comp.getExpression(true);
ValueExpression ev = (ValueExpression) comp.getExpression(false);
String columnName = ec.getColumnName();
columns.add(columnName);
if (ev == null) {
data.add(null);
} else {
data.add(ev.getValue(null).getString());
}
}
}
use of org.h2.store.Data in project ignite by apache.
the class GridH2TableSelfTest method testTable.
/**
* Simple table test.
*
* @throws Exception If failed.
*/
public void testTable() throws Exception {
// Test insert.
long x = MAX_X;
Random rnd = new Random();
while (x-- > 0) {
UUID id = UUID.randomUUID();
GridH2Row row = row(id, System.currentTimeMillis(), rnd.nextBoolean() ? id.toString() : UUID.randomUUID().toString(), rnd.nextInt(100));
tbl.doUpdate(row, false);
}
assertEquals(MAX_X, tbl.getRowCountApproximation());
assertEquals(MAX_X, tbl.getRowCount(null));
for (GridH2IndexBase idx : tbl.indexes()) {
assertEquals(MAX_X, idx.getRowCountApproximation());
assertEquals(MAX_X, idx.getRowCount(null));
}
// Check correct rows order.
checkOrdered((GridH2TreeIndex) tbl.indexes().get(0), new Comparator<SearchRow>() {
@Override
public int compare(SearchRow o1, SearchRow o2) {
UUID id1 = (UUID) o1.getValue(0).getObject();
UUID id2 = (UUID) o2.getValue(0).getObject();
return id1.compareTo(id2);
}
});
checkOrdered((GridH2TreeIndex) tbl.indexes().get(1), new Comparator<SearchRow>() {
@Override
public int compare(SearchRow o1, SearchRow o2) {
Long x1 = (Long) o1.getValue(3).getObject();
Long x2 = (Long) o2.getValue(3).getObject();
int c = x2.compareTo(x1);
if (c != 0)
return c;
Timestamp t1 = (Timestamp) o1.getValue(1).getObject();
Timestamp t2 = (Timestamp) o2.getValue(1).getObject();
return t1.compareTo(t2);
}
});
checkOrdered((GridH2TreeIndex) tbl.indexes().get(2), new Comparator<SearchRow>() {
@Override
public int compare(SearchRow o1, SearchRow o2) {
String s1 = (String) o1.getValue(2).getObject();
String s2 = (String) o2.getValue(2).getObject();
return s2.compareTo(s1);
}
});
// Indexes data consistency.
ArrayList<? extends Index> idxs = tbl.indexes();
checkIndexesConsistent((ArrayList<Index>) idxs, null);
// Check unique index.
UUID id = UUID.randomUUID();
UUID id2 = UUID.randomUUID();
assertTrue(tbl.doUpdate(row(id, System.currentTimeMillis(), id.toString(), rnd.nextInt(100)), false));
assertTrue(tbl.doUpdate(row(id2, System.currentTimeMillis(), id2.toString(), rnd.nextInt(100)), false));
// Check index selection.
checkQueryPlan(conn, "SELECT * FROM T", SCAN_IDX_NAME);
checkQueryPlan(conn, "SELECT * FROM T WHERE ID IS NULL", PK_NAME);
checkQueryPlan(conn, "SELECT * FROM T WHERE ID = RANDOM_UUID()", PK_NAME);
checkQueryPlan(conn, "SELECT * FROM T WHERE ID > RANDOM_UUID()", PK_NAME);
checkQueryPlan(conn, "SELECT * FROM T ORDER BY ID", PK_NAME);
checkQueryPlan(conn, "SELECT * FROM T WHERE STR IS NULL", STR_IDX_NAME);
checkQueryPlan(conn, "SELECT * FROM T WHERE STR = 'aaaa'", STR_IDX_NAME);
checkQueryPlan(conn, "SELECT * FROM T WHERE STR > 'aaaa'", STR_IDX_NAME);
checkQueryPlan(conn, "SELECT * FROM T ORDER BY STR DESC", STR_IDX_NAME);
checkQueryPlan(conn, "SELECT * FROM T WHERE X IS NULL", NON_UNIQUE_IDX_NAME);
checkQueryPlan(conn, "SELECT * FROM T WHERE X = 10000", NON_UNIQUE_IDX_NAME);
checkQueryPlan(conn, "SELECT * FROM T WHERE X > 10000", NON_UNIQUE_IDX_NAME);
checkQueryPlan(conn, "SELECT * FROM T ORDER BY X DESC", NON_UNIQUE_IDX_NAME);
checkQueryPlan(conn, "SELECT * FROM T ORDER BY X DESC, T", NON_UNIQUE_IDX_NAME);
checkQueryPlan(conn, "SELECT * FROM T ORDER BY T, X DESC", SCAN_IDX_NAME);
// Simple queries.
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("select id from t where x between 0 and 100");
int i = 0;
while (rs.next()) i++;
assertEquals(MAX_X + 2, i);
// -----
rs = s.executeQuery("select id from t where t is not null");
i = 0;
while (rs.next()) i++;
assertEquals(MAX_X + 2, i);
// ----
int cnt = 10 + rnd.nextInt(25);
long t = System.currentTimeMillis();
for (i = 0; i < cnt; i++) {
id = UUID.randomUUID();
assertTrue(tbl.doUpdate(row(id, t, id.toString(), 51), false));
}
rs = s.executeQuery("select x, id from t where x = 51 limit " + cnt);
i = 0;
while (rs.next()) {
assertEquals(51, rs.getInt(1));
i++;
}
assertEquals(cnt, i);
}
use of org.h2.store.Data in project ignite by apache.
the class GridH2TableSelfTest method testIndexFindFirstOrLast.
/**
* @throws Exception If failed.
*/
public void testIndexFindFirstOrLast() throws Exception {
Index index = tbl.getIndexes().get(2);
assertTrue(index instanceof GridH2TreeIndex);
assertTrue(index.canGetFirstOrLast());
//find first on empty data
Cursor cursor = index.findFirstOrLast(null, true);
assertFalse(cursor.next());
assertNull(cursor.get());
//find last on empty data
cursor = index.findFirstOrLast(null, false);
assertFalse(cursor.next());
assertNull(cursor.get());
//fill with data
int rows = 100;
long t = System.currentTimeMillis();
Random rnd = new Random();
UUID min = null;
UUID max = null;
for (int i = 0; i < rows; i++) {
UUID id = UUID.randomUUID();
if (min == null || id.compareTo(min) < 0)
min = id;
if (max == null || id.compareTo(max) > 0)
max = id;
GridH2Row row = row(id, t++, id.toString(), rnd.nextInt(100));
((GridH2TreeIndex) index).put(row);
}
//find first
cursor = index.findFirstOrLast(null, true);
assertTrue(cursor.next());
assertEquals(min, cursor.get().getValue(0).getObject());
assertFalse(cursor.next());
//find last
cursor = index.findFirstOrLast(null, false);
assertTrue(cursor.next());
assertEquals(max, cursor.get().getValue(0).getObject());
assertFalse(cursor.next());
}
use of org.h2.store.Data in project ignite by apache.
the class GridH2KeyValueRowOffheap method getOffheapValue.
/** {@inheritDoc} */
@SuppressWarnings("LockAcquiredButNotSafelyReleased")
@Override
protected Value getOffheapValue(int col) {
GridUnsafeMemory mem = desc.memory();
long p = ptr;
assert p > 0 : p;
byte[] bytes = null;
if (col == KEY_COL) {
int size = mem.readInt(p + OFFSET_KEY_SIZE);
assert size > 0 : size;
bytes = mem.readBytes(p + OFFSET_KEY, size);
} else if (col == VAL_COL) {
Lock l = lock(p);
desc.guard().begin();
try {
long valPtr = mem.readLongVolatile(p + OFFSET_VALUE_REF);
if (// Value was evicted.
valPtr == 0)
return null;
int size = mem.readInt(valPtr);
assert size > 0 : size;
bytes = mem.readBytes(valPtr + OFFSET_VALUE, size);
} finally {
desc.guard().end();
l.unlock();
}
} else
throw new IllegalStateException("Column: " + col);
Data data = Data.create(null, bytes);
return data.readValue();
}
use of org.h2.store.Data in project ignite by apache.
the class DbH2ServerStartup method populateDatabase.
/**
* Populate sample database.
*
* @throws SQLException if
*/
public static void populateDatabase() throws SQLException {
// Try to connect to database TCP server.
JdbcConnectionPool dataSrc = JdbcConnectionPool.create("jdbc:h2:tcp://localhost/mem:ExampleDb", "sa", "");
// Create Person table in database.
RunScript.execute(dataSrc.getConnection(), new StringReader(CREATE_PERSON_TABLE));
// Populates Person table with sample data in database.
RunScript.execute(dataSrc.getConnection(), new StringReader(POPULATE_PERSON_TABLE));
}
Aggregations