diff --git a/packages/server/src/integrations/base/sql.ts b/packages/server/src/integrations/base/sql.ts index a21c8e7d54..90107dfd4e 100644 --- a/packages/server/src/integrations/base/sql.ts +++ b/packages/server/src/integrations/base/sql.ts @@ -156,7 +156,7 @@ class InternalBuilder { const rawFnc = `${fnc}Raw` // @ts-ignore query = query[rawFnc](`LOWER(${likeKey(this.client, key)}) LIKE ?`, [ - `%${value}%`, + `%${value.toLowerCase()}%`, ]) } } @@ -202,7 +202,7 @@ class InternalBuilder { let statement = "" for (let i in value) { if (typeof value[i] === "string") { - value[i] = `%"${value[i]}"%` + value[i] = `%"${value[i].toLowerCase()}"%` } else { value[i] = `%${value[i]}%` } @@ -238,7 +238,7 @@ class InternalBuilder { const rawFnc = `${fnc}Raw` // @ts-ignore query = query[rawFnc](`LOWER(${likeKey(this.client, key)}) LIKE ?`, [ - `${value}%`, + `${value.toLowerCase()}%`, ]) } }) diff --git a/packages/server/src/integrations/tests/sql.spec.ts b/packages/server/src/integrations/tests/sql.spec.ts index 2b9a0f1f10..bd1497bdc7 100644 --- a/packages/server/src/integrations/tests/sql.spec.ts +++ b/packages/server/src/integrations/tests/sql.spec.ts @@ -351,7 +351,7 @@ describe("SQL query builder", () => { }) ) expect(query).toEqual({ - bindings: [10, "%20%", "%25%", `%"John"%`, `%"Mary"%`], + bindings: [10, "%20%", "%25%", `%"john"%`, `%"mary"%`], sql: `select * from (select top (@p0) * from [${TABLE_NAME}] where (LOWER([${TABLE_NAME}].[age]) LIKE @p1 AND LOWER([${TABLE_NAME}].[age]) LIKE @p2) and (LOWER([${TABLE_NAME}].[name]) LIKE @p3 AND LOWER([${TABLE_NAME}].[name]) LIKE @p4)) as [${TABLE_NAME}]`, }) }) @@ -402,7 +402,7 @@ describe("SQL query builder", () => { }) ) expect(query).toEqual({ - bindings: [10, "%20%", `%"John"%`], + bindings: [10, "%20%", `%"john"%`], sql: `select * from (select top (@p0) * from [${TABLE_NAME}] where NOT (LOWER([${TABLE_NAME}].[age]) LIKE @p1) and NOT (LOWER([${TABLE_NAME}].[name]) LIKE @p2)) as [${TABLE_NAME}]`, }) }) @@ -453,7 +453,7 @@ describe("SQL query builder", () => { }) ) expect(query).toEqual({ - bindings: [10, "%20%", "%25%", `%"John"%`, `%"Mary"%`], + bindings: [10, "%20%", "%25%", `%"john"%`, `%"mary"%`], sql: `select * from (select top (@p0) * from [${TABLE_NAME}] where (LOWER([${TABLE_NAME}].[age]) LIKE @p1 OR LOWER([${TABLE_NAME}].[age]) LIKE @p2) and (LOWER([${TABLE_NAME}].[name]) LIKE @p3 OR LOWER([${TABLE_NAME}].[name]) LIKE @p4)) as [${TABLE_NAME}]`, }) }) @@ -531,7 +531,7 @@ describe("SQL query builder", () => { }) ) expect(query).toEqual({ - bindings: ["John%", limit], + bindings: ["john%", limit], sql: `select * from (select * from \`${tableName}\` where LOWER(\`${tableName}\`.\`name\`) LIKE ? limit ?) as \`${tableName}\``, }) }) @@ -549,7 +549,7 @@ describe("SQL query builder", () => { }) ) expect(query).toEqual({ - bindings: [limit, "John%"], + bindings: [limit, "john%"], sql: `select * from (select top (@p0) * from [${tableName}] where LOWER([${tableName}].[name]) LIKE @p1) as [${tableName}]`, }) }) @@ -591,4 +591,49 @@ describe("SQL query builder", () => { sql: `select * from (select * from \"${TABLE_NAME}\" where \"${TABLE_NAME}\".\"dob\" < $1 limit $2) as \"${TABLE_NAME}\"`, }) }) + + it("should lowercase the values for Oracle LIKE statements", () => { + let query = new Sql(SqlClient.ORACLE, limit)._query( + generateReadJson({ + filters: { + string: { + name: "John", + }, + }, + }) + ) + expect(query).toEqual({ + bindings: ["john%", limit], + sql: `select * from (select * from (select * from \"test\" where LOWER(\"test\".\"name\") LIKE :1) where rownum <= :2) \"test\"`, + }) + + query = new Sql(SqlClient.ORACLE, limit)._query( + generateReadJson({ + filters: { + contains: { + age: [20, 25], + name: ["John", "Mary"], + }, + }, + }) + ) + expect(query).toEqual({ + bindings: ["%20%", "%25%", `%"john"%`, `%"mary"%`, limit], + sql: `select * from (select * from (select * from \"test\" where (LOWER(\"test\".\"age\") LIKE :1 AND LOWER(\"test\".\"age\") LIKE :2) and (LOWER(\"test\".\"name\") LIKE :3 AND LOWER(\"test\".\"name\") LIKE :4)) where rownum <= :5) \"test\"`, + }) + + query = new Sql(SqlClient.ORACLE, limit)._query( + generateReadJson({ + filters: { + fuzzy: { + name: "Jo", + }, + }, + }) + ) + expect(query).toEqual({ + bindings: [`%jo%`, limit], + sql: `select * from (select * from (select * from \"test\" where LOWER(\"test\".\"name\") LIKE :1) where rownum <= :2) \"test\"`, + }) + }) })