Kinetica   C#   API  Version 7.2.3.1
ColumnType.cs
Go to the documentation of this file.
1 namespace kinetica.Records;
2 
7  public enum ColumnBaseType
8  {
10  Integer,
12  Long,
14  Float,
16  Double,
18  String,
20  Bytes
21  }
22 
27  public enum ColumnType
28  {
29  // Base types
31  Integer,
33  Long,
35  Float,
37  Double,
39  String,
41  Bytes,
42 
43  // Integer subtypes
45  Boolean,
47  Int8,
49  Int16,
50 
51  // Long subtypes
53  Timestamp,
54 
55  // String subtypes
57  Date,
59  DateTime,
61  Time,
63  Decimal,
65  Ipv4,
67  Uuid,
69  Char1,
71  Char2,
73  Char4,
75  Char8,
77  Char16,
79  Char32,
81  Char64,
83  Char128,
85  Char256,
86 
87  // Bytes subtypes
89  Wkt,
90 
91  // Special types
93  Array,
95  Vector,
97  Json
98  }
99 
103  public static class ColumnTypeExtensions
104  {
109  public static ColumnBaseType GetBaseType(this ColumnType columnType)
110  {
111  return columnType switch
112  {
113  ColumnType.Integer or ColumnType.Boolean or ColumnType.Int8 or ColumnType.Int16
114  => ColumnBaseType.Integer,
115 
116  ColumnType.Long or ColumnType.Timestamp
117  => ColumnBaseType.Long,
118 
119  ColumnType.Float
120  => ColumnBaseType.Float,
121 
122  ColumnType.Double
123  => ColumnBaseType.Double,
124 
125  ColumnType.String or ColumnType.Date or ColumnType.DateTime or ColumnType.Time or
126  ColumnType.Decimal or ColumnType.Ipv4 or ColumnType.Uuid or
127  ColumnType.Char1 or ColumnType.Char2 or ColumnType.Char4 or ColumnType.Char8 or
128  ColumnType.Char16 or ColumnType.Char32 or ColumnType.Char64 or ColumnType.Char128 or
129  ColumnType.Char256 or ColumnType.Array or ColumnType.Vector or ColumnType.Json
130  => ColumnBaseType.String,
131 
132  ColumnType.Bytes or ColumnType.Wkt
133  => ColumnBaseType.Bytes,
134 
135  _ => ColumnBaseType.String
136  };
137  }
138 
143  public static string GetAvroTypeName(this ColumnBaseType baseType)
144  {
145  return baseType switch
146  {
147  ColumnBaseType.Integer => "int",
148  ColumnBaseType.Long => "long",
149  ColumnBaseType.Float => "float",
150  ColumnBaseType.Double => "double",
151  ColumnBaseType.String => "string",
152  ColumnBaseType.Bytes => "bytes",
153  _ => "string"
154  };
155  }
156 
160  public static string GetAvroTypeName(this ColumnType columnType)
161  {
162  return columnType.GetBaseType().GetAvroTypeName();
163  }
164 
169  public static ColumnType FromAvroAndProperties(string avroType, IEnumerable<string>? properties)
170  {
171  if (properties != null)
172  {
173  foreach (var prop in properties)
174  {
175  var result = prop.ToLowerInvariant() switch
176  {
177  "boolean" => ColumnType.Boolean,
178  "int8" => ColumnType.Int8,
179  "int16" => ColumnType.Int16,
180  "timestamp" => ColumnType.Timestamp,
181  "date" => ColumnType.Date,
182  "datetime" => ColumnType.DateTime,
183  "time" => ColumnType.Time,
184  "decimal" => ColumnType.Decimal,
185  "ipv4" => ColumnType.Ipv4,
186  "uuid" => ColumnType.Uuid,
187  "char1" => ColumnType.Char1,
188  "char2" => ColumnType.Char2,
189  "char4" => ColumnType.Char4,
190  "char8" => ColumnType.Char8,
191  "char16" => ColumnType.Char16,
192  "char32" => ColumnType.Char32,
193  "char64" => ColumnType.Char64,
194  "char128" => ColumnType.Char128,
195  "char256" => ColumnType.Char256,
196  "wkt" => ColumnType.Wkt,
197  "array" => ColumnType.Array,
198  "vector" => ColumnType.Vector,
199  "json" => ColumnType.Json,
200  _ => (ColumnType?)null
201  };
202 
203  if (result.HasValue)
204  return result.Value;
205  }
206  }
207 
208  // Fall back to base type
209  return avroType.ToLowerInvariant() switch
210  {
211  "int" => ColumnType.Integer,
212  "long" => ColumnType.Long,
213  "float" => ColumnType.Float,
214  "double" => ColumnType.Double,
215  "string" => ColumnType.String,
216  "bytes" => ColumnType.Bytes,
217  _ => ColumnType.String
218  };
219  }
220 
224  public static string? GetPropertyName(this ColumnType columnType)
225  {
226  return columnType switch
227  {
228  ColumnType.Boolean => "boolean",
229  ColumnType.Int8 => "int8",
230  ColumnType.Int16 => "int16",
231  ColumnType.Timestamp => "timestamp",
232  ColumnType.Date => "date",
233  ColumnType.DateTime => "datetime",
234  ColumnType.Time => "time",
235  ColumnType.Decimal => "decimal",
236  ColumnType.Ipv4 => "ipv4",
237  ColumnType.Uuid => "uuid",
238  ColumnType.Char1 => "char1",
239  ColumnType.Char2 => "char2",
240  ColumnType.Char4 => "char4",
241  ColumnType.Char8 => "char8",
242  ColumnType.Char16 => "char16",
243  ColumnType.Char32 => "char32",
244  ColumnType.Char64 => "char64",
245  ColumnType.Char128 => "char128",
246  ColumnType.Char256 => "char256",
247  ColumnType.Wkt => "wkt",
248  ColumnType.Array => "array",
249  ColumnType.Vector => "vector",
250  ColumnType.Json => "json",
251  _ => null
252  };
253  }
254  }
16-bit signed integer
UUID in standard format
64-bit signed integer
8-bit signed integer
ColumnBaseType
Base column types that map to Avro primitive types.
Definition: ColumnType.cs:7
Fixed-length char(16)
Well-Known Text geometry
static ? string GetPropertyName(this ColumnType columnType)
Gets the Kinetica property name for this column type (if it has one).
Definition: ColumnType.cs:224
Date in YYYY-MM-DD format
Time in HH:MM:SS.mmm format
Fixed-length char(64)
32-bit IEEE 754 float
static string GetAvroTypeName(this ColumnBaseType baseType)
Gets the Avro type name for this base type.
Definition: ColumnType.cs:143
Fixed-length char(8)
static ColumnBaseType GetBaseType(this ColumnType columnType)
Gets the base type for this column type.
Definition: ColumnType.cs:109
Extension methods for ColumnType.
Definition: ColumnType.cs:103
IPv4 address in dotted-quad format
static ColumnType FromAvroAndProperties(string avroType, IEnumerable< string >? properties)
Parse column type from Avro type and properties.
Definition: ColumnType.cs:169
Fixed-length char(2)
Fixed-length char(32)
Fixed-length char(256)
32-bit signed integer
Decimal number as string
Fixed-length char(1)
static string GetAvroTypeName(this ColumnType columnType)
Gets the Avro type name for this column type.
Definition: ColumnType.cs:160
64-bit IEEE 754 double
Fixed-length char(128)
Timestamp as milliseconds since Unix epoch
DateTime in YYYY-MM-DD HH:MM:SS.mmm format
Fixed-length char(4)
Boolean stored as integer (0 or 1)