Skip to content

Commit fd934d4

Browse files
authored
Enable creation of nonvector DBs (#215)
1 parent b312b91 commit fd934d4

2 files changed

Lines changed: 60 additions & 4 deletions

File tree

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
using DataStax.AstraDB.DataApi.Core;
1818
using System.Text.Json.Serialization;
1919
using System.Collections.Generic;
20+
using System.Linq;
2021

2122
namespace DataStax.AstraDB.DataApi.Admin;
2223

@@ -25,9 +26,10 @@ namespace DataStax.AstraDB.DataApi.Admin;
2526
/// </summary>
2627
public class CreateDatabaseOptions : BlockingCommandOptions
2728
{
29+
private static readonly string[] NonVectorDBTypeStrings = { "nonvector", "non-vector", "non vector", "non_vector" };
2830
private const string DefaultTier = "serverless";
2931
private const int DefaultCapacityUnits = 1;
30-
private const string DefaultDbType = "vector";
32+
private const string DefaultDBType = "vector";
3133

3234
/// <summary>
3335
/// Name of the database to be created.
@@ -64,9 +66,9 @@ public class CreateDatabaseOptions : BlockingCommandOptions
6466
public int CapacityUnits { get; set; } = DefaultCapacityUnits;
6567

6668
/// <summary>
67-
/// Database type (defaults to "vector").
69+
/// Database type: "vector" (default) / "nonvector".
6870
/// </summary>
69-
public string DBType { get; set; } = DefaultDbType;
71+
public string DBType { get; set; } = DefaultDBType;
7072

7173
/// <summary>
7274
/// PCU group ID to use for provisioning the database. Optional.
@@ -79,7 +81,10 @@ internal object ToPayload()
7981

8082
payload["tier"] = Tier;
8183
payload["capacityUnits"] = CapacityUnits;
82-
payload["dbType"] = DBType;
84+
// explicit null DBType is passed into the payload (the DevOps API will error at that)
85+
if (DBType == null || !NonVectorDBTypeStrings.Contains(DBType.ToLower())) {
86+
payload["dbType"] = DBType;
87+
}
8388
if ( Name != null )
8489
{
8590
payload["name"] = Name;

test/DataStax.AstraDB.DataApi.IntegrationTests/Tests/AdminTests.cs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using DataStax.AstraDB.DataApi.Core;
1919
using DataStax.AstraDB.DataApi.Core.Results;
2020
using DataStax.AstraDB.DataApi.IntegrationTests.Fixtures;
21+
using System.Net.Http;
2122
using Xunit;
2223

2324
namespace DataStax.AstraDB.DataApi.IntegrationTests;
@@ -704,6 +705,27 @@ public async Task CreateDatabaseNonblockingAsync()
704705
|| dbStatus2 == AstraDatabaseStatus.PENDING);
705706
}
706707

708+
// dotnet test --filter FullyQualifiedName=DataStax.AstraDB.DataApi.IntegrationTests.AdminTests.CreateDatabaseNullDBTypeAsync
709+
[Fact(Skip = AdminCollection.SkipMessage)]
710+
public async Task CreateDatabaseNullDBTypeAsync()
711+
{
712+
var dbName = "test-db-create-nulldbtype-async-x";
713+
var creationOptions = new CreateDatabaseOptions() {
714+
Name = dbName,
715+
CloudProvider = CloudProviderType.AWS,
716+
Region = "us-west-2",
717+
waitForCompletion = false,
718+
DBType = null,
719+
};
720+
721+
var astraAdmin = fixture.Client.GetAstraDatabasesAdmin();
722+
723+
await Assert.ThrowsAsync<HttpRequestException>(async () =>
724+
{
725+
await astraAdmin.CreateDatabaseAsync(creationOptions);
726+
});
727+
}
728+
707729
// dotnet test --filter FullyQualifiedName=DataStax.AstraDB.DataApi.IntegrationTests.AdminTests.CreateDatabaseBlockingSync
708730
[Fact(Skip = AdminCollection.SkipMessage)]
709731
public void CreateDatabaseBlockingSync()
@@ -820,6 +842,35 @@ public async Task CreateDatabaseCorrectPCUGroupNonblockingAsync()
820842
|| dbStatus2 == AstraDatabaseStatus.PENDING);
821843
}
822844

845+
// dotnet test --filter FullyQualifiedName=DataStax.AstraDB.DataApi.IntegrationTests.AdminTests.CreateNonvectorDatabaseNonblockingAsync
846+
[Fact(Skip = AdminCollection.SkipMessage)]
847+
public async Task CreateNonvectorDatabaseNonblockingAsync()
848+
{
849+
var dbName = "test-nonvector-db-create-async-x";
850+
var creationOptions = new CreateDatabaseOptions() {
851+
Name = dbName,
852+
CloudProvider = CloudProviderType.AWS,
853+
Region = "us-west-2",
854+
waitForCompletion = false,
855+
DBType = "NonVector",
856+
};
857+
858+
var astraAdmin = fixture.Client.GetAstraDatabasesAdmin();
859+
860+
var dbAdmin = await astraAdmin.CreateDatabaseAsync(creationOptions);
861+
862+
var dbStatus = await astraAdmin.GetDatabaseStatusAsync(dbAdmin.Id);
863+
Assert.True(dbStatus == AstraDatabaseStatus.ASSOCIATING
864+
|| dbStatus == AstraDatabaseStatus.INITIALIZING
865+
|| dbStatus == AstraDatabaseStatus.PENDING);
866+
867+
var dbAdmin2 = astraAdmin.GetDatabaseAdmin(dbAdmin.GetAPIEndpoint());
868+
var dbStatus2 = await astraAdmin.GetDatabaseStatusAsync(dbAdmin2.Id);
869+
Assert.True(dbStatus2 == AstraDatabaseStatus.ASSOCIATING
870+
|| dbStatus2 == AstraDatabaseStatus.INITIALIZING
871+
|| dbStatus2 == AstraDatabaseStatus.PENDING);
872+
}
873+
823874
// dotnet test --filter FullyQualifiedName=DataStax.AstraDB.DataApi.IntegrationTests.AdminTests.DropDatabaseNonblockingSync
824875
[Fact(Skip = AdminCollection.SkipMessage)]
825876
public void DropDatabaseNonblockingSync()

0 commit comments

Comments
 (0)