use of herddb.mem.MemoryDataStorageManager in project herddb by diennea.
the class SimpleIndexAccessTest method multipleColumnPrimaryKeyPrefixScanWithAliasTest.
@Test
public void multipleColumnPrimaryKeyPrefixScanWithAliasTest() throws Exception {
String nodeId = "localhost";
try (DBManager manager = new DBManager("localhost", new MemoryMetadataStorageManager(), new MemoryDataStorageManager(), new MemoryCommitLogManager(), null, null)) {
manager.start();
CreateTableSpaceStatement st1 = new CreateTableSpaceStatement("tblspace1", Collections.singleton(nodeId), nodeId, 1, 0, 0);
manager.executeStatement(st1, StatementEvaluationContext.DEFAULT_EVALUATION_CONTEXT(), TransactionContext.NO_TRANSACTION);
manager.waitForTablespace("tblspace1", 10000);
execute(manager, "CREATE TABLE tblspace1.q1_HISTORY (\n" + " MSG_ID BIGINT NOT NULL,\n" + " SID TINYINT NOT NULL, \n" + " STATUS INT NOT NULL,\n" + " TIMESTAMP TIMESTAMP NOT NULL,\n" + " STATUSLINE VARCHAR(2000) NULL,\n" + " IDBOUNCECATEGORY SMALLINT NULL,\n" + " PRIMARY KEY (MSG_ID, SID)\n" + ") ;", Collections.emptyList());
assertEquals(1, executeUpdate(manager, "INSERT INTO tblspace1.q1_HISTORY(MSG_ID,SID,STATUS) values(1,1,1)", Collections.emptyList()).getUpdateCount());
assertEquals(1, executeUpdate(manager, "INSERT INTO tblspace1.q1_HISTORY(MSG_ID,SID,STATUS) values(1,2,1)", Collections.emptyList()).getUpdateCount());
assertEquals(1, executeUpdate(manager, "INSERT INTO tblspace1.q1_HISTORY(MSG_ID,SID,STATUS) values(1,3,1)", Collections.emptyList()).getUpdateCount());
assertEquals(1, executeUpdate(manager, "INSERT INTO tblspace1.q1_HISTORY(MSG_ID,SID,STATUS) values(2,1,1)", Collections.emptyList()).getUpdateCount());
assertEquals(1, executeUpdate(manager, "INSERT INTO tblspace1.q1_HISTORY(MSG_ID,SID,STATUS) values(2,2,1)", Collections.emptyList()).getUpdateCount());
{
TranslatedQuery translate = manager.getPlanner().translate(TableSpace.DEFAULT, "" + "SELECT H.SID, H.STATUS, H.`TIMESTAMP`, H.STATUSLINE, H.IDBOUNCECATEGORY " + "FROM tblspace1.q1_HISTORY AS H " + "WHERE H.MSG_ID=?", Arrays.asList(1), true, true, false, -1);
ScanStatement scan = translate.plan.mainStatement.unwrap(ScanStatement.class);
assertTrue(scan.getPredicate().getIndexOperation() instanceof PrimaryIndexPrefixScan);
try (DataScanner scan1 = manager.scan(scan, translate.context, TransactionContext.NO_TRANSACTION)) {
assertEquals(3, scan1.consume().size());
}
}
}
}
use of herddb.mem.MemoryDataStorageManager in project herddb by diennea.
the class SimpleJoinTest method testSimpleJoinNoWhere.
@Test
public void testSimpleJoinNoWhere() throws Exception {
String nodeId = "localhost";
try (DBManager manager = new DBManager("localhost", new MemoryMetadataStorageManager(), new MemoryDataStorageManager(), new MemoryCommitLogManager(), null, null)) {
manager.start();
CreateTableSpaceStatement st1 = new CreateTableSpaceStatement("tblspace1", Collections.singleton(nodeId), nodeId, 1, 0, 0);
manager.executeStatement(st1, StatementEvaluationContext.DEFAULT_EVALUATION_CONTEXT(), TransactionContext.NO_TRANSACTION);
manager.waitForTablespace("tblspace1", 10000);
execute(manager, "CREATE TABLE tblspace1.table1 (k1 string primary key,n1 int,s1 string)", Collections.emptyList());
execute(manager, "CREATE TABLE tblspace1.table2 (k2 string primary key,n2 int,s2 string)", Collections.emptyList());
execute(manager, "INSERT INTO tblspace1.table1 (k1,n1,s1) values('a',1,'A')", Collections.emptyList());
execute(manager, "INSERT INTO tblspace1.table1 (k1,n1,s1) values('b',2,'B')", Collections.emptyList());
execute(manager, "INSERT INTO tblspace1.table2 (k2,n2,s2) values('c',3,'A')", Collections.emptyList());
execute(manager, "INSERT INTO tblspace1.table2 (k2,n2,s2) values('d',4,'A')", Collections.emptyList());
{
List<DataAccessor> tuples = scan(manager, "SELECT * FROM" + " tblspace1.table1 t1" + " NATURAL JOIN tblspace1.table2 t2" + " WHERE t1.n1 > 0" + " and t2.n2 >= 1", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
System.out.println("t:" + t);
assertEquals(6, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("n1", t.getFieldNames()[1]);
assertEquals("s1", t.getFieldNames()[2]);
assertEquals("k2", t.getFieldNames()[3]);
assertEquals("n2", t.getFieldNames()[4]);
assertEquals("s2", t.getFieldNames()[5]);
}
assertEquals(4, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "c", "n2", 3, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "d", "n2", 4, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "c", "n2", 3, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "d", "n2", 4, "s2", "A"))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT t1.k1, t2.k2 FROM" + " tblspace1.table1 t1 " + " NATURAL JOIN tblspace1.table2 t2 " + " WHERE t1.n1 > 0" + " and t2.n2 >= 1", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(2, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("k2", t.getFieldNames()[1]);
}
assertEquals(4, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "k2", "c"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "k2", "d"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "k2", "c"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "k2", "d"))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT t1.k1, t2.k2 FROM" + " tblspace1.table1 t1 " + " NATURAL JOIN tblspace1.table2 t2 " + " WHERE t1.n1 >= 2" + " and t2.n2 >= 4", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(2, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("k2", t.getFieldNames()[1]);
}
assertEquals(1, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "k2", "d"))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT t1.*,t2.* FROM" + " tblspace1.table1 t1" + " NATURAL JOIN tblspace1.table2 t2" + " WHERE t1.n1 > 0" + " and t2.n2 >= 1", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(6, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("n1", t.getFieldNames()[1]);
assertEquals("s1", t.getFieldNames()[2]);
assertEquals("k2", t.getFieldNames()[3]);
assertEquals("n2", t.getFieldNames()[4]);
assertEquals("s2", t.getFieldNames()[5]);
}
assertEquals(4, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "c", "n2", 3, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "d", "n2", 4, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "c", "n2", 3, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "d", "n2", 4, "s2", "A"))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT t1.* FROM" + " tblspace1.table1 t1" + " NATURAL JOIN tblspace1.table2 t2" + " WHERE t1.n1 > 0" + " and t2.n2 >= 1", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(3, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("n1", t.getFieldNames()[1]);
assertEquals("s1", t.getFieldNames()[2]);
}
assertEquals(4, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B"))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT t2.* FROM" + " tblspace1.table1 t1" + " NATURAL JOIN tblspace1.table2 t2" + " WHERE t1.n1 > 0" + " and t2.n2 >= 1", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(3, t.getFieldNames().length);
assertEquals("k2", t.getFieldNames()[0]);
assertEquals("n2", t.getFieldNames()[1]);
assertEquals("s2", t.getFieldNames()[2]);
}
assertEquals(4, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "c", "n2", 3, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "d", "n2", 4, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "c", "n2", 3, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "d", "n2", 4, "s2", "A"))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT t2.s2 FROM" + " tblspace1.table1 t1" + " NATURAL JOIN tblspace1.table2 t2" + " WHERE t1.n1 > 0" + " and t2.n2 >= 1", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(1, t.getFieldNames().length);
assertEquals("s2", t.getFieldNames()[0]);
}
assertEquals(4, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("s2", "A"))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT * FROM" + " tblspace1.table1 t1" + " NATURAL JOIN tblspace1.table2 t2" + " WHERE t1.n1 > 0" + " and t2.n2 >= 4", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(6, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("n1", t.getFieldNames()[1]);
assertEquals("s1", t.getFieldNames()[2]);
assertEquals("k2", t.getFieldNames()[3]);
assertEquals("n2", t.getFieldNames()[4]);
assertEquals("s2", t.getFieldNames()[5]);
}
assertEquals(2, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "d", "n2", 4, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "d", "n2", 4, "s2", "A"))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT * FROM" + " tblspace1.table1 t1" + " NATURAL JOIN tblspace1.table2 t2" + " WHERE t1.n1 <= t2.n2", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(6, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("n1", t.getFieldNames()[1]);
assertEquals("s1", t.getFieldNames()[2]);
assertEquals("k2", t.getFieldNames()[3]);
assertEquals("n2", t.getFieldNames()[4]);
assertEquals("s2", t.getFieldNames()[5]);
}
assertEquals(4, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "c", "n2", 3, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "d", "n2", 4, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "c", "n2", 3, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "d", "n2", 4, "s2", "A"))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT * FROM " + " tblspace1.table1 t1 " + " NATURAL JOIN tblspace1.table2 t2 " + " WHERE t1.n1 <= t2.n2 " + "and t2.n2 <= 3", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(6, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("n1", t.getFieldNames()[1]);
assertEquals("s1", t.getFieldNames()[2]);
assertEquals("k2", t.getFieldNames()[3]);
assertEquals("n2", t.getFieldNames()[4]);
assertEquals("s2", t.getFieldNames()[5]);
}
assertEquals(2, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "c", "n2", 3, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "c", "n2", 3, "s2", "A"))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT * FROM " + " tblspace1.table1 t1 " + " JOIN tblspace1.table2 t2 ON t1.n1 <= t2.n2 " + " and t2.n2 <= 3", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(6, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("n1", t.getFieldNames()[1]);
assertEquals("s1", t.getFieldNames()[2]);
assertEquals("k2", t.getFieldNames()[3]);
assertEquals("n2", t.getFieldNames()[4]);
assertEquals("s2", t.getFieldNames()[5]);
}
assertEquals(2, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "c", "n2", 3, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "c", "n2", 3, "s2", "A"))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT t1.k1, t2.k2 FROM" + " tblspace1.table1 t1 " + " NATURAL JOIN tblspace1.table2 t2 " + " WHERE t1.n1 + 3 = t2.n2", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
System.out.println("tuple -: " + t.toMap());
assertEquals(2, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("k2", t.getFieldNames()[1]);
}
assertEquals(1, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "k2", "d"))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT t2.n2, t1.s1, t2.k2 FROM" + " tblspace1.table1 t1" + " NATURAL JOIN tblspace1.table2 t2" + " WHERE t1.n1 > 0" + " and t2.n2 >= 1", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(3, t.getFieldNames().length);
assertEquals("n2", t.getFieldNames()[0]);
assertEquals("s1", t.getFieldNames()[1]);
assertEquals("k2", t.getFieldNames()[2]);
}
assertEquals(4, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("s1", "A", "k2", "c", "n2", 3))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("s1", "A", "k2", "d", "n2", 4))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("s1", "B", "k2", "c", "n2", 3))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("s1", "B", "k2", "d", "n2", 4))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT t2.*, t1.* FROM" + " tblspace1.table1 t1" + " NATURAL JOIN tblspace1.table2 t2" + " WHERE t1.n1 > 0" + " and t2.n2 >= 1", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(6, t.getFieldNames().length);
assertEquals("k2", t.getFieldNames()[0]);
assertEquals("n2", t.getFieldNames()[1]);
assertEquals("s2", t.getFieldNames()[2]);
assertEquals("k1", t.getFieldNames()[3]);
assertEquals("n1", t.getFieldNames()[4]);
assertEquals("s1", t.getFieldNames()[5]);
}
assertEquals(4, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "c", "n2", 3, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "d", "n2", 4, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "c", "n2", 3, "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "d", "n2", 4, "s2", "A"))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT * FROM" + " tblspace1.table1 t1" + " NATURAL JOIN tblspace1.table2 t2 " + " ORDER BY n2,n1", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(6, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("n1", t.getFieldNames()[1]);
assertEquals("s1", t.getFieldNames()[2]);
assertEquals("k2", t.getFieldNames()[3]);
assertEquals("n2", t.getFieldNames()[4]);
assertEquals("s2", t.getFieldNames()[5]);
}
assertEquals(4, tuples.size());
int i = 0;
assertTrue(tuples.get(i++).toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "c", "n2", 3, "s2", "A")));
assertTrue(tuples.get(i++).toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "c", "n2", 3, "s2", "A")));
assertTrue(tuples.get(i++).toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "d", "n2", 4, "s2", "A")));
assertTrue(tuples.get(i++).toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "d", "n2", 4, "s2", "A")));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT * FROM" + " tblspace1.table1 t1" + " NATURAL JOIN tblspace1.table2 t2 " + " ORDER BY n2 desc,n1", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
assertEquals(6, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("n1", t.getFieldNames()[1]);
assertEquals("s1", t.getFieldNames()[2]);
assertEquals("k2", t.getFieldNames()[3]);
assertEquals("n2", t.getFieldNames()[4]);
assertEquals("s2", t.getFieldNames()[5]);
}
assertEquals(4, tuples.size());
int i = 0;
assertTrue(tuples.get(i++).toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "d", "n2", 4, "s2", "A")));
assertTrue(tuples.get(i++).toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "d", "n2", 4, "s2", "A")));
assertTrue(tuples.get(i++).toMap().equals(MapUtils.map("k1", "a", "n1", 1, "s1", "A", "k2", "c", "n2", 3, "s2", "A")));
assertTrue(tuples.get(i++).toMap().equals(MapUtils.map("k1", "b", "n1", 2, "s1", "B", "k2", "c", "n2", 3, "s2", "A")));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT t1.k1, t2.k2 FROM" + " tblspace1.table1 t1 " + " NATURAL JOIN tblspace1.table2 t2 " + " WHERE t1.n1 + 3 <= t2.n2", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
System.out.println("tuple -: " + t.toMap());
assertEquals(2, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("k2", t.getFieldNames()[1]);
}
assertEquals(1, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "k2", "d"))));
}
if (manager.getPlanner() instanceof CalcitePlanner) {
List<DataAccessor> tuples = scan(manager, "SELECT t1.k1, t2.k2, t1.s1, t2.s2 FROM" + " tblspace1.table1 t1 " + " LEFT JOIN tblspace1.table2 t2 " + " ON t1.s1 = t2.s2" + " ", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
System.out.println("tuple -: " + t.toMap());
assertEquals(4, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("k2", t.getFieldNames()[1]);
assertEquals("s1", t.getFieldNames()[2]);
assertEquals("s2", t.getFieldNames()[3]);
}
assertEquals(3, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "k2", "c", "s1", "A", "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "k2", "d", "s1", "A", "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "b", "k2", null, "s1", "B", "s2", null))));
}
if (manager.getPlanner() instanceof CalcitePlanner) {
List<DataAccessor> tuples = scan(manager, "SELECT t1.k1, t2.k2, t1.s1, t2.s2 FROM" + " tblspace1.table1 t1 " + " RIGHT JOIN tblspace1.table2 t2 " + " ON t1.s1 = t2.s2" + " ", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
System.out.println("tuple -: " + t.toMap());
assertEquals(4, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("k2", t.getFieldNames()[1]);
assertEquals("s1", t.getFieldNames()[2]);
assertEquals("s2", t.getFieldNames()[3]);
}
assertEquals(2, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "k2", "c", "s1", "A", "s2", "A"))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", "a", "k2", "d", "s1", "A", "s2", "A"))));
}
}
}
use of herddb.mem.MemoryDataStorageManager in project herddb by diennea.
the class SimpleJoinTest method testSubQueryInSelect.
@Test
public void testSubQueryInSelect() throws Exception {
String nodeId = "localhost";
try (DBManager manager = new DBManager("localhost", new MemoryMetadataStorageManager(), new MemoryDataStorageManager(), new MemoryCommitLogManager(), null, null)) {
assumeThat(manager.getPlanner(), instanceOf(CalcitePlanner.class));
manager.start();
CreateTableSpaceStatement st1 = new CreateTableSpaceStatement("tblspace1", Collections.singleton(nodeId), nodeId, 1, 0, 0);
manager.executeStatement(st1, StatementEvaluationContext.DEFAULT_EVALUATION_CONTEXT(), TransactionContext.NO_TRANSACTION);
manager.waitForTablespace("tblspace1", 10000);
execute(manager, "CREATE TABLE tblspace1.table1 (k1 string primary key,n1 int,s1 string)", Collections.emptyList());
execute(manager, "CREATE TABLE tblspace1.table2 (k2 string primary key,n2 int,s2 string)", Collections.emptyList());
execute(manager, "INSERT INTO tblspace1.table1 (k1,n1,s1) values('a',1,'A')", Collections.emptyList());
execute(manager, "INSERT INTO tblspace1.table1 (k1,n1,s1) values('b',2,'B')", Collections.emptyList());
execute(manager, "INSERT INTO tblspace1.table2 (k2,n2,s2) values('c',3,'A')", Collections.emptyList());
execute(manager, "INSERT INTO tblspace1.table2 (k2,n2,s2) values('d',4,'A')", Collections.emptyList());
{
List<DataAccessor> tuples = scan(manager, "SELECT t1.k1, max(n1) as maxn1, max(select n2 from tblspace1.table2 t2 WHERE t1.s1=t2.s2) as maxn2 FROM " + " tblspace1.table1 t1 " + " group by k1", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
System.out.println("t:" + t);
assertEquals(3, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("maxn1", t.getFieldNames()[1]);
assertEquals("maxn2", t.getFieldNames()[2]);
}
assertEquals(2, tuples.size());
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", RawString.of("a"), "maxn1", 1, "maxn2", 4))));
assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k1", RawString.of("b"), "maxn1", 2, "maxn2", null))));
}
{
List<DataAccessor> tuples = scan(manager, "SELECT t1.k1, max(n1) as maxn1, max(select n2 from tblspace1.table2 t2 WHERE t1.s1=t2.s2) as maxn2 FROM " + " tblspace1.table1 t1 " + " group by k1" + " order by max(select n2 from tblspace1.table2 t2 WHERE t1.s1=t2.s2) desc", Collections.emptyList()).consume();
for (DataAccessor t : tuples) {
System.out.println("t:" + t);
assertEquals(3, t.getFieldNames().length);
assertEquals("k1", t.getFieldNames()[0]);
assertEquals("maxn1", t.getFieldNames()[1]);
assertEquals("maxn2", t.getFieldNames()[2]);
}
assertEquals(2, tuples.size());
assertTrue(tuples.get(0).toMap().equals(MapUtils.map("k1", RawString.of("b"), "maxn1", 2, "maxn2", null)));
assertTrue(tuples.get(1).toMap().equals(MapUtils.map("k1", RawString.of("a"), "maxn1", 1, "maxn2", 4)));
}
}
}
use of herddb.mem.MemoryDataStorageManager in project herddb by diennea.
the class BlinkBench method main.
public static void main(String[] args) {
ByteArrayOutputStream oos = new ByteArrayOutputStream();
ByteArrayOutputStream eos = new ByteArrayOutputStream();
PrintStream oout = System.out;
PrintStream oerr = System.err;
// int maxruns = 1000000;
// int report = maxruns / 1000;
// int maxruns = 100000;
// int report = maxruns / 1000;
// int maxruns = 1000;
// int report = maxruns / 100;
int maxruns = 100;
int report = maxruns / 100;
// int maxruns = 100;
// int report = maxruns / 10;
// int maxruns = 1;
// int report = 1;
// int threads = 5;
// long maxID = 8;
// int threads = 6;
// long maxID = 10;
// int threads = 16;
// long maxID = 20;
// int threads = 20;
// long maxID = 2000;
// int threads = 20;
// long maxID = 20000;
// int threads = 20;
// long maxID = 200000;
int threads = 20;
long maxID = 200000;
// int threads = 1;
// long maxID = 50;
// int threads = 25;
// long maxID = 50;
long minID = 1;
boolean error = false;
int count = 0;
boolean success = false;
long startw, endw;
long startr, endr;
long timew = 0;
long timer = 0;
long timewrep = 0;
long timerrep = 0;
try {
while (!error) {
PrintStream ops = new PrintStream(oos);
System.setOut(ops);
PrintStream eps = new PrintStream(eos);
System.setErr(eps);
MemoryManager mem = new MemoryManager(5 * (1L << 20), 10 * (128L << 10), (128L << 10));
try (MemoryDataStorageManager ds = new MemoryDataStorageManager();
BLinkKeyToPageIndex idx = new BLinkKeyToPageIndex("tblspc", "tbl", mem, ds)) {
idx.start(LogSequenceNumber.START_OF_TIME);
ExecutorService ex = Executors.newFixedThreadPool(threads);
CyclicBarrier barrier = new CyclicBarrier(threads);
AtomicLong gen = new AtomicLong(minID);
startw = System.currentTimeMillis();
List<Future<?>> futures = new ArrayList<>();
for (int i = 0; i < threads; ++i) {
Future<?> f = ex.submit(() -> {
try {
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace(System.out);
}
try {
while (true) {
long id = gen.getAndIncrement();
if (id > maxID)
break;
// System.out.println("T" + Thread.currentThread().getId() + " " +
// System.currentTimeMillis() + " START INSERT " + id);
idx.put(Bytes.from_long(id), id);
// System.out.println("T" + Thread.currentThread().getId() + " " +
// System.currentTimeMillis() + " END INSERT " + id);
}
} catch (Throwable t) {
System.out.println("T" + Thread.currentThread().getId() + " " + System.currentTimeMillis() + " FINISH ERROR");
for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
System.out.println("T" + Thread.currentThread().getId() + " TD" + Thread.currentThread().getId() + " FINISH ERROR -> " + ste);
}
StringWriter w = new StringWriter();
PrintWriter pw = new PrintWriter(w) {
@Override
public void println(String x) {
print("T" + Thread.currentThread().getId() + " TD" + Thread.currentThread().getId() + " FINISH ERROR -> ");
super.println(x);
}
@Override
public void println(Object x) {
print("T" + Thread.currentThread().getId() + " TD" + Thread.currentThread().getId() + " FINISH ERROR -> ");
super.println(x);
}
};
t.printStackTrace(pw);
System.out.println(w.toString());
throw t;
}
// System.out.println("T" + Thread.currentThread().getId() + " " +
// System.currentTimeMillis() + " FINISH");
});
futures.add(f);
}
for (Future<?> f : futures) {
try {
f.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace(System.out);
error = true;
}
}
endw = System.currentTimeMillis();
// System.out.println(idx.tree.toStringFull());
startr = System.currentTimeMillis();
if (!error) {
gen.set(minID);
futures.clear();
for (int i = 0; i < threads; ++i) {
Future<?> f = ex.submit(() -> {
try {
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace(System.out);
}
while (true) {
long id = gen.getAndIncrement();
if (id > maxID)
break;
long r = idx.get(Bytes.from_long(id));
if (r != id) {
System.out.println(id);
throw new RuntimeException("Search Error! " + id);
}
}
});
futures.add(f);
}
for (Future<?> f : futures) {
try {
f.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace(System.out);
error = true;
}
}
}
endr = System.currentTimeMillis();
ex.shutdown();
try {
ex.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace(System.out);
}
long write = endw - startw;
long read = endr - startr;
timew += write;
timer += read;
timewrep += write;
timerrep += read;
if (++count % report == 0) {
{
/* write */
double operations = (count * (maxID - minID + 1));
double msPerOp = timew / operations;
double opPerMs = operations / timew;
double operationswi = (report * (maxID - minID + 1));
double msPerOpwi = timewrep / operationswi;
double opPerMswi = operationswi / timewrep;
double perc = count * 100 / (double) maxruns;
oout.println("W [" + String.format("%3.2f", perc) + "%] " + String.format("%7d", count) + " time: " + String.format("%7d", timew) + " (" + timewrep + ")" + " op/ms: " + String.format("%3.2f", opPerMs) + " (instant " + String.format("%3.2f", opPerMswi) + ")" + " ms/op: " + String.format("%3.2f", msPerOp) + " (instant " + String.format("%3.2f", msPerOpwi) + ")");
}
{
/* read */
double operations = (count * (maxID - minID + 1));
double msPerOp = timer / operations;
double opPerMs = operations / timer;
double operationsri = (report * (maxID - minID + 1));
double msPerOpri = timerrep / operationsri;
double opPerMsri = operationsri / timerrep;
double perc = count * 100 / (double) maxruns;
oout.println("R [" + String.format("%3.2f", perc) + "%] " + String.format("%7d", count) + " time: " + String.format("%7d", timer) + " (" + timerrep + ")" + " op/ms: " + String.format("%3.2f", opPerMs) + " (instant " + String.format("%3.2f", opPerMsri) + ")" + " ms/op: " + String.format("%3.2f", msPerOp) + " (instant " + String.format("%3.2f", msPerOpri) + ")");
}
timewrep = 0;
timerrep = 0;
// oout.print(blink.toStringFull());
}
oout.flush();
if (count == maxruns) {
success = true;
return;
}
System.out.flush();
System.err.flush();
ops.close();
eps.close();
ops = null;
eps = null;
if (!error) {
oos.reset();
eos.reset();
}
}
}
} finally {
System.out.flush();
System.setOut(oout);
System.err.flush();
System.setErr(oerr);
if (!success) {
try {
System.out.println("OS S " + oos.size());
String os = oos.toString("UTF-8");
System.out.println(os);
System.out.println("ES S " + eos.size());
String es = eos.toString("UTF-8");
System.err.println(es);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
use of herddb.mem.MemoryDataStorageManager in project herddb by diennea.
the class BlinkRandomBench method main.
public static void main(String[] args) {
ByteArrayOutputStream oos = new ByteArrayOutputStream();
ByteArrayOutputStream eos = new ByteArrayOutputStream();
PrintStream oout = System.out;
PrintStream oerr = System.err;
// int maxruns = 1000000;
// int report = maxruns / 1000;
// int maxruns = 100000;
// int report = maxruns / 1000;
// int maxruns = 1000;
// int report = maxruns / 100;
int maxruns = 100;
int report = maxruns / 100;
// int maxruns = 100;
// int report = maxruns / 10;
// int maxruns = 1;
// int report = 1;
// int threads = 5;
// long maxID = 8;
// int threads = 6;
// long maxID = 10;
// int threads = 16;
// long maxID = 20;
// int threads = 20;
// long maxID = 2000;
// int threads = 20;
// long maxID = 20000;
// int threads = 20;
// long maxID = 200000;
int threads = 20;
long maxID = 200000;
// int threads = 1;
// long maxID = 50;
// int threads = 25;
// long maxID = 50;
long minID = 1;
boolean error = false;
int count = 0;
boolean success = false;
long startw, endw;
long startr, endr;
long timew = 0;
long timer = 0;
long timewrep = 0;
long timerrep = 0;
try {
while (!error) {
// oos = new ByteArrayOutputStream();
PrintStream ops = new PrintStream(oos);
System.setOut(ops);
// eos = new ByteArrayOutputStream();
PrintStream eps = new PrintStream(eos);
System.setErr(eps);
MemoryManager mem = new MemoryManager(5 * (1L << 20), 10 * (128L << 10), (128L << 10));
try (MemoryDataStorageManager ds = new MemoryDataStorageManager();
BLinkKeyToPageIndex idx = new BLinkKeyToPageIndex("tblspc", "tbl", mem, ds)) {
idx.start(LogSequenceNumber.START_OF_TIME);
long[] data = new long[(int) (maxID - minID)];
for (long i = 0; i < (maxID - minID); ++i) {
data[(int) i] = i + minID;
}
Collections.shuffle(Arrays.asList(data));
long[][] datas = new long[threads][];
int added = 0;
for (int i = 0; i < threads; ++i) {
int toadd = (data.length - added) / (threads - i);
long[] tdata = new long[toadd];
System.arraycopy(data, added, tdata, 0, toadd);
added += toadd;
datas[i] = tdata;
}
ExecutorService ex = Executors.newFixedThreadPool(threads);
CyclicBarrier barrier = new CyclicBarrier(threads);
startw = System.currentTimeMillis();
List<Future<?>> futures = new ArrayList<>();
for (int i = 0; i < threads; ++i) {
final int index = i;
Future<?> f = ex.submit(() -> {
try {
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace(System.out);
}
for (int k = 0; k < datas[index].length; ++k) {
idx.put(Bytes.from_long(datas[index][k]), datas[index][k]);
}
});
futures.add(f);
}
for (Future<?> f : futures) {
try {
f.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace(System.out);
error = true;
}
}
endw = System.currentTimeMillis();
// System.out.println(idx.tree.toStringFull());
startr = System.currentTimeMillis();
if (!error) {
futures.clear();
for (int i = 0; i < threads; ++i) {
final int index = i;
Future<?> f = ex.submit(() -> {
try {
barrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace(System.out);
}
for (int k = 0; k < datas[index].length; ++k) {
long r = idx.get(Bytes.from_long(datas[index][k]));
if (r != datas[index][k]) {
System.out.println(datas[index][k]);
throw new RuntimeException("Search Error! " + datas[index][k]);
}
}
});
futures.add(f);
}
for (Future<?> f : futures) {
try {
f.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace(System.out);
error = true;
}
}
}
endr = System.currentTimeMillis();
ex.shutdown();
try {
ex.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace(System.out);
}
long write = endw - startw;
long read = endr - startr;
timew += write;
timer += read;
timewrep += write;
timerrep += read;
if (++count % report == 0) {
{
/* write */
double operations = (count * (maxID - minID + 1));
double msPerOp = timew / operations;
double opPerMs = operations / timew;
double operationswi = (report * (maxID - minID + 1));
double msPerOpwi = timewrep / operationswi;
double opPerMswi = operationswi / timewrep;
double perc = count * 100 / (double) maxruns;
oout.println("W [" + String.format("%3.2f", perc) + "%] " + String.format("%7d", count) + " time: " + String.format("%7d", timew) + " (" + timewrep + ")" + " op/ms: " + String.format("%3.2f", opPerMs) + " (instant " + String.format("%3.2f", opPerMswi) + ")" + " ms/op: " + String.format("%3.2f", msPerOp) + " (instant " + String.format("%3.2f", msPerOpwi) + ")");
}
{
/* read */
double operations = (count * (maxID - minID + 1));
double msPerOp = timer / operations;
double opPerMs = operations / timer;
double operationsri = (report * (maxID - minID + 1));
double msPerOpri = timerrep / operationsri;
double opPerMsri = operationsri / timerrep;
double perc = count * 100 / (double) maxruns;
oout.println("R [" + String.format("%3.2f", perc) + "%] " + String.format("%7d", count) + " time: " + String.format("%7d", timer) + " (" + timerrep + ")" + " op/ms: " + String.format("%3.2f", opPerMs) + " (instant " + String.format("%3.2f", opPerMsri) + ")" + " ms/op: " + String.format("%3.2f", msPerOp) + " (instant " + String.format("%3.2f", msPerOpri) + ")");
}
timewrep = 0;
timerrep = 0;
// oout.print(blink.toStringFull());
}
oout.flush();
if (count == maxruns) {
success = true;
return;
}
System.out.flush();
System.err.flush();
ops.close();
eps.close();
ops = null;
eps = null;
if (!error) {
oos.reset();
eos.reset();
}
}
}
} finally {
System.out.flush();
System.setOut(oout);
System.err.flush();
System.setErr(oerr);
if (!success) {
try {
System.out.println("OS S " + oos.size());
String os = oos.toString("UTF-8");
System.out.println(os);
System.out.println("ES S " + eos.size());
String es = eos.toString("UTF-8");
System.err.println(es);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Aggregations