2 using System.Collections.Generic;
4 namespace kinetica.Records;
23 private readonly
string _label;
24 private readonly List<Column> _columns;
25 private (
string Name, ColumnType
Type, List<string> Properties)? _currentColumn;
33 _label = label ??
throw new ArgumentNullException(nameof(label));
34 _columns =
new List<Column>();
35 _currentColumn =
null;
38 private void FinishCurrentColumn()
40 if (_currentColumn.HasValue)
42 var (name, type, props) = _currentColumn.Value;
44 _currentColumn =
null;
48 #region Add Column Methods 55 FinishCurrentColumn();
65 FinishCurrentColumn();
66 _currentColumn = (name, ColumnType.Integer,
new List<string>());
75 FinishCurrentColumn();
76 _currentColumn = (name, ColumnType.Long,
new List<string>());
85 FinishCurrentColumn();
86 _currentColumn = (name, ColumnType.Float,
new List<string>());
95 FinishCurrentColumn();
96 _currentColumn = (name, ColumnType.Double,
new List<string>());
105 FinishCurrentColumn();
106 _currentColumn = (name, ColumnType.String,
new List<string>());
115 FinishCurrentColumn();
116 _currentColumn = (name, ColumnType.Bytes,
new List<string>());
125 FinishCurrentColumn();
126 _currentColumn = (name, ColumnType.Timestamp,
new List<string> {
"timestamp" });
135 FinishCurrentColumn();
136 _currentColumn = (name, ColumnType.Date,
new List<string> {
"date" });
145 FinishCurrentColumn();
146 _currentColumn = (name, ColumnType.DateTime,
new List<string> {
"datetime" });
155 FinishCurrentColumn();
156 _currentColumn = (name, ColumnType.Time,
new List<string> {
"time" });
165 FinishCurrentColumn();
166 _currentColumn = (name, ColumnType.Boolean,
new List<string> {
"boolean" });
175 FinishCurrentColumn();
176 _currentColumn = (name, ColumnType.Int8,
new List<string> {
"int8" });
185 FinishCurrentColumn();
186 _currentColumn = (name, ColumnType.Int16,
new List<string> {
"int16" });
195 FinishCurrentColumn();
196 _currentColumn = (name, ColumnType.Decimal,
new List<string> {
"decimal" });
205 FinishCurrentColumn();
206 _currentColumn = (name, ColumnType.Ipv4,
new List<string> {
"ipv4" });
215 FinishCurrentColumn();
216 _currentColumn = (name, ColumnType.Uuid,
new List<string> {
"uuid" });
227 FinishCurrentColumn();
228 var (type, prop) = length
switch 230 1 => (ColumnType.Char1,
"char1"),
231 2 => (ColumnType.Char2,
"char2"),
232 4 => (ColumnType.Char4,
"char4"),
233 8 => (ColumnType.Char8,
"char8"),
234 16 => (ColumnType.Char16,
"char16"),
235 32 => (ColumnType.Char32,
"char32"),
236 64 => (ColumnType.Char64,
"char64"),
237 128 => (ColumnType.Char128,
"char128"),
238 256 => (ColumnType.Char256,
"char256"),
239 _ =>
throw new ArgumentException($
"Invalid char length: {length}. Must be 1, 2, 4, 8, 16, 32, 64, 128, or 256.", nameof(length))
241 _currentColumn = (name, type,
new List<string> { prop });
250 FinishCurrentColumn();
251 _currentColumn = (name, ColumnType.Wkt,
new List<string> {
"wkt" });
260 FinishCurrentColumn();
261 _currentColumn = (name, ColumnType.Json,
new List<string> {
"json" });
267 #region Property Modifiers 274 if (_currentColumn.HasValue)
276 var (name, type, props) = _currentColumn.Value;
277 if (!props.Contains(
"primary_key"))
278 props.Add(
"primary_key");
279 _currentColumn = (name, type, props);
289 if (_currentColumn.HasValue)
291 var (name, type, props) = _currentColumn.Value;
292 if (!props.Contains(
"shard_key"))
293 props.Add(
"shard_key");
294 _currentColumn = (name, type, props);
304 if (_currentColumn.HasValue)
306 var (name, type, props) = _currentColumn.Value;
307 if (!props.Contains(
"nullable"))
308 props.Add(
"nullable");
309 _currentColumn = (name, type, props);
319 if (_currentColumn.HasValue)
321 var (name, type, props) = _currentColumn.Value;
322 if (!props.Contains(
"data"))
324 _currentColumn = (name, type, props);
334 if (_currentColumn.HasValue && !
string.IsNullOrEmpty(property))
336 var (name, type, props) = _currentColumn.Value;
337 if (!props.Contains(property))
339 _currentColumn = (name, type, props);
346 #region Build Methods 354 FinishCurrentColumn();
355 return new Type(_label, _columns);
TypeBuilder AddLongColumn(string name)
Adds a long column.
TypeBuilder Data()
Marks the current column as data column.
TypeBuilder AddUuidColumn(string name)
Adds a UUID column.
Type Build()
Builds the Type.
TypeBuilder AddBooleanColumn(string name)
Adds a boolean column (stored as int).
TypeBuilder AddFloatColumn(string name)
Adds a float column.
TypeBuilder WithProperty(string property)
Adds a custom property to the current column.
TypeBuilder AddIpv4Column(string name)
Adds an IPv4 column.
TypeBuilder AddJsonColumn(string name)
Adds a JSON column.
TypeBuilder AddIntColumn(string name)
Adds an integer column.
TypeBuilder ShardKey()
Marks the current column as shard key.
TypeBuilder AddTimestampColumn(string name)
Adds a timestamp column.
TypeBuilder PrimaryKey()
Marks the current column as primary key.
TypeBuilder AddColumn(Column column)
Adds a column with the specified type.
TypeBuilder AddDateColumn(string name)
Adds a date column.
TypeBuilder AddDateTimeColumn(string name)
Adds a datetime column.
Immutable metadata about a column in a Kinetica type.
TypeBuilder AddCharColumn(string name, int length)
Adds a char(N) column.
TypeBuilder AddInt16Column(string name)
Adds an int16 column.
TypeBuilder AddInt8Column(string name)
Adds an int8 column.
TypeBuilder AddDecimalColumn(string name)
Adds a decimal column.
Builder for constructing a Type with a fluent API.
Immutable collection of metadata about a Kinetica type.
TypeBuilder Nullable()
Marks the current column as nullable.
static Column WithProperties(string name, ColumnType columnType, IEnumerable< string > properties)
Creates a column with properties from a list.
TypeBuilder(string label)
Creates a new TypeBuilder with the specified label.
TypeBuilder AddTimeColumn(string name)
Adds a time column.
TypeBuilder AddDoubleColumn(string name)
Adds a double column.
TypeBuilder AddWktColumn(string name)
Adds a WKT (Well-Known Text) geometry column.
TypeBuilder AddStringColumn(string name)
Adds a string column.
TypeBuilder AddBytesColumn(string name)
Adds a bytes column.