From 2efd8e9c2b2ff7a443990e4542fd362e45c67785 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Wed, 15 Feb 2023 18:03:17 +0800 Subject: [PATCH] fix(nocodb): blank logic on lookup columns --- .../db/sql-data-mapper/lib/sql/conditionV2.ts | 108 +++++++++++------- 1 file changed, 69 insertions(+), 39 deletions(-) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/conditionV2.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/conditionV2.ts index b806ad24ea..215b078ca4 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/conditionV2.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/conditionV2.ts @@ -633,19 +633,29 @@ async function generateLookupCondition( qb.select(`${alias}.${childColumn.column_name}`); - await nestedConditionJoin( - { - ...filter, - ...(filter.comparison_op in negatedMapping - ? negatedMapping[filter.comparison_op] - : {}), - }, - lookupColumn, - qb, - knex, - alias, - aliasCount - ); + if (filter.comparison_op === 'blank') { + return (qbP: Knex.QueryBuilder) => { + qbP.whereNotIn(childColumn.column_name, qb); + }; + } else if (filter.comparison_op === 'notblank') { + return (qbP: Knex.QueryBuilder) => { + qbP.whereIn(childColumn.column_name, qb); + }; + } else { + await nestedConditionJoin( + { + ...filter, + ...(filter.comparison_op in negatedMapping + ? negatedMapping[filter.comparison_op] + : {}), + }, + lookupColumn, + qb, + knex, + alias, + aliasCount + ); + } return (qbP: Knex.QueryBuilder) => { if (filter.comparison_op in negatedMapping) @@ -656,19 +666,29 @@ async function generateLookupCondition( qb = knex(`${parentModel.table_name} as ${alias}`); qb.select(`${alias}.${parentColumn.column_name}`); - await nestedConditionJoin( - { - ...filter, - ...(filter.comparison_op in negatedMapping - ? negatedMapping[filter.comparison_op] - : {}), - }, - lookupColumn, - qb, - knex, - alias, - aliasCount - ); + if (filter.comparison_op === 'blank') { + return (qbP: Knex.QueryBuilder) => { + qbP.whereNotIn(childColumn.column_name, qb); + }; + } else if (filter.comparison_op === 'notblank') { + return (qbP: Knex.QueryBuilder) => { + qbP.whereIn(childColumn.column_name, qb); + }; + } else { + await nestedConditionJoin( + { + ...filter, + ...(filter.comparison_op in negatedMapping + ? negatedMapping[filter.comparison_op] + : {}), + }, + lookupColumn, + qb, + knex, + alias, + aliasCount + ); + } return (qbP: Knex.QueryBuilder) => { if (filter.comparison_op in negatedMapping) @@ -690,19 +710,29 @@ async function generateLookupCondition( `${childAlias}.${parentColumn.column_name}` ); - await nestedConditionJoin( - { - ...filter, - ...(filter.comparison_op in negatedMapping - ? negatedMapping[filter.comparison_op] - : {}), - }, - lookupColumn, - qb, - knex, - childAlias, - aliasCount - ); + if (filter.comparison_op === 'blank') { + return (qbP: Knex.QueryBuilder) => { + qbP.whereNotIn(childColumn.column_name, qb); + }; + } else if (filter.comparison_op === 'notblank') { + return (qbP: Knex.QueryBuilder) => { + qbP.whereIn(childColumn.column_name, qb); + }; + } else { + await nestedConditionJoin( + { + ...filter, + ...(filter.comparison_op in negatedMapping + ? negatedMapping[filter.comparison_op] + : {}), + }, + lookupColumn, + qb, + knex, + childAlias, + aliasCount + ); + } return (qbP: Knex.QueryBuilder) => { if (filter.comparison_op in negatedMapping)