Example #1
0
    public async Task TestInsertIgnore()
    {
        var builder = ClientTestUtil.GetBasicSchema()
                      .SetTableName(nameof(TestInsertIgnore));

        var table = await _client.CreateTableAsync(builder);

        // Test insert ignore implements normal insert.
        var insert = ClientTestUtil.CreateBasicSchemaInsertIgnore(table, 1);
        await _client.WriteAsync(new[] { insert });

        var rowStrings = await ClientTestUtil.ScanTableToStringsAsync(_client, table);

        var rowString = Assert.Single(rowStrings);

        Assert.Equal(
            "INT32 key=1, INT32 column1_i=2, INT32 column2_i=3, " +
            "STRING column3_s=a string, BOOL column4_b=True", rowString);

        // Test insert ignore does not return a row error.
        await _client.WriteAsync(new[] { insert });

        rowStrings = await ClientTestUtil.ScanTableToStringsAsync(_client, table);

        rowString = Assert.Single(rowStrings);
        Assert.Equal(
            "INT32 key=1, INT32 column1_i=2, INT32 column2_i=3, " +
            "STRING column3_s=a string, BOOL column4_b=True", rowString);
    }
Example #2
0
    public async Task TestInsertAfterInsertIgnoreHasRowError()
    {
        var builder = ClientTestUtil.GetBasicSchema()
                      .SetTableName(nameof(TestInsertAfterInsertIgnoreHasRowError));

        var table = await _client.CreateTableAsync(builder);

        var rows = new[]
        {
            ClientTestUtil.CreateBasicSchemaInsertIgnore(table, 1),
            ClientTestUtil.CreateBasicSchemaInsert(table, 1)
        };

        var exception = await Assert.ThrowsAsync <KuduWriteException>(
            () => _client.WriteAsync(rows));

        var rowError = Assert.Single(exception.PerRowErrors);

        Assert.True(rowError.IsAlreadyPresent);

        var rowStrings = await ClientTestUtil.ScanTableToStringsAsync(_client, table);

        var rowString = Assert.Single(rowStrings);

        Assert.Equal(
            "INT32 key=1, INT32 column1_i=2, INT32 column2_i=3, " +
            "STRING column3_s=a string, BOOL column4_b=True", rowString);
    }
Example #3
0
    public async Task TestAlterAddColumns()
    {
        KuduTable table = await CreateTableAsync();

        await InsertRowsAsync(table, 0, 100);

        Assert.Equal(100, await ClientTestUtil.CountRowsAsync(_client, table));

        await _client.AlterTableAsync(new AlterTableBuilder(table)
                                      .AddColumn("addNonNull", KuduType.Int32, opt => opt
                                                 .Nullable(false)
                                                 .DefaultValue(100))
                                      .AddColumn("addNullable", KuduType.Int32)
                                      .AddColumn("addNullableDef", KuduType.Int32, opt => opt
                                                 .DefaultValue(200)));

        // Reopen table for the new schema.
        table = await _client.OpenTableAsync(_tableName);

        Assert.Equal(5, table.Schema.Columns.Count);

        // Add a row with addNullableDef=null
        var insert = table.NewInsert();

        insert.SetInt32("c0", 101);
        insert.SetInt32("c1", 101);
        insert.SetInt32("addNonNull", 101);
        insert.SetInt32("addNullable", 101);
        insert.SetNull("addNullableDef");
        await _session.EnqueueAsync(insert);

        await _session.FlushAsync();

        // Check defaults applied, and that row key=101
        var results = await ClientTestUtil.ScanTableToStringsAsync(_client, table);

        var expected = new List <string>(101);

        for (int i = 0; i < 100; i++)
        {
            expected.Add($"INT32 c0={i}, INT32 c1={i}, INT32 addNonNull=100, " +
                         "INT32 addNullable=NULL, INT32 addNullableDef=200");
        }

        expected.Add("INT32 c0=101, INT32 c1=101, INT32 addNonNull=101, " +
                     "INT32 addNullable=101, INT32 addNullableDef=NULL");

        Assert.Equal(
            expected.OrderBy(r => r),
            results.OrderBy(r => r));
    }
Example #4
0
    public async Task TestDeleteIgnore()
    {
        var builder = ClientTestUtil.GetBasicSchema()
                      .SetTableName(nameof(TestDeleteIgnore));

        var table = await _client.CreateTableAsync(builder);

        // Test delete ignore does not return a row error.
        var delete = ClientTestUtil.CreateBasicSchemaDeleteIgnore(table, 1);
        await _client.WriteAsync(new[] { delete });

        var insert = ClientTestUtil.CreateBasicSchemaInsert(table, 1);
        await _client.WriteAsync(new[] { insert });

        Assert.Single(await ClientTestUtil.ScanTableToStringsAsync(_client, table));

        // Test delete ignore implements normal delete.
        await _client.WriteAsync(new[] { delete });

        Assert.Empty(await ClientTestUtil.ScanTableToStringsAsync(_client, table));
    }
Example #5
0
    public async Task TestInsertIgnoreAfterInsertHasNoRowError()
    {
        var builder = ClientTestUtil.GetBasicSchema()
                      .SetTableName(nameof(TestInsertIgnoreAfterInsertHasNoRowError));

        var table = await _client.CreateTableAsync(builder);

        var rows = new[]
        {
            ClientTestUtil.CreateBasicSchemaInsert(table, 1),
            ClientTestUtil.CreateBasicSchemaUpsert(table, 1, 1, false),
            ClientTestUtil.CreateBasicSchemaInsertIgnore(table, 1)
        };

        await _client.WriteAsync(rows);

        var rowStrings = await ClientTestUtil.ScanTableToStringsAsync(_client, table);

        var rowString = Assert.Single(rowStrings);

        Assert.Equal(
            "INT32 key=1, INT32 column1_i=1, INT32 column2_i=3, " +
            "STRING column3_s=a string, BOOL column4_b=True", rowString);
    }