use of com.scalar.db.io.Key in project scalardb by scalar-labs.
the class ResultImplTest method getClusteringKey_RequiredValuesGiven_ShouldReturnClusteringKey.
@Test
public void getClusteringKey_RequiredValuesGiven_ShouldReturnClusteringKey() {
// Arrange
ResultImpl result = new ResultImpl(values, TABLE_METADATA);
// Act
Optional<Key> key = result.getClusteringKey();
// Assert
assertThat(key.isPresent()).isTrue();
assertThat(key.get().get().size()).isEqualTo(1);
assertThat(key.get().get().get(0)).isEqualTo(new TextValue(ANY_NAME_2, ANY_TEXT_2));
}
use of com.scalar.db.io.Key in project scalardb by scalar-labs.
the class TableMetadataManagerTest method getTableMetadata_CalledAfterCacheExpiration_ShouldCallDistributedStorageAdminAgain.
@Test
public void getTableMetadata_CalledAfterCacheExpiration_ShouldCallDistributedStorageAdminAgain() throws ExecutionException {
// Arrange
// one second
TableMetadataManager tableMetadataManager = new TableMetadataManager(admin, 1L);
TableMetadata expectedTableMetadata = TableMetadata.newBuilder().addColumn("c1", DataType.INT).addColumn("c2", DataType.INT).addPartitionKey("c1").build();
when(admin.getTableMetadata(anyString(), anyString())).thenReturn(expectedTableMetadata);
Get get = new Get(new Key("c1", "aaa")).forNamespace("ns").forTable("tbl");
// Act
tableMetadataManager.getTableMetadata(get);
// Wait for cache to be expired
Uninterruptibles.sleepUninterruptibly(1200, TimeUnit.MILLISECONDS);
TableMetadata actualTableMetadata = tableMetadataManager.getTableMetadata(get);
// Assert
verify(admin, times(2)).getTableMetadata(anyString(), anyString());
assertThat(actualTableMetadata).isEqualTo(expectedTableMetadata);
}
use of com.scalar.db.io.Key in project scalardb by scalar-labs.
the class TableMetadataManagerTest method getTableMetadata_CalledTwice_ShouldCallDistributedStorageAdminOnlyOnce.
@Test
public void getTableMetadata_CalledTwice_ShouldCallDistributedStorageAdminOnlyOnce() throws ExecutionException {
// Arrange
TableMetadataManager tableMetadataManager = new TableMetadataManager(admin, -1);
TableMetadata expectedTableMetadata = TableMetadata.newBuilder().addColumn("c1", DataType.INT).addColumn("c2", DataType.INT).addPartitionKey("c1").build();
when(admin.getTableMetadata(anyString(), anyString())).thenReturn(expectedTableMetadata);
Get get = new Get(new Key("c1", "aaa")).forNamespace("ns").forTable("tbl");
// Act
tableMetadataManager.getTableMetadata(get);
TableMetadata actualTableMetadata = tableMetadataManager.getTableMetadata(get);
// Assert
verify(admin).getTableMetadata(anyString(), anyString());
assertThat(actualTableMetadata).isEqualTo(expectedTableMetadata);
}
use of com.scalar.db.io.Key in project scalardb by scalar-labs.
the class QueryBuilderTest method selectQueryTest.
@Test
public void selectQueryTest() throws SQLException {
SelectQuery query;
PreparedStatement preparedStatement;
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.select(Arrays.asList("c1", "c2")).from(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.empty()).build();
assertThat(query.sql()).isEqualTo(encloseSql("SELECT c1,c2 FROM n1.t1 WHERE p1=?"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.select(Collections.emptyList()).from(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value", "p2", "p2Value"), Optional.empty()).build();
assertThat(query.sql()).isEqualTo(encloseSql("SELECT * FROM n1.t1 WHERE p1=? AND p2=?"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "p2Value");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.select(Arrays.asList("c1", "c2")).from(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.of(new Key("c1", "c1Value"))).build();
assertThat(query.sql()).isEqualTo(encloseSql("SELECT c1,c2 FROM n1.t1 WHERE p1=? AND c1=?"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "c1Value");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.select(Arrays.asList("c1", "c2")).from(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.of(new Key("c1", "c1Value", "c2", "c2Value"))).build();
assertThat(query.sql()).isEqualTo(encloseSql("SELECT c1,c2 FROM n1.t1 WHERE p1=? AND c1=? AND c2=?"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "c1Value");
verify(preparedStatement).setString(3, "c2Value");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.select(Arrays.asList("c1", "c2")).from(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.of(new Key("c1", "c1StartValue")), true, Optional.of(new Key("c1", "c1EndValue")), true).build();
assertThat(query.sql()).isEqualTo(encloseSql("SELECT c1,c2 FROM n1.t1 WHERE p1=? AND c1>=? AND c1<=? ORDER BY c1 ASC,c2 DESC"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "c1StartValue");
verify(preparedStatement).setString(3, "c1EndValue");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.select(Collections.emptyList()).from(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.of(new Key("c1", "c1StartValue")), false, Optional.of(new Key("c1", "c1EndValue")), false).build();
assertThat(query.sql()).isEqualTo(encloseSql("SELECT * FROM n1.t1 WHERE p1=? AND c1>? AND c1<? ORDER BY c1 ASC,c2 DESC"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "c1StartValue");
verify(preparedStatement).setString(3, "c1EndValue");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.select(Arrays.asList("c1", "c2")).from(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.of(new Key("c1", "c1Value", "c2", "c2StartValue")), true, Optional.of(new Key("c1", "c1Value", "c2", "c2EndValue")), false).build();
assertThat(query.sql()).isEqualTo(encloseSql("SELECT c1,c2 FROM n1.t1 WHERE p1=? AND c1=? AND c2>=? AND c2<? " + "ORDER BY c1 ASC,c2 DESC"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "c1Value");
verify(preparedStatement).setString(3, "c2StartValue");
verify(preparedStatement).setString(4, "c2EndValue");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.select(Arrays.asList("c1", "c2")).from(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.of(new Key("c1", "c1StartValue")), true, Optional.of(new Key("c1", "c1EndValue")), true).orderBy(Collections.singletonList(new Scan.Ordering("c1", Scan.Ordering.Order.ASC))).build();
assertThat(query.sql()).isEqualTo(encloseSql("SELECT c1,c2 FROM n1.t1 WHERE p1=? AND c1>=? AND c1<=? ORDER BY c1 ASC,c2 DESC"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "c1StartValue");
verify(preparedStatement).setString(3, "c1EndValue");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.select(Arrays.asList("c1", "c2")).from(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.of(new Key("c1", "c1StartValue")), true, Optional.of(new Key("c1", "c1EndValue")), true).orderBy(Arrays.asList(new Scan.Ordering("c1", Scan.Ordering.Order.ASC), new Scan.Ordering("c2", Scan.Ordering.Order.DESC))).build();
assertThat(query.sql()).isEqualTo(encloseSql("SELECT c1,c2 FROM n1.t1 WHERE p1=? AND c1>=? AND c1<=? ORDER BY c1 ASC,c2 DESC"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "c1StartValue");
verify(preparedStatement).setString(3, "c1EndValue");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.select(Arrays.asList("c1", "c2")).from(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.of(new Key("c1", "c1StartValue")), true, Optional.of(new Key("c1", "c1EndValue")), true).orderBy(Collections.singletonList(new Scan.Ordering("c1", Scan.Ordering.Order.DESC))).build();
assertThat(query.sql()).isEqualTo(encloseSql("SELECT c1,c2 FROM n1.t1 WHERE p1=? AND c1>=? AND c1<=? ORDER BY c1 DESC,c2 ASC"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "c1StartValue");
verify(preparedStatement).setString(3, "c1EndValue");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.select(Arrays.asList("c1", "c2")).from(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.of(new Key("c1", "c1StartValue")), true, Optional.of(new Key("c1", "c1EndValue")), true).orderBy(Arrays.asList(new Scan.Ordering("c1", Scan.Ordering.Order.DESC), new Scan.Ordering("c2", Scan.Ordering.Order.ASC))).build();
assertThat(query.sql()).isEqualTo(encloseSql("SELECT c1,c2 FROM n1.t1 WHERE p1=? AND c1>=? AND c1<=? ORDER BY c1 DESC,c2 ASC"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "c1StartValue");
verify(preparedStatement).setString(3, "c1EndValue");
String expectedQuery;
switch(rdbEngine) {
case MYSQL:
case POSTGRESQL:
expectedQuery = "SELECT c1,c2 FROM n1.t1 WHERE p1=? AND c1>=? AND c1<=? " + "ORDER BY c1 ASC,c2 DESC LIMIT 10";
break;
case ORACLE:
expectedQuery = "SELECT c1,c2 FROM n1.t1 WHERE p1=? AND c1>=? AND c1<=? " + "ORDER BY c1 ASC,c2 DESC FETCH FIRST 10 ROWS ONLY";
break;
case SQL_SERVER:
default:
expectedQuery = "SELECT c1,c2 FROM n1.t1 WHERE p1=? AND c1>=? AND c1<=? " + "ORDER BY c1 ASC,c2 DESC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY";
break;
}
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.select(Arrays.asList("c1", "c2")).from(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.of(new Key("c1", "c1StartValue")), true, Optional.of(new Key("c1", "c1EndValue")), true).limit(10).build();
assertThat(query.sql()).isEqualTo(encloseSql(expectedQuery));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "c1StartValue");
verify(preparedStatement).setString(3, "c1EndValue");
}
use of com.scalar.db.io.Key in project scalardb by scalar-labs.
the class QueryBuilderTest method deleteQueryTest.
@Test
public void deleteQueryTest() throws SQLException {
DeleteQuery query;
PreparedStatement preparedStatement;
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.deleteFrom(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.empty()).build();
assertThat(query.sql()).isEqualTo(encloseSql("DELETE FROM n1.t1 WHERE p1=?"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.deleteFrom(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.of(new Key("c1", "c1Value"))).build();
assertThat(query.sql()).isEqualTo(encloseSql("DELETE FROM n1.t1 WHERE p1=? AND c1=?"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "c1Value");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.deleteFrom(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value", "p2", "p2Value"), Optional.of(new Key("c1", "c1Value", "c2", "c2Value"))).build();
assertThat(query.sql()).isEqualTo(encloseSql("DELETE FROM n1.t1 WHERE p1=? AND p2=? AND c1=? AND c2=?"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "p2Value");
verify(preparedStatement).setString(3, "c1Value");
verify(preparedStatement).setString(4, "c2Value");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.deleteFrom(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.of(new Key("c1", "c1Value")), Collections.singletonList(new ConditionalExpression("v1", new TextValue("v1ConditionValue"), Operator.EQ))).build();
assertThat(query.sql()).isEqualTo(encloseSql("DELETE FROM n1.t1 WHERE p1=? AND c1=? AND v1=?"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "c1Value");
verify(preparedStatement).setString(3, "v1ConditionValue");
preparedStatement = mock(PreparedStatement.class);
query = queryBuilder.deleteFrom(NAMESPACE, TABLE, TABLE_METADATA).where(new Key("p1", "p1Value"), Optional.of(new Key("c1", "c1Value")), Arrays.asList(new ConditionalExpression("v1", new TextValue("v1ConditionValue"), Operator.NE), new ConditionalExpression("v2", new TextValue("v2ConditionValue"), Operator.GTE), new ConditionalExpression("v3", new TextValue("v3ConditionValue"), Operator.LT))).build();
assertThat(query.sql()).isEqualTo(encloseSql("DELETE FROM n1.t1 WHERE p1=? AND c1=? AND v1<>? AND v2>=? AND v3<?"));
query.bind(preparedStatement);
verify(preparedStatement).setString(1, "p1Value");
verify(preparedStatement).setString(2, "c1Value");
verify(preparedStatement).setString(3, "v1ConditionValue");
verify(preparedStatement).setString(4, "v2ConditionValue");
verify(preparedStatement).setString(5, "v3ConditionValue");
}
Aggregations