Fixes for not contains in oracle.
This commit is contained in:
parent
b470ecc7d9
commit
7cc000a838
|
@ -3,10 +3,10 @@ import * as dbCore from "../db"
|
||||||
import {
|
import {
|
||||||
getNativeSql,
|
getNativeSql,
|
||||||
isExternalTable,
|
isExternalTable,
|
||||||
isValidISODateString,
|
|
||||||
isValidFilter,
|
|
||||||
sqlLog,
|
|
||||||
isInvalidISODateString,
|
isInvalidISODateString,
|
||||||
|
isValidFilter,
|
||||||
|
isValidISODateString,
|
||||||
|
sqlLog,
|
||||||
} from "./utils"
|
} from "./utils"
|
||||||
import SqlTableQueryBuilder from "./sqlTable"
|
import SqlTableQueryBuilder from "./sqlTable"
|
||||||
import {
|
import {
|
||||||
|
@ -433,27 +433,30 @@ class InternalBuilder {
|
||||||
const andOr = mode === filters?.containsAny ? " OR " : " AND "
|
const andOr = mode === filters?.containsAny ? " OR " : " AND "
|
||||||
iterate(mode, (key, value) => {
|
iterate(mode, (key, value) => {
|
||||||
let statement = ""
|
let statement = ""
|
||||||
|
const identifier = this.quotedIdentifier(key)
|
||||||
for (let i in value) {
|
for (let i in value) {
|
||||||
if (typeof value[i] === "string") {
|
if (typeof value[i] === "string") {
|
||||||
value[i] = `%"${value[i].toLowerCase()}"%`
|
value[i] = `%"${value[i].toLowerCase()}"%`
|
||||||
} else {
|
} else {
|
||||||
value[i] = `%${value[i]}%`
|
value[i] = `%${value[i]}%`
|
||||||
}
|
}
|
||||||
const identifier = this.quotedIdentifier(key)
|
statement += `${
|
||||||
statement += statement ? andOr : ""
|
statement ? andOr : ""
|
||||||
if (not) {
|
}COALESCE(LOWER(${identifier}), '') LIKE ?`
|
||||||
statement += `(NOT COALESCE(LOWER(${identifier}), '') LIKE ? OR ${identifier} IS NULL)`
|
|
||||||
} else {
|
|
||||||
statement += `COALESCE(LOWER(${identifier}), '') LIKE ?`
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (statement === "") {
|
if (statement === "") {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// @ts-ignore
|
if (not) {
|
||||||
query = query[rawFnc](statement, value)
|
query = query[rawFnc](
|
||||||
|
`(NOT (${statement}) OR ${identifier} IS NULL)`,
|
||||||
|
value
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
query = query[rawFnc](statement, value)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,13 +40,13 @@ import { structures } from "@budibase/backend-core/tests"
|
||||||
import { DEFAULT_EMPLOYEE_TABLE_SCHEMA } from "../../../db/defaultData/datasource_bb_default"
|
import { DEFAULT_EMPLOYEE_TABLE_SCHEMA } from "../../../db/defaultData/datasource_bb_default"
|
||||||
|
|
||||||
describe.each([
|
describe.each([
|
||||||
// ["in-memory", undefined],
|
["in-memory", undefined],
|
||||||
// ["lucene", undefined],
|
["lucene", undefined],
|
||||||
// ["sqs", undefined],
|
["sqs", undefined],
|
||||||
// [DatabaseName.POSTGRES, getDatasource(DatabaseName.POSTGRES)],
|
[DatabaseName.POSTGRES, getDatasource(DatabaseName.POSTGRES)],
|
||||||
// [DatabaseName.MYSQL, getDatasource(DatabaseName.MYSQL)],
|
[DatabaseName.MYSQL, getDatasource(DatabaseName.MYSQL)],
|
||||||
// [DatabaseName.SQL_SERVER, getDatasource(DatabaseName.SQL_SERVER)],
|
[DatabaseName.SQL_SERVER, getDatasource(DatabaseName.SQL_SERVER)],
|
||||||
// [DatabaseName.MARIADB, getDatasource(DatabaseName.MARIADB)],
|
[DatabaseName.MARIADB, getDatasource(DatabaseName.MARIADB)],
|
||||||
[DatabaseName.ORACLE, getDatasource(DatabaseName.ORACLE)],
|
[DatabaseName.ORACLE, getDatasource(DatabaseName.ORACLE)],
|
||||||
])("search (%s)", (name, dsProvider) => {
|
])("search (%s)", (name, dsProvider) => {
|
||||||
const isSqs = name === "sqs"
|
const isSqs = name === "sqs"
|
||||||
|
|
Loading…
Reference in New Issue