diff --git a/packages/tools/src/diffTools.ts b/packages/tools/src/diffTools.ts index a92506eed..75101f7af 100644 --- a/packages/tools/src/diffTools.ts +++ b/packages/tools/src/diffTools.ts @@ -407,7 +407,7 @@ function planAlterTable(plan: AlterPlan, oldTable: TableInfo, newTable: TableInf // console.log('PLAN RENAME COLUMN') plan.renameColumn(x[0], x[1].columnName); } else { - // console.log('PLAN CHANGE COLUMN') + // console.log('PLAN CHANGE COLUMN', x[0], x[1]); plan.changeColumn(x[0], x[1]); } } @@ -430,12 +430,12 @@ function planAlterTable(plan: AlterPlan, oldTable: TableInfo, newTable: TableInf } function planChangeTableOptions(plan: AlterPlan, oldTable: TableInfo, newTable: TableInfo, opts: DbDiffOptions) { - for(const option of plan.dialect?.getTableFormOptions?.('sqlAlterTable') || []) { + for (const option of plan.dialect?.getTableFormOptions?.('sqlAlterTable') || []) { if (option.disabled) { continue; } const name = option.name; - if (oldTable[name] != newTable[name] && (oldTable[name]||newTable[name])) { + if (oldTable[name] != newTable[name] && (oldTable[name] || newTable[name])) { plan.setTableOption(newTable, name, newTable[name]); } } diff --git a/plugins/dbgate-plugin-clickhouse/src/frontend/Dumper.js b/plugins/dbgate-plugin-clickhouse/src/frontend/Dumper.js index f7842c044..e74514cd8 100644 --- a/plugins/dbgate-plugin-clickhouse/src/frontend/Dumper.js +++ b/plugins/dbgate-plugin-clickhouse/src/frontend/Dumper.js @@ -5,6 +5,24 @@ class Dumper extends SqlDumper { this.put('^alter ^table %f ^modify ', table); this.put(formatString, optionValue); } + + changeColumn(oldcol, newcol, constraints) { + if (oldcol.columnName != newcol.columnName) { + this.putCmd('^alter ^table %f ^rename ^column %i ^to %i', oldcol, oldcol.columnName, newcol.columnName); + } + + this.put('^alter ^table %f ^modify ^column %i ', newcol, newcol.columnName); + this.columnDefinition(newcol); + this.endCommand(); + } + + columnType(dataType) { + this.putRaw(dataType); + } + + renameColumn(column, newcol) { + this.putCmd('^alter ^table %f ^rename ^column %i ^to %i', column, column.columnName, newcol); + } } module.exports = Dumper; diff --git a/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js b/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js index 68958acc4..fc721eae1 100644 --- a/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js +++ b/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js @@ -50,6 +50,41 @@ const clickhouseEngines = [ 'DeltaLake', ]; +const clickhouseDataTypes = [ + 'Int8', + 'Int16', + 'Int32', + 'Int64', + 'UInt8', + 'UInt16', + 'UInt32', + 'UInt64', + 'Float32', + 'Float64', + 'Decimal', + 'String', + 'FixedString', + 'UUID', + 'Date', + 'DateTime', + 'DateTime64', + "DateTime('UTC')", + 'Date32', + 'Enum8', + 'Enum16', + 'Array', + 'Tuple', + 'Nullable', + 'LowCardinality', + 'Map', + 'JSON', + 'IPv4', + 'IPv6', + 'Nested', + 'AggregateFunction', + 'SimpleAggregateFunction', +]; + /** @type {import('dbgate-types').SqlDialect} */ const dialect = { limitSelect: true, @@ -93,6 +128,8 @@ const dialect = { }, ]; }, + + predefinedDataTypes: clickhouseDataTypes, }; /** @type {import('dbgate-types').EngineDriver} */