diff --git a/packages/sqltree/src/dumpSqlExpression.ts b/packages/sqltree/src/dumpSqlExpression.ts index 4772a4bde..158a9afe2 100644 --- a/packages/sqltree/src/dumpSqlExpression.ts +++ b/packages/sqltree/src/dumpSqlExpression.ts @@ -28,6 +28,12 @@ export function dumpSqlExpression(dmp: SqlDumper, expr: Expression) { dmp.put('%s', expr.sql); break; + case 'unaryRaw': + if (expr.beforeSql) dmp.putRaw(expr.beforeSql); + dumpSqlExpression(dmp, expr.expr); + if (expr.afterSql) dmp.putRaw(expr.afterSql); + break; + case 'call': dmp.put('%s(', expr.func); if (expr.argsPrefix) dmp.put('%s ', expr.argsPrefix); @@ -36,7 +42,7 @@ export function dumpSqlExpression(dmp: SqlDumper, expr: Expression) { break; case 'methodCall': - dumpSqlExpression(dmp, expr.thisObject) + dumpSqlExpression(dmp, expr.thisObject); dmp.put('.%s(', expr.method); dmp.putCollection(',', expr.args, x => dumpSqlExpression(dmp, x)); dmp.put(')'); diff --git a/packages/sqltree/src/types.ts b/packages/sqltree/src/types.ts index df9802cee..c3ce9af29 100644 --- a/packages/sqltree/src/types.ts +++ b/packages/sqltree/src/types.ts @@ -168,6 +168,13 @@ export interface RawExpression { sql: string; } +export interface UnaryRawExpression { + exprType: 'unaryRaw'; + expr: Expression; + beforeSql?: string; + afterSql?: string; +} + export interface CallExpression { exprType: 'call'; func: string; @@ -198,6 +205,7 @@ export type Expression = | ValueExpression | PlaceholderExpression | RawExpression + | UnaryRawExpression | CallExpression | MethodCallExpression | TranformExpression diff --git a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js index 897f545fd..2754f5ed1 100644 --- a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js +++ b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js @@ -99,6 +99,19 @@ const dialect = { ], }; } + + if (dataType?.toLowerCase() == 'uuid') { + return { + exprType: 'unaryRaw', + expr: { + exprType: 'column', + alias: alias || columnName, + source, + columnName, + }, + afterSql: '::text', + }; + } }, };