diff --git a/apps/desktop/src/components/structure/TableStructureEditor.vue b/apps/desktop/src/components/structure/TableStructureEditor.vue index a4f2a3027c..c082ff8db9 100644 --- a/apps/desktop/src/components/structure/TableStructureEditor.vue +++ b/apps/desktop/src/components/structure/TableStructureEditor.vue @@ -42,6 +42,7 @@ import { getDataTypeOptions, getDefaultLengthForType, isDataTypeLengthDisabled, + isSqlServerIdentityCompatibleDataType, isProtectedManticoreIdColumn, parseExtraToColumnExtra, splitDataType, @@ -1017,7 +1018,19 @@ function isSqlServerIdentityChecked(column: EditableStructureColumn): boolean { } function canEditSqlServerIdentity(column: EditableStructureColumn): boolean { - return !column.original && !column.markedForDrop; + return !column.original && !column.markedForDrop && isSqlServerIdentityCompatibleDataType(column.dataType); +} + +function clearSqlServerIdentity(column: EditableStructureColumn) { + column.extra.autoIncrement = false; + column.extra.identity = undefined; +} + +function syncSqlServerIdentityForDataType(column: EditableStructureColumn) { + if (databaseType.value !== "sqlserver") return; + if (!isSqlServerIdentityChecked(column)) return; + if (isSqlServerIdentityCompatibleDataType(column.dataType)) return; + clearSqlServerIdentity(column); } function ensureSqlServerIdentity(column: EditableStructureColumn) { @@ -1034,8 +1047,7 @@ function setSqlServerIdentity(column: EditableStructureColumn, checked: boolean) ensureSqlServerIdentity(column); column.isNullable = false; } else { - column.extra.autoIncrement = false; - column.extra.identity = undefined; + clearSqlServerIdentity(column); } } @@ -1059,6 +1071,16 @@ function updateSqlServerIdentityIncrement(column: EditableStructureColumn, value column.extra.identity!.increment = parseOptionalNumberInput(value); } +function updateColumnDataType(column: EditableStructureColumn, baseType: string) { + column.dataType = combineDataTypeForDatabase(databaseType.value, baseType, getDefaultLengthForType(databaseType.value, baseType)); + syncSqlServerIdentityForDataType(column); +} + +function updateColumnDataTypeLength(column: EditableStructureColumn, value: string | number) { + column.dataType = combineDataTypeForDatabase(databaseType.value, splitDataType(column.dataType).baseType, String(value)); + syncSqlServerIdentityForDataType(column); +} + function moveColumnTo(index: number, insertionIndex: number) { if (!canDropColumnAt(index, insertionIndex)) return; const nextColumns = [...columns.value]; @@ -1797,17 +1819,12 @@ watch(activeTab, (tab) => { :loading-text="t('common.loading')" :allow-custom="true" :trigger-class="[structureMonoControlClass, 'w-full']" - @update:model-value="(v: string) => (column.dataType = combineDataTypeForDatabase(databaseType, v, getDefaultLengthForType(databaseType, v)))" + @update:model-value="(v: string) => updateColumnDataType(column, v)" /> - +