Kinetica   C#   API  Version 7.2.3.1
SqlExecutionTests.cs
Go to the documentation of this file.
1 using System;
2 using System.Collections.Generic;
3 using Xunit;
4 using Kinetica.Tests.Common;
5 using kinetica;
6 
8 {
13  [Trait("Category", "Integration")]
14  public class SqlExecutionTests
15  {
16  [Fact]
18  {
19  using var ctx = new TestContext("sql_create");
20 
21  var sql = $"CREATE TABLE {ctx.SchemaName}.test_sql (id INT NOT NULL, name VARCHAR(32), PRIMARY KEY (id))";
22 
23  var resp = ctx.Kinetica.executeSql(sql, 0, -9999);
24 
25  // CREATE TABLE returns count_affected=1
26  Assert.Equal(1, resp.count_affected);
27  }
28 
29  [Fact]
30  public void TestExecuteSqlSelect()
31  {
32  using var ctx = new TestContext("sql_select");
33 
34  // Create and populate table using SQL
35  var tableName = ctx.QualifiedTable("sel_table");
36  ctx.Kinetica.executeSql($"CREATE TABLE {tableName} (id INT NOT NULL, value DOUBLE, PRIMARY KEY (id))");
37 
38  ctx.Kinetica.executeSql($"INSERT INTO {tableName} (id, value) VALUES (1, 1.1)");
39  ctx.Kinetica.executeSql($"INSERT INTO {tableName} (id, value) VALUES (2, 2.2)");
40  ctx.Kinetica.executeSql($"INSERT INTO {tableName} (id, value) VALUES (3, 3.3)");
41 
42  // Execute SELECT
43  var sql = $"SELECT * FROM {tableName}";
44  var resp = ctx.Kinetica.executeSql(sql, 0, -9999);
45 
46  Assert.Equal(3, resp.total_number_of_records);
47  Assert.Equal(3, resp.data.Count);
48  }
49 
50  [Fact]
52  {
53  using var ctx = new TestContext("sql_filter");
54 
55  var tableName = ctx.QualifiedTable("flt_table");
56  ctx.Kinetica.executeSql($"CREATE TABLE {tableName} (id INT NOT NULL, x DOUBLE, PRIMARY KEY (id))");
57 
58  // Insert 10 records
59  for (int i = 0; i < 10; i++)
60  {
61  ctx.Kinetica.executeSql($"INSERT INTO {tableName} (id, x) VALUES ({i}, {i * 1.5})");
62  }
63 
64  // SELECT with WHERE clause
65  var sql = $"SELECT * FROM {tableName} WHERE x > 7.0";
66  var resp = ctx.Kinetica.executeSql(sql, 0, -9999);
67 
68  Assert.True(resp.total_number_of_records >= 4); // Records with id 5-9 have x > 7.0
69  }
70 
71  [Fact]
72  public void TestExecuteSqlCount()
73  {
74  using var ctx = new TestContext("sql_count");
75 
76  var tableName = ctx.QualifiedTable("cnt_table");
77  ctx.Kinetica.executeSql($"CREATE TABLE {tableName} (id INT NOT NULL, PRIMARY KEY (id))");
78 
79  // Insert 100 records
80  for (int i = 0; i < 100; i++)
81  {
82  ctx.Kinetica.executeSql($"INSERT INTO {tableName} (id) VALUES ({i})");
83  }
84 
85  // COUNT query
86  var sql = $"SELECT COUNT(*) as cnt FROM {tableName}";
87  var resp = ctx.Kinetica.executeSql(sql, 0, -9999);
88 
89  // Count query returns 1 row with the count
90  Assert.Equal(1, resp.total_number_of_records);
91  Assert.Single(resp.data);
92 
93  // Verify the count value
94  var record = resp.data[0];
95  Assert.NotNull(record);
96  }
97 
98  [Fact]
100  {
101  using var ctx = new TestContext("sql_drop");
102 
103  var tableName = ctx.QualifiedTable("drp_table");
104  ctx.Kinetica.executeSql($"CREATE TABLE {tableName} (id INT NOT NULL, PRIMARY KEY (id))");
105 
106  // Verify exists
107  var hasBefore = ctx.Kinetica.hasTable(tableName, new Dictionary<string, string>());
108  Assert.True(hasBefore.table_exists);
109 
110  // Drop table
111  var sql = $"DROP TABLE {tableName}";
112  ctx.Kinetica.executeSql(sql, 0, -9999);
113 
114  // DROP successful - verify table no longer exists
115  var hasAfter = ctx.Kinetica.hasTable(tableName, new Dictionary<string, string>());
116  Assert.False(hasAfter.table_exists);
117  }
118 
119  [Fact]
121  {
122  using var ctx = new TestContext("sql_limit");
123 
124  var tableName = ctx.QualifiedTable("lim_table");
125  ctx.Kinetica.executeSql($"CREATE TABLE {tableName} (id INT NOT NULL, PRIMARY KEY (id))");
126 
127  // Insert 50 records
128  for (int i = 0; i < 50; i++)
129  {
130  ctx.Kinetica.executeSql($"INSERT INTO {tableName} (id) VALUES ({i})");
131  }
132 
133  // SELECT with limit parameter
134  var sql = $"SELECT * FROM {tableName}";
135  var resp = ctx.Kinetica.executeSql(sql, 0, 10);
136 
137  Assert.Equal(50, resp.total_number_of_records);
138  Assert.Equal(10, resp.data.Count);
139  Assert.True(resp.has_more_records);
140  }
141 
142  [Fact]
144  {
145  using var ctx = new TestContext("sql_show");
146 
147  var sql = "SHOW TABLES";
148  var resp = ctx.Kinetica.executeSql(sql, 0, -9999);
149 
150  // SHOW TABLES should succeed
151  Assert.True(resp.total_number_of_records >= 0);
152  }
153  }
154 }
Test context that manages schema and cleanup for integration tests.
Definition: TestContext.cs:11