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)"
/>
-
+
|
|