diff --git a/packages/tools/src/driverBase.ts b/packages/tools/src/driverBase.ts index fc4cf1c52..b4e9dc986 100644 --- a/packages/tools/src/driverBase.ts +++ b/packages/tools/src/driverBase.ts @@ -10,6 +10,10 @@ const dialect = { quoteIdentifier(s) { return s; }, + columnProperties: { + isSparse: false, + isPersisted: false, + }, }; export const driverBase = { diff --git a/packages/types/dbinfo.d.ts b/packages/types/dbinfo.d.ts index cde4914eb..2f0ed7ccf 100644 --- a/packages/types/dbinfo.d.ts +++ b/packages/types/dbinfo.d.ts @@ -54,6 +54,7 @@ export interface ColumnInfo extends NamedObjectInfo { isSparse?: boolean; defaultValue?: string; defaultConstraint?: string; + columnComment?: string; } export interface DatabaseObjectInfo extends NamedObjectInfo { @@ -63,6 +64,7 @@ export interface DatabaseObjectInfo extends NamedObjectInfo { modifyDate?: string; hashCode?: string; objectTypeField?: string; + obejctComment?: string; } export interface SqlObjectInfo extends DatabaseObjectInfo { diff --git a/packages/web/src/tableeditor/TableEditor.svelte b/packages/web/src/tableeditor/TableEditor.svelte index 53b3becbb..8e110e155 100644 --- a/packages/web/src/tableeditor/TableEditor.svelte +++ b/packages/web/src/tableeditor/TableEditor.svelte @@ -87,6 +87,7 @@ export let tableInfo; export let setTableInfo; export let dbInfo; + export let driver; export function writable() { return !!setTableInfo; @@ -176,7 +177,7 @@ header: 'Default value', sortable: true, }, - { + driver?.dialect?.columnProperties?.isSparse && { fieldName: 'isSparse', header: 'Is Sparse', sortable: true, @@ -187,12 +188,17 @@ header: 'Computed Expression', sortable: true, }, - { + driver?.dialect?.columnProperties?.isPersisted && { fieldName: 'isPersisted', header: 'Is Persisted', sortable: true, slot: 2, }, + driver?.dialect?.columnProperties?.columnComment && { + fieldName: 'columnComment', + header: 'Comment', + sortable: true, + }, writable() ? { fieldName: 'actions', diff --git a/packages/web/src/tabs/TableStructureTab.svelte b/packages/web/src/tabs/TableStructureTab.svelte index 125e5151a..7599bbc2b 100644 --- a/packages/web/src/tabs/TableStructureTab.svelte +++ b/packages/web/src/tabs/TableStructureTab.svelte @@ -75,6 +75,7 @@ $: dbInfo = useDatabaseInfo({ conid, database }); $: tableInfoWithPairingId = $tableInfo ? generateTablePairingId($tableInfo) : null; $: connection = useConnectionInfo({ conid }); + $: driver = findEngineDriver($connection, $extensions); const { editorState, editorValue, setEditorData, clearEditorData } = useEditorData({ tabid }); @@ -108,8 +109,6 @@ } function doSave(createTableName) { - const driver = findEngineDriver($connection, $extensions); - const { sql, recreates } = getAlterTableScript( $editorValue.base, extendTableInfo(fillConstraintNames($editorValue.current, driver.dialect)), @@ -167,6 +166,7 @@ bind:this={domEditor} tableInfo={showTable} dbInfo={$dbInfo} + {driver} setTableInfo={objectTypeField == 'tables' ? tableInfoUpdater => setEditorData(tbl => diff --git a/plugins/dbgate-plugin-mssql/src/frontend/driver.js b/plugins/dbgate-plugin-mssql/src/frontend/driver.js index b56be2ab2..79df704b7 100644 --- a/plugins/dbgate-plugin-mssql/src/frontend/driver.js +++ b/plugins/dbgate-plugin-mssql/src/frontend/driver.js @@ -35,6 +35,11 @@ const dialect = { dropCheck: true, dropReferencesWhenDropTable: true, + + columnProperties: { + isSparse: true, + isPersisted: true, + }, }; /** @type {import('dbgate-types').EngineDriver} */ @@ -66,7 +71,10 @@ const driver = { { label: 'New view', sql: 'CREATE VIEW myview\nAS\nSELECT * FROM table1' }, { label: 'New procedure', sql: 'CREATE PROCEDURE myproc (@arg1 INT)\nAS\nBEGIN\n SELECT * FROM table1\nEND' }, { label: 'New function', sql: 'CREATE FUNCTION myfunc (@arg1 INT) RETURNS INT\nAS\nBEGIN\n RETURN 1;\nEND' }, - { label: 'New table valued function', sql: 'CREATE FUNCTION myfunc (@arg1 INT) RETURNS TABLE \nAS\nRETURN SELECT * FROM table1' }, + { + label: 'New table valued function', + sql: 'CREATE FUNCTION myfunc (@arg1 INT) RETURNS TABLE \nAS\nRETURN SELECT * FROM table1', + }, ]; }, }; diff --git a/plugins/dbgate-plugin-mysql/src/backend/Analyser.js b/plugins/dbgate-plugin-mysql/src/backend/Analyser.js index eda8d7f50..117015cc0 100644 --- a/plugins/dbgate-plugin-mysql/src/backend/Analyser.js +++ b/plugins/dbgate-plugin-mysql/src/backend/Analyser.js @@ -14,6 +14,7 @@ function getColumnInfo({ numericPrecision, numericScale, defaultValue, + columnComment, }) { let fullDataType = dataType; if (charMaxLength && isTypeString(dataType)) fullDataType = `${dataType}(${charMaxLength})`; @@ -23,6 +24,7 @@ function getColumnInfo({ notNull: !isNullable || isNullable == 'NO' || isNullable == 'no', autoIncrement: !!(extra && extra.toLowerCase().includes('auto_increment')), columnName, + columnComment, dataType: fullDataType, defaultValue, }; diff --git a/plugins/dbgate-plugin-mysql/src/backend/sql/columns.js b/plugins/dbgate-plugin-mysql/src/backend/sql/columns.js index f77d13461..31fcd752a 100644 --- a/plugins/dbgate-plugin-mysql/src/backend/sql/columns.js +++ b/plugins/dbgate-plugin-mysql/src/backend/sql/columns.js @@ -8,6 +8,7 @@ select NUMERIC_PRECISION as numericPrecision, NUMERIC_SCALE as numericScale, COLUMN_DEFAULT as defaultValue, + COLUMN_COMMENT as columnComment, EXTRA as extra from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA = '#DATABASE#' and TABLE_NAME =OBJECT_ID_CONDITION diff --git a/plugins/dbgate-plugin-mysql/src/frontend/drivers.js b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js index c07e85feb..b340740af 100644 --- a/plugins/dbgate-plugin-mysql/src/frontend/drivers.js +++ b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js @@ -30,6 +30,10 @@ const dialect = { dropCheck: true, dropReferencesWhenDropTable: false, + + columnProperties: { + columnComment: true, + }, }; const mysqlDriverBase = { @@ -44,7 +48,11 @@ const mysqlDriverBase = { getNewObjectTemplates() { return [ { label: 'New view', sql: 'CREATE VIEW myview\nAS\nSELECT * FROM table1' }, - { label: 'New procedure', sql: 'DELIMITER //\n\nCREATE PROCEDURE myproc (IN arg1 INT)\nBEGIN\n SELECT * FROM table1;\nEND\n\nDELIMITER ;' }, + { + label: 'New procedure', + sql: + 'DELIMITER //\n\nCREATE PROCEDURE myproc (IN arg1 INT)\nBEGIN\n SELECT * FROM table1;\nEND\n\nDELIMITER ;', + }, { label: 'New function', sql: 'CREATE FUNCTION myfunc (arg1 INT)\nRETURNS INT DETERMINISTIC\nRETURN 1' }, ]; },