diff --git a/packages/tools/src/SqlDumper.ts b/packages/tools/src/SqlDumper.ts index ec45907a8..82e0eac49 100644 --- a/packages/tools/src/SqlDumper.ts +++ b/packages/tools/src/SqlDumper.ts @@ -246,7 +246,7 @@ export class SqlDumper implements AlterProcessor { this.putRaw(' '); this.specialColumnOptions(column); - if (includeNullable) { + if (includeNullable && !this.dialect?.specificNotNull) { this.put(column.notNull ? '^not ^null' : '^null'); } if (includeDefault && column.defaultValue?.trim()) { diff --git a/packages/types/dbinfo.d.ts b/packages/types/dbinfo.d.ts index 4ee4ac41d..ffa25dd6f 100644 --- a/packages/types/dbinfo.d.ts +++ b/packages/types/dbinfo.d.ts @@ -49,6 +49,7 @@ export interface ColumnInfo extends NamedObjectInfo { notNull?: boolean; autoIncrement?: boolean; dataType: string; + displayedDataType?: string; precision?: number; scale?: number; length?: number; diff --git a/packages/types/dialect.d.ts b/packages/types/dialect.d.ts index 2173a9cbe..654bf9539 100644 --- a/packages/types/dialect.d.ts +++ b/packages/types/dialect.d.ts @@ -34,6 +34,8 @@ export interface SqlDialect { createCheck?: boolean; dropCheck?: boolean; + specificNotNull?: boolean; + // syntax for create column: ALTER TABLE table ADD COLUMN column createColumnWithColumnKeyword?: boolean; diff --git a/packages/web/src/appobj/ColumnAppObject.svelte b/packages/web/src/appobj/ColumnAppObject.svelte index 8ee9f79db..37aa9b6f9 100644 --- a/packages/web/src/appobj/ColumnAppObject.svelte +++ b/packages/web/src/appobj/ColumnAppObject.svelte @@ -31,7 +31,7 @@ return [ { text: 'Rename column', onClick: handleRenameColumn }, { text: 'Drop column', onClick: handleDropColumn }, - { text: 'Copy name', onClick: () => navigator.clipboard.writeText(data.columnName)}, + { text: 'Copy name', onClick: () => navigator.clipboard.writeText(data.columnName) }, ]; } diff --git a/packages/web/src/datagrid/ColumnHeaderControl.svelte b/packages/web/src/datagrid/ColumnHeaderControl.svelte index 9e367a0fa..6083c680d 100644 --- a/packages/web/src/datagrid/ColumnHeaderControl.svelte +++ b/packages/web/src/datagrid/ColumnHeaderControl.svelte @@ -88,9 +88,9 @@ {/if} - {#if _.isString(column.dataType) && !order} + {#if _.isString(column.displayedDataType || column.dataType) && !order} - {column.dataType.toLowerCase()} + {(column.displayedDataType || column.dataType).toLowerCase()} {/if} diff --git a/packages/web/src/designer/ColumnLine.svelte b/packages/web/src/designer/ColumnLine.svelte index 7128ff89c..26065169d 100644 --- a/packages/web/src/designer/ColumnLine.svelte +++ b/packages/web/src/designer/ColumnLine.svelte @@ -196,7 +196,7 @@
{#if designer?.style?.showDataType && column?.dataType}
- {column?.dataType.toLowerCase()} + {(column?.displayedDataType || column?.dataType).toLowerCase()}
{/if} {#if designer?.style?.showNullability} diff --git a/packages/web/src/elements/ColumnLabel.svelte b/packages/web/src/elements/ColumnLabel.svelte index ffb77ba86..14d74c972 100644 --- a/packages/web/src/elements/ColumnLabel.svelte +++ b/packages/web/src/elements/ColumnLabel.svelte @@ -19,6 +19,7 @@ export let columnName = ''; export let extInfo = null; export let dataType = null; + export let displayedDataType = null; export let showDataType = false; export let foreignKey; export let conid = undefined; @@ -59,7 +60,7 @@ {/if} {:else if dataType} - {dataType.toLowerCase()} + {(displayedDataType || dataType).toLowerCase()} {/if} {/if} diff --git a/packages/web/src/tableeditor/ColumnEditorModal.svelte b/packages/web/src/tableeditor/ColumnEditorModal.svelte index 3411f40ca..5d7a4ffc6 100644 --- a/packages/web/src/tableeditor/ColumnEditorModal.svelte +++ b/packages/web/src/tableeditor/ColumnEditorModal.svelte @@ -32,7 +32,9 @@ - + {#if !driver?.dialect?.specificNotNull} + + {/if} showModal(ColumnEditorModal, { columnInfo: e.detail, tableInfo, setTableInfo, driver })} onAddNew={isWritable ? addColumn : null} columns={[ - { + !driver?.dialect?.specificNotNull && { fieldName: 'notNull', header: 'Nullability', sortable: true, diff --git a/plugins/dbgate-plugin-clickhouse/src/backend/Analyser.js b/plugins/dbgate-plugin-clickhouse/src/backend/Analyser.js index 91118d28e..662c09dcd 100644 --- a/plugins/dbgate-plugin-clickhouse/src/backend/Analyser.js +++ b/plugins/dbgate-plugin-clickhouse/src/backend/Analyser.js @@ -4,9 +4,10 @@ const sql = require('./sql'); function extractDataType(dataType) { if (!dataType) return {}; if (dataType.startsWith('Nullable(')) { - dataType = dataType.substring('Nullable('.length, dataType.length - 1); + const displayedDataType = dataType.substring('Nullable('.length, dataType.length - 1); return { dataType, + displayedDataType, notNull: false, }; } diff --git a/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js b/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js index d0364ce43..3fa0f61ee 100644 --- a/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js +++ b/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js @@ -64,6 +64,7 @@ const dialect = { dropIndex: true, anonymousPrimaryKey: true, createColumnWithColumnKeyword: true, + specificNotNull: true, columnProperties: { columnComment: true,