2 using System.Collections.Generic;
3 using System.Threading.Tasks;
15 [Trait(
"Category",
"Integration")]
16 [Trait(
"Category",
"Async")]
22 private async Task<string> SetupShardedTableAsync(
TestContext ctx,
int numRecords)
25 var typeDef =
@"{""type"":""record"",""name"":""simple_record"",""fields"":[{""name"":""id"",""type"":""int""},{""name"":""name_sk"",""type"":""string""},{""name"":""value_sk"",""type"":""int""},{""name"":""score"",""type"":""double""}]}";
27 var properties =
new Dictionary<string, IList<string>>
29 {
"id",
new List<string>() },
30 {
"name_sk",
new List<string> {
"shard_key" } },
31 {
"value_sk",
new List<string> {
"shard_key" } },
32 {
"score",
new List<string>() }
35 var typeResp = await ctx.
Kinetica.CreateTypeAsync(typeDef,
"test_retriever_type", properties,
new Dictionary<string, string>());
38 await ctx.
Kinetica.CreateTableAsync(tableName, typeResp.type_id,
new Dictionary<string, string>());
41 foreach (var col
in new[] {
"name_sk",
"value_sk" })
45 await ctx.
Kinetica.AlterTableAsync(tableName,
"create_index", col,
new Dictionary<string, string>());
51 for (
int i = 0; i < numRecords; i++)
53 var nameSk = $
"name_{i:D5}";
55 var score = (i % 10) * 10.0;
56 await ctx.
Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, name_sk, value_sk, score) VALUES ({i}, '{nameSk}', {valueSk}, {score})");
65 using var ctx =
new TestContext(
"async_get_records_basic");
67 var tableName = await SetupShardedTableAsync(ctx, numRecords);
70 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName}", 0, -9999);
71 Console.WriteLine($
"Table has {response.total_number_of_records} records (expected {numRecords})");
73 Assert.Equal(numRecords, response.total_number_of_records);
74 Assert.Equal(numRecords, response.data.Count);
80 using var ctx =
new TestContext(
"async_get_records_key");
82 var tableName = await SetupShardedTableAsync(ctx, numRecords);
85 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName} WHERE name_sk = 'name_00005' AND value_sk = 5", 0, -9999);
87 Console.WriteLine($
"Query by shard key returned {response.total_number_of_records} records");
88 Assert.Equal(1, response.total_number_of_records);
94 using var ctx =
new TestContext(
"async_get_records_expr");
95 var tableName = await SetupShardedTableAsync(ctx, 50);
98 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName} WHERE id < 25", 0, -9999);
99 Console.WriteLine($
"Query with expression returned {response.total_number_of_records} records (expected 25)");
101 Assert.Equal(25, response.total_number_of_records);
104 var response2 = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName} WHERE id >= 40 AND score < 50", 0, -9999);
105 Console.WriteLine($
"Query with combined expression returned {response2.total_number_of_records} records");
107 Assert.True(response2.total_number_of_records >= 0);
113 using var ctx =
new TestContext(
"async_get_records_multi");
115 var tableName = await SetupShardedTableAsync(ctx, numRecords);
120 for (
int i = 0; i < 10; i++)
122 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName} WHERE name_sk = 'name_{i:D5}' AND value_sk = {i}", 0, -9999);
123 totalFound += (int)response.total_number_of_records;
126 Console.WriteLine($
"Multi-key retrieval: found {totalFound} records");
127 Assert.Equal(10, totalFound);
133 using var ctx =
new TestContext(
"async_get_records_sort");
134 var tableName = await SetupShardedTableAsync(ctx, 25);
137 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName} ORDER BY score DESC, id ASC", 0, -9999);
139 Console.WriteLine($
"Sorted query returned {response.total_number_of_records} records");
140 Assert.Equal(25, response.total_number_of_records);
146 using var ctx =
new TestContext(
"async_get_records_page");
148 var tableName = await SetupShardedTableAsync(ctx, numRecords);
151 var page1 = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName}", 0, 10);
152 Assert.Equal(50, page1.total_number_of_records);
153 Assert.Equal(10, page1.data.Count);
154 Assert.True(page1.has_more_records);
157 var page2 = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName}", 10, 10);
158 Assert.Equal(10, page2.data.Count);
159 Assert.True(page2.has_more_records);
162 var lastPage = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName}", 40, 10);
163 Assert.Equal(10, lastPage.data.Count);
164 Assert.False(lastPage.has_more_records);
170 using var ctx =
new TestContext(
"async_get_records_empty");
171 var tableName = await SetupShardedTableAsync(ctx, 0);
173 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName}", 0, -9999);
175 Assert.Equal(0, response.total_number_of_records);
176 Assert.Empty(response.data);
177 Assert.False(response.has_more_records);
183 using var ctx =
new TestContext(
"async_get_records_offset");
184 var tableName = await SetupShardedTableAsync(ctx, 10);
187 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName}", 100, 10);
189 Assert.Equal(10, response.total_number_of_records);
190 Assert.Empty(response.data);
196 using var ctx =
new TestContext(
"async_get_records_cols");
197 var tableName = await SetupShardedTableAsync(ctx, 20);
200 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT id, score FROM {tableName} WHERE id < 10", 0, -9999);
202 Assert.Equal(10, response.total_number_of_records);
203 Assert.Equal(10, response.data.Count);
209 using var ctx =
new TestContext(
"async_get_records_agg");
210 var tableName = await SetupShardedTableAsync(ctx, 100);
213 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT COUNT(*), AVG(score) FROM {tableName}", 0, -9999);
215 Assert.Equal(1, response.total_number_of_records);
216 Assert.Single(response.data);
222 using var ctx =
new TestContext(
"async_get_records_group");
223 var tableName = await SetupShardedTableAsync(ctx, 30);
226 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT score, COUNT(*) as cnt FROM {tableName} GROUP BY score ORDER BY score", 0, -9999);
228 Assert.Equal(10, response.total_number_of_records);
async Task TestGetRecordsBasicAsync()
Test context that manages schema and cleanup for integration tests.
async Task TestGetRecordsWithSortingAsync()
async Task TestGetRecordsEmptyTableAsync()
kinetica.Kinetica Kinetica
async Task TestGetRecordsPaginationAsync()
async Task TestGetRecordsGroupByAsync()
string QualifiedTable(string tableName)
Get a qualified table name (schema.table).
Async integration tests for record retrieval.
async Task TestGetRecordsByShardKeyAsync()
async Task TestGetRecordsWithExpressionAsync()
async Task TestGetRecordsSpecificColumnsAsync()
async Task TestGetRecordsOffsetBeyondEndAsync()
async Task TestGetRecordsWithAggregationAsync()
async Task TestGetRecordsMultipleKeysAsync()