diff --git a/packages/datalib/src/GridDisplay.ts b/packages/datalib/src/GridDisplay.ts index 155397e98..33b1224f6 100644 --- a/packages/datalib/src/GridDisplay.ts +++ b/packages/datalib/src/GridDisplay.ts @@ -225,7 +225,7 @@ export abstract class GridDisplay { conditions.push( _.cloneDeepWith(condition, (expr: Expression) => { if (expr.exprType == 'placeholder') { - return this.createColumnExpression(column, { alias: column.sourceAlias }); + return this.createColumnExpression(column, { alias: column.sourceAlias }, undefined, 'filter'); } // return { // exprType: 'column', @@ -253,7 +253,7 @@ export abstract class GridDisplay { orCondition.conditions.push( _.cloneDeepWith(condition, (expr: Expression) => { if (expr.exprType == 'placeholder') { - return this.createColumnExpression(column, { alias: 'basetbl' }); + return this.createColumnExpression(column, { alias: 'basetbl' }, undefined, 'filter'); } }) ); @@ -570,10 +570,10 @@ export abstract class GridDisplay { processReferences(select: Select, displayedColumnInfo: DisplayedColumnInfo, options) {} - createColumnExpression(col, source, alias?) { + createColumnExpression(col, source, alias?, purpose: 'view' | 'filter' = 'view') { let expr = null; if (this.dialect.createColumnViewExpression) { - expr = this.dialect.createColumnViewExpression(col.columnName, col.dataType, source, alias); + expr = this.dialect.createColumnViewExpression(col.columnName, col.dataType, source, alias, purpose); if (expr) { return expr; } @@ -595,7 +595,7 @@ export abstract class GridDisplay { name: _.pick(name, ['schemaName', 'pureName']), alias: 'basetbl', }, - columns: columns.map(col => this.createColumnExpression(col, { alias: 'basetbl' })), + columns: columns.map(col => this.createColumnExpression(col, { alias: 'basetbl' }, undefined, 'view')), orderBy: this.driver?.requiresDefaultSortCriteria ? [ { diff --git a/packages/datalib/src/TableGridDisplay.ts b/packages/datalib/src/TableGridDisplay.ts index 7c77aabbf..5b96c6413 100644 --- a/packages/datalib/src/TableGridDisplay.ts +++ b/packages/datalib/src/TableGridDisplay.ts @@ -63,7 +63,7 @@ export class TableGridDisplay extends GridDisplay { ? this.table.primaryKey.columns.map(x => x.columnName) : this.table.columns.map(x => x.columnName); } - + if (this.config.isFormView) { this.addAllExpandedColumnsToSelected = true; this.hintBaseColumns = this.formColumns; @@ -287,7 +287,7 @@ export class TableGridDisplay extends GridDisplay { for (const column of columns) { if (this.addAllExpandedColumnsToSelected || this.config.addedColumns.includes(column.uniqueName)) { select.columns.push( - this.createColumnExpression(column, { name: column, alias: parentAlias }, column.uniqueName) + this.createColumnExpression(column, { name: column, alias: parentAlias }, column.uniqueName, 'view') ); displayedColumnInfo[column.uniqueName] = { ...column, diff --git a/packages/types/dialect.d.ts b/packages/types/dialect.d.ts index 94705d7cc..964cab2b4 100644 --- a/packages/types/dialect.d.ts +++ b/packages/types/dialect.d.ts @@ -50,7 +50,13 @@ export interface SqlDialect { predefinedDataTypes: string[]; // create sql-tree expression - createColumnViewExpression(columnName: string, dataType: string, source: { alias: string }, alias?: string): any; + createColumnViewExpression( + columnName: string, + dataType: string, + source: { alias: string }, + alias?: string, + purpose: 'view' | 'filter' = 'view' + ): any; getTableFormOptions(intent: 'newTableForm' | 'editTableForm' | 'sqlCreateTable' | 'sqlAlterTable'): { name: string; diff --git a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js index 298f384b3..af425036e 100644 --- a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js +++ b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js @@ -84,7 +84,7 @@ const dialect = { 'xml', ], - createColumnViewExpression(columnName, dataType, source, alias) { + createColumnViewExpression(columnName, dataType, source, alias, purpose) { if (dataType && spatialTypes.includes(dataType.toUpperCase())) { return { exprType: 'call', @@ -100,7 +100,7 @@ const dialect = { }; } - if (dataType?.toLowerCase() == 'uuid') { + if (dataType?.toLowerCase() == 'uuid' || (purpose == 'filter' && dataType?.toLowerCase()?.startsWith('json'))) { return { exprType: 'unaryRaw', expr: {