Browse Source

fix(nocodb): condition like logic

pull/5106/head
Wing-Kam Wong 2 years ago
parent
commit
0cf9f4d4e4
  1. 11
      packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/conditionV2.ts

11
packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/conditionV2.ts

@ -284,21 +284,28 @@ const parseConditionV2 = async (
}); });
break; break;
case 'like': case 'like':
if (!val) {
// val is empty -> all values including empty strings but NULL
qb.where(field, '');
qb.orWhereNotNull(field);
} else {
if (column.uidt === UITypes.Formula) { if (column.uidt === UITypes.Formula) {
[field, val] = [val, field]; [field, val] = [val, field];
val = `%${val}%`.replace(/^%'([\s\S]*)'%$/, '%$1%'); val = `%${val}%`.replace(/^%'([\s\S]*)'%$/, '%$1%');
} else { } else {
val = val.startsWith('%') || val.endsWith('%') ? val : `%${val}%`; val =
val.startsWith('%') || val.endsWith('%') ? val : `%${val}%`;
} }
if (qb?.client?.config?.client === 'pg') { if (qb?.client?.config?.client === 'pg') {
qb = qb.whereRaw('??::text ilike ?', [field, val]); qb = qb.whereRaw('??::text ilike ?', [field, val]);
} else { } else {
qb = qb.where(field, 'like', val); qb = qb.where(field, 'like', val);
} }
}
break; break;
case 'nlike': case 'nlike':
if (!val) { if (!val) {
// val is empty -> include all values but empty strings // val is empty -> all values including NULL but empty strings
qb.whereNot(field, ''); qb.whereNot(field, '');
qb.orWhereNull(field); qb.orWhereNull(field);
} else { } else {

Loading…
Cancel
Save