Search in sources :

Example 16 with Tuple

use of herddb.model.Tuple in project herddb by diennea.

the class SimpleScanZeroCopyTest method testMultiPkFirstButBadPkOrder.

@Test
public void testMultiPkFirstButBadPkOrder() 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.tsql (n1 int ,k1 string, s1 string," + "primary key(k1, n1))", Collections.emptyList());
        execute(manager, "INSERT INTO tblspace1.tsql (k1,n1 ,s1) values (?,?,?)", Arrays.asList("a", 1, "b"));
        try (DataScanner scan = TestUtils.scan(manager, "SELECT * FROM tblspace1.tsql ", Collections.emptyList())) {
            List<DataAccessor> data = scan.consume();
            assertEquals(1, data.size());
            // read from the full record
            assertTrue(data.get(0) instanceof DataAccessorForFullRecord);
            assertEquals(1, data.get(0).get("n1"));
            assertEquals(1, data.get(0).get(0));
            assertEquals(RawString.of("a"), data.get(0).get("k1"));
            assertEquals(RawString.of("a"), data.get(0).get(1));
            assertEquals(RawString.of("b"), data.get(0).get("s1"));
            assertEquals(RawString.of("b"), data.get(0).get(2));
            String[] fieldNames = scan.getFieldNames();
            for (String fName : fieldNames) {
                Object value = data.get(0).get(fName);
                System.out.println("FIELD " + fName + " -> " + value + " (" + value.getClass() + ")");
            }
            IntHolder current = new IntHolder();
            data.get(0).forEach((fName, value) -> {
                System.out.println("FIELD2 " + fName + " -> " + value + " (" + value.getClass() + ")");
                assertEquals(fName, fieldNames[current.value++]);
            });
        }
        try (DataScanner scan = TestUtils.scan(manager, "SELECT k1 FROM tblspace1.tsql ", Collections.emptyList())) {
            List<DataAccessor> data = scan.consume();
            assertEquals(1, data.size());
            // read from the full record, keeping only some field
            assertTrue(data.get(0) instanceof ProjectedDataAccessor || data.get(0) instanceof ZeroCopyProjection.RuntimeProjectedDataAccessor);
            assertEquals(RawString.of("a"), data.get(0).get("k1"));
            assertEquals(RawString.of("a"), data.get(0).get(0));
            String[] fieldNames = scan.getFieldNames();
            for (String fName : fieldNames) {
                Object value = data.get(0).get(fName);
                System.out.println("FIELD " + fName + " -> " + value + " (" + value.getClass() + ")");
            }
            IntHolder current = new IntHolder();
            data.get(0).forEach((fName, value) -> {
                System.out.println("FIELD2 " + fName + " -> " + value + " (" + value.getClass() + ")");
                assertEquals(fName, fieldNames[current.value++]);
            });
        }
        try (DataScanner scan = TestUtils.scan(manager, "SELECT COUNT(*) FROM tblspace1.tsql ", Collections.emptyList())) {
            List<DataAccessor> data = scan.consume();
            assertEquals(1, data.size());
            assertTrue(data.get(0) instanceof Tuple);
        }
    }
}
Also used : MemoryDataStorageManager(herddb.mem.MemoryDataStorageManager) DataAccessor(herddb.utils.DataAccessor) ProjectedDataAccessor(herddb.utils.ProjectedDataAccessor) RawString(herddb.utils.RawString) ProjectedDataAccessor(herddb.utils.ProjectedDataAccessor) CreateTableSpaceStatement(herddb.model.commands.CreateTableSpaceStatement) DBManager(herddb.core.DBManager) DataScanner(herddb.model.DataScanner) MemoryCommitLogManager(herddb.mem.MemoryCommitLogManager) IntHolder(herddb.utils.IntHolder) DataAccessorForFullRecord(herddb.codec.DataAccessorForFullRecord) Tuple(herddb.model.Tuple) MemoryMetadataStorageManager(herddb.mem.MemoryMetadataStorageManager) Test(org.junit.Test)

Example 17 with Tuple

use of herddb.model.Tuple in project herddb by diennea.

the class RecordSetSuite method testSortSwap.

@Test
public void testSortSwap() throws Exception {
    RecordSetFactory factory = buildRecordSetFactory(1);
    Column[] columns = new Column[2];
    columns[0] = Column.column("s1", ColumnTypes.STRING);
    columns[1] = Column.column("n1", ColumnTypes.LONG);
    String[] fieldNames = Column.buildFieldNamesList(columns);
    try (MaterializedRecordSet rs = factory.createRecordSet(fieldNames, columns)) {
        for (int i = 0; i < 100; i++) {
            Map<String, Object> record = new HashMap<>();
            String s1 = "test_" + i;
            record.put("s1", s1);
            record.put("n1", i);
            rs.add(new Tuple(record, fieldNames));
        }
        rs.writeFinished();
        // sort descending
        rs.sort(new TupleComparator() {

            @Override
            public int compare(DataAccessor o1, DataAccessor o2) {
                return ((Integer) o2.get(("n1"))).compareTo((Integer) o1.get("n1"));
            }
        });
        int last = Integer.MAX_VALUE;
        for (DataAccessor t : rs) {
            int n1 = (Integer) t.get("n1");
            assertTrue(last > n1);
            last = n1;
        }
    }
}
Also used : HashMap(java.util.HashMap) DataAccessor(herddb.utils.DataAccessor) TupleComparator(herddb.model.TupleComparator) Column(herddb.model.Column) Tuple(herddb.model.Tuple) Test(org.junit.Test)

Example 18 with Tuple

use of herddb.model.Tuple in project herddb by diennea.

the class RecordSetSuite method testApplyProjectionSwap.

@Test
public void testApplyProjectionSwap() throws Exception {
    RecordSetFactory factory = buildRecordSetFactory(1);
    Column[] columns = new Column[2];
    columns[0] = Column.column("s1", ColumnTypes.STRING);
    columns[1] = Column.column("n1", ColumnTypes.LONG);
    Set<String> expected_s2 = new HashSet<>();
    Set<Integer> expected_n2 = new HashSet<>();
    String[] fieldNames = Column.buildFieldNamesList(columns);
    try (MaterializedRecordSet rs = factory.createRecordSet(fieldNames, columns)) {
        for (int i = 0; i < 100; i++) {
            Map<String, Object> record = new HashMap<>();
            String s1 = "test_" + i;
            record.put("s1", s1);
            record.put("n1", i);
            expected_s2.add(s1);
            expected_n2.add(i);
            rs.add(new Tuple(record, fieldNames));
        }
        rs.writeFinished();
        Column[] columns_projected = new Column[2];
        columns_projected[0] = Column.column("n2", ColumnTypes.LONG);
        columns_projected[1] = Column.column("s2", ColumnTypes.STRING);
        String[] fieldNames_projected = new String[] { "n2", "s2" };
        rs.applyProjection(new Projection() {

            @Override
            public Column[] getColumns() {
                return columns_projected;
            }

            @Override
            public String[] getFieldNames() {
                return fieldNames_projected;
            }

            @Override
            public Tuple map(DataAccessor tuple, StatementEvaluationContext context) throws StatementExecutionException {
                Object[] projected_values = new Object[2];
                projected_values[0] = tuple.get("n1");
                projected_values[1] = tuple.get("s1");
                return new Tuple(fieldNames_projected, projected_values);
            }
        }, StatementEvaluationContext.DEFAULT_EVALUATION_CONTEXT());
        for (DataAccessor t : rs) {
            System.out.println("t:" + t.toMap());
            expected_s2.remove(t.get("s2").toString());
            expected_n2.remove(t.get("n2"));
        }
        assertTrue(expected_s2.isEmpty());
        assertTrue(expected_n2.isEmpty());
        assertEquals("n2", rs.getColumns()[0].name);
        assertEquals("s2", rs.getColumns()[1].name);
    }
}
Also used : HashMap(java.util.HashMap) DataAccessor(herddb.utils.DataAccessor) Projection(herddb.model.Projection) StatementExecutionException(herddb.model.StatementExecutionException) Column(herddb.model.Column) StatementEvaluationContext(herddb.model.StatementEvaluationContext) Tuple(herddb.model.Tuple) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 19 with Tuple

use of herddb.model.Tuple in project herddb by diennea.

the class CalcitePlannerTest method joinsPlansTests.

@Test
public void joinsPlansTests() 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.tsql (k1 string primary key,n1 int,s1 string)", Collections.emptyList());
        execute(manager, "CREATE TABLE tblspace1.tsql2 (k2 string primary key,n2 int,s2 string)", Collections.emptyList());
        execute(manager, "INSERT INTO tblspace1.tsql (k1,n1) values(?,?)", Arrays.asList("mykey", 1234), TransactionContext.NO_TRANSACTION);
        execute(manager, "INSERT INTO tblspace1.tsql2 (k2,n2) values(?,?)", Arrays.asList("mykey", 1234), TransactionContext.NO_TRANSACTION);
        execute(manager, "INSERT INTO tblspace1.tsql2 (k2,n2) values(?,?)", Arrays.asList("mykey2", 1234), TransactionContext.NO_TRANSACTION);
        {
            List<DataAccessor> tuples = scan(manager, "select k2,n2,n1 " + // here we are not specification a table for k2/k1
            "  from tblspace1.tsql2 join tblspace1.tsql on k2<>k1 " + "  where n2 > 1 " + " ", Collections.emptyList()).consumeAndClose();
            for (DataAccessor t : tuples) {
                System.out.println("tuple -: " + t.toMap());
                assertEquals(3, t.getFieldNames().length);
                assertEquals("k2", t.getFieldNames()[0]);
                assertEquals("n2", t.getFieldNames()[1]);
                assertEquals("n1", t.getFieldNames()[2]);
            }
            assertEquals(1, tuples.size());
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey2", "n2", 1234, "n1", 1234))));
        }
        {
            // theta join
            List<DataAccessor> tuples = scan(manager, "select k2,n2,n1 " + "  from tblspace1.tsql2" + "  left join tblspace1.tsql on n2 < n1-1000" + "  " + " ", Collections.emptyList()).consumeAndClose();
            for (DataAccessor t : tuples) {
                System.out.println("tuple -: " + t.toMap());
                assertEquals(3, t.getFieldNames().length);
                assertEquals("k2", t.getFieldNames()[0]);
                assertEquals("n2", t.getFieldNames()[1]);
                assertEquals("n1", t.getFieldNames()[2]);
            }
            assertEquals(2, tuples.size());
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey2", "n2", 1234, "n1", null))));
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey", "n2", 1234, "n1", null))));
        }
        {
            List<DataAccessor> tuples = scan(manager, "select k2,n2,round(n1/2) as halfn1" + "  from tblspace1.tsql2" + "  left join tblspace1.tsql on n2 < n1-?" + "  " + " ", Arrays.asList(-1000)).consumeAndClose();
            for (DataAccessor t : tuples) {
                System.out.println("tuple -: " + t.toMap());
                assertEquals(3, t.getFieldNames().length);
                assertEquals("k2", t.getFieldNames()[0]);
                assertEquals("n2", t.getFieldNames()[1]);
                assertEquals("halfn1", t.getFieldNames()[2]);
            }
            assertEquals(2, tuples.size());
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey2", "n2", 1234, "halfn1", 617.0))));
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey", "n2", 1234, "halfn1", 617.0))));
        }
        if (manager.isFullSQLSupportEnabled()) {
            List<DataAccessor> tuples = scan(manager, "select k2,n2 from tblspace1.tsql2" + "                     where k2 not in (select k1 from tblspace1.tsql)" + " ", Collections.emptyList()).consumeAndClose();
            for (DataAccessor t : tuples) {
                System.out.println("tuple -: " + t.toMap());
                assertEquals(2, t.getFieldNames().length);
                assertEquals("k2", t.getFieldNames()[0]);
                assertEquals("n2", t.getFieldNames()[1]);
            }
            assertEquals(1, tuples.size());
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey2", "n2", 1234))));
        }
        if (manager.isFullSQLSupportEnabled()) {
            List<DataAccessor> tuples = scan(manager, "select k2,n2 from tblspace1.tsql2" + "                     where n2 in (select n1 from tblspace1.tsql" + "                                    )" + " ", Collections.emptyList()).consumeAndClose();
            for (DataAccessor t : tuples) {
                System.out.println("tuple -: " + t.toMap());
                assertEquals(2, t.getFieldNames().length);
                assertEquals("k2", t.getFieldNames()[0]);
                assertEquals("n2", t.getFieldNames()[1]);
            }
            assertEquals(2, tuples.size());
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey2", "n2", 1234))));
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey", "n2", 1234))));
        }
        if (manager.isFullSQLSupportEnabled()) {
            List<DataAccessor> tuples = scan(manager, "select k2,n2 from tblspace1.tsql2" + "                     where exists (select * from tblspace1.tsql" + "                                     where n1=n2)" + " ", Collections.emptyList()).consumeAndClose();
            for (DataAccessor t : tuples) {
                System.out.println("tuple -: " + t.toMap());
                assertEquals(2, t.getFieldNames().length);
                assertEquals("k2", t.getFieldNames()[0]);
                assertEquals("n2", t.getFieldNames()[1]);
            }
            assertEquals(2, tuples.size());
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey2", "n2", 1234))));
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey", "n2", 1234))));
        }
        execute(manager, "INSERT INTO tblspace1.tsql (k1,n1) values(?,?)", Arrays.asList("mykey6", 1236), TransactionContext.NO_TRANSACTION);
        execute(manager, "INSERT INTO tblspace1.tsql2 (k2,n2) values(?,?)", Arrays.asList("mykey6a", 1236), TransactionContext.NO_TRANSACTION);
        // sort not as top level node
        if (manager.isFullSQLSupportEnabled()) {
            List<DataAccessor> tuples = scan(manager, "select k2,n2 from tblspace1.tsql2" + "                     where n2 in (select n1 from tblspace1.tsql" + "                                     order by n1 desc limit 1)" + " ", Collections.emptyList()).consumeAndClose();
            for (DataAccessor t : tuples) {
                System.out.println("tuple -: " + t.toMap());
                assertEquals(2, t.getFieldNames().length);
                assertEquals("k2", t.getFieldNames()[0]);
                assertEquals("n2", t.getFieldNames()[1]);
            }
            assertEquals(1, tuples.size());
            assertTrue(tuples.stream().allMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey6a", "n2", 1236))));
        }
        if (manager.isFullSQLSupportEnabled()) {
            ProjectOp plan = assertInstanceOf(plan(manager, "select k2,n2 from tblspace1.tsql2" + "                     where n2 in (select n1 from tblspace1.tsql" + "                                     order by n1 asc limit 1)"), ProjectOp.class);
            assertThat(plan.getInput(), instanceOf(SemiJoinOp.class));
            List<DataAccessor> tuples = scan(manager, "select k2,n2 from tblspace1.tsql2" + "                     where n2 in (select n1 from tblspace1.tsql" + "                                     order by n1 asc limit 1)" + " ", Collections.emptyList()).consumeAndClose();
            for (DataAccessor t : tuples) {
                System.out.println("tuple -: " + t.toMap());
                assertEquals(2, t.getFieldNames().length);
                assertEquals("k2", t.getFieldNames()[0]);
                assertEquals("n2", t.getFieldNames()[1]);
            }
            assertEquals(2, tuples.size());
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey", "n2", 1234))));
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey2", "n2", 1234))));
        }
        if (manager.isFullSQLSupportEnabled()) {
            ProjectOp plan = assertInstanceOf(plan(manager, "select k2,n2 from tblspace1.tsql2" + "                     where exists (select 1 from tblspace1.tsql a where a.n1=n2)"), ProjectOp.class);
            assertThat(plan.getInput(), instanceOf(SemiJoinOp.class));
            List<DataAccessor> tuples = scan(manager, "select k2,n2 from tblspace1.tsql2" + "                     where exists (select 1 from tblspace1.tsql a where a.n1=n2)" + " ", Collections.emptyList()).consumeAndClose();
            for (DataAccessor t : tuples) {
                System.out.println("tuple -: " + t.toMap());
                assertEquals(2, t.getFieldNames().length);
                assertEquals("k2", t.getFieldNames()[0]);
                assertEquals("n2", t.getFieldNames()[1]);
            }
            assertEquals(3, tuples.size());
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey", "n2", 1234))));
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey2", "n2", 1234))));
            assertTrue(tuples.stream().anyMatch(t -> t.toMap().equals(MapUtils.map("k2", "mykey6a", "n2", 1236))));
        }
    }
}
Also used : Arrays(java.util.Arrays) RuntimeProjectedDataAccessor(herddb.model.planner.ProjectOp.ZeroCopyProjection.RuntimeProjectedDataAccessor) SimpleScanOp(herddb.model.planner.SimpleScanOp) Tuple(herddb.model.Tuple) Table(herddb.model.Table) SortedTableScanOp(herddb.model.planner.SortedTableScanOp) ZeroCopyProjection(herddb.model.planner.ProjectOp.ZeroCopyProjection) AccessCurrentRowExpression(herddb.sql.expressions.AccessCurrentRowExpression) CoreMatchers.instanceOf(org.hamcrest.CoreMatchers.instanceOf) Assert.assertThat(org.junit.Assert.assertThat) TupleComparator(herddb.model.TupleComparator) TestUtils.scan(herddb.core.TestUtils.scan) BindableTableScanOp(herddb.model.planner.BindableTableScanOp) MapUtils(herddb.utils.MapUtils) RawString(herddb.utils.RawString) ScanResult(herddb.model.ScanResult) SimpleInsertOp(herddb.model.planner.SimpleInsertOp) DataAccessor(herddb.utils.DataAccessor) DataAccessorForFullRecord(herddb.codec.DataAccessorForFullRecord) TableDoesNotExistException(herddb.model.TableDoesNotExistException) DeleteOp(herddb.model.planner.DeleteOp) DataScanner(herddb.model.DataScanner) StatementExecutionException(herddb.model.StatementExecutionException) SimpleUpdateOp(herddb.model.planner.SimpleUpdateOp) ScanStatement(herddb.model.commands.ScanStatement) List(java.util.List) TableScanOp(herddb.model.planner.TableScanOp) Assert.assertFalse(org.junit.Assert.assertFalse) MemoryDataStorageManager(herddb.mem.MemoryDataStorageManager) TableSpace(herddb.model.TableSpace) TuplesList(herddb.utils.TuplesList) SimpleDeleteOp(herddb.model.planner.SimpleDeleteOp) InsertOp(herddb.model.planner.InsertOp) CreateTableSpaceStatement(herddb.model.commands.CreateTableSpaceStatement) SortOp(herddb.model.planner.SortOp) TestUtils.beginTransaction(herddb.core.TestUtils.beginTransaction) UpdateOp(herddb.model.planner.UpdateOp) MemoryCommitLogManager(herddb.mem.MemoryCommitLogManager) TableSpaceDoesNotExistException(herddb.model.TableSpaceDoesNotExistException) TransactionContext(herddb.model.TransactionContext) Assert.assertArrayEquals(org.junit.Assert.assertArrayEquals) IdentityProjection(herddb.model.planner.ProjectOp.IdentityProjection) Projection(herddb.model.Projection) ConstantExpression(herddb.sql.expressions.ConstantExpression) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) ProjectOp(herddb.model.planner.ProjectOp) ColumnTypes(herddb.model.ColumnTypes) DBManager(herddb.core.DBManager) Assert.assertNull(org.junit.Assert.assertNull) SemiJoinOp(herddb.model.planner.SemiJoinOp) SortedBindableTableScanOp(herddb.model.planner.SortedBindableTableScanOp) Column(herddb.model.Column) SQLPlannedOperationStatement(herddb.model.commands.SQLPlannedOperationStatement) CompiledEqualsExpression(herddb.sql.expressions.CompiledEqualsExpression) StatementEvaluationContext(herddb.model.StatementEvaluationContext) PlannerOp(herddb.model.planner.PlannerOp) LimitedSortedBindableTableScanOp(herddb.model.planner.LimitedSortedBindableTableScanOp) TestUtils.execute(herddb.core.TestUtils.execute) Assert(org.junit.Assert) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) MemoryMetadataStorageManager(herddb.mem.MemoryMetadataStorageManager) CreateTableSpaceStatement(herddb.model.commands.CreateTableSpaceStatement) DBManager(herddb.core.DBManager) MemoryDataStorageManager(herddb.mem.MemoryDataStorageManager) RuntimeProjectedDataAccessor(herddb.model.planner.ProjectOp.ZeroCopyProjection.RuntimeProjectedDataAccessor) DataAccessor(herddb.utils.DataAccessor) ProjectOp(herddb.model.planner.ProjectOp) MemoryCommitLogManager(herddb.mem.MemoryCommitLogManager) List(java.util.List) TuplesList(herddb.utils.TuplesList) RawString(herddb.utils.RawString) SemiJoinOp(herddb.model.planner.SemiJoinOp) MemoryMetadataStorageManager(herddb.mem.MemoryMetadataStorageManager) Test(org.junit.Test)

Example 20 with Tuple

use of herddb.model.Tuple in project herddb by diennea.

the class CalcitePlannerTest method showCreateTable_with_recreating_table_from_command_output.

@Test
public void showCreateTable_with_recreating_table_from_command_output() 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.test23 (k1 int auto_increment ," + "s1 string not null, n1 int, primary key(k1))", Collections.emptyList());
        TranslatedQuery translatedQuery = manager.getPlanner().translate("tblspace1", "SHOW CREATE TABLE tblspace1.test23", Collections.emptyList(), true, false, true, -1);
        if (translatedQuery.plan.mainStatement instanceof SQLPlannedOperationStatement || translatedQuery.plan.mainStatement instanceof ScanStatement) {
            ScanResult scanResult = (ScanResult) manager.executePlan(translatedQuery.plan, translatedQuery.context, TransactionContext.NO_TRANSACTION);
            DataScanner dataScanner = scanResult.dataScanner;
            String[] columns = dataScanner.getFieldNames();
            List<DataAccessor> records = dataScanner.consume(2);
            TuplesList tuplesList = new TuplesList(columns, records);
            assertTrue(tuplesList.columnNames[0].equalsIgnoreCase("tabledef"));
            Tuple values = (Tuple) records.get(0);
            assertTrue("CREATE TABLE tblspace1.test23(k1 integer auto_increment,s1 string not null,n1 integer,PRIMARY KEY(k1))".equalsIgnoreCase(values.get("tabledef").toString()));
            // drop the table
            execute(manager, "DROP TABLE tblspace1.test23", Collections.emptyList());
            // ensure table has been dropped
            try (DataScanner scan = scan(manager, "SELECT * FROM tblspace1.systables where table_name='test23'", Collections.emptyList())) {
                assertTrue(scan.consume().isEmpty());
            }
            // recreate table
            String showCreateTableResult = values.get("tabledef").toString();
            execute(manager, showCreateTableResult, Collections.emptyList());
            // Ensure the table is getting created
            try (DataScanner scan = scan(manager, "SELECT * FROM tblspace1.systables where table_name='test23'", Collections.emptyList())) {
                assertFalse(scan.consume().isEmpty());
            }
        }
    }
}
Also used : ScanResult(herddb.model.ScanResult) MemoryDataStorageManager(herddb.mem.MemoryDataStorageManager) RuntimeProjectedDataAccessor(herddb.model.planner.ProjectOp.ZeroCopyProjection.RuntimeProjectedDataAccessor) DataAccessor(herddb.utils.DataAccessor) RawString(herddb.utils.RawString) SQLPlannedOperationStatement(herddb.model.commands.SQLPlannedOperationStatement) CreateTableSpaceStatement(herddb.model.commands.CreateTableSpaceStatement) DBManager(herddb.core.DBManager) DataScanner(herddb.model.DataScanner) MemoryCommitLogManager(herddb.mem.MemoryCommitLogManager) Tuple(herddb.model.Tuple) MemoryMetadataStorageManager(herddb.mem.MemoryMetadataStorageManager) ScanStatement(herddb.model.commands.ScanStatement) TuplesList(herddb.utils.TuplesList) Test(org.junit.Test)

Aggregations

Tuple (herddb.model.Tuple)20 DataAccessor (herddb.utils.DataAccessor)19 Test (org.junit.Test)18 Column (herddb.model.Column)11 DataScanner (herddb.model.DataScanner)11 MemoryCommitLogManager (herddb.mem.MemoryCommitLogManager)9 MemoryDataStorageManager (herddb.mem.MemoryDataStorageManager)9 MemoryMetadataStorageManager (herddb.mem.MemoryMetadataStorageManager)9 CreateTableSpaceStatement (herddb.model.commands.CreateTableSpaceStatement)9 RawString (herddb.utils.RawString)9 HashMap (java.util.HashMap)9 DBManager (herddb.core.DBManager)8 DataAccessorForFullRecord (herddb.codec.DataAccessorForFullRecord)6 ScanResult (herddb.model.ScanResult)5 ProjectedDataAccessor (herddb.utils.ProjectedDataAccessor)5 HashSet (java.util.HashSet)5 SQLPlannedOperationStatement (herddb.model.commands.SQLPlannedOperationStatement)4 ScanStatement (herddb.model.commands.ScanStatement)4 RuntimeProjectedDataAccessor (herddb.model.planner.ProjectOp.ZeroCopyProjection.RuntimeProjectedDataAccessor)4 IntHolder (herddb.utils.IntHolder)4