From 07784069813979ecd7d898b9c0a21f041f332a0d Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 11 Feb 2022 12:29:36 +0800 Subject: [PATCH 1/5] fix: cast uuid in custom knex Signed-off-by: Wing-Kam Wong --- .../src/lib/dataMapper/lib/sql/CustomKnex.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts b/packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts index ed9873ffc8..2bc54227dd 100644 --- a/packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts +++ b/packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts @@ -430,11 +430,19 @@ const appendWhereCondition = function( ); break; case '': - knexRef[`${key}`]( - columnAliases[matches[2]] || matches[2], - opMapping[matches[3]], - matches[4] - ); + const column = (columnAliases[matches[2]] || matches[2]); + const operator = opMapping[matches[3]]; + const target = matches[4]; + if (matches[3] == 'like') { + // handle uuid case + knexRef[`${key}`]( + knexRef?.client.raw(`??::TEXT ${operator} '${target}'`, [ + column + ]) + ); + } else { + knexRef[`${key}`](column, operator, target); + } break; default: throw new Error(`${matches[1] || ''} Invalid operation.`); @@ -991,6 +999,7 @@ export { Knex }; * * @author Naveen MR * @author Pranav C Balan + * @author Wing-Kam Wong * * @license GNU AGPL version 3 or any later version * From 1a28d2cd327856dbad7a35fa798f2423d97aab46 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 11 Feb 2022 12:30:13 +0800 Subject: [PATCH 2/5] fix: ESLint problems Signed-off-by: Wing-Kam Wong --- packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts b/packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts index 2bc54227dd..68ec7b9775 100644 --- a/packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts +++ b/packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts @@ -430,7 +430,7 @@ const appendWhereCondition = function( ); break; case '': - const column = (columnAliases[matches[2]] || matches[2]); + const column = columnAliases[matches[2]] || matches[2]; const operator = opMapping[matches[3]]; const target = matches[4]; if (matches[3] == 'like') { From 60b793a6fbcd8c1243eed7d3e46ef53ca421d68e Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 11 Feb 2022 19:03:06 +0800 Subject: [PATCH 3/5] fix: add client type in custom knex Signed-off-by: Wing-Kam Wong --- packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts b/packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts index 68ec7b9775..774833bb65 100644 --- a/packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts +++ b/packages/nocodb/src/lib/dataMapper/lib/sql/CustomKnex.ts @@ -92,9 +92,10 @@ const appendWhereCondition = function( knexRef, isHaving = false ) { + const clientType = knexRef?.client?.config?.client; const opMapping = { ...opMappingGen, - ...(knexRef?.client?.config?.client === 'pg' ? { like: 'ilike' } : {}) + ...(clientType === 'pg' ? { like: 'ilike' } : {}) }; const camKey = isHaving ? 'Having' : 'Where'; const key = isHaving ? 'having' : 'where'; @@ -433,7 +434,7 @@ const appendWhereCondition = function( const column = columnAliases[matches[2]] || matches[2]; const operator = opMapping[matches[3]]; const target = matches[4]; - if (matches[3] == 'like') { + if (matches[3] == 'like' && clientType === 'pg') { // handle uuid case knexRef[`${key}`]( knexRef?.client.raw(`??::TEXT ${operator} '${target}'`, [ From 0efe569e7010a0b6b21e2830be072108ac7817a5 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 11 Feb 2022 19:03:37 +0800 Subject: [PATCH 4/5] fix: if it is bigint type, then go for eq instead of like Signed-off-by: Wing-Kam Wong --- .../components/project/spreadsheet/mixins/spreadsheet.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/nc-gui/components/project/spreadsheet/mixins/spreadsheet.js b/packages/nc-gui/components/project/spreadsheet/mixins/spreadsheet.js index 88b0fbbcd0..10c05784dc 100644 --- a/packages/nc-gui/components/project/spreadsheet/mixins/spreadsheet.js +++ b/packages/nc-gui/components/project/spreadsheet/mixins/spreadsheet.js @@ -163,7 +163,10 @@ export default { concatenatedXWhere() { let where = '' if (this.searchField && this.searchQuery.trim()) { - if (['text', 'string'].includes(this.sqlUi.getAbstractType(this.availableColumns.find(({ _cn }) => _cn === this.searchField) || this.availableColumns[0]))) { + const col = this.availableColumns.find(({ _cn }) => _cn === this.searchField) || this.availableColumns[0] + // bigint values are displayed in string format in UI + // when searching bigint values, the operator should be 'eq' instead of 'like' + if (['text', 'string'].includes(this.sqlUi.getAbstractType(col)) && col.dt !== 'bigint') { where = `(${this.searchField},like,%${this.searchQuery.trim()}%)` } else { where = `(${this.searchField},eq,${this.searchQuery.trim()})` From 8480271e356253d571f131b3537d0bfa768d5221 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Fri, 11 Feb 2022 19:05:13 +0800 Subject: [PATCH 5/5] fix: display bigint in string format Signed-off-by: Wing-Kam Wong --- packages/nc-gui/helpers/sqlUi/MssqlUi.js | 4 +--- packages/nc-gui/helpers/sqlUi/MysqlUi.js | 2 +- packages/nc-gui/helpers/sqlUi/SqliteUi.js | 2 +- packages/nocodb/src/lib/sqlUi/MssqlUi.ts | 4 +--- packages/nocodb/src/lib/sqlUi/MysqlUi.ts | 2 +- packages/nocodb/src/lib/sqlUi/SqliteUi.ts | 2 +- 6 files changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/nc-gui/helpers/sqlUi/MssqlUi.js b/packages/nc-gui/helpers/sqlUi/MssqlUi.js index 93a078fbcf..e44428a7fd 100644 --- a/packages/nc-gui/helpers/sqlUi/MssqlUi.js +++ b/packages/nc-gui/helpers/sqlUi/MssqlUi.js @@ -921,16 +921,14 @@ export class MssqlUi { static getAbstractType(col) { switch ((col.dt || col.dt).toLowerCase()) { - case 'bigint': case 'smallint': case 'bit': case 'tinyint': case 'int': return 'integer' + case 'bigint': case 'binary': - return 'string' - case 'char': return 'string' diff --git a/packages/nc-gui/helpers/sqlUi/MysqlUi.js b/packages/nc-gui/helpers/sqlUi/MysqlUi.js index 325b74967c..090cb51e14 100644 --- a/packages/nc-gui/helpers/sqlUi/MysqlUi.js +++ b/packages/nc-gui/helpers/sqlUi/MysqlUi.js @@ -842,7 +842,6 @@ export class MysqlUi { case 'int': case 'smallint': case 'mediumint': - case 'bigint': case 'bit': return 'integer' @@ -897,6 +896,7 @@ export class MysqlUi { case 'set': return 'set' + case 'bigint': case 'geometry': case 'point': case 'linestring': diff --git a/packages/nc-gui/helpers/sqlUi/SqliteUi.js b/packages/nc-gui/helpers/sqlUi/SqliteUi.js index 89c459ed79..21967e76c8 100644 --- a/packages/nc-gui/helpers/sqlUi/SqliteUi.js +++ b/packages/nc-gui/helpers/sqlUi/SqliteUi.js @@ -683,7 +683,6 @@ export class SqliteUi { case 'tinyint': case 'smallint': case 'mediumint': - case 'bigint': case 'int2': case 'int8': return 'integer' @@ -702,6 +701,7 @@ export class SqliteUi { case 'blob': return 'blob' + case 'bigint': case 'character': case 'varchar': return 'string' diff --git a/packages/nocodb/src/lib/sqlUi/MssqlUi.ts b/packages/nocodb/src/lib/sqlUi/MssqlUi.ts index 015b487504..193957d52f 100644 --- a/packages/nocodb/src/lib/sqlUi/MssqlUi.ts +++ b/packages/nocodb/src/lib/sqlUi/MssqlUi.ts @@ -937,16 +937,14 @@ export class MssqlUi { static getAbstractType(col): any { switch ((col.dt || col.dt).toLowerCase()) { - case 'bigint': case 'smallint': case 'bit': case 'tinyint': case 'int': return 'integer'; + case 'bigint': case 'binary': - return 'string'; - case 'char': return 'string'; diff --git a/packages/nocodb/src/lib/sqlUi/MysqlUi.ts b/packages/nocodb/src/lib/sqlUi/MysqlUi.ts index 44fb40372a..81b3f3d0d3 100644 --- a/packages/nocodb/src/lib/sqlUi/MysqlUi.ts +++ b/packages/nocodb/src/lib/sqlUi/MysqlUi.ts @@ -868,7 +868,6 @@ export class MysqlUi { case 'int': case 'smallint': case 'mediumint': - case 'bigint': case 'bit': return 'integer'; @@ -922,6 +921,7 @@ export class MysqlUi { case 'set': return 'set'; + case 'bigint': case 'geometry': case 'point': case 'linestring': diff --git a/packages/nocodb/src/lib/sqlUi/SqliteUi.ts b/packages/nocodb/src/lib/sqlUi/SqliteUi.ts index 2de293a440..37464e34e6 100644 --- a/packages/nocodb/src/lib/sqlUi/SqliteUi.ts +++ b/packages/nocodb/src/lib/sqlUi/SqliteUi.ts @@ -694,7 +694,6 @@ export class SqliteUi { case 'tinyint': case 'smallint': case 'mediumint': - case 'bigint': case 'int2': case 'int8': return 'integer'; @@ -713,6 +712,7 @@ export class SqliteUi { case 'blob': return 'blob'; + case 'bigint': case 'character': case 'varchar': return 'string';