feat: drop_index() remote implementation (#2093)

Support drop_index operation in remote table.
This commit is contained in:
Ryan Green
2025-02-05 10:06:19 -03:30
committed by GitHub
parent 16851389ea
commit ef3093bc23
10 changed files with 109 additions and 6 deletions

View File

@@ -47,7 +47,8 @@ const {
tableSchema,
tableAddColumns,
tableAlterColumns,
tableDropColumns
tableDropColumns,
tableDropIndex
// eslint-disable-next-line @typescript-eslint/no-var-requires
} = require("../native.js");
@@ -604,6 +605,13 @@ export interface Table<T = number[]> {
*/
dropColumns(columnNames: string[]): Promise<void>
/**
* Drop an index from the table
*
* @param indexName The name of the index to drop
*/
dropIndex(indexName: string): Promise<void>
/**
* Instrument the behavior of this Table with middleware.
*
@@ -1206,6 +1214,10 @@ export class LocalTable<T = number[]> implements Table<T> {
return tableDropColumns.call(this._tbl, columnNames);
}
async dropIndex(indexName: string): Promise<void> {
return tableDropIndex.call(this._tbl, indexName);
}
withMiddleware(middleware: HttpMiddleware): Table<T> {
return this;
}

View File

@@ -471,6 +471,18 @@ export class RemoteTable<T = number[]> implements Table<T> {
)
}
}
async dropIndex (index_name: string): Promise<void> {
const res = await this._client.post(
`/v1/table/${encodeURIComponent(this._name)}/index/${encodeURIComponent(index_name)}/drop/`
)
if (res.status !== 200) {
throw new Error(
`Server Error, status: ${res.status}, ` +
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
`message: ${res.statusText}: ${await res.body()}`
)
}
}
async countRows (filter?: string): Promise<number> {
const result = await this._client.post(`/v1/table/${encodeURIComponent(this._name)}/count_rows/`, {

View File

@@ -894,6 +894,27 @@ describe("LanceDB client", function () {
expect(stats.distanceType).to.equal("l2");
expect(stats.numIndices).to.equal(1);
}).timeout(50_000);
// not yet implemented
// it("can drop index", async function () {
// const uri = await createTestDB(32, 300);
// const con = await lancedb.connect(uri);
// const table = await con.openTable("vectors");
// await table.createIndex({
// type: "ivf_pq",
// column: "vector",
// num_partitions: 2,
// max_iters: 2,
// num_sub_vectors: 2
// });
//
// const indices = await table.listIndices();
// expect(indices).to.have.lengthOf(1);
// expect(indices[0].name).to.equal("vector_idx");
//
// await table.dropIndex("vector_idx");
// expect(await table.listIndices()).to.have.lengthOf(0);
// }).timeout(50_000);
});
describe("when using a custom embedding function", function () {