test(sqlserver): 补强索引预览与DDL回归覆盖

Fixes #379
This commit is contained in:
Syngnat
2026-06-29 20:47:01 +08:00
parent 8ac435dc6d
commit d900bda756
2 changed files with 35 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
import { describe, expect, it } from 'vitest';
import { buildIndexCreateSqlPreview } from './tableDesignerIndexSql';
import {
hasIndexFormChanged,
normalizeIndexFormFromRow,
@@ -27,6 +28,33 @@ describe('tableDesignerIndexUtils', () => {
});
});
it('preserves SQL Server existing index metadata for create preview reuse', () => {
const row: IndexDisplaySnapshot = {
key: 'IX_Users_Email',
name: 'IX_Users_Email',
indexType: 'nonclustered',
nonUnique: 0,
columnNames: ['email'],
};
const form = normalizeIndexFormFromRow(row, ['NORMAL', 'UNIQUE']);
expect(form).toEqual({
name: 'IX_Users_Email',
columnNames: ['email'],
kind: 'UNIQUE',
indexType: 'NONCLUSTERED',
});
expect(buildIndexCreateSqlPreview({
dbType: 'sqlserver',
tableRef: '[dbo].[Users]',
name: form.name,
columnNames: form.columnNames,
kind: form.kind,
indexType: form.indexType,
}).sql).toBe('CREATE UNIQUE NONCLUSTERED INDEX [IX_Users_Email] ON [dbo].[Users] ([email]);');
});
it('detects no-op index edits as unchanged', () => {
const previousForm: IndexFormSnapshot = {
name: 'idx_user_name',

View File

@@ -535,6 +535,9 @@ func TestResolveCreateStatementWithFallback_SQLServerBuildsFallbackDDL(t *testin
{Name: "id", Type: "int", Nullable: "NO", Key: "PRI", Extra: "auto_increment", Comment: "主键"},
{Name: "display_name", Type: "nvarchar(128)", Nullable: "YES", Default: &defaultValue, Comment: "显示名's"},
},
indexes: []connection.IndexDefinition{
{Name: "IX_Users_DisplayName", ColumnName: "display_name", SeqInIndex: 1, NonUnique: 1},
},
}
ddl, err := resolveCreateStatementWithFallback(dbInst, connection.ConnectionConfig{
@@ -550,11 +553,15 @@ func TestResolveCreateStatementWithFallback_SQLServerBuildsFallbackDDL(t *testin
if dbInst.colsSchema != "appdb" || dbInst.colsTable != "dbo.Users" {
t.Fatalf("expected SQL Server column lookup to use database and raw table, got %q.%q", dbInst.colsSchema, dbInst.colsTable)
}
if dbInst.indexSchema != "appdb" || dbInst.indexTable != "dbo.Users" {
t.Fatalf("expected SQL Server index lookup to use database and raw table, got %q.%q", dbInst.indexSchema, dbInst.indexTable)
}
for _, want := range []string{
`CREATE TABLE [dbo].[Users]`,
`[id] int IDENTITY(1,1) NOT NULL`,
`[display_name] nvarchar(128) DEFAULT ((0))`,
`PRIMARY KEY ([id])`,
`CREATE INDEX [IX_Users_DisplayName] ON [dbo].[Users] ([display_name]);`,
`EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'主键', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Users', @level2type = N'COLUMN', @level2name = N'id';`,
`@value = N'显示名''s'`,
} {