Kinetica   C#   API  Version 7.2.3.1
DataTypeTests.cs
Go to the documentation of this file.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using Newtonsoft.Json;
5 using Xunit;
6 using kinetica;
7 
8 namespace Kinetica.Tests
9 {
13  [Trait("Category", "Integration")]
14  public class DataTypeTests
15  {
16  private const string ConnectionUrl = "http://localhost:9191";
17  private const string Username = "admin";
18  private const string Password = "secret";
19  private kinetica.Kinetica _kdb = null!;
20 
21  private kinetica.Kinetica GetConnection()
22  {
23  if (_kdb == null)
24  {
25  _kdb = new kinetica.Kinetica(ConnectionUrl, new kinetica.Kinetica.Options()
26  {
27  Username = Username,
28  Password = Password
29  });
30  }
31  return _kdb;
32  }
33 
34  #region Boolean Type Tests
35 
36  [Fact]
38  {
39  var kdb = GetConnection();
40  const string tableName = "bool_type_test";
41 
42  try
43  {
44  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
45  kdb.executeSql($"CREATE TABLE {tableName} (id INT, active BOOLEAN, PRIMARY KEY(id))");
46  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, TRUE), (2, FALSE)");
47 
48  var response = kdb.executeSql($"SELECT * FROM {tableName} ORDER BY id");
49 
50  Assert.Equal(2, response.total_number_of_records);
51 
52  var record1 = response.data[0];
53  record1.TryGetValue("active", out var active1);
54  Assert.Equal(1, Convert.ToInt32(active1));
55  Assert.True(Convert.ToBoolean(active1));
56 
57  var record2 = response.data[1];
58  record2.TryGetValue("active", out var active2);
59  Assert.Equal(0, Convert.ToInt32(active2));
60  Assert.False(Convert.ToBoolean(active2));
61  }
62  finally
63  {
64  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
65  }
66  }
67 
68  #endregion
69 
70  #region Array Type Tests
71 
72  [Fact]
74  {
75  var kdb = GetConnection();
76  const string tableName = "array_int_test";
77 
78  try
79  {
80  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
81  // Use INTEGER[N] syntax for array columns
82  kdb.executeSql($"CREATE TABLE {tableName} (id INT, int_values INTEGER[5], PRIMARY KEY(id))");
83  // Insert array values using JSON syntax
84  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, '[1, 2, 3, 4, 5]')");
85 
86  var response = kdb.executeSql($"SELECT * FROM {tableName}");
87 
88  Assert.Equal(1, response.total_number_of_records);
89 
90  var record = response.data[0];
91  record.TryGetValue("int_values", out var valuesObj);
92 
93  // Array is stored as JSON string
94  var valuesStr = valuesObj?.ToString();
95  Assert.NotNull(valuesStr);
96 
97  // Parse the JSON array
98  var values = JsonConvert.DeserializeObject<int[]>(valuesStr!);
99  Assert.NotNull(values);
100  Assert.Equal(5, values!.Length);
101  Assert.Equal(new[] { 1, 2, 3, 4, 5 }, values);
102  }
103  finally
104  {
105  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
106  }
107  }
108 
109  [Fact]
111  {
112  var kdb = GetConnection();
113  const string tableName = "array_double_test";
114 
115  try
116  {
117  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
118  // Use DOUBLE[N] syntax for array columns
119  kdb.executeSql($"CREATE TABLE {tableName} (id INT, double_values DOUBLE[3], PRIMARY KEY(id))");
120  // Insert array values using JSON syntax
121  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, '[1.1, 2.2, 3.3]')");
122 
123  var response = kdb.executeSql($"SELECT * FROM {tableName}");
124 
125  Assert.Equal(1, response.total_number_of_records);
126 
127  var record = response.data[0];
128  record.TryGetValue("double_values", out var valuesObj);
129 
130  var valuesStr = valuesObj?.ToString();
131  Assert.NotNull(valuesStr);
132 
133  var values = JsonConvert.DeserializeObject<double[]>(valuesStr!);
134  Assert.NotNull(values);
135  Assert.Equal(3, values!.Length);
136  Assert.Equal(1.1, values[0], 5);
137  Assert.Equal(2.2, values[1], 5);
138  Assert.Equal(3.3, values[2], 5);
139  }
140  finally
141  {
142  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
143  }
144  }
145 
146  [Fact(Skip = "VARCHAR arrays require specific Kinetica version support - test with CHAR16 instead")]
148  {
149  var kdb = GetConnection();
150  const string tableName = "array_string_test";
151 
152  try
153  {
154  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
155  // Note: VARCHAR arrays may not be supported in all Kinetica versions
156  // Use CHAR16[N] for fixed-length string arrays
157  kdb.executeSql($"CREATE TABLE {tableName} (id INT, str_tags CHAR16[3], PRIMARY KEY(id))");
158  // Insert array values using JSON syntax
159  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, '[\"red\", \"green\", \"blue\"]')");
160 
161  var response = kdb.executeSql($"SELECT * FROM {tableName}");
162 
163  Assert.Equal(1, response.total_number_of_records);
164 
165  var record = response.data[0];
166  record.TryGetValue("str_tags", out var tagsObj);
167 
168  var tagsStr = tagsObj?.ToString();
169  Assert.NotNull(tagsStr);
170 
171  var tags = JsonConvert.DeserializeObject<string[]>(tagsStr!);
172  Assert.NotNull(tags);
173  Assert.Equal(3, tags!.Length);
174  // CHAR16 pads with spaces, so trim them
175  var trimmedTags = tags!.Select(t => t?.Trim()).ToArray();
176  Assert.Equal(new[] { "red", "green", "blue" }, trimmedTags);
177  }
178  finally
179  {
180  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
181  }
182  }
183 
184  #endregion
185 
186  #region Decimal Type Tests
187 
188  [Fact]
190  {
191  var kdb = GetConnection();
192  const string tableName = "decimal_8byte_test";
193 
194  try
195  {
196  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
197  // DECIMAL(18,4) uses 8 bytes (precision <= 18)
198  kdb.executeSql($"CREATE TABLE {tableName} (id INT, amount DECIMAL(18,4), PRIMARY KEY(id))");
199  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, 12345.6789)");
200 
201  var response = kdb.executeSql($"SELECT * FROM {tableName}");
202 
203  Assert.Equal(1, response.total_number_of_records);
204 
205  var record = response.data[0];
206  record.TryGetValue("amount", out var amountObj);
207 
208  // Decimal is stored as a string
209  var amountStr = amountObj?.ToString();
210  Assert.NotNull(amountStr);
211 
212  var amount = decimal.Parse(amountStr!);
213  // DECIMAL(18,4) - 4 decimal places
214  Assert.Equal(12345.6789m, amount);
215  }
216  finally
217  {
218  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
219  }
220  }
221 
222  [Fact]
224  {
225  var kdb = GetConnection();
226  const string tableName = "decimal_8byte_custom_test";
227 
228  try
229  {
230  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
231  // DECIMAL(10,2) uses 8 bytes (precision <= 18)
232  kdb.executeSql($"CREATE TABLE {tableName} (id INT, price DECIMAL(10,2), PRIMARY KEY(id))");
233  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, 99999999.99)");
234 
235  var response = kdb.executeSql($"SELECT * FROM {tableName}");
236 
237  Assert.Equal(1, response.total_number_of_records);
238 
239  var record = response.data[0];
240  record.TryGetValue("price", out var priceObj);
241 
242  var priceStr = priceObj?.ToString();
243  Assert.NotNull(priceStr);
244 
245  var price = decimal.Parse(priceStr!);
246  Assert.Equal(99999999.99m, price);
247  }
248  finally
249  {
250  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
251  }
252  }
253 
254  [Fact]
256  {
257  var kdb = GetConnection();
258  const string tableName = "decimal_12byte_test";
259 
260  try
261  {
262  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
263  // DECIMAL(26,13) uses 12 bytes (precision > 18)
264  kdb.executeSql($"CREATE TABLE {tableName} (id INT, big_amount DECIMAL(26,13), PRIMARY KEY(id))");
265  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, 1234567890123.1234567890123)");
266 
267  var response = kdb.executeSql($"SELECT * FROM {tableName}");
268 
269  Assert.Equal(1, response.total_number_of_records);
270 
271  var record = response.data[0];
272  record.TryGetValue("big_amount", out var amountObj);
273 
274  var amountStr = amountObj?.ToString();
275  Assert.NotNull(amountStr);
276 
277  var amount = decimal.Parse(amountStr!);
278  // Verify the high-precision decimal was stored and retrieved correctly
279  Assert.True(Math.Abs(amount - 1234567890123.1234567890123m) < 0.0000000001m);
280  }
281  finally
282  {
283  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
284  }
285  }
286 
287  [Fact]
289  {
290  var kdb = GetConnection();
291  const string tableName = "decimal_12byte_max_test";
292 
293  try
294  {
295  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
296  // DECIMAL(26,13) for large values
297  kdb.executeSql($"CREATE TABLE {tableName} (id INT, big_val DECIMAL(26,13), PRIMARY KEY(id))");
298  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, 9999999999999.9999999999999)");
299 
300  var response = kdb.executeSql($"SELECT * FROM {tableName}");
301 
302  Assert.Equal(1, response.total_number_of_records);
303 
304  var record = response.data[0];
305  record.TryGetValue("big_val", out var valObj);
306 
307  var valStr = valObj?.ToString();
308  Assert.NotNull(valStr);
309 
310  var val = decimal.Parse(valStr!);
311  Assert.True(Math.Abs(val - 9999999999999.9999999999999m) < 0.0000000001m);
312  }
313  finally
314  {
315  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
316  }
317  }
318 
319  [Fact]
321  {
322  var kdb = GetConnection();
323  const string tableName = "decimal_12byte_neg_test";
324 
325  try
326  {
327  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
328  // DECIMAL(26,13) for negative values
329  kdb.executeSql($"CREATE TABLE {tableName} (id INT, neg_val DECIMAL(26,13), PRIMARY KEY(id))");
330  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, -1234567890123.1234567890123)");
331 
332  var response = kdb.executeSql($"SELECT * FROM {tableName}");
333 
334  Assert.Equal(1, response.total_number_of_records);
335 
336  var record = response.data[0];
337  record.TryGetValue("neg_val", out var valObj);
338 
339  var valStr = valObj?.ToString();
340  Assert.NotNull(valStr);
341 
342  var val = decimal.Parse(valStr!);
343  Assert.True(Math.Abs(val - (-1234567890123.1234567890123m)) < 0.0000000001m);
344  }
345  finally
346  {
347  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
348  }
349  }
350 
351  [Fact]
353  {
354  var kdb = GetConnection();
355  const string tableName = "decimal_typeinfo_test";
356 
357  try
358  {
359  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
360  // Create table with both 8-byte and 12-byte decimal columns
361  kdb.executeSql($@"CREATE TABLE {tableName} (
362  id INT,
363  small_decimal DECIMAL(10,2),
364  default_decimal DECIMAL(18,4),
365  big_decimal DECIMAL(26,13),
366  PRIMARY KEY(id))");
367 
368  var ktype = KineticaType.fromTable(kdb, tableName);
369  var columns = ktype.getColumns();
370 
371  // Check small_decimal (8-byte, precision=10, scale=2)
372  var smallDecCol = columns.FirstOrDefault(c => c.getName() == "small_decimal");
373  Assert.NotNull(smallDecCol);
374  Assert.True(smallDecCol!.isDecimal());
375  Assert.Equal(10, smallDecCol.getDecimalPrecision());
376  Assert.Equal(2, smallDecCol.getDecimalScale());
377  Assert.Equal(8, smallDecCol.getDecimalByteSize());
378 
379  // Check default_decimal (8-byte, precision=18, scale=4)
380  var defaultDecCol = columns.FirstOrDefault(c => c.getName() == "default_decimal");
381  Assert.NotNull(defaultDecCol);
382  Assert.True(defaultDecCol!.isDecimal());
383  Assert.Equal(18, defaultDecCol.getDecimalPrecision());
384  Assert.Equal(4, defaultDecCol.getDecimalScale());
385  Assert.Equal(8, defaultDecCol.getDecimalByteSize());
386 
387  // Check big_decimal (12-byte, precision=26, scale=13)
388  var bigDecCol = columns.FirstOrDefault(c => c.getName() == "big_decimal");
389  Assert.NotNull(bigDecCol);
390  Assert.True(bigDecCol!.isDecimal());
391  Assert.Equal(26, bigDecCol.getDecimalPrecision());
392  Assert.Equal(13, bigDecCol.getDecimalScale());
393  Assert.Equal(12, bigDecCol.getDecimalByteSize());
394  }
395  finally
396  {
397  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
398  }
399  }
400 
401  [Fact]
403  {
404  // Verify the decimal constants match the Java API
405  Assert.Equal(18, KineticaType.Column.DEFAULT_DECIMAL_PRECISION);
406  Assert.Equal(4, KineticaType.Column.DEFAULT_DECIMAL_SCALE);
407  Assert.Equal(18, KineticaType.Column.DECIMAL8_MAX_PRECISION);
408  }
409 
410  #endregion
411 
412  #region WKT Geometry Type Tests
413 
414  [Fact]
416  {
417  var kdb = GetConnection();
418  const string tableName = "wkt_point_test";
419 
420  try
421  {
422  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
423  kdb.executeSql($"CREATE TABLE {tableName} (id INT, location GEOMETRY, PRIMARY KEY(id))");
424  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, ST_GEOMFROMTEXT('POINT(-122.4194 37.7749)'))");
425 
426  var response = kdb.executeSql($"SELECT id, ST_ASTEXT(location) as location_wkt FROM {tableName}");
427 
428  Assert.Equal(1, response.total_number_of_records);
429 
430  var record = response.data[0];
431  record.TryGetValue("location_wkt", out var wktObj);
432 
433  var wkt = wktObj?.ToString();
434  Assert.NotNull(wkt);
435  Assert.Contains("POINT", wkt!, StringComparison.OrdinalIgnoreCase);
436  Assert.Contains("-122.4194", wkt!);
437  Assert.Contains("37.7749", wkt!);
438  }
439  finally
440  {
441  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
442  }
443  }
444 
445  [Fact]
447  {
448  var kdb = GetConnection();
449  const string tableName = "wkt_polygon_test";
450 
451  try
452  {
453  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
454  kdb.executeSql($"CREATE TABLE {tableName} (id INT, boundary GEOMETRY, PRIMARY KEY(id))");
455  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, ST_GEOMFROMTEXT('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'))");
456 
457  var response = kdb.executeSql($"SELECT id, ST_ASTEXT(boundary) as boundary_wkt FROM {tableName}");
458 
459  Assert.Equal(1, response.total_number_of_records);
460 
461  var record = response.data[0];
462  record.TryGetValue("boundary_wkt", out var wktObj);
463 
464  var wkt = wktObj?.ToString();
465  Assert.NotNull(wkt);
466  Assert.Contains("POLYGON", wkt!, StringComparison.OrdinalIgnoreCase);
467  }
468  finally
469  {
470  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
471  }
472  }
473 
474  #endregion
475 
476  #region UUID Type Tests
477 
478  [Fact]
479  public void UUID_ReadsCorrectly()
480  {
481  var kdb = GetConnection();
482  const string tableName = "uuid_test";
483 
484  try
485  {
486  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
487  kdb.executeSql($"CREATE TABLE {tableName} (id INT, uuid_val UUID, PRIMARY KEY(id))");
488  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, '550e8400-e29b-41d4-a716-446655440000')");
489 
490  var response = kdb.executeSql($"SELECT * FROM {tableName}");
491 
492  Assert.Equal(1, response.total_number_of_records);
493 
494  var record = response.data[0];
495  record.TryGetValue("uuid_val", out var uuidObj);
496 
497  var uuidStr = uuidObj?.ToString();
498  Assert.NotNull(uuidStr);
499 
500  var uuid = Guid.Parse(uuidStr!);
501  Assert.Equal(Guid.Parse("550e8400-e29b-41d4-a716-446655440000"), uuid);
502  }
503  finally
504  {
505  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
506  }
507  }
508 
509  #endregion
510 
511  #region JSON Type Tests
512 
513  [Fact]
514  public void JSON_ReadsCorrectly()
515  {
516  var kdb = GetConnection();
517  const string tableName = "json_test";
518 
519  try
520  {
521  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
522  kdb.executeSql($"CREATE TABLE {tableName} (id INT, data JSON, PRIMARY KEY(id))");
523  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, '{{\"name\": \"John\", \"age\": 30}}')");
524 
525  var response = kdb.executeSql($"SELECT * FROM {tableName}");
526 
527  Assert.Equal(1, response.total_number_of_records);
528 
529  var record = response.data[0];
530  record.TryGetValue("data", out var dataObj);
531 
532  var jsonStr = dataObj?.ToString();
533  Assert.NotNull(jsonStr);
534 
535  dynamic? json = JsonConvert.DeserializeObject(jsonStr!);
536  Assert.NotNull(json);
537  Assert.Equal("John", (string)json!.name);
538  Assert.Equal(30, (int)json!.age);
539  }
540  finally
541  {
542  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
543  }
544  }
545 
546  #endregion
547 
548  #region ULONG Type Tests
549 
550  [Fact]
551  public void ULONG_ReadsCorrectly()
552  {
553  var kdb = GetConnection();
554  const string tableName = "ulong_test";
555 
556  try
557  {
558  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
559  // Use UNSIGNED BIGINT syntax for unsigned long
560  kdb.executeSql($"CREATE TABLE {tableName} (id INT, big_val UNSIGNED BIGINT, PRIMARY KEY(id))");
561  kdb.executeSql($"INSERT INTO {tableName} VALUES (1, 18446744073709551615)"); // Max ULONG
562 
563  var response = kdb.executeSql($"SELECT * FROM {tableName}");
564 
565  Assert.Equal(1, response.total_number_of_records);
566 
567  var record = response.data[0];
568  record.TryGetValue("big_val", out var valObj);
569 
570  var valStr = valObj?.ToString();
571  Assert.NotNull(valStr);
572 
573  var val = ulong.Parse(valStr!);
574  Assert.Equal(ulong.MaxValue, val);
575  }
576  finally
577  {
578  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
579  }
580  }
581 
582  #endregion
583 
584  #region Type Information Tests
585 
586  [Fact]
588  {
589  var kdb = GetConnection();
590  const string tableName = "type_info_test";
591 
592  try
593  {
594  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
595  // Use correct Kinetica SQL syntax for all types
596  kdb.executeSql($@"
597  CREATE TABLE {tableName} (
598  id INT,
599  is_active BOOLEAN,
600  score DECIMAL(10,2),
601  int_tags INTEGER[3],
602  metadata JSON,
603  unique_id UUID,
604  PRIMARY KEY(id)
605  )");
606 
607  var ktype = KineticaType.fromTable(kdb, tableName);
608  var columns = ktype.getColumns();
609 
610  // Check boolean column
611  var boolCol = columns.FirstOrDefault(c => c.getName() == "is_active");
612  Assert.NotNull(boolCol);
613  Assert.Equal(KineticaType.Column.ColumnType.INT, boolCol!.getType());
614  Assert.Contains(ColumnProperty.BOOLEAN, boolCol.getProperties());
615 
616  // Check decimal column
617  var decimalCol = columns.FirstOrDefault(c => c.getName() == "score");
618  Assert.NotNull(decimalCol);
619  Assert.Equal(KineticaType.Column.ColumnType.STRING, decimalCol!.getType());
620  Assert.Contains(decimalCol.getProperties(), p => p.StartsWith("decimal", StringComparison.OrdinalIgnoreCase));
621 
622  // Check array column
623  var arrayCol = columns.FirstOrDefault(c => c.getName() == "int_tags");
624  Assert.NotNull(arrayCol);
625  Assert.Equal(KineticaType.Column.ColumnType.STRING, arrayCol!.getType());
626  Assert.Contains(arrayCol.getProperties(), p => p.StartsWith("array", StringComparison.OrdinalIgnoreCase));
627 
628  // Check JSON column
629  var jsonCol = columns.FirstOrDefault(c => c.getName() == "metadata");
630  Assert.NotNull(jsonCol);
631  Assert.Equal(KineticaType.Column.ColumnType.STRING, jsonCol!.getType());
632  Assert.Contains(ColumnProperty.JSON, jsonCol.getProperties());
633 
634  // Check UUID column
635  var uuidCol = columns.FirstOrDefault(c => c.getName() == "unique_id");
636  Assert.NotNull(uuidCol);
637  Assert.Equal(KineticaType.Column.ColumnType.STRING, uuidCol!.getType());
638  Assert.Contains(ColumnProperty.UUID, uuidCol.getProperties());
639  }
640  finally
641  {
642  try { kdb.executeSql($"DROP TABLE IF EXISTS {tableName}"); } catch { }
643  }
644  }
645 
646  #endregion
647  }
648 }
const string BOOLEAN
This property provides optimized memory and query performance for int columns.
void TypeFromTable_CorrectlyIdentifiesColumnTypes()
Column properties used for Kinetica types.
const string JSON
Valid only for 'string' columns.
static KineticaType fromTable(Kinetica kinetica, string tableName)
Create a KineticaType object based on an existing table in the database.
void Decimal_8Byte_DefaultPrecision_ReadsCorrectly()
Connection Options
Definition: Kinetica.cs:50
IList< Column > getColumns()
void Decimal_8Byte_CustomPrecisionScale_ReadsCorrectly()
void Decimal_12Byte_NearMaxValue_ReadsCorrectly()
void Decimal_12Byte_NegativeValue_ReadsCorrectly()
const string UUID
Valid only for 'string' columns.
Tests for various data type handling in Kinetica.
void Decimal_12Byte_HighPrecision_ReadsCorrectly()
void Decimal_TypeFromTable_ExtractsPrecisionAndScale()
API to talk to Kinetica Database
Definition: Kinetica.cs:40