fix(pgvector): boolean filter casing, LIKE escaping, and TS scalar coercion (#5264)

This commit is contained in:
Kartik
2026-05-26 23:03:47 +05:30
committed by GitHub
parent ad736d9a06
commit 5a2201d76b
4 changed files with 74 additions and 11 deletions
+27 -2
View File
@@ -120,17 +120,27 @@ describe("buildFilterConditions", () => {
test("contains operator", () => {
const result = buildFilterConditions({ name: { contains: "alice" } }, 1);
expect(result.conditions).toHaveLength(1);
expect(result.conditions[0]).toContain("LIKE $1");
expect(result.conditions[0]).toContain("LIKE $1 ESCAPE");
expect(result.values).toEqual(["%alice%"]);
});
test("icontains operator", () => {
const result = buildFilterConditions({ name: { icontains: "Alice" } }, 1);
expect(result.conditions).toHaveLength(1);
expect(result.conditions[0]).toContain("ILIKE $1");
expect(result.conditions[0]).toContain("ILIKE $1 ESCAPE");
expect(result.values).toEqual(["%Alice%"]);
});
test("contains escapes LIKE wildcards", () => {
const result = buildFilterConditions({ name: { contains: "50%_off" } }, 1);
expect(result.values).toEqual(["%50\\%\\_off%"]);
});
test("icontains escapes LIKE wildcards", () => {
const result = buildFilterConditions({ promo: { icontains: "a%b_c" } }, 1);
expect(result.values).toEqual(["%a\\%b\\_c%"]);
});
test("wildcard value", () => {
const result = buildFilterConditions({ metadata_key: "*" }, 1);
expect(result.conditions).toHaveLength(1);
@@ -216,4 +226,19 @@ describe("buildFilterConditions", () => {
expect(result.conditions[2]).toContain("$5");
expect(result.paramIndex).toBe(6);
});
test("boolean true uses JSON casing", () => {
const result = buildFilterConditions({ is_active: true }, 1);
expect(result.values).toEqual(["true"]);
});
test("boolean false uses JSON casing", () => {
const result = buildFilterConditions({ is_active: false }, 1);
expect(result.values).toEqual(["false"]);
});
test("numeric scalar becomes string", () => {
const result = buildFilterConditions({ priority: 42 }, 1);
expect(result.values).toEqual(["42"]);
});
});