Search in sources :

Example 36 with Key

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));
}
Also used : TextValue(com.scalar.db.io.TextValue) Key(com.scalar.db.io.Key) Test(org.junit.Test)

Example 37 with Key

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);
}
Also used : TableMetadata(com.scalar.db.api.TableMetadata) Get(com.scalar.db.api.Get) Key(com.scalar.db.io.Key) Test(org.junit.Test)

Example 38 with Key

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);
}
Also used : TableMetadata(com.scalar.db.api.TableMetadata) Get(com.scalar.db.api.Get) Key(com.scalar.db.io.Key) Test(org.junit.Test)

Example 39 with Key

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");
}
Also used : PreparedStatement(java.sql.PreparedStatement) Key(com.scalar.db.io.Key) Test(org.junit.Test)

Example 40 with Key

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");
}
Also used : TextValue(com.scalar.db.io.TextValue) ConditionalExpression(com.scalar.db.api.ConditionalExpression) PreparedStatement(java.sql.PreparedStatement) Key(com.scalar.db.io.Key) Test(org.junit.Test)

Aggregations

Key (com.scalar.db.io.Key)603 Test (org.junit.jupiter.api.Test)391 Put (com.scalar.db.api.Put)211 Scan (com.scalar.db.api.Scan)145 Get (com.scalar.db.api.Get)134 Delete (com.scalar.db.api.Delete)118 Result (com.scalar.db.api.Result)94 Test (org.junit.Test)90 TextValue (com.scalar.db.io.TextValue)88 IntValue (com.scalar.db.io.IntValue)81 BooleanValue (com.scalar.db.io.BooleanValue)51 HashMap (java.util.HashMap)42 ExpectedResult (com.scalar.db.util.TestUtils.ExpectedResult)40 ArrayList (java.util.ArrayList)39 Value (com.scalar.db.io.Value)38 DoubleValue (com.scalar.db.io.DoubleValue)35 AttributeValue (software.amazon.awssdk.services.dynamodb.model.AttributeValue)31 QueryRequest (software.amazon.awssdk.services.dynamodb.model.QueryRequest)29 KeyBytesEncoder (com.scalar.db.storage.dynamo.bytes.KeyBytesEncoder)27 ByteBuffer (java.nio.ByteBuffer)27