mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-06-15 10:59:41 +08:00
- 为 DuckDB 表结构变更补充 ADD PRIMARY KEY 预览 SQL - 保存前拦截已有主键表的主键替换与删除,避免假成功 - 补充 DuckDB 主键变更判定与 schema SQL 回归测试
39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import type { EditableColumnSnapshot } from './tableDesignerSchemaSql';
|
|
|
|
export interface DuckDbPrimaryKeyChangeSummary {
|
|
hasChange: boolean;
|
|
isAddingPrimaryKey: boolean;
|
|
isUnsupportedChange: boolean;
|
|
}
|
|
|
|
const collectPrimaryKeys = (columns: EditableColumnSnapshot[]): string[] => (
|
|
columns
|
|
.filter((column) => column.key === 'PRI')
|
|
.map((column) => String(column._key || '').trim())
|
|
.filter(Boolean)
|
|
.sort()
|
|
);
|
|
|
|
export const summarizeDuckDbPrimaryKeyChange = (
|
|
originalColumns: EditableColumnSnapshot[],
|
|
columns: EditableColumnSnapshot[],
|
|
): DuckDbPrimaryKeyChangeSummary => {
|
|
const originalKeys = collectPrimaryKeys(originalColumns);
|
|
const nextKeys = collectPrimaryKeys(columns);
|
|
const hasChange = originalKeys.length !== nextKeys.length || originalKeys.some((key, index) => key !== nextKeys[index]);
|
|
if (!hasChange) {
|
|
return {
|
|
hasChange: false,
|
|
isAddingPrimaryKey: false,
|
|
isUnsupportedChange: false,
|
|
};
|
|
}
|
|
|
|
const isAddingPrimaryKey = originalKeys.length === 0 && nextKeys.length > 0;
|
|
return {
|
|
hasChange: true,
|
|
isAddingPrimaryKey,
|
|
isUnsupportedChange: !isAddingPrimaryKey,
|
|
};
|
|
};
|