Search in sources :

Example 16 with Get

use of com.scalar.db.api.Get in project scalardb by scalar-labs.

the class StorageColumnValueIntegrationTestBase method put_WithRandomValues_ShouldPutCorrectly.

@Test
public void put_WithRandomValues_ShouldPutCorrectly() throws ExecutionException {
    RANDOM.setSeed(seed);
    for (int i = 0; i < ATTEMPT_COUNT; i++) {
        // Arrange
        IntValue partitionKeyValue = (IntValue) getRandomValue(RANDOM, PARTITION_KEY, DataType.INT);
        BooleanValue col1Value = (BooleanValue) getRandomValue(RANDOM, COL_NAME1, DataType.BOOLEAN);
        IntValue col2Value = (IntValue) getRandomValue(RANDOM, COL_NAME2, DataType.INT);
        BigIntValue col3Value = (BigIntValue) getRandomValue(RANDOM, COL_NAME3, DataType.BIGINT);
        FloatValue col4Value = (FloatValue) getRandomValue(RANDOM, COL_NAME4, DataType.FLOAT);
        DoubleValue col5Value = (DoubleValue) getRandomValue(RANDOM, COL_NAME5, DataType.DOUBLE);
        TextValue col6Value = (TextValue) getRandomValue(RANDOM, COL_NAME6, DataType.TEXT);
        BlobValue col7Value = (BlobValue) getRandomValue(RANDOM, COL_NAME7, DataType.BLOB);
        Put put = new Put(new Key(partitionKeyValue)).withValue(col1Value).withValue(col2Value).withValue(col3Value).withValue(col4Value).withValue(col5Value).withValue(col6Value).withValue(col7Value).forNamespace(namespace).forTable(TABLE);
        // Act
        storage.put(put);
        // Assert
        Optional<Result> actual = storage.get(new Get(new Key(partitionKeyValue)).forNamespace(namespace).forTable(TABLE));
        assertThat(actual).isPresent();
        assertThat(actual.get().getValue(PARTITION_KEY).isPresent()).isTrue();
        assertThat(actual.get().getValue(PARTITION_KEY).get()).isEqualTo(partitionKeyValue);
        assertThat(actual.get().getValue(COL_NAME1).isPresent()).isTrue();
        assertThat(actual.get().getValue(COL_NAME1).get()).isEqualTo(col1Value);
        assertThat(actual.get().getValue(COL_NAME2).isPresent()).isTrue();
        assertThat(actual.get().getValue(COL_NAME2).get()).isEqualTo(col2Value);
        assertThat(actual.get().getValue(COL_NAME3).isPresent()).isTrue();
        assertThat(actual.get().getValue(COL_NAME3).get()).isEqualTo(col3Value);
        assertThat(actual.get().getValue(COL_NAME4).isPresent()).isTrue();
        assertThat(actual.get().getValue(COL_NAME4).get()).isEqualTo(col4Value);
        assertThat(actual.get().getValue(COL_NAME5).isPresent()).isTrue();
        assertThat(actual.get().getValue(COL_NAME5).get()).isEqualTo(col5Value);
        assertThat(actual.get().getValue(COL_NAME6).isPresent()).isTrue();
        assertThat(actual.get().getValue(COL_NAME6).get()).isEqualTo(col6Value);
        assertThat(actual.get().getValue(COL_NAME7).isPresent()).isTrue();
        assertThat(actual.get().getValue(COL_NAME7).get()).isEqualTo(col7Value);
        assertThat(actual.get().getContainedColumnNames()).isEqualTo(new HashSet<>(Arrays.asList(PARTITION_KEY, COL_NAME1, COL_NAME2, COL_NAME3, COL_NAME4, COL_NAME5, COL_NAME6, COL_NAME7)));
        assertThat(actual.get().contains(PARTITION_KEY)).isTrue();
        assertThat(actual.get().isNull(PARTITION_KEY)).isFalse();
        assertThat(actual.get().getInt(PARTITION_KEY)).isEqualTo(partitionKeyValue.get());
        assertThat(actual.get().getAsObject(PARTITION_KEY)).isEqualTo(partitionKeyValue.get());
        assertThat(actual.get().contains(COL_NAME1)).isTrue();
        assertThat(actual.get().isNull(COL_NAME1)).isFalse();
        assertThat(actual.get().getBoolean(COL_NAME1)).isEqualTo(col1Value.get());
        assertThat(actual.get().getAsObject(COL_NAME1)).isEqualTo(col1Value.get());
        assertThat(actual.get().contains(COL_NAME2)).isTrue();
        assertThat(actual.get().isNull(COL_NAME2)).isFalse();
        assertThat(actual.get().getInt(COL_NAME2)).isEqualTo(col2Value.get());
        assertThat(actual.get().getAsObject(COL_NAME2)).isEqualTo(col2Value.get());
        assertThat(actual.get().contains(COL_NAME3)).isTrue();
        assertThat(actual.get().isNull(COL_NAME3)).isFalse();
        assertThat(actual.get().getBigInt(COL_NAME3)).isEqualTo(col3Value.get());
        assertThat(actual.get().getAsObject(COL_NAME3)).isEqualTo(col3Value.get());
        assertThat(actual.get().contains(COL_NAME4)).isTrue();
        assertThat(actual.get().isNull(COL_NAME4)).isFalse();
        assertThat(actual.get().getFloat(COL_NAME4)).isEqualTo(col4Value.get());
        assertThat(actual.get().getAsObject(COL_NAME4)).isEqualTo(col4Value.get());
        assertThat(actual.get().contains(COL_NAME5)).isTrue();
        assertThat(actual.get().isNull(COL_NAME5)).isFalse();
        assertThat(actual.get().getDouble(COL_NAME5)).isEqualTo(col5Value.get());
        assertThat(actual.get().getAsObject(COL_NAME5)).isEqualTo(col5Value.get());
        assertThat(actual.get().contains(COL_NAME6)).isTrue();
        assertThat(actual.get().isNull(COL_NAME6)).isFalse();
        assertThat(actual.get().getText(COL_NAME6)).isEqualTo(col6Value.get().get());
        assertThat(actual.get().getAsObject(COL_NAME6)).isEqualTo(col6Value.get().get());
        assertThat(actual.get().contains(COL_NAME7)).isTrue();
        assertThat(actual.get().isNull(COL_NAME7)).isFalse();
        assertThat(actual.get().getBlob(COL_NAME7)).isEqualTo(ByteBuffer.wrap(col7Value.get().get()));
        assertThat(actual.get().getBlobAsByteBuffer(COL_NAME7)).isEqualTo(ByteBuffer.wrap(col7Value.get().get()));
        assertThat(actual.get().getBlobAsBytes(COL_NAME7)).isEqualTo(col7Value.get().get());
        assertThat(actual.get().getAsObject(COL_NAME7)).isEqualTo(ByteBuffer.wrap(col7Value.get().get()));
    }
}
Also used : Put(com.scalar.db.api.Put) BlobValue(com.scalar.db.io.BlobValue) Result(com.scalar.db.api.Result) DoubleValue(com.scalar.db.io.DoubleValue) TextValue(com.scalar.db.io.TextValue) BooleanValue(com.scalar.db.io.BooleanValue) Get(com.scalar.db.api.Get) FloatValue(com.scalar.db.io.FloatValue) IntValue(com.scalar.db.io.IntValue) BigIntValue(com.scalar.db.io.BigIntValue) Key(com.scalar.db.io.Key) BigIntValue(com.scalar.db.io.BigIntValue) Test(org.junit.Test)

Example 17 with Get

use of com.scalar.db.api.Get 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 18 with Get

use of com.scalar.db.api.Get 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 19 with Get

use of com.scalar.db.api.Get in project scalardb by scalar-labs.

the class StorageWithReservedKeywordIntegrationTestBase method put_WithReservedKeywordAndSinglePutGiven_ShouldStoreProperly.

@Test
public void put_WithReservedKeywordAndSinglePutGiven_ShouldStoreProperly() throws ExecutionException {
    // Arrange
    int pKey = 0;
    int cKey = 0;
    List<Put> puts = preparePuts();
    Key partitionKey = new Key(columnName1, pKey);
    Key clusteringKey = new Key(columnName4, cKey);
    Get get = new Get(partitionKey, clusteringKey);
    // Act
    storage.put(puts.get(pKey * 2 + cKey));
    // Assert
    Optional<Result> actual = storage.get(get);
    assertThat(actual.isPresent()).isTrue();
    assertThat(actual.get().getValue(columnName1)).isEqualTo(Optional.of(new IntValue(columnName1, pKey)));
    assertThat(actual.get().getValue(columnName2)).isEqualTo(Optional.of(new TextValue(columnName2, Integer.toString(pKey + cKey))));
    assertThat(actual.get().getValue(columnName3)).isEqualTo(Optional.of(new IntValue(columnName3, pKey + cKey)));
    assertThat(actual.get().getValue(columnName4)).isEqualTo(Optional.of(new IntValue(columnName4, cKey)));
    assertThat(actual.get().getValue(columnName5)).isEqualTo(Optional.of(new BooleanValue(columnName5, cKey % 2 == 0)));
}
Also used : TextValue(com.scalar.db.io.TextValue) Get(com.scalar.db.api.Get) BooleanValue(com.scalar.db.io.BooleanValue) IntValue(com.scalar.db.io.IntValue) Put(com.scalar.db.api.Put) Key(com.scalar.db.io.Key) Result(com.scalar.db.api.Result) Test(org.junit.Test)

Example 20 with Get

use of com.scalar.db.api.Get in project scalardb by scalar-labs.

the class StorageWithReservedKeywordIntegrationTestBase method put_PutWithReservedKeywordAndIfGivenWhenSuchRecordExists_ShouldUpdateRecord.

@Test
public void put_PutWithReservedKeywordAndIfGivenWhenSuchRecordExists_ShouldUpdateRecord() throws ExecutionException {
    // Arrange
    int pKey = 0;
    int cKey = 0;
    List<Put> puts = preparePuts();
    Get get = prepareGet(pKey, cKey);
    // Act Assert
    storage.put(puts.get(0));
    puts.get(0).withCondition(new PutIf(new ConditionalExpression(columnName3, new IntValue(pKey + cKey), ConditionalExpression.Operator.EQ)));
    puts.get(0).withValue(columnName3, Integer.MAX_VALUE);
    assertThatCode(() -> storage.put(puts.get(0))).doesNotThrowAnyException();
    // Assert
    Optional<Result> actual = storage.get(get);
    assertThat(actual.isPresent()).isTrue();
    Result result = actual.get();
    assertThat(result.getValue(columnName1)).isEqualTo(Optional.of(new IntValue(columnName1, pKey)));
    assertThat(result.getValue(columnName4)).isEqualTo(Optional.of(new IntValue(columnName4, cKey)));
    assertThat(result.getValue(columnName3)).isEqualTo(Optional.of(new IntValue(columnName3, Integer.MAX_VALUE)));
}
Also used : PutIf(com.scalar.db.api.PutIf) Get(com.scalar.db.api.Get) ConditionalExpression(com.scalar.db.api.ConditionalExpression) IntValue(com.scalar.db.io.IntValue) Put(com.scalar.db.api.Put) Result(com.scalar.db.api.Result) Test(org.junit.Test)

Aggregations

Get (com.scalar.db.api.Get)286 Test (org.junit.jupiter.api.Test)130 Result (com.scalar.db.api.Result)129 Key (com.scalar.db.io.Key)126 Test (org.junit.Test)88 Put (com.scalar.db.api.Put)86 GrpcTransaction (com.scalar.db.transaction.rpc.GrpcTransaction)32 Delete (com.scalar.db.api.Delete)28 IntValue (com.scalar.db.io.IntValue)28 Assertions.catchThrowable (org.assertj.core.api.Assertions.catchThrowable)21 TextValue (com.scalar.db.io.TextValue)16 ConditionalExpression (com.scalar.db.api.ConditionalExpression)13 PartitionKey (com.azure.cosmos.models.PartitionKey)12 TableMetadata (com.scalar.db.api.TableMetadata)10 BooleanValue (com.scalar.db.io.BooleanValue)10 PutIf (com.scalar.db.api.PutIf)8 BigIntValue (com.scalar.db.io.BigIntValue)7 HashMap (java.util.HashMap)7 BlobValue (com.scalar.db.io.BlobValue)6 DistributedTransactionServiceWithConsensusCommitIntegrationTest.prepareGet (com.scalar.db.server.DistributedTransactionServiceWithConsensusCommitIntegrationTest.prepareGet)6