2 using System.Collections.Generic;
3 using System.Threading.Tasks;
14 [Trait(
"Category",
"Integration")]
15 [Trait(
"Category",
"Async")]
21 using var ctx =
new TestContext(
"async_insert_json");
24 var typeDef =
@"{""type"":""record"",""name"":""test_rec"",""fields"":[{""name"":""id"",""type"":""int""},{""name"":""name"",""type"":""string""},{""name"":""value"",""type"":""double""}]}";
25 var props =
new Dictionary<string, IList<string>>
27 {
"id",
new List<string> {
"int",
"primary_key" } }
30 var typeResp = await ctx.Kinetica.CreateTypeAsync(typeDef,
"async_insert_test_type", props,
new Dictionary<string, string>());
33 var tableName = ctx.QualifiedTable(
"test_table_async");
34 await ctx.Kinetica.CreateTableAsync(tableName, typeResp.type_id,
new Dictionary<string, string>());
37 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, name, value) VALUES (1, 'Alice', 1.1)");
38 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, name, value) VALUES (2, 'Bob', 2.2)");
39 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, name, value) VALUES (3, 'Charlie', 3.3)");
42 var showTableResp = await ctx.Kinetica.ShowTableAsync(tableName,
new Dictionary<string, string> { {
"get_sizes",
"true" } });
43 Assert.Equal(3, showTableResp.total_size);
49 using var ctx =
new TestContext(
"async_insert_update_pk");
52 var typeDef =
@"{""type"":""record"",""name"":""pk_rec"",""fields"":[{""name"":""id"",""type"":""int""},{""name"":""value"",""type"":""string""}]}";
53 var props =
new Dictionary<string, IList<string>>
55 {
"id",
new List<string> {
"int",
"primary_key" } }
58 var typeResp = await ctx.Kinetica.CreateTypeAsync(typeDef,
"async_pk_test_type", props,
new Dictionary<string, string>());
60 var tableName = ctx.QualifiedTable(
"pk_table_async");
61 await ctx.Kinetica.CreateTableAsync(tableName, typeResp.type_id,
new Dictionary<string, string>());
64 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, value) VALUES (1, 'original')");
65 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, value) VALUES (2, 'data')");
68 var showTableResp = await ctx.Kinetica.ShowTableAsync(tableName,
new Dictionary<string, string> { {
"get_sizes",
"true" } });
69 Assert.Equal(2, showTableResp.total_size);
72 await ctx.Kinetica.ExecuteSqlAsync($
"UPDATE {tableName} SET value = 'updated' WHERE id = 1");
75 var showTableResp2 = await ctx.Kinetica.ShowTableAsync(tableName,
new Dictionary<string, string> { {
"get_sizes",
"true" } });
76 Assert.Equal(2, showTableResp2.total_size);
79 var selectResp = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT value FROM {tableName} WHERE id = 1", 0, -9999);
80 Assert.Equal(1, selectResp.total_number_of_records);
86 using var ctx =
new TestContext(
"async_insert_large");
89 await ctx.Kinetica.ExecuteSqlAsync($
"CREATE TABLE {ctx.QualifiedTable("batch_table_async
")} (id INT NOT NULL, x DOUBLE, y DOUBLE, PRIMARY KEY (id))");
91 var tableName = ctx.QualifiedTable(
"batch_table_async");
95 var insertTasks =
new List<Task>();
97 for (
int i = 0; i < numRecords; i++)
100 insertTasks.Add(ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, x, y) VALUES ({recordId}, {recordId * 0.1}, {recordId * 0.2})"));
103 if (insertTasks.Count >= 10 || i == numRecords - 1)
105 await Task.WhenAll(insertTasks);
111 var showTableResp = await ctx.Kinetica.ShowTableAsync(tableName,
new Dictionary<string, string> { {
"get_sizes",
"true" } });
112 Assert.Equal(numRecords, showTableResp.total_size);
118 using var ctx =
new TestContext(
"async_parallel_insert");
121 var typeDef =
@"{""type"":""record"",""name"":""parallel_rec"",""fields"":[{""name"":""id"",""type"":""int""},{""name"":""data"",""type"":""string""}]}";
122 var props =
new Dictionary<string, IList<string>>
124 {
"id",
new List<string> {
"int",
"primary_key" } }
127 var typeResp = await ctx.Kinetica.CreateTypeAsync(typeDef,
"parallel_type", props,
new Dictionary<string, string>());
130 var tasks =
new List<Task>();
131 for (
int tableNum = 0; tableNum < 5; tableNum++)
133 int capturedTableNum = tableNum;
134 tasks.Add(Task.Run(async () =>
136 var tableName = ctx.QualifiedTable($
"parallel_table_{capturedTableNum}");
137 await ctx.Kinetica.CreateTableAsync(tableName, typeResp.type_id,
new Dictionary<string, string>());
140 for (
int i = 0; i < 10; i++)
142 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, data) VALUES ({i}, 'data_{i}')");
146 var showResp = await ctx.Kinetica.ShowTableAsync(tableName,
new Dictionary<string, string> { {
"get_sizes",
"true" } });
147 Assert.Equal(10, showResp.total_size);
151 await Task.WhenAll(tasks);
Test context that manages schema and cleanup for integration tests.
async Task TestParallelInsertDifferentTablesAsync()
Async tests for insert_records and related endpoints.
async Task TestInsertRecordsJsonAsync()
async Task TestInsertRecordsLargeBatchAsync()
async Task TestInsertRecordsUpdateOnExistingPkAsync()