Skip to content

Commit 6a46367

Browse files
Fixes and additions for 2dot2 (#28)
Co-authored-by: Stephen Hewitt <stephenh@sembit.com>
1 parent fc28773 commit 6a46367

Some content is hidden

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

58 files changed

+1617
-305
lines changed

src/DataStax.AstraDB.DataApi/Admin/AstraDatabasesAdmin.cs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,71 @@ internal async Task<DatabaseInfo> GetDatabaseInfoAsync(Guid dbGuid, CommandOptio
732732
return response;
733733
}
734734

735+
/// <summary>
736+
/// Synchronous version of <see cref="FindAvailableRegionsAsync()"/>
737+
/// </summary>
738+
/// <returns></returns>
739+
public List<RegionInfo> FindAvailableRegions()
740+
{
741+
return FindAvailableRegions(new FindAvailableRegionsCommandOptions());
742+
}
743+
744+
/// <summary>
745+
/// Synchronous version of <see cref="FindAvailableRegionsAsync(FindAvailableRegionsCommandOptions)"/>
746+
/// </summary>
747+
/// <returns></returns>
748+
public List<RegionInfo> FindAvailableRegions(FindAvailableRegionsCommandOptions options)
749+
{
750+
return FindAvailableRegionsAsync(options, true).ResultSync();
751+
}
752+
753+
/// <summary>
754+
/// Gets a list of available regions for database creation.
755+
/// </summary>
756+
/// <returns></returns>
757+
public Task<List<RegionInfo>> FindAvailableRegionsAsync()
758+
{
759+
return FindAvailableRegionsAsync(new FindAvailableRegionsCommandOptions());
760+
}
761+
762+
/// <summary>
763+
/// Gets a list of available regions for database creation.
764+
/// </summary>
765+
/// <param name="options"></param>
766+
/// <returns></returns>
767+
public Task<List<RegionInfo>> FindAvailableRegionsAsync(FindAvailableRegionsCommandOptions options)
768+
{
769+
return FindAvailableRegionsAsync(options, false);
770+
}
771+
772+
internal async Task<List<RegionInfo>> FindAvailableRegionsAsync(FindAvailableRegionsCommandOptions options, bool runSynchronously)
773+
{
774+
Dictionary<string, string> parms = new Dictionary<string, string>();
775+
string regionType = "";
776+
switch (options.RegionType)
777+
{
778+
case RegionTypeFilter.All:
779+
regionType = "all";
780+
break;
781+
case RegionTypeFilter.Serverless:
782+
regionType = "";
783+
break;
784+
case RegionTypeFilter.Vector:
785+
regionType = "vector";
786+
break;
787+
}
788+
parms.Add("region-type", regionType);
789+
parms.Add("filter-by-org", options.OnlyOrgEnabledRegions ? "enabled" : "disabled");
790+
var command = CreateCommand()
791+
.AddUrlPath("regions/serverless")
792+
.WithTimeoutManager(new DatabaseAdminTimeoutManager())
793+
.AddQueryParameters(parms)
794+
.AddCommandOptions(options);
795+
796+
var response = await command.RunAsyncRaw<List<RegionInfo>>(HttpMethod.Get, runSynchronously);
797+
return response;
798+
}
799+
735800
private DatabaseAdminAstra GetDatabaseAdmin(DatabaseInfo dbInfo)
736801
{
737802
var apiEndpoint = $"https://{dbInfo.Id}-{dbInfo.Region}.apps.astra.datastax.com";

src/DataStax.AstraDB.DataApi/Admin/DatabaseAdminAstra.cs

Lines changed: 96 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,14 @@ public class DatabaseAdminAstra : IDatabaseAdmin
4646
internal DatabaseAdminAstra(Database database, DataApiClient client, CommandOptions adminOptions)
4747
{
4848
Guard.NotNull(client, nameof(client));
49+
if (database.DatabaseId == null)
50+
{
51+
throw new ArgumentException("Database must have a valid DatabaseId to use DatabaseAdminAstra", nameof(database));
52+
}
4953
_client = client;
5054
_adminOptions = adminOptions;
5155
_database = database;
52-
_id = _database.DatabaseId;
56+
_id = _database.DatabaseId.Value;
5357
}
5458

5559
/// <summary>
@@ -575,6 +579,97 @@ internal async Task<FindEmbeddingProvidersResult> FindEmbeddingProvidersAsync(Co
575579
return response.Result;
576580
}
577581

582+
/// <summary>
583+
/// Finds and returns available reranking providers for the current database.
584+
/// </summary>
585+
/// <returns>A <see cref="FindRerankingProvidersResult"/> containing the discovered providers.</returns>
586+
/// <example>
587+
/// <code>
588+
/// var providers = admin.FindRerankingProviders();
589+
/// </code>
590+
/// </example>
591+
public FindRerankingProvidersResult FindRerankingProviders()
592+
{
593+
return FindRerankingProvidersAsync(null, true).ResultSync();
594+
}
595+
596+
/// <summary>
597+
/// Asynchronously finds and returns available reranking providers for the current database.
598+
/// </summary>
599+
/// <returns>
600+
/// A task that resolves to a <see cref="FindRerankingProvidersResult"/> containing the discovered providers.
601+
/// </returns>
602+
/// <example>
603+
/// <code>
604+
/// var providers = await admin.FindRerankingProvidersAsync();
605+
/// </code>
606+
/// </example>
607+
public Task<FindRerankingProvidersResult> FindRerankingProvidersAsync()
608+
{
609+
return FindRerankingProvidersAsync(null, false);
610+
}
611+
612+
/// <summary>
613+
/// Finds and returns available reranking providers for the current database using the specified command options.
614+
/// </summary>
615+
/// <param name="options">Optional settings that influence request execution.</param>
616+
/// <returns>A <see cref="FindRerankingProvidersResult"/> containing the discovered providers.</returns>
617+
/// <example>
618+
/// <code>
619+
/// var providers = admin.FindRerankingProviders(options);
620+
/// </code>
621+
/// </example>
622+
public FindRerankingProvidersResult FindRerankingProviders(FindRerankingProvidersCommandOptions options)
623+
{
624+
return FindRerankingProvidersAsync(options, true).ResultSync();
625+
}
626+
627+
/// <summary>
628+
/// Asynchronously finds and returns available reranking providers for the current database
629+
/// using the specified command options.
630+
/// </summary>
631+
/// <param name="options">Optional settings that influence request execution.</param>
632+
/// <returns>
633+
/// A task that resolves to a <see cref="FindRerankingProvidersResult"/> containing the discovered providers.
634+
/// </returns>
635+
/// <example>
636+
/// <code>
637+
/// var providers = await admin.FindRerankingProvidersAsync(options);
638+
/// </code>
639+
/// </example>
640+
public Task<FindRerankingProvidersResult> FindRerankingProvidersAsync(FindRerankingProvidersCommandOptions options)
641+
{
642+
return FindRerankingProvidersAsync(options, false);
643+
}
644+
645+
internal async Task<FindRerankingProvidersResult> FindRerankingProvidersAsync(FindRerankingProvidersCommandOptions options, bool runSynchronously)
646+
{
647+
if (options == null)
648+
{
649+
options = new FindRerankingProvidersCommandOptions();
650+
}
651+
options.DeserializeToObjectDictionary = true;
652+
var command = CreateCommandEmbedding()
653+
.AddCommandOptions(options)
654+
.WithTimeoutManager(new DatabaseAdminTimeoutManager())
655+
.WithPayload(new
656+
{
657+
findRerankingProviders = new
658+
{
659+
options = new
660+
{
661+
filterModelStatus = options.StatusString
662+
}
663+
}
664+
});
665+
666+
var response = await command
667+
.RunAsyncReturnStatus<FindRerankingProvidersResult>(runSynchronously)
668+
.ConfigureAwait(false);
669+
670+
return response.Result;
671+
}
672+
578673
private Command CreateCommandAdmin()
579674
{
580675
return new Command(_database.Client, _optionsTree, new AdminCommandUrlBuilder());
@@ -584,6 +679,5 @@ private Command CreateCommandEmbedding()
584679
{
585680
return new Command(_database.Client, _optionsTree, new EmbeddingCommandUrlBuilder(_database));
586681
}
587-
588682
}
589683
}

src/DataStax.AstraDB.DataApi/Admin/DatabaseAdminOther.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ namespace DataStax.AstraDB.DataApi.Admin
2525
{
2626
public class DatabaseAdminOther : IDatabaseAdmin
2727
{
28-
private readonly Guid _id;
2928
private readonly Database _database;
3029
private readonly CommandOptions _adminOptions;
3130
private readonly DataApiClient _client;
@@ -37,16 +36,17 @@ internal DatabaseAdminOther(Database database, DataApiClient client, CommandOpti
3736
_client = client;
3837
_adminOptions = adminOptions;
3938
_database = database;
40-
_id = _database.DatabaseId;
41-
}
42-
43-
public DatabaseAdminOther(Guid id)
44-
{
45-
_id = id;
4639
}
4740

4841
public IEnumerable<string> ListKeyspaces()
4942
{
43+
/*
44+
const resp = await this.#httpClient.executeCommand({ findKeyspaces: {} }, {
45+
timeoutManager: this.#httpClient.tm.single('keyspaceAdminTimeoutMs', options),
46+
methodName: 'dbAdmin.listKeyspaces',
47+
keyspace: null,
48+
});
49+
*/
5050
throw new NotImplementedException();
5151
}
5252

@@ -184,5 +184,11 @@ public Task<bool> DoesKeyspaceExistAsync(string keyspace)
184184
{
185185
throw new NotImplementedException();
186186
}
187+
188+
public FindRerankingProvidersResult FindRerankingProviders()
189+
{
190+
throw new NotImplementedException();
191+
}
192+
187193
}
188194
}

src/DataStax.AstraDB.DataApi/Admin/IDatabaseAdmin.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public interface IDatabaseAdmin
2626
IEnumerable<string> ListKeyspaces();
2727
Task<IEnumerable<string>> ListKeyspacesAsync();
2828
FindEmbeddingProvidersResult FindEmbeddingProviders();
29+
FindRerankingProvidersResult FindRerankingProviders();
2930
Database GetDatabase();
3031
void CreateKeyspace(string keyspace);
3132
void CreateKeyspace(string keyspace, CommandOptions options);

src/DataStax.AstraDB.DataApi/Admin/ListDatabaseOptions.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
* limitations under the License.
1515
*/
1616

17-
using DataStax.AstraDB.DataApi.Core;
1817
using System.Text.Json.Serialization;
1918

2019
namespace DataStax.AstraDB.DataApi.Admin;

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

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,50 @@
1818

1919
namespace DataStax.AstraDB.DataApi.Core;
2020

21-
internal class ApiError
21+
/// <summary>
22+
/// Represents an error returned by the API.
23+
/// </summary>
24+
public class ApiError
2225
{
26+
/// <summary>
27+
/// The error message.
28+
/// </summary>
2329
[JsonPropertyName("message")]
2430
public string Message { get; set; }
2531

2632
[JsonPropertyName("code")]
27-
public string Code { get; set; }
33+
[JsonInclude]
34+
internal string Code { get; set; }
2835

36+
/// <summary>
37+
/// The error code.
38+
/// </summary>
2939
[JsonPropertyName("errorCode")]
3040
public string ErrorCode { get; set; }
3141

3242
[JsonPropertyName("exceptionClass")]
33-
public string ExceptionClass { get; set; }
43+
[JsonInclude]
44+
internal string ExceptionClass { get; set; }
3445

3546
[JsonPropertyName("family")]
36-
public string Family { get; set; }
47+
[JsonInclude]
48+
internal string Family { get; set; }
3749

50+
/// <summary>
51+
/// The scope of the error.
52+
/// </summary>
3853
[JsonPropertyName("scope")]
3954
public string Scope { get; set; }
4055

56+
/// <summary>
57+
/// The title of the error.
58+
/// </summary>
4159
[JsonPropertyName("title")]
4260
public string Title { get; set; }
4361

62+
/// <summary>
63+
/// The unique identifier for the error instance.
64+
/// </summary>
4465
[JsonPropertyName("id")]
4566
public string Id { get; set; }
4667
}

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

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class Builders
3030
/// <example>
3131
/// <code>
3232
/// var index = Builders.TableIndex.Text();
33-
/// table.CreateTextIndex("index_name", r => r.SomeTextProperty, index);
33+
/// table.CreateIndex("index_name", r => r.SomeTextProperty, index);
3434
/// </code>
3535
/// </example>
3636
/// </summary>
@@ -93,15 +93,24 @@ public class Builders<T>
9393
/// </code>
9494
/// </example>
9595
public static UpdateBuilder<T> Update => new();
96-
9796
/// <summary>
9897
/// A builder for creating table indexes
9998
/// <example>
10099
/// <code>
101100
/// var index = Builders.TableIndex.Text();
102-
/// table.CreateTextIndex("index_name", r => r.SomeTextProperty, index);
101+
/// table.CreateIndex("index_name", r => r.SomeTextProperty, index);
103102
/// </code>
104103
/// </example>
105104
/// </summary>
106105
public static TableIndexBuilder TableIndex => new();
106+
/// <summary>
107+
/// A builder for creating sort definitions for tables
108+
/// </summary>
109+
/// <example>
110+
/// <code>
111+
/// var sort = Builders&lt;DocumentType&gt;.TableSort;
112+
/// sort = sort.Ascending(x => x.Name);
113+
/// </code>
114+
/// </example>
115+
public static TableFilterBuilder<T> TableFilter => new();
107116
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public class CommandOptions
4242
internal JsonConverter OutputConverter { get; set; }
4343
internal bool? SerializeGuidAsDollarUuid { get; set; }
4444
internal bool? SerializeDateAsDollarDate { get; set; }
45+
internal bool? DeserializeToObjectDictionary { get; set; } = false;
4546

4647
/// <summary>
4748
/// The token to use for authentication
@@ -143,6 +144,7 @@ internal static CommandOptions Merge(params CommandOptions[] arr)
143144
IncludeKeyspaceInUrl = FirstNonNull(x => x.IncludeKeyspaceInUrl) ?? Defaults().IncludeKeyspaceInUrl,
144145
SerializeGuidAsDollarUuid = FirstNonNull(x => x.SerializeGuidAsDollarUuid) ?? Defaults().SerializeGuidAsDollarUuid,
145146
SerializeDateAsDollarDate = FirstNonNull(x => x.SerializeDateAsDollarDate) ?? Defaults().SerializeDateAsDollarDate,
147+
DeserializeToObjectDictionary = FirstNonNull(x => x.DeserializeToObjectDictionary) ?? Defaults().DeserializeToObjectDictionary,
146148
BulkOperationCancellationToken = list.Select(o => o.BulkOperationCancellationToken).Merge()
147149
};
148150
return options;

0 commit comments

Comments
 (0)