Kinetica   C#   API  Version 7.2.3.1
AsyncTableManagementTests.cs
Go to the documentation of this file.
1 using System;
2 using System.Collections.Generic;
3 using System.Threading.Tasks;
4 using Xunit;
6 using kinetica;
7 
9 {
14  [Trait("Category", "Integration")]
15  [Trait("Category", "Async")]
17  {
18  [Fact]
19  public async Task TestCreateTableBasicAsync()
20  {
21  using var ctx = new TestContext("async_table_basic");
22 
23  var typeDef = @"{""type"":""record"",""name"":""test"",""fields"":[{""name"":""id"",""type"":""int""}]}";
24  var typeResp = await ctx.Kinetica.CreateTypeAsync(typeDef, "test_type", new Dictionary<string, IList<string>>(), new Dictionary<string, string>());
25 
26  var tableName = ctx.QualifiedTable("test_table");
27  var resp = await ctx.Kinetica.CreateTableAsync(tableName, typeResp.type_id, new Dictionary<string, string>());
28 
29  Assert.Equal(tableName, resp.table_name);
30  Assert.Equal(typeResp.type_id, resp.type_id);
31  }
32 
33  [Fact]
34  public async Task TestCreateTableWithOptionsAsync()
35  {
36  using var ctx = new TestContext("async_table_opts");
37 
38  var typeDef = @"{""type"":""record"",""name"":""opts"",""fields"":[{""name"":""id"",""type"":""int""}]}";
39  var typeResp = await ctx.Kinetica.CreateTypeAsync(typeDef, "opts_type", new Dictionary<string, IList<string>>(), new Dictionary<string, string>());
40 
41  var tableName = ctx.QualifiedTable("opts_table");
42  var options = new Dictionary<string, string>
43  {
44  { "is_replicated", "true" }
45  };
46 
47  var resp = await ctx.Kinetica.CreateTableAsync(tableName, typeResp.type_id, options);
48 
49  Assert.Equal(tableName, resp.table_name);
50  }
51 
52  [Fact]
53  public async Task TestHasTableExistsAsync()
54  {
55  using var ctx = new TestContext("async_has_table_y");
56 
57  var typeDef = @"{""type"":""record"",""name"":""exists"",""fields"":[{""name"":""id"",""type"":""int""}]}";
58  var typeResp = await ctx.Kinetica.CreateTypeAsync(typeDef, "exists_type", new Dictionary<string, IList<string>>(), new Dictionary<string, string>());
59 
60  var tableName = ctx.QualifiedTable("exists_table");
61  await ctx.Kinetica.CreateTableAsync(tableName, typeResp.type_id, new Dictionary<string, string>());
62 
63  var hasResp = await ctx.Kinetica.HasTableAsync(tableName, new Dictionary<string, string>());
64 
65  Assert.True(hasResp.table_exists);
66  Assert.Equal(tableName, hasResp.table_name);
67  }
68 
69  [Fact]
70  public async Task TestHasTableNotExistsAsync()
71  {
72  using var ctx = new TestContext("async_has_table_n");
73 
74  var tableName = ctx.QualifiedTable("nonexistent");
75  var hasResp = await ctx.Kinetica.HasTableAsync(tableName, new Dictionary<string, string>());
76 
77  Assert.False(hasResp.table_exists);
78  }
79 
80  [Fact]
81  public async Task TestClearTableAsync()
82  {
83  using var ctx = new TestContext("async_clear_table");
84 
85  // Create table using SQL (simpler approach)
86  var tableName = ctx.QualifiedTable("clear_table");
87  await ctx.Kinetica.ExecuteSqlAsync($"CREATE TABLE {tableName} (id INT NOT NULL, PRIMARY KEY (id))");
88 
89  // Insert records using SQL
90  await ctx.Kinetica.ExecuteSqlAsync($"INSERT INTO {tableName} (id) VALUES (1)");
91  await ctx.Kinetica.ExecuteSqlAsync($"INSERT INTO {tableName} (id) VALUES (2)");
92  await ctx.Kinetica.ExecuteSqlAsync($"INSERT INTO {tableName} (id) VALUES (3)");
93 
94  // Verify records exist
95  var getBefore = await ctx.Kinetica.ExecuteSqlAsync($"SELECT * FROM {tableName}", 0, -9999);
96  Assert.Equal(3, getBefore.total_number_of_records);
97 
98  // Clear table
99  var clearResp = await ctx.Kinetica.ClearTableAsync(tableName, null, new Dictionary<string, string>());
100  Assert.Equal(tableName, clearResp.table_name);
101 
102  // Table should not exist after clear
103  var hasAfter = await ctx.Kinetica.HasTableAsync(tableName, new Dictionary<string, string>());
104  Assert.False(hasAfter.table_exists);
105  }
106 
107  [Fact]
109  {
110  using var ctx = new TestContext("async_multi_tables");
111 
112  var typeDef = @"{""type"":""record"",""name"":""shared"",""fields"":[{""name"":""id"",""type"":""int""}]}";
113  var typeResp = await ctx.Kinetica.CreateTypeAsync(typeDef, "shared_type", new Dictionary<string, IList<string>>(), new Dictionary<string, string>());
114 
115  // Create multiple tables with same type
116  var table1 = ctx.QualifiedTable("table1");
117  var table2 = ctx.QualifiedTable("table2");
118  var table3 = ctx.QualifiedTable("table3");
119 
120  await ctx.Kinetica.CreateTableAsync(table1, typeResp.type_id, new Dictionary<string, string>());
121  await ctx.Kinetica.CreateTableAsync(table2, typeResp.type_id, new Dictionary<string, string>());
122  await ctx.Kinetica.CreateTableAsync(table3, typeResp.type_id, new Dictionary<string, string>());
123 
124  // Verify all exist
125  foreach (var table in new[] { table1, table2, table3 })
126  {
127  var hasResp = await ctx.Kinetica.HasTableAsync(table, new Dictionary<string, string>());
128  Assert.True(hasResp.table_exists);
129  }
130  }
131  }
132 }
Test context that manages schema and cleanup for integration tests.
Definition: TestContext.cs:11