Skip to content

Commit 362cdd4

Browse files
Tables functionality alpha release (#15)
Co-authored-by: jeffrey-elliott <[email protected]> Co-authored-by: Steve Hewitt <[email protected]>
1 parent 7a975b9 commit 362cdd4

File tree

76 files changed

+7641
-401
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+7641
-401
lines changed

src/DataStax.AstraDB.DataApi/Collections/Collection.cs

Lines changed: 88 additions & 81 deletions
Large diffs are not rendered by default.

src/DataStax.AstraDB.DataApi/Core/Builders.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,17 @@ public class Builders<T>
5353
/// sort = sort.Ascending(x => x.Name);
5454
/// </code>
5555
/// </example>
56-
public static SortBuilder<T> Sort => new();
56+
public static DocumentSortBuilder<T> Sort => new();
57+
/// <summary>
58+
/// A builder for creating sort definitions for tables
59+
/// </summary>
60+
/// <example>
61+
/// <code>
62+
/// var sort = Builders&lt;DocumentType&gt;.TableSort;
63+
/// sort = sort.Ascending(x => x.Name);
64+
/// </code>
65+
/// </example>
66+
public static TableSortBuilder<T> TableSort => new();
5767
/// <summary>
5868
/// A builder for creating update definitions
5969
/// </summary>

src/DataStax.AstraDB.DataApi/Core/CommandOptions.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ public class CommandOptions
4040
internal string Keyspace { get; set; }
4141
internal JsonConverter InputConverter { get; set; }
4242
internal JsonConverter OutputConverter { get; set; }
43+
internal bool? SerializeGuidAsDollarUuid { get; set; }
44+
internal bool? SerializeDateAsDollarDate { get; set; }
4345

4446
/// <summary>
4547
/// The token to use for authentication
@@ -109,6 +111,8 @@ internal static CommandOptions Merge(params CommandOptions[] arr)
109111
InputConverter = list.Select(o => o.InputConverter).Merge(),
110112
OutputConverter = list.Select(o => o.OutputConverter).Merge(),
111113
IncludeKeyspaceInUrl = FirstNonNull(x => x.IncludeKeyspaceInUrl) ?? Defaults().IncludeKeyspaceInUrl,
114+
SerializeGuidAsDollarUuid = FirstNonNull(x => x.SerializeGuidAsDollarUuid) ?? Defaults().SerializeGuidAsDollarUuid,
115+
SerializeDateAsDollarDate = FirstNonNull(x => x.SerializeDateAsDollarDate) ?? Defaults().SerializeDateAsDollarDate,
112116
};
113117
return options;
114118
}
@@ -128,6 +132,8 @@ public static CommandOptions Defaults()
128132
HttpClientOptions = new HttpClientOptions(),
129133
Keyspace = Database.DefaultKeyspace,
130134
IncludeKeyspaceInUrl = true,
135+
SerializeGuidAsDollarUuid = true,
136+
SerializeDateAsDollarDate = true,
131137
};
132138
}
133139
}

src/DataStax.AstraDB.DataApi/Core/Commands/Command.cs

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
using DataStax.AstraDB.DataApi.Collections;
1818
using DataStax.AstraDB.DataApi.SerDes;
19+
using DataStax.AstraDB.DataApi.Tables;
1920
using Microsoft.Extensions.Logging;
2021
using System;
2122
using System.Collections.Generic;
@@ -109,7 +110,7 @@ internal async Task<ApiResponseWithStatus<TStatus>> RunAsyncReturnStatus<TStatus
109110
return response;
110111
}
111112

112-
internal async Task<ApiResponseWithData<TData, TStatus>> RunAsyncReturnData<TData, TDocument, TStatus>(bool runSynchronously)
113+
internal async Task<ApiResponseWithData<TData, TStatus>> RunAsyncReturnDocumentData<TData, TDocument, TStatus>(bool runSynchronously)
113114
{
114115
var useDocumentConverter = typeof(TDocument) != typeof(Document);
115116
if (useDocumentConverter)
@@ -127,6 +128,16 @@ internal async Task<ApiResponseWithData<TData, TStatus>> RunAsyncReturnData<TDat
127128
return response;
128129
}
129130

131+
internal async Task<ApiResponseWithData<TData, TStatus>> RunAsyncReturnData<TData, TStatus>(bool runSynchronously)
132+
{
133+
var response = await RunCommandAsync<ApiResponseWithData<TData, TStatus>>(HttpMethod.Post, runSynchronously).ConfigureAwait(false);
134+
if (response.Errors != null && response.Errors.Count > 0)
135+
{
136+
throw new CommandException(response.Errors);
137+
}
138+
return response;
139+
}
140+
130141
internal async Task<T> RunAsyncRaw<T>(bool runSynchronously)
131142
{
132143
return await RunAsyncRaw<T>(HttpMethod.Post, runSynchronously).ConfigureAwait(false);
@@ -142,9 +153,18 @@ internal string Serialize<T>(T input, JsonSerializerOptions serializeOptions = n
142153
var commandOptions = CommandOptions.Merge(_commandOptionsTree.ToArray());
143154
serializeOptions ??= new JsonSerializerOptions();
144155
serializeOptions.Converters.Add(new ObjectIdConverter());
145-
serializeOptions.Converters.Add(new SerDes.GuidConverter());
146-
serializeOptions.Converters.Add(new DateTimeConverter<DateTimeOffset>());
147-
serializeOptions.Converters.Add(new DateTimeConverter<DateTime>());
156+
serializeOptions.Converters.Add(new DurationConverter());
157+
serializeOptions.Converters.Add(new ByteArrayAsBinaryJsonConverter());
158+
if (commandOptions.SerializeDateAsDollarDate == true)
159+
{
160+
serializeOptions.Converters.Add(new DateTimeConverter<DateTimeOffset>());
161+
serializeOptions.Converters.Add(new DateTimeConverter<DateTime>());
162+
}
163+
if (commandOptions.SerializeGuidAsDollarUuid == true)
164+
{
165+
serializeOptions.Converters.Add(new GuidConverter());
166+
}
167+
serializeOptions.Converters.Add(new IpAddressConverter());
148168
if (commandOptions.InputConverter != null)
149169
{
150170
serializeOptions.Converters.Add(commandOptions.InputConverter);
@@ -166,15 +186,23 @@ internal T Deserialize<T>(string input)
166186
{
167187
var commandOptions = CommandOptions.Merge(_commandOptionsTree.ToArray());
168188
var deserializeOptions = new JsonSerializerOptions();
169-
189+
deserializeOptions.Converters.Add(new DurationConverter());
190+
deserializeOptions.Converters.Add(new ByteArrayAsBinaryJsonConverter());
170191
if (commandOptions.OutputConverter != null)
171192
{
172193
deserializeOptions.Converters.Add(commandOptions.OutputConverter);
173194
}
174195
deserializeOptions.Converters.Add(new ObjectIdConverter());
175-
deserializeOptions.Converters.Add(new SerDes.GuidConverter());
176-
deserializeOptions.Converters.Add(new DateTimeConverter<DateTimeOffset>());
177-
deserializeOptions.Converters.Add(new DateTimeConverter<DateTime>());
196+
if (commandOptions.SerializeGuidAsDollarUuid == true)
197+
{
198+
deserializeOptions.Converters.Add(new GuidConverter());
199+
}
200+
if (commandOptions.SerializeDateAsDollarDate == true)
201+
{
202+
deserializeOptions.Converters.Add(new DateTimeConverter<DateTimeOffset>());
203+
deserializeOptions.Converters.Add(new DateTimeConverter<DateTime>());
204+
}
205+
deserializeOptions.Converters.Add(new IpAddressConverter());
178206

179207
return JsonSerializer.Deserialize<T>(input, deserializeOptions);
180208
}

src/DataStax.AstraDB.DataApi/Core/Commands/DataApiKeywords.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,7 @@ internal static class DataApiKeywords
3030
internal const string Vector = "$vector";
3131
internal const string SortVector = "sortVector";
3232
internal const string Vectorize = "$vectorize";
33+
internal const string Binary = "$binary";
34+
internal const int SortAscending = 1;
35+
internal const int SortDescending = -1;
3336
}

0 commit comments

Comments
 (0)