From a48f9f3327c0cec08e2e1714b20b361e5ef42e65 Mon Sep 17 00:00:00 2001 From: Jozef Cipa Date: Thu, 21 Jan 2021 11:36:17 +0100 Subject: [PATCH] Fix lower() error when running on non-string column (#8419) Signed-off-by: jozefcipa --- .../strapi-connector-bookshelf/lib/buildQuery.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/strapi-connector-bookshelf/lib/buildQuery.js b/packages/strapi-connector-bookshelf/lib/buildQuery.js index 5f2a5f7a43..03da20ad1c 100644 --- a/packages/strapi-connector-bookshelf/lib/buildQuery.js +++ b/packages/strapi-connector-bookshelf/lib/buildQuery.js @@ -329,9 +329,9 @@ const buildWhereClause = ({ qb, field, operator, value }) => { case 'nin': return qb.whereNotIn(field, Array.isArray(value) ? value : [value]); case 'contains': - return qb.whereRaw('LOWER(??) LIKE LOWER(?)', [field, `%${value}%`]); + return qb.whereRaw(`${fieldLowerFn(qb)} LIKE LOWER(?)`, [field, `%${value}%`]); case 'ncontains': - return qb.whereRaw('LOWER(??) NOT LIKE LOWER(?)', [field, `%${value}%`]); + return qb.whereRaw(`${fieldLowerFn(qb)} NOT LIKE LOWER(?)`, [field, `%${value}%`]); case 'containss': return qb.where(field, 'like', `%${value}%`); case 'ncontainss': @@ -345,6 +345,14 @@ const buildWhereClause = ({ qb, field, operator, value }) => { } }; +const fieldLowerFn = qb => { + // Postgres requires string to be passed + if (qb.client.config.client === 'pg') { + return 'LOWER(CAST(?? AS VARCHAR))'; + } + return 'LOWER(??)'; +}; + const findAssoc = (model, key) => model.associations.find(assoc => assoc.alias === key); module.exports = buildQuery;