fix: handle camelCase column names in select (#1460)

Fixes #1385
This commit is contained in:
Will Jones
2024-07-22 12:53:17 -07:00
committed by GitHub
parent 391fa26175
commit 4f601a2d4c
6 changed files with 73 additions and 17 deletions

View File

@@ -834,3 +834,25 @@ describe("when calling explainPlan", () => {
expect(plan).toMatch("KNN");
});
});
describe("column name options", () => {
let tmpDir: tmp.DirResult;
let table: Table;
beforeEach(async () => {
tmpDir = tmp.dirSync({ unsafeCleanup: true });
const con = await connect(tmpDir.name);
table = await con.createTable("vectors", [
{ camelCase: 1, vector: [0.1, 0.2] },
]);
});
test("can select columns with different names", async () => {
const results = await table.query().select(["camelCase"]).toArray();
expect(results[0].camelCase).toBe(1);
});
test("can filter on columns with different names", async () => {
const results = await table.query().where("`camelCase` = 1").toArray();
expect(results[0].camelCase).toBe(1);
});
});

View File

@@ -167,20 +167,27 @@ export class QueryBase<NativeQueryType extends NativeQuery | NativeVectorQuery>
select(
columns: string[] | Map<string, string> | Record<string, string> | string,
): this {
let columnTuples: [string, string][];
const selectColumns = (columnArray: string[]) => {
this.doCall((inner: NativeQueryType) => {
inner.selectColumns(columnArray);
});
};
const selectMapping = (columnTuples: [string, string][]) => {
this.doCall((inner: NativeQueryType) => {
inner.select(columnTuples);
});
};
if (typeof columns === "string") {
columns = [columns];
}
if (Array.isArray(columns)) {
columnTuples = columns.map((c) => [c, c]);
selectColumns([columns]);
} else if (Array.isArray(columns)) {
selectColumns(columns);
} else if (columns instanceof Map) {
columnTuples = Array.from(columns.entries());
selectMapping(Array.from(columns.entries()));
} else {
columnTuples = Object.entries(columns);
selectMapping(Object.entries(columns));
}
this.doCall((inner: NativeQueryType) => {
inner.select(columnTuples);
});
return this;
}

View File

@@ -47,6 +47,11 @@ impl Query {
self.inner = self.inner.clone().select(Select::dynamic(&columns));
}
#[napi]
pub fn select_columns(&mut self, columns: Vec<String>) {
self.inner = self.inner.clone().select(Select::columns(&columns));
}
#[napi]
pub fn limit(&mut self, limit: u32) {
self.inner = self.inner.clone().limit(limit as usize);
@@ -138,6 +143,11 @@ impl VectorQuery {
self.inner = self.inner.clone().select(Select::dynamic(&columns));
}
#[napi]
pub fn select_columns(&mut self, columns: Vec<String>) {
self.inner = self.inner.clone().select(Select::columns(&columns));
}
#[napi]
pub fn limit(&mut self, limit: u32) {
self.inner = self.inner.clone().limit(limit as usize);