mirror of
https://github.com/lancedb/lancedb.git
synced 2026-01-06 03:42:57 +00:00
fix: sanitize foreign schemas (#1058)
Arrow-js uses brittle `instanceof` checks throughout the code base. These fail unless the library instance that produced the object matches exactly the same instance the vectordb is using. At a minimum, this means that a user using arrow version 15 (or any version that doesn't match exactly the version that vectordb is using) will get strange errors when they try and use vectordb. However, there are even cases where the versions can be perfectly identical, and the instanceof check still fails. One such example is when using `vite` (e.g. https://github.com/vitejs/vite/issues/3910) This PR solves the problem in a rather brute force, but workable, fashion. If we encounter a schema that does not pass the `instanceof` check then we will attempt to sanitize that schema by traversing the object and, if it has all the correct properties, constructing an appropriate `Schema` instance via deep cloning.
This commit is contained in:
@@ -103,12 +103,12 @@ describe("Test creating index", () => {
|
||||
// TODO: check index type.
|
||||
|
||||
// Search without specifying the column
|
||||
let query_vector = data.toArray()[5].vec.toJSON();
|
||||
let rst = await tbl.query().nearestTo(query_vector).limit(2).toArrow();
|
||||
const query_vector = data.toArray()[5].vec.toJSON();
|
||||
const rst = await tbl.query().nearestTo(query_vector).limit(2).toArrow();
|
||||
expect(rst.numRows).toBe(2);
|
||||
|
||||
// Search with specifying the column
|
||||
let rst2 = await tbl.search(query_vector, "vec").limit(2).toArrow();
|
||||
const rst2 = await tbl.search(query_vector, "vec").limit(2).toArrow();
|
||||
expect(rst2.numRows).toBe(2);
|
||||
expect(rst.toString()).toEqual(rst2.toString());
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user