2 using System.Collections.Generic;
4 using System.Threading.Tasks;
15 [Trait(
"Category",
"Integration")]
16 [Trait(
"Category",
"Async")]
22 using var ctx =
new TestContext(
"async_sql_select");
25 await ctx.Kinetica.ExecuteSqlAsync($
@" 26 CREATE TABLE {ctx.QualifiedTable("sql_test
")} 27 (id INT NOT NULL, name VARCHAR(64), value DOUBLE, PRIMARY KEY (id)) 30 var tableName = ctx.QualifiedTable(
"sql_test");
33 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, name, value) VALUES (1, 'Alice', 10.5)");
34 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, name, value) VALUES (2, 'Bob', 20.7)");
35 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, name, value) VALUES (3, 'Charlie', 30.9)");
38 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName} ORDER BY id");
40 Assert.Equal(3, response.total_number_of_records);
41 Assert.True(response.has_more_records ==
false);
49 await ctx.Kinetica.ExecuteSqlAsync($
@" 50 CREATE TABLE {ctx.QualifiedTable("limit_test
")} 51 (id INT NOT NULL, data VARCHAR(32), PRIMARY KEY (id)) 54 var tableName = ctx.QualifiedTable(
"limit_test");
57 for (
int i = 0; i < 50; i++)
59 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, data) VALUES ({i}, 'record_{i}')");
63 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName} LIMIT 10");
65 Assert.Equal(10, response.total_number_of_records);
71 using var ctx =
new TestContext(
"async_sql_aggregate");
73 await ctx.Kinetica.ExecuteSqlAsync($
@" 74 CREATE TABLE {ctx.QualifiedTable("agg_test
")} 75 (id INT NOT NULL, category VARCHAR(32), amount DOUBLE, PRIMARY KEY (id)) 78 var tableName = ctx.QualifiedTable(
"agg_test");
81 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, category, amount) VALUES (1, 'A', 100.0)");
82 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, category, amount) VALUES (2, 'A', 150.0)");
83 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, category, amount) VALUES (3, 'B', 200.0)");
84 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, category, amount) VALUES (4, 'B', 250.0)");
87 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT category, SUM(amount) as total FROM {tableName} GROUP BY category ORDER BY category");
89 Assert.Equal(2, response.total_number_of_records);
95 using var ctx =
new TestContext(
"async_sql_create_drop");
97 var tableName = ctx.QualifiedTable(
"temp_table");
100 await ctx.Kinetica.ExecuteSqlAsync($
"CREATE TABLE {tableName} (id INT, data VARCHAR(32))");
103 var hasTableResp = await ctx.Kinetica.HasTableAsync(tableName,
new Dictionary<string, string>());
104 Assert.True(hasTableResp.table_exists);
107 await ctx.Kinetica.ExecuteSqlAsync($
"DROP TABLE {tableName}");
110 var hasTableResp2 = await ctx.Kinetica.HasTableAsync(tableName,
new Dictionary<string, string>());
111 Assert.False(hasTableResp2.table_exists);
117 using var ctx =
new TestContext(
"async_sql_filter");
119 await ctx.Kinetica.ExecuteSqlAsync($
@" 120 CREATE TABLE {ctx.QualifiedTable("filter_test
")} 121 (id INT NOT NULL, status VARCHAR(16), score INT, PRIMARY KEY (id)) 124 var tableName = ctx.QualifiedTable(
"filter_test");
127 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, status, score) VALUES (1, 'active', 85)");
128 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, status, score) VALUES (2, 'inactive', 60)");
129 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, status, score) VALUES (3, 'active', 92)");
130 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, status, score) VALUES (4, 'active', 78)");
133 var response = await ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName} WHERE status = 'active' AND score > 80");
135 Assert.Equal(2, response.total_number_of_records);
141 using var ctx =
new TestContext(
"async_concurrent_sql");
143 await ctx.Kinetica.ExecuteSqlAsync($
@" 144 CREATE TABLE {ctx.QualifiedTable("concurrent_test
")} 145 (id INT NOT NULL, value INT, PRIMARY KEY (id)) 148 var tableName = ctx.QualifiedTable(
"concurrent_test");
151 for (
int i = 0; i < 20; i++)
153 await ctx.Kinetica.ExecuteSqlAsync($
"INSERT INTO {tableName} (id, value) VALUES ({i}, {i * 10})");
157 var queryTasks =
new List<Task<ExecuteSqlResponse>>();
159 for (
int i = 0; i < 10; i++)
162 int maxId = minId + 1;
163 queryTasks.Add(ctx.Kinetica.ExecuteSqlAsync($
"SELECT * FROM {tableName} WHERE id >= {minId} AND id <= {maxId}"));
166 var results = await Task.WhenAll(queryTasks);
169 Assert.Equal(10, results.Length);
170 foreach (var result
in results)
172 Assert.True(result.total_number_of_records >= 1,
"Each query should return at least 1 record");
179 using var ctx =
new TestContext(
"async_show_tables");
182 await ctx.Kinetica.ExecuteSqlAsync($
"CREATE TABLE {ctx.QualifiedTable("table1
")} (id INT)");
183 await ctx.Kinetica.ExecuteSqlAsync($
"CREATE TABLE {ctx.QualifiedTable("table2
")} (id INT)");
184 await ctx.Kinetica.ExecuteSqlAsync($
"CREATE TABLE {ctx.QualifiedTable("table3
")} (id INT)");
187 var response = await ctx.Kinetica.ExecuteSqlAsync(
"SHOW TABLES");
190 Assert.True(response.total_number_of_records >= 0,
"SHOW TABLES should return successfully");
async Task TestConcurrentSqlQueriesAsync()
Test context that manages schema and cleanup for integration tests.
async Task TestExecuteSqlSelectAsync()
async Task TestExecuteSqlShowTablesAsync()
async Task TestExecuteSqlAggregateAsync()
Async tests for SQL execution endpoints.
async Task TestExecuteSqlCreateDropTableAsync()
async Task TestExecuteSqlWithLimitAsync()
async Task TestExecuteSqlWithFilterAsync()