Skip to content

Commit 1391e6c

Browse files
wjones127claude
andauthored
build(deps)!: bump lance-namespace to 0.11.1 across Java and Python (#8903)
The Java and Python `lance-namespace` pins had drifted several releases behind the Rust one: `java/pom.xml` was on 0.7.7 and `python/pyproject.toml` on `>=0.8.5,<0.9`, while Rust was already on 0.11.0. This bumps all three to 0.11.1, so the bindings stop being four releases apart from the core. No feature work — this isolates the dependency drift ahead of ENT-2084 (multiple columns for the merge-insert `on` key), which needs a namespace release newer than any of these pins. The Java changes are taken from #8623 and rebased onto current main. That PR's `rest.rs` tests are left out, as they cover vector index params (ENT-1892) rather than the version bump. ## Breaking changes 0.11 changes four `LanceNamespace` methods to return a response object instead of a bare value. Both bindings are updated to match, and callers need to unwrap: | method | before | after | unwrap with | |---|---|---|---| | `countTableRows` / `count_table_rows` | `Long` / `int` | `CountTableRowsResponse` | `.getCount()` / `.count` | | `queryTable` / `query_table` | `byte[]` / `bytes` | `QueryTableResponse` | `.getData()` / `.data` | | `namespaceExists` / `namespace_exists` | `void` / `None` | `NamespaceExistsResponse` | — | | `tableExists` / `table_exists` | `void` / `None` | `TableExistsResponse` | — | The implementations wrap the values the native layer already returns, so behavior is unchanged. Anyone implementing `LanceNamespace` themselves will need the same signature updates. The compat harness also gains a tier in its namespace pin map, which tells it what `lance-namespace` range to install alongside each *published* pylance release. Releases cut after 12.0.0b5 will carry the new `>=0.11.1,<0.12` range, so the map needs an entry for them; 12.0.0b5 and earlier keep the old one. ## Testing Ran the namespace integration suite against LocalStack (`--run-integration`, 30 passed), which is otherwise skipped by default. ## Not included `jackson-databind` stays explicitly pinned at 2.15.2 in `java/pom.xml` while `jackson-core`, `jackson-annotations` and `jackson-datatype-jsr310` now arrive transitively from `lance-namespace-core` at 2.18.3. That skew predates this PR but widens with it, and registering a 2.18 module on a 2.15 databind is the kind of mismatch that surfaces at runtime rather than compile time. Worth aligning separately. Separately, `[tool.pyright].include` in `python/pyproject.toml` is an explicit allowlist that does not cover `python/lance/namespace.py`, so nothing type-checks these Python signatures against the ABC — unlike Java, where the interface makes a mismatch a compile error. The file carries a `TODO: expand this list`; adding namespace.py to it is a reasonable follow-up. --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent a5df712 commit 1391e6c

16 files changed

Lines changed: 135 additions & 71 deletions

File tree

‎Cargo.lock‎

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎Cargo.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ lance-io = { version = "=12.0.0-beta.5", path = "./rust/lance-io", default-featu
7373
lance-linalg = { version = "=12.0.0-beta.5", path = "./rust/lance-linalg" }
7474
lance-namespace = { version = "=12.0.0-beta.5", path = "./rust/lance-namespace" }
7575
lance-namespace-impls = { version = "=12.0.0-beta.5", path = "./rust/lance-namespace-impls" }
76-
lance-namespace-reqwest-client = "0.11.0"
76+
lance-namespace-reqwest-client = "0.11.1"
7777
lance-select = { version = "=12.0.0-beta.5", path = "./rust/lance-select" }
7878
lance-tokenizer = { version = "=12.0.0-beta.5", path = "./rust/lance-tokenizer" }
7979
lance-table = { version = "=12.0.0-beta.5", path = "./rust/lance-table" }

‎java/lance-jni/Cargo.lock‎

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎java/pom.xml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,12 @@
111111
<dependency>
112112
<groupId>org.lance</groupId>
113113
<artifactId>lance-namespace-core</artifactId>
114-
<version>0.7.7</version>
114+
<version>0.11.1</version>
115115
</dependency>
116116
<dependency>
117117
<groupId>org.lance</groupId>
118118
<artifactId>lance-namespace-apache-client</artifactId>
119-
<version>0.7.7</version>
119+
<version>0.11.1</version>
120120
</dependency>
121121
<dependency>
122122
<groupId>com.fasterxml.jackson.core</groupId>

‎java/src/main/java/org/lance/namespace/DirectoryNamespace.java‎

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.lance.namespace.model.BatchDeleteTableVersionsRequest;
2727
import org.lance.namespace.model.BatchDeleteTableVersionsResponse;
2828
import org.lance.namespace.model.CountTableRowsRequest;
29+
import org.lance.namespace.model.CountTableRowsResponse;
2930
import org.lance.namespace.model.CreateMaterializedViewRequest;
3031
import org.lance.namespace.model.CreateMaterializedViewResponse;
3132
import org.lance.namespace.model.CreateNamespaceRequest;
@@ -83,14 +84,17 @@
8384
import org.lance.namespace.model.MergeInsertIntoTableRequest;
8485
import org.lance.namespace.model.MergeInsertIntoTableResponse;
8586
import org.lance.namespace.model.NamespaceExistsRequest;
87+
import org.lance.namespace.model.NamespaceExistsResponse;
8688
import org.lance.namespace.model.QueryTableRequest;
89+
import org.lance.namespace.model.QueryTableResponse;
8790
import org.lance.namespace.model.RegisterTableRequest;
8891
import org.lance.namespace.model.RegisterTableResponse;
8992
import org.lance.namespace.model.RenameTableRequest;
9093
import org.lance.namespace.model.RenameTableResponse;
9194
import org.lance.namespace.model.RestoreTableRequest;
9295
import org.lance.namespace.model.RestoreTableResponse;
9396
import org.lance.namespace.model.TableExistsRequest;
97+
import org.lance.namespace.model.TableExistsResponse;
9498
import org.lance.namespace.model.UpdateTableRequest;
9599
import org.lance.namespace.model.UpdateTableResponse;
96100
import org.lance.namespace.model.UpdateTableSchemaMetadataRequest;
@@ -101,6 +105,7 @@
101105
import com.fasterxml.jackson.core.JsonProcessingException;
102106
import com.fasterxml.jackson.databind.DeserializationFeature;
103107
import com.fasterxml.jackson.databind.ObjectMapper;
108+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
104109
import org.apache.arrow.memory.BufferAllocator;
105110

106111
import java.io.Closeable;
@@ -239,6 +244,7 @@ public class DirectoryNamespace implements LanceNamespace, Closeable {
239244

240245
private static ObjectMapper createObjectMapper() {
241246
ObjectMapper mapper = new ObjectMapper();
247+
mapper.registerModule(new JavaTimeModule());
242248
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
243249
return mapper;
244250
}
@@ -329,10 +335,11 @@ public DropNamespaceResponse dropNamespace(DropNamespaceRequest request) {
329335
}
330336

331337
@Override
332-
public void namespaceExists(NamespaceExistsRequest request) {
338+
public NamespaceExistsResponse namespaceExists(NamespaceExistsRequest request) {
333339
ensureInitialized();
334340
String requestJson = toJson(request);
335341
namespaceExistsNative(nativeDirectoryNamespaceHandle, requestJson);
342+
return new NamespaceExistsResponse();
336343
}
337344

338345
@Override
@@ -360,10 +367,11 @@ public RegisterTableResponse registerTable(RegisterTableRequest request) {
360367
}
361368

362369
@Override
363-
public void tableExists(TableExistsRequest request) {
370+
public TableExistsResponse tableExists(TableExistsRequest request) {
364371
ensureInitialized();
365372
String requestJson = toJson(request);
366373
tableExistsNative(nativeDirectoryNamespaceHandle, requestJson);
374+
return new TableExistsResponse();
367375
}
368376

369377
@Override
@@ -383,10 +391,11 @@ public DeregisterTableResponse deregisterTable(DeregisterTableRequest request) {
383391
}
384392

385393
@Override
386-
public Long countTableRows(CountTableRowsRequest request) {
394+
public CountTableRowsResponse countTableRows(CountTableRowsRequest request) {
387395
ensureInitialized();
388396
String requestJson = toJson(request);
389-
return countTableRowsNative(nativeDirectoryNamespaceHandle, requestJson);
397+
Long count = countTableRowsNative(nativeDirectoryNamespaceHandle, requestJson);
398+
return new CountTableRowsResponse().count(count);
390399
}
391400

392401
@Override
@@ -451,10 +460,11 @@ public DeleteFromTableResponse deleteFromTable(DeleteFromTableRequest request) {
451460
}
452461

453462
@Override
454-
public byte[] queryTable(QueryTableRequest request) {
463+
public QueryTableResponse queryTable(QueryTableRequest request) {
455464
ensureInitialized();
456465
String requestJson = toJson(request);
457-
return queryTableNative(nativeDirectoryNamespaceHandle, requestJson);
466+
byte[] data = queryTableNative(nativeDirectoryNamespaceHandle, requestJson);
467+
return new QueryTableResponse().data(data);
458468
}
459469

460470
@Override

‎java/src/main/java/org/lance/namespace/RestNamespace.java‎

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.lance.namespace.model.BatchDeleteTableVersionsRequest;
2727
import org.lance.namespace.model.BatchDeleteTableVersionsResponse;
2828
import org.lance.namespace.model.CountTableRowsRequest;
29+
import org.lance.namespace.model.CountTableRowsResponse;
2930
import org.lance.namespace.model.CreateMaterializedViewRequest;
3031
import org.lance.namespace.model.CreateMaterializedViewResponse;
3132
import org.lance.namespace.model.CreateNamespaceRequest;
@@ -83,14 +84,17 @@
8384
import org.lance.namespace.model.MergeInsertIntoTableRequest;
8485
import org.lance.namespace.model.MergeInsertIntoTableResponse;
8586
import org.lance.namespace.model.NamespaceExistsRequest;
87+
import org.lance.namespace.model.NamespaceExistsResponse;
8688
import org.lance.namespace.model.QueryTableRequest;
89+
import org.lance.namespace.model.QueryTableResponse;
8790
import org.lance.namespace.model.RegisterTableRequest;
8891
import org.lance.namespace.model.RegisterTableResponse;
8992
import org.lance.namespace.model.RenameTableRequest;
9093
import org.lance.namespace.model.RenameTableResponse;
9194
import org.lance.namespace.model.RestoreTableRequest;
9295
import org.lance.namespace.model.RestoreTableResponse;
9396
import org.lance.namespace.model.TableExistsRequest;
97+
import org.lance.namespace.model.TableExistsResponse;
9498
import org.lance.namespace.model.UpdateTableRequest;
9599
import org.lance.namespace.model.UpdateTableResponse;
96100
import org.lance.namespace.model.UpdateTableSchemaMetadataRequest;
@@ -100,6 +104,7 @@
100104

101105
import com.fasterxml.jackson.core.JsonProcessingException;
102106
import com.fasterxml.jackson.databind.ObjectMapper;
107+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
103108
import org.apache.arrow.memory.BufferAllocator;
104109

105110
import java.io.Closeable;
@@ -149,7 +154,8 @@ public class RestNamespace implements LanceNamespace, Closeable {
149154
JniLoader.ensureLoaded();
150155
}
151156

152-
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
157+
private static final ObjectMapper OBJECT_MAPPER =
158+
new ObjectMapper().registerModule(new JavaTimeModule());
153159

154160
private long nativeRestNamespaceHandle;
155161
private BufferAllocator allocator;
@@ -241,10 +247,11 @@ public DropNamespaceResponse dropNamespace(DropNamespaceRequest request) {
241247
}
242248

243249
@Override
244-
public void namespaceExists(NamespaceExistsRequest request) {
250+
public NamespaceExistsResponse namespaceExists(NamespaceExistsRequest request) {
245251
ensureInitialized();
246252
String requestJson = toJson(request);
247253
namespaceExistsNative(nativeRestNamespaceHandle, requestJson);
254+
return new NamespaceExistsResponse();
248255
}
249256

250257
@Override
@@ -272,10 +279,11 @@ public RegisterTableResponse registerTable(RegisterTableRequest request) {
272279
}
273280

274281
@Override
275-
public void tableExists(TableExistsRequest request) {
282+
public TableExistsResponse tableExists(TableExistsRequest request) {
276283
ensureInitialized();
277284
String requestJson = toJson(request);
278285
tableExistsNative(nativeRestNamespaceHandle, requestJson);
286+
return new TableExistsResponse();
279287
}
280288

281289
@Override
@@ -295,10 +303,11 @@ public DeregisterTableResponse deregisterTable(DeregisterTableRequest request) {
295303
}
296304

297305
@Override
298-
public Long countTableRows(CountTableRowsRequest request) {
306+
public CountTableRowsResponse countTableRows(CountTableRowsRequest request) {
299307
ensureInitialized();
300308
String requestJson = toJson(request);
301-
return countTableRowsNative(nativeRestNamespaceHandle, requestJson);
309+
Long count = countTableRowsNative(nativeRestNamespaceHandle, requestJson);
310+
return new CountTableRowsResponse().count(count);
302311
}
303312

304313
@Override
@@ -362,10 +371,11 @@ public DeleteFromTableResponse deleteFromTable(DeleteFromTableRequest request) {
362371
}
363372

364373
@Override
365-
public byte[] queryTable(QueryTableRequest request) {
374+
public QueryTableResponse queryTable(QueryTableRequest request) {
366375
ensureInitialized();
367376
String requestJson = toJson(request);
368-
return queryTableNative(nativeRestNamespaceHandle, requestJson);
377+
byte[] data = queryTableNative(nativeRestNamespaceHandle, requestJson);
378+
return new QueryTableResponse().data(data);
369379
}
370380

371381
@Override

‎java/src/test/java/org/lance/namespace/CustomNamespace.java‎

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.lance.namespace.model.BatchDeleteTableVersionsRequest;
3030
import org.lance.namespace.model.BatchDeleteTableVersionsResponse;
3131
import org.lance.namespace.model.CountTableRowsRequest;
32+
import org.lance.namespace.model.CountTableRowsResponse;
3233
import org.lance.namespace.model.CreateNamespaceRequest;
3334
import org.lance.namespace.model.CreateNamespaceResponse;
3435
import org.lance.namespace.model.CreateTableIndexRequest;
@@ -84,14 +85,17 @@
8485
import org.lance.namespace.model.MergeInsertIntoTableRequest;
8586
import org.lance.namespace.model.MergeInsertIntoTableResponse;
8687
import org.lance.namespace.model.NamespaceExistsRequest;
88+
import org.lance.namespace.model.NamespaceExistsResponse;
8789
import org.lance.namespace.model.QueryTableRequest;
90+
import org.lance.namespace.model.QueryTableResponse;
8891
import org.lance.namespace.model.RegisterTableRequest;
8992
import org.lance.namespace.model.RegisterTableResponse;
9093
import org.lance.namespace.model.RenameTableRequest;
9194
import org.lance.namespace.model.RenameTableResponse;
9295
import org.lance.namespace.model.RestoreTableRequest;
9396
import org.lance.namespace.model.RestoreTableResponse;
9497
import org.lance.namespace.model.TableExistsRequest;
98+
import org.lance.namespace.model.TableExistsResponse;
9599
import org.lance.namespace.model.UpdateTableRequest;
96100
import org.lance.namespace.model.UpdateTableResponse;
97101
import org.lance.namespace.model.UpdateTableSchemaMetadataRequest;
@@ -174,8 +178,8 @@ public DropNamespaceResponse dropNamespace(DropNamespaceRequest request) {
174178
}
175179

176180
@Override
177-
public void namespaceExists(NamespaceExistsRequest request) {
178-
inner.namespaceExists(request);
181+
public NamespaceExistsResponse namespaceExists(NamespaceExistsRequest request) {
182+
return inner.namespaceExists(request);
179183
}
180184

181185
// Table operations
@@ -196,8 +200,8 @@ public RegisterTableResponse registerTable(RegisterTableRequest request) {
196200
}
197201

198202
@Override
199-
public void tableExists(TableExistsRequest request) {
200-
inner.tableExists(request);
203+
public TableExistsResponse tableExists(TableExistsRequest request) {
204+
return inner.tableExists(request);
201205
}
202206

203207
@Override
@@ -211,7 +215,7 @@ public DeregisterTableResponse deregisterTable(DeregisterTableRequest request) {
211215
}
212216

213217
@Override
214-
public Long countTableRows(CountTableRowsRequest request) {
218+
public CountTableRowsResponse countTableRows(CountTableRowsRequest request) {
215219
return inner.countTableRows(request);
216220
}
217221

@@ -250,7 +254,7 @@ public DeleteFromTableResponse deleteFromTable(DeleteFromTableRequest request) {
250254
}
251255

252256
@Override
253-
public byte[] queryTable(QueryTableRequest request) {
257+
public QueryTableResponse queryTable(QueryTableRequest request) {
254258
return inner.queryTable(request);
255259
}
256260

‎java/src/test/java/org/lance/namespace/DirectoryNamespaceTest.java‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,7 +1161,7 @@ void testCountTableRows() throws Exception {
11611161
// Count rows
11621162
CountTableRowsRequest countReq =
11631163
new CountTableRowsRequest().id(Arrays.asList("workspace", "test_table"));
1164-
long count = namespaceClient.countTableRows(countReq);
1164+
long count = namespaceClient.countTableRows(countReq).getCount();
11651165
assertEquals(3, count);
11661166
}
11671167

@@ -1183,7 +1183,7 @@ void testCountTableRowsWithFilter() throws Exception {
11831183
new CountTableRowsRequest()
11841184
.id(Arrays.asList("workspace", "test_table"))
11851185
.predicate("age > 28");
1186-
long count = namespaceClient.countTableRows(countReq);
1186+
long count = namespaceClient.countTableRows(countReq).getCount();
11871187
assertEquals(2, count); // Alice (30) and Charlie (35)
11881188
}
11891189

@@ -1210,7 +1210,7 @@ void testInsertIntoTable() throws Exception {
12101210
// Verify row count increased
12111211
CountTableRowsRequest countReq =
12121212
new CountTableRowsRequest().id(Arrays.asList("workspace", "test_table"));
1213-
long count = namespaceClient.countTableRows(countReq);
1213+
long count = namespaceClient.countTableRows(countReq).getCount();
12141214
assertEquals(6, count);
12151215
}
12161216

@@ -1233,7 +1233,7 @@ void testQueryTable() throws Exception {
12331233
.id(Arrays.asList("workspace", "test_table"))
12341234
.k(10)
12351235
.vector(new QueryTableRequestVector());
1236-
byte[] resultBytes = namespaceClient.queryTable(queryReq);
1236+
byte[] resultBytes = namespaceClient.queryTable(queryReq).getData();
12371237
assertNotNull(resultBytes);
12381238
assertTrue(resultBytes.length > 0);
12391239
}

‎python/Cargo.lock‎

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎python/pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[project]
22
name = "pylance"
33
dynamic = ["version"]
4-
dependencies = ["pyarrow>=14", "numpy>=1.22", "lance-namespace>=0.8.5,<0.9"]
4+
dependencies = ["pyarrow>=14", "numpy>=1.22", "lance-namespace>=0.11.1,<0.12"]
55
description = "python wrapper for Lance columnar format"
66
authors = [{ name = "Lance Devs", email = "dev@lance.org" }]
77
license = { file = "LICENSE" }

0 commit comments

Comments
 (0)