Kinetica   C#   API  Version 7.2.3.1
GetRecordsTests.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 GetRecordsTests
15  {
16  private string SetupTestTable(TestContext ctx, int numRecords)
17  {
18  var tableName = ctx.QualifiedTable("test_table");
19 
20  // Create table using SQL
21  ctx.Kinetica.executeSql($"CREATE TABLE {tableName} (id INT NOT NULL, x DOUBLE, y DOUBLE, PRIMARY KEY (id))");
22 
23  // Insert records
24  for (int i = 0; i < numRecords; i++)
25  {
26  ctx.Kinetica.executeSql($"INSERT INTO {tableName} (id, x, y) VALUES ({i}, {i * 0.5}, {i * 1.5})");
27  }
28 
29  return tableName;
30  }
31 
32  [Fact]
33  public void TestGetRecordsAll()
34  {
35  using var ctx = new TestContext("get_all");
36  var tableName = SetupTestTable(ctx, 100);
37 
38  var resp = ctx.Kinetica.executeSql($"SELECT * FROM {tableName}", 0, -9999);
39 
40  Assert.Equal(100, resp.total_number_of_records);
41  Assert.False(resp.has_more_records);
42  }
43 
44  [Fact]
46  {
47  using var ctx = new TestContext("get_pagn");
48  var tableName = SetupTestTable(ctx, 100);
49 
50  // Get first page
51  var page1 = ctx.Kinetica.executeSql($"SELECT * FROM {tableName}", 0, 25);
52 
53  Assert.Equal(100, page1.total_number_of_records);
54  Assert.True(page1.has_more_records);
55 
56  // Get second page
57  var page2 = ctx.Kinetica.executeSql($"SELECT * FROM {tableName}", 25, 25);
58 
59  Assert.True(page2.has_more_records);
60 
61  // Get last page
62  var page4 = ctx.Kinetica.executeSql($"SELECT * FROM {tableName}", 75, 25);
63 
64  Assert.False(page4.has_more_records);
65  }
66 
67  [Fact]
69  {
70  using var ctx = new TestContext("get_filter");
71  var tableName = SetupTestTable(ctx, 100);
72 
73  // Filter for x < 25
74  var resp = ctx.Kinetica.executeSql($"SELECT * FROM {tableName} WHERE x < 25", 0, -9999);
75 
76  Assert.Equal(50, resp.total_number_of_records); // x = id * 0.5, so x < 25 means id < 50
77  }
78 
79  [Fact]
81  {
82  using var ctx = new TestContext("get_sort");
83  var tableName = SetupTestTable(ctx, 10);
84 
85  // Sort by x descending
86  var resp = ctx.Kinetica.executeSql($"SELECT * FROM {tableName} ORDER BY x DESC", 0, -9999);
87 
88  Assert.Equal(10, resp.total_number_of_records);
89  // First record should have highest x value (9 * 0.5 = 4.5)
90  Assert.True(resp.data.Count > 0);
91  }
92 
93  [Fact]
95  {
96  using var ctx = new TestContext("get_limit0");
97  var tableName = SetupTestTable(ctx, 100);
98 
99  // Limit 0 should return no data but correct total count
100  var resp = ctx.Kinetica.executeSql($"SELECT * FROM {tableName}", 0, 0);
101 
102  Assert.Equal(100, resp.total_number_of_records);
103  Assert.Empty(resp.data);
104  }
105 
106  [Fact]
108  {
109  using var ctx = new TestContext("get_empty");
110  var tableName = SetupTestTable(ctx, 0);
111 
112  var resp = ctx.Kinetica.executeSql($"SELECT * FROM {tableName}", 0, -9999);
113 
114  Assert.Equal(0, resp.total_number_of_records);
115  Assert.Empty(resp.data);
116  Assert.False(resp.has_more_records);
117  }
118 
119  [Fact]
121  {
122  using var ctx = new TestContext("get_offset");
123  var tableName = SetupTestTable(ctx, 10);
124 
125  // Offset beyond table size
126  var resp = ctx.Kinetica.executeSql($"SELECT * FROM {tableName}", 100, 10);
127 
128  Assert.Equal(10, resp.total_number_of_records);
129  Assert.Empty(resp.data);
130  }
131  }
132 }
ExecuteSqlResponse executeSql(ExecuteSqlRequest request_)
Execute a SQL statement (query, DML, or DDL).
Test context that manages schema and cleanup for integration tests.
Definition: TestContext.cs:11
string QualifiedTable(string tableName)
Get a qualified table name (schema.table).
Definition: TestContext.cs:74