Fixes for not contains in oracle.

This commit is contained in:
mike12345567 2024-07-30 18:22:20 +01:00
parent b470ecc7d9
commit 7cc000a838
2 changed files with 22 additions and 19 deletions

View File

@ -3,10 +3,10 @@ import * as dbCore from "../db"
import {
getNativeSql,
isExternalTable,
isValidISODateString,
isValidFilter,
sqlLog,
isInvalidISODateString,
isValidFilter,
isValidISODateString,
sqlLog,
} from "./utils"
import SqlTableQueryBuilder from "./sqlTable"
import {
@ -433,27 +433,30 @@ class InternalBuilder {
const andOr = mode === filters?.containsAny ? " OR " : " AND "
iterate(mode, (key, value) => {
let statement = ""
const identifier = this.quotedIdentifier(key)
for (let i in value) {
if (typeof value[i] === "string") {
value[i] = `%"${value[i].toLowerCase()}"%`
} else {
value[i] = `%${value[i]}%`
}
const identifier = this.quotedIdentifier(key)
statement += statement ? andOr : ""
if (not) {
statement += `(NOT COALESCE(LOWER(${identifier}), '') LIKE ? OR ${identifier} IS NULL)`
} else {
statement += `COALESCE(LOWER(${identifier}), '') LIKE ?`
}
statement += `${
statement ? andOr : ""
}COALESCE(LOWER(${identifier}), '') LIKE ?`
}
if (statement === "") {
return
}
// @ts-ignore
query = query[rawFnc](statement, value)
if (not) {
query = query[rawFnc](
`(NOT (${statement}) OR ${identifier} IS NULL)`,
value
)
} else {
query = query[rawFnc](statement, value)
}
})
}
}

View File

@ -40,13 +40,13 @@ import { structures } from "@budibase/backend-core/tests"
import { DEFAULT_EMPLOYEE_TABLE_SCHEMA } from "../../../db/defaultData/datasource_bb_default"
describe.each([
// ["in-memory", undefined],
// ["lucene", undefined],
// ["sqs", undefined],
// [DatabaseName.POSTGRES, getDatasource(DatabaseName.POSTGRES)],
// [DatabaseName.MYSQL, getDatasource(DatabaseName.MYSQL)],
// [DatabaseName.SQL_SERVER, getDatasource(DatabaseName.SQL_SERVER)],
// [DatabaseName.MARIADB, getDatasource(DatabaseName.MARIADB)],
["in-memory", undefined],
["lucene", undefined],
["sqs", undefined],
[DatabaseName.POSTGRES, getDatasource(DatabaseName.POSTGRES)],
[DatabaseName.MYSQL, getDatasource(DatabaseName.MYSQL)],
[DatabaseName.SQL_SERVER, getDatasource(DatabaseName.SQL_SERVER)],
[DatabaseName.MARIADB, getDatasource(DatabaseName.MARIADB)],
[DatabaseName.ORACLE, getDatasource(DatabaseName.ORACLE)],
])("search (%s)", (name, dsProvider) => {
const isSqs = name === "sqs"