2 using System.Collections.Generic;
17 [Trait(
"Category",
"Integration")]
23 private string SetupShardedTable(
TestContext ctx,
int numRecords)
26 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""}]}";
28 var properties =
new Dictionary<string, IList<string>>
30 {
"id",
new List<string>() },
31 {
"name_sk",
new List<string> {
"shard_key" } },
32 {
"value_sk",
new List<string> {
"shard_key" } },
33 {
"score",
new List<string>() }
36 var typeResp = ctx.
Kinetica.
createType(typeDef,
"test_retriever_type", properties,
new Dictionary<string, string>());
42 foreach (var col
in new[] {
"name_sk",
"value_sk" })
46 ctx.
Kinetica.
alterTable(tableName,
"create_index", col,
new Dictionary<string, string>());
52 for (
int i = 0; i < numRecords; i++)
54 var nameSk = $
"name_{i:D5}";
56 var score = (i % 10) * 10.0;
57 ctx.
Kinetica.
executeSql($
"INSERT INTO {tableName} (id, name_sk, value_sk, score) VALUES ({i}, '{nameSk}', {valueSk}, {score})");
66 using var ctx =
new TestContext(
"get_records_basic");
68 var tableName = SetupShardedTable(ctx, numRecords);
71 var response = ctx.Kinetica.executeSql($
"SELECT * FROM {tableName}", 0, -9999);
72 Console.WriteLine($
"Table has {response.total_number_of_records} records (expected {numRecords})");
74 Assert.Equal(numRecords, response.total_number_of_records);
75 Assert.Equal(numRecords, response.data.Count);
83 var tableName = SetupShardedTable(ctx, numRecords);
86 var response = ctx.Kinetica.executeSql($
"SELECT * FROM {tableName} WHERE name_sk = 'name_00005' AND value_sk = 5", 0, -9999);
88 Console.WriteLine($
"Query by shard key returned {response.total_number_of_records} records");
89 Assert.Equal(1, response.total_number_of_records);
95 using var ctx =
new TestContext(
"get_records_expr");
96 var tableName = SetupShardedTable(ctx, 50);
99 var response = ctx.Kinetica.executeSql($
"SELECT * FROM {tableName} WHERE id < 25", 0, -9999);
100 Console.WriteLine($
"Query with expression returned {response.total_number_of_records} records (expected 25)");
102 Assert.Equal(25, response.total_number_of_records);
105 var response2 = ctx.Kinetica.executeSql($
"SELECT * FROM {tableName} WHERE id >= 40 AND score < 50", 0, -9999);
106 Console.WriteLine($
"Query with combined expression returned {response2.total_number_of_records} records");
108 Assert.True(response2.total_number_of_records >= 0);
114 using var ctx =
new TestContext(
"get_records_multi");
116 var tableName = SetupShardedTable(ctx, numRecords);
121 for (
int i = 0; i < 10; i++)
123 var response = ctx.Kinetica.executeSql($
"SELECT * FROM {tableName} WHERE name_sk = 'name_{i:D5}' AND value_sk = {i}", 0, -9999);
124 totalFound += (int)response.total_number_of_records;
127 Console.WriteLine($
"Multi-key retrieval: found {totalFound} records");
128 Assert.Equal(10, totalFound);
134 using var ctx =
new TestContext(
"get_records_sort");
135 var tableName = SetupShardedTable(ctx, 25);
138 var response = ctx.Kinetica.executeSql($
"SELECT * FROM {tableName} ORDER BY score DESC, id ASC", 0, -9999);
140 Console.WriteLine($
"Sorted query returned {response.total_number_of_records} records");
141 Assert.Equal(25, response.total_number_of_records);
147 using var ctx =
new TestContext(
"get_records_page");
149 var tableName = SetupShardedTable(ctx, numRecords);
152 var page1 = ctx.Kinetica.executeSql($
"SELECT * FROM {tableName}", 0, 10);
153 Assert.Equal(50, page1.total_number_of_records);
154 Assert.Equal(10, page1.data.Count);
155 Assert.True(page1.has_more_records);
158 var page2 = ctx.Kinetica.executeSql($
"SELECT * FROM {tableName}", 10, 10);
159 Assert.Equal(10, page2.data.Count);
160 Assert.True(page2.has_more_records);
163 var lastPage = ctx.Kinetica.executeSql($
"SELECT * FROM {tableName}", 40, 10);
164 Assert.Equal(10, lastPage.data.Count);
165 Assert.False(lastPage.has_more_records);
171 using var ctx =
new TestContext(
"get_records_empty");
172 var tableName = SetupShardedTable(ctx, 0);
174 var response = ctx.Kinetica.executeSql($
"SELECT * FROM {tableName}", 0, -9999);
176 Assert.Equal(0, response.total_number_of_records);
177 Assert.Empty(response.data);
178 Assert.False(response.has_more_records);
184 using var ctx =
new TestContext(
"get_records_offset");
185 var tableName = SetupShardedTable(ctx, 10);
188 var response = ctx.Kinetica.executeSql($
"SELECT * FROM {tableName}", 100, 10);
190 Assert.Equal(10, response.total_number_of_records);
191 Assert.Empty(response.data);
197 using var ctx =
new TestContext(
"get_records_cols");
198 var tableName = SetupShardedTable(ctx, 20);
201 var response = ctx.Kinetica.executeSql($
"SELECT id, score FROM {tableName} WHERE id < 10", 0, -9999);
203 Assert.Equal(10, response.total_number_of_records);
204 Assert.Equal(10, response.data.Count);
210 using var ctx =
new TestContext(
"get_records_agg");
211 var tableName = SetupShardedTable(ctx, 100);
214 var response = ctx.Kinetica.executeSql($
"SELECT COUNT(*), AVG(score) FROM {tableName}", 0, -9999);
216 Assert.Equal(1, response.total_number_of_records);
217 Assert.Single(response.data);
223 using var ctx =
new TestContext(
"get_records_group");
224 var tableName = SetupShardedTable(ctx, 30);
227 var response = ctx.Kinetica.executeSql($
"SELECT score, COUNT(*) as cnt FROM {tableName} GROUP BY score ORDER BY score", 0, -9999);
229 Assert.Equal(10, response.total_number_of_records);
void TestGetRecordsBasic()
void TestGetRecordsSpecificColumns()
CreateTableResponse createTable(CreateTableRequest request_)
Creates a new table with the given type (definition of columns).
void TestGetRecordsPagination()
ExecuteSqlResponse executeSql(ExecuteSqlRequest request_)
Execute a SQL statement (query, DML, or DDL).
void TestGetRecordsWithExpression()
void TestGetRecordsGroupBy()
void TestGetRecordsMultipleKeys()
kinetica.Kinetica Kinetica
void TestGetRecordsByShardKey()
void TestGetRecordsWithAggregation()
Test context that manages schema and cleanup for integration tests.
void TestGetRecordsEmptyTable()
CreateTypeResponse createType(CreateTypeRequest request_)
Creates a new type describing the columns of a table.
void TestGetRecordsOffsetBeyondEnd()
AlterTableResponse alterTable(AlterTableRequest request_)
Apply various modifications to a table or view.
Integration tests for record retrieval.
string QualifiedTable(string tableName)
Get a qualified table name (schema.table).
void TestGetRecordsWithSorting()