Skip to content

Commit 40a7cc2

Browse files
Update Core to 2.24. (#433)
* Regenerate bindings for 2.24. No new APIs were added; some just moved to stable from experimental. * Add two now-stable APIs. * Update documentation of `ls_recursive`. * Bump Core to 2.24.0. * Run nightly builds on release-2.24. * Bump version to 5.14.0. * Add tests. * Improve array upgrade test.
1 parent f1d57f9 commit 40a7cc2

File tree

8 files changed

+254
-124
lines changed

8 files changed

+254
-124
lines changed

.github/workflows/nightly.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
- os: windows-latest
2828
platform: windows-x86_64
2929
- tag: dev
30-
tag: [release-2.23, dev]
30+
tag: [release-2.24, dev]
3131
runs-on: ${{ matrix.os }}
3232
steps:
3333
- name: Checkout TileDB
@@ -71,7 +71,7 @@ jobs:
7171
strategy:
7272
fail-fast: false
7373
matrix:
74-
tag: [release-2.23, dev]
74+
tag: [release-2.24, dev]
7575
runs-on: ubuntu-latest
7676
steps:
7777
- name: Checkout TileDB-CSharp
@@ -112,7 +112,7 @@ jobs:
112112
fail-fast: false
113113
matrix:
114114
os: [ubuntu-latest, macos-latest, windows-latest]
115-
tag: [release-2.23, dev]
115+
tag: [release-2.24, dev]
116116
runs-on: ${{ matrix.os }}
117117
steps:
118118
- name: Checkout TileDB-CSharp

Directory.Packages.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
44
<TileDBNativePackageName>TileDB.Native</TileDBNativePackageName>
55
<TileDBNativeVersionMajor>2</TileDBNativeVersionMajor>
6-
<TileDBNativeVersionMinor>23</TileDBNativeVersionMinor>
6+
<TileDBNativeVersionMinor>24</TileDBNativeVersionMinor>
77
<TileDBNativePackageVersion>[$(TileDBNativeVersionMajor).$(TileDBNativeVersionMinor).0,$(TileDBNativeVersionMajor).$([MSBuild]::Add($(TileDBNativeVersionMinor), 1)).0)</TileDBNativePackageVersion>
88

99
<!-- The DevelopmentBuild property switches to the locally built native packages.

sources/TileDB.CSharp/Array.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,18 @@ public void Create(ArraySchema schema)
329329
Create(_ctx, _uri, schema);
330330
}
331331

332+
/// <summary>
333+
/// Deletes an array from storage.
334+
/// </summary>
335+
/// <param name="ctx">The <see cref="CSharp.Context"/> to use.</param>
336+
/// <param name="uri">The array's URI.</param>
337+
public static void Delete(Context ctx, string uri)
338+
{
339+
using var msUri = new MarshaledString(uri);
340+
using var ctxHandle = ctx.Handle.Acquire();
341+
ctx.handle_error(Methods.tiledb_array_delete(ctxHandle, msUri));
342+
}
343+
332344
/// <summary>
333345
/// Applies an <see cref="ArraySchemaEvolution"/> to the schema of an array.
334346
/// </summary>
@@ -367,6 +379,20 @@ public void Evolve(ArraySchemaEvolution schemaEvolution)
367379
Evolve(_ctx, _uri, schemaEvolution);
368380
}
369381

382+
/// <summary>
383+
/// Upgrades the storage format version of an array.
384+
/// </summary>
385+
/// <param name="ctx">The <see cref="CSharp.Context"/> to use.</param>
386+
/// <param name="uri">The array's URI.</param>
387+
/// <param name="config">Optional <see cref="CSharp.Config"/> to customize the process.</param>
388+
public static void UpgradeVersion(Context ctx, string uri, Config? config = null)
389+
{
390+
using var msUri = new MarshaledString(uri);
391+
using var ctxHandle = ctx.Handle.Acquire();
392+
using var configHandle = config?.Handle.Acquire() ?? default;
393+
ctx.handle_error(Methods.tiledb_array_upgrade_version(ctxHandle, msUri, configHandle));
394+
}
395+
370396
/// <summary>
371397
/// Consolidates an array.
372398
/// </summary>

sources/TileDB.CSharp/Interop/Methods.cs

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

sources/TileDB.CSharp/TileDB.CSharp.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
77
<Nullable>enable</Nullable>
88
<RootNamespace>TileDB.CSharp</RootNamespace>
9-
<Version>5.13.0</Version>
9+
<Version>5.14.0</Version>
1010
<Description>C# wrapper of the TileDB Embedded universal data engine.</Description>
1111
<PackageReadmeFile>README.md</PackageReadmeFile>
1212
<GenerateDocumentationFile>true</GenerateDocumentationFile>
1313
<EnablePackageValidation>true</EnablePackageValidation>
14-
<PackageValidationBaselineVersion>5.12.0</PackageValidationBaselineVersion>
14+
<PackageValidationBaselineVersion>5.13.0</PackageValidationBaselineVersion>
1515
<NoWarn>$(NoWarn);TILEDB0012;TILEDB0013;TILEDB0014</NoWarn>
1616
</PropertyGroup>
1717

sources/TileDB.CSharp/VFS.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ public List<string> GetChildren(string uri)
381381
/// <returns>A <see cref="List{T}"/> containing the files of the directory in <paramref name="uri"/>
382382
/// and their sizes.</returns>
383383
/// <remarks>
384-
/// This operation is supported only on URIs to AWS S3.
384+
/// This operation is supported only on URIs to local file system, S3, Azure and GCS.
385385
/// </remarks>
386386
public List<(string Uri, ulong Size)> GetChildrenRecursive(string uri)
387387
{
@@ -439,7 +439,7 @@ public void VisitChildren<T>(string uri, Func<string, T, bool> callback, T callb
439439
/// <param name="callbackArg">An argument that will be passed to <paramref name="callback"/>.</param>
440440
/// <typeparam name="T">The type of <paramref name="callbackArg"/>.</typeparam>
441441
/// <remarks>
442-
/// This operation is supported only on local filesystem and AWS S3 URIs.
442+
/// This operation is supported only on URIs to local file system, S3, Azure and GCS.
443443
/// </remarks>
444444
public void VisitChildrenRecursive<T>(string uri, Func<string, ulong, T, bool> callback, T callbackArg)
445445
{

tests/TileDB.CSharp.Test/ArrayTest.cs

Lines changed: 100 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public void TestDenseArray()
2323
var array = new Array(context, tmpArrayPath);
2424
Assert.IsNotNull(array);
2525

26-
var array_schema = BuildDenseArraySchema(context);
26+
var array_schema = ArrayTest.BuildDenseArraySchema(context);
2727
Assert.IsNotNull(array_schema);
2828

2929
array.Create(array_schema);
@@ -75,7 +75,7 @@ public void TestSparseArray()
7575
var array = new Array(context, tmpArrayPath);
7676
Assert.IsNotNull(array);
7777

78-
var array_schema = BuildSparseArraySchema(context);
78+
var array_schema = ArrayTest.BuildSparseArraySchema(context);
7979
Assert.IsNotNull(array_schema);
8080

8181
array.Create(array_schema);
@@ -133,7 +133,7 @@ public void TestConsolidateFragments()
133133

134134
using var uri = new TemporaryDirectory("array_consolidate_fragments");
135135

136-
using (var schema = BuildDenseArraySchema(context))
136+
using (var schema = ArrayTest.BuildDenseArraySchema(context))
137137
using (var array = new Array(context, uri))
138138
{
139139
array.Create(schema);
@@ -170,7 +170,102 @@ public void TestConsolidateFragments()
170170
Assert.AreEqual(FragmentCount, fragmentInfo.FragmentToVacuumCount);
171171
}
172172

173-
private ArraySchema BuildDenseArraySchema(Context context)
173+
[TestMethod]
174+
public void TestDelete()
175+
{
176+
var context = Context.GetDefault();
177+
178+
using var uri = new TemporaryDirectory("array_delete");
179+
180+
using (var schema = BuildDenseArraySchema(context))
181+
{
182+
Array.Create(context, uri, schema);
183+
}
184+
185+
Assert.AreEqual(ObjectType.Array, context.GetObjectType(uri));
186+
187+
Array.Delete(context, uri);
188+
189+
Assert.AreEqual(ObjectType.Invalid, context.GetObjectType(uri));
190+
}
191+
192+
/// <summary>
193+
/// Base-64 encoded zip file of an array with an old format version.
194+
/// </summary>
195+
/// <remarks>
196+
/// The array was taken from <see href="https://github.com/TileDB-Inc/TileDB-Py/blob/3ea00dbc2eabce972bea8af1ea8a4dc420e00a72/tiledb/tests/test_libtiledb.py#L311-L341"/>
197+
/// and repackaged to a zip file, because <c>System.Formats.Tar</c> is available only in .NET 7+.
198+
/// </remarks>
199+
const string OldVersionArrayZip = """
200+
UEsDBBQAAAAAAAQHtFIAAAAAAAAAAAAAAABDAAAAX18xNjIxNDYxMzY3OTcyXzE2MjE0NjEzNjc5
201+
NzJfMWJlOWNlMDM3NDI1NGMyNGI2NjBlZDE3OGU3OWQ1ZTdfNS5va1BLAwQUAAAACAAEB7RSkZnF
202+
iBEAAAAsAAAARQAAAF9fMTYyMTQ2MTM2Nzk3Ml8xNjIxNDYxMzY3OTcyXzFiZTljZTAzNzQyNTRj
203+
MjRiNjYwZWQxNzhlNzlkNWU3XzUvLnRkYmNkgAAJKAYBRijNBKVZoTQAUEsDBBQAAAAIAAQHtFIu
204+
OY4+jQAAAI0EAABYAAAAX18xNjIxNDYxMzY3OTcyXzE2MjE0NjEzNjc5NzJfMWJlOWNlMDM3NDI1
205+
NGMyNGI2NjBlZDE3OGU3OWQ1ZTdfNS9fX2ZyYWdtZW50X21ldGFkYXRhLnRkYmNlYGCwYIAABSjN
206+
wghlMAiBSUYGkAAjK4gAs5DUiwCxAJTPiCRWwfg4KSEhoSVJgZXdJ0CMgXEJAz/IAH2oWpgeYu0C
207+
qedmQLULJlbBmJziwAqym2nUCphxMH2jVoxaAbECAZiQFIMAM5TWYUAFDgzEgRwofR5KG0ENngql
208+
f0DpaKjF+6C0ItTiFqgDAFBLAwQUAAAACAAEB7RSiHDSEyYAAABAAAAARgAAAF9fMTYyMTQ2MTM2
209+
Nzk3Ml8xNjIxNDYxMzY3OTcyXzFiZTljZTAzNzQyNTRjMjRiNjYwZWQxNzhlNzlkNWU3XzUvZC50
210+
ZGJjZIAACSCWAWIBKJ8RSUxjq/5fBYm5DAwRQHEmqAImBu1IHgZuAFBLAwQUAAAAAACkCbRSAAAA
211+
AAAAAAAAAAAAQwAAAF9fMTYyMTQ2MjM4Nzg5N18xNjIxNDYyMzg3ODk3Xzk5ZWQxNDgxMzc5ZTQ0
212+
ZTk4N2U0NTM1YWIyYWExYjBjXzUub2tQSwMEFAAAAAgApAm0UpGZxYgRAAAALAAAAEUAAABfXzE2
213+
MjE0NjIzODc4OTdfMTYyMTQ2MjM4Nzg5N185OWVkMTQ4MTM3OWU0NGU5ODdlNDUzNWFiMmFhMWIw
214+
Y181Ly50ZGJjZIAACSgGAUYozQSlWaE0AFBLAwQUAAAACACkCbRSLjmOPo0AAACNBAAAWAAAAF9f
215+
MTYyMTQ2MjM4Nzg5N18xNjIxNDYyMzg3ODk3Xzk5ZWQxNDgxMzc5ZTQ0ZTk4N2U0NTM1YWIyYWEx
216+
YjBjXzUvX19mcmFnbWVudF9tZXRhZGF0YS50ZGJjZWBgsGCAAAUozcIIZTAIgUlGBpAAIyuIALOQ
217+
1IsAsQCUz4gkVsH4OCkhIaElSYGV3SdAjIFxCQM/yAB9qFqYHmLtAqnnZkC1CyZWwZic4sAKsptp
218+
1AqYcTB9o1aMWgGxAgGYkBSDADOU1mFABQ4MxIEcKH0eShtBDZ4KpX9A6WioxfugtCLU4haoAwBQ
219+
SwMEFAAAAAgApAm0Uohw0hMmAAAAQAAAAEYAAABfXzE2MjE0NjIzODc4OTdfMTYyMTQ2MjM4Nzg5
220+
N185OWVkMTQ4MTM3OWU0NGU5ODdlNDUzNWFiMmFhMWIwY181L2QudGRiY2SAAAkglgFiASifEUlM
221+
Y6v+XwWJuQwMEUBxJqgCJgbtSB4GbgBQSwMEFAAAAAgAAwe0UsP6HbxgAAAAkAAAABIAAABfX2Fy
222+
cmF5X3NjaGVtYS50ZGJjZWBgiGGAgAYozcIIZTAIgUlGBpAAIyuIALOQ1FsAsQCUz4gkVsGYnMrA
223+
5MbGxlgqwMwi4RjDphYm8FGew8DV4ZPCnEOsSoo5CzgTzJoSmgwTeTqSFhSlxDIwsnNcAwBQSwME
224+
FAAAAAAAAwe0UgAAAAAAAAAAAAAAAAoAAABfX2xvY2sudGRiUEsBAhQAFAAAAAAABAe0UgAAAAAA
225+
AAAAAAAAAEMAAAAAAAAAAAAgAAAAAAAAAF9fMTYyMTQ2MTM2Nzk3Ml8xNjIxNDYxMzY3OTcyXzFi
226+
ZTljZTAzNzQyNTRjMjRiNjYwZWQxNzhlNzlkNWU3XzUub2tQSwECFAAUAAAACAAEB7RSkZnFiBEA
227+
AAAsAAAARQAAAAAAAAAAACAAAABhAAAAX18xNjIxNDYxMzY3OTcyXzE2MjE0NjEzNjc5NzJfMWJl
228+
OWNlMDM3NDI1NGMyNGI2NjBlZDE3OGU3OWQ1ZTdfNS8udGRiUEsBAhQAFAAAAAgABAe0Ui45jj6N
229+
AAAAjQQAAFgAAAAAAAAAAAAgAAAA1QAAAF9fMTYyMTQ2MTM2Nzk3Ml8xNjIxNDYxMzY3OTcyXzFi
230+
ZTljZTAzNzQyNTRjMjRiNjYwZWQxNzhlNzlkNWU3XzUvX19mcmFnbWVudF9tZXRhZGF0YS50ZGJQ
231+
SwECFAAUAAAACAAEB7RSiHDSEyYAAABAAAAARgAAAAAAAAAAACAAAADYAQAAX18xNjIxNDYxMzY3
232+
OTcyXzE2MjE0NjEzNjc5NzJfMWJlOWNlMDM3NDI1NGMyNGI2NjBlZDE3OGU3OWQ1ZTdfNS9kLnRk
233+
YlBLAQIUABQAAAAAAKQJtFIAAAAAAAAAAAAAAABDAAAAAAAAAAAAIAAAAGICAABfXzE2MjE0NjIz
234+
ODc4OTdfMTYyMTQ2MjM4Nzg5N185OWVkMTQ4MTM3OWU0NGU5ODdlNDUzNWFiMmFhMWIwY181Lm9r
235+
UEsBAhQAFAAAAAgApAm0UpGZxYgRAAAALAAAAEUAAAAAAAAAAAAgAAAAwwIAAF9fMTYyMTQ2MjM4
236+
Nzg5N18xNjIxNDYyMzg3ODk3Xzk5ZWQxNDgxMzc5ZTQ0ZTk4N2U0NTM1YWIyYWExYjBjXzUvLnRk
237+
YlBLAQIUABQAAAAIAKQJtFIuOY4+jQAAAI0EAABYAAAAAAAAAAAAIAAAADcDAABfXzE2MjE0NjIz
238+
ODc4OTdfMTYyMTQ2MjM4Nzg5N185OWVkMTQ4MTM3OWU0NGU5ODdlNDUzNWFiMmFhMWIwY181L19f
239+
ZnJhZ21lbnRfbWV0YWRhdGEudGRiUEsBAhQAFAAAAAgApAm0Uohw0hMmAAAAQAAAAEYAAAAAAAAA
240+
AAAgAAAAOgQAAF9fMTYyMTQ2MjM4Nzg5N18xNjIxNDYyMzg3ODk3Xzk5ZWQxNDgxMzc5ZTQ0ZTk4
241+
N2U0NTM1YWIyYWExYjBjXzUvZC50ZGJQSwECFAAUAAAACAADB7RSw/odvGAAAACQAAAAEgAAAAAA
242+
AAAAACAAAADEBAAAX19hcnJheV9zY2hlbWEudGRiUEsBAhQAFAAAAAAAAwe0UgAAAAAAAAAAAAAA
243+
AAoAAAAAAAAAAAAgAAAAVAUAAF9fbG9jay50ZGJQSwUGAAAAAAoACgA0BAAAfAUAAAAA
244+
""";
245+
246+
[TestMethod]
247+
public void TestUpgradeVersion()
248+
{
249+
var context = Context.GetDefault();
250+
251+
using var uri = new TemporaryDirectory("array_upgrade_version");
252+
253+
TestUtil.UnzipBase64String(uri, OldVersionArrayZip);
254+
255+
using (var schema = Array.LoadArraySchema(context, uri))
256+
{
257+
Assert.AreEqual(5u, schema.FormatVersion());
258+
}
259+
260+
Array.UpgradeVersion(context, uri);
261+
262+
using (var schema = Array.LoadArraySchema(context, uri))
263+
{
264+
Assert.IsTrue(schema.FormatVersion() >= 15u, "Array was not upgraded.");
265+
}
266+
}
267+
268+
private static ArraySchema BuildDenseArraySchema(Context context)
174269
{
175270
var dimension = Dimension.Create<short>(context, "dim1", 1, 10, 5);
176271
Assert.IsNotNull(dimension);
@@ -199,7 +294,7 @@ private ArraySchema BuildDenseArraySchema(Context context)
199294
return array_schema;
200295
}
201296

202-
private ArraySchema BuildSparseArraySchema(Context context)
297+
private static ArraySchema BuildSparseArraySchema(Context context)
203298
{
204299
var dim1 = Dimension.Create<short>(context, "dim1", 1, 10, 5);
205300
Assert.IsNotNull(dim1);

tests/TileDB.CSharp.Test/TestUtil.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections;
33
using System.Collections.Generic;
44
using System.IO;
5+
using System.IO.Compression;
56
using System.IO.Enumeration;
67
using System.Linq;
78
using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -244,4 +245,12 @@ public static void PrintLocalSchema(ArraySchema schema)
244245
$"Nullable: {pair.Value.Nullable()};");
245246
}
246247
}
248+
249+
public static void UnzipBase64String(string path, string data)
250+
{
251+
byte[] bytes = Convert.FromBase64String(data);
252+
using var stream = new MemoryStream(bytes, writable: false);
253+
using var zipFile = new ZipArchive(stream, ZipArchiveMode.Read);
254+
zipFile.ExtractToDirectory(path, overwriteFiles: false);
255+
}
247256
}

0 commit comments

Comments
 (0)