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);
}
}
}
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;
}
}
}
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);
}
}
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))));
}
}
}
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());
}
}
}
}
Aggregations