mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-08-19 05:14:09 +08:00
@@ -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',
|
||||
|
||||
@@ -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'`,
|
||||
} {
|
||||
|
||||
Reference in New Issue
Block a user