Skip to content

Commit d3ff44c

Browse files
committed
fix for handling of SQL Server special case for unique constraint _hashed_ prefix
1 parent 4dc2ade commit d3ff44c

2 files changed

Lines changed: 10 additions & 29 deletions

File tree

packages/components/src/internal/components/domainproperties/models.test.ts

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,19 +1244,6 @@ describe('DomainIndex', () => {
12441244
expect(index.isSingleFieldUniqueConstraint()).toBe(false);
12451245
});
12461246

1247-
test('isMSSQLHashedSingleFieldUniqueConstraint', () => {
1248-
let index = DomainIndex.fromJS([{ columnNames: ['a'], unique: true } as IDomainIndex]).get(0);
1249-
expect(index.isMSSQLHashedSingleFieldUniqueConstraint()).toBe(false);
1250-
index = DomainIndex.fromJS([{ columnNames: ['a'], unique: false } as IDomainIndex]).get(0);
1251-
expect(index.isMSSQLHashedSingleFieldUniqueConstraint()).toBe(false);
1252-
index = DomainIndex.fromJS([{ columnNames: ['_hashed_a'], unique: true } as IDomainIndex]).get(0);
1253-
expect(index.isMSSQLHashedSingleFieldUniqueConstraint()).toBe(false);
1254-
index = DomainIndex.fromJS([{ columnNames: ['_hashed_a'], unique: false } as IDomainIndex]).get(0);
1255-
expect(index.isMSSQLHashedSingleFieldUniqueConstraint()).toBe(true);
1256-
index = DomainIndex.fromJS([{ columnNames: ['_hashed_a', 'b'], unique: false } as IDomainIndex]).get(0);
1257-
expect(index.isMSSQLHashedSingleFieldUniqueConstraint()).toBe(false);
1258-
});
1259-
12601247
test('isSingleFieldNonUniqueConstraint', () => {
12611248
let index = DomainIndex.fromJS([{ columnNames: ['a'], unique: false } as IDomainIndex]).get(0);
12621249
expect(index.isSingleFieldNonUniqueConstraint()).toBe(true);

packages/components/src/internal/components/domainproperties/models.tsx

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -254,20 +254,19 @@ export class DomainDesign
254254
.map(index => index.columns.get(0))
255255
.toList();
256256

257-
// Hack: SQL server uses a hashed field for unique constraints on text columns, see
258-
// BaseMicrosoftSqlServerDialect.addCreateIndexStatements (where it talks about HASHBYTES)
259257
indices
260-
.filter(index => index.isMSSQLHashedSingleFieldUniqueConstraint())
258+
.filter(index => index.isSingleFieldNonUniqueConstraint())
261259
.forEach(index => {
262-
uniqueConstraintFieldNames = uniqueConstraintFieldNames.push(
263-
index.columns.get(0).replace('_hashed_', '')
264-
);
260+
// Hack: SQL server uses a hashed field for unique constraints on text columns, see
261+
// BaseMicrosoftSqlServerDialect.addCreateIndexStatements (where it talks about HASHBYTES)
262+
if (index.columns.get(0).startsWith('_hashed_')) {
263+
uniqueConstraintFieldNames = uniqueConstraintFieldNames.push(
264+
index.columns.get(0).replace('_hashed_', '')
265+
);
266+
} else {
267+
nonUniqueConstraintFieldNames = nonUniqueConstraintFieldNames.push(index.columns.get(0));
268+
}
265269
});
266-
267-
nonUniqueConstraintFieldNames = indices
268-
.filter(index => index.isSingleFieldNonUniqueConstraint())
269-
.map(index => index.columns.get(0))
270-
.toList();
271270
}
272271

273272
if (rawModel.fields) {
@@ -314,7 +313,6 @@ export class DomainDesign
314313
.filter(
315314
index =>
316315
!index.isSingleFieldUniqueConstraint() &&
317-
!index.isMSSQLHashedSingleFieldUniqueConstraint() &&
318316
!index.isSingleFieldNonUniqueConstraint()
319317
)
320318
.map(index => DomainIndex.serialize(index))
@@ -615,10 +613,6 @@ export class DomainIndex
615613
return this.type === 'unique' && this.columns.size === 1;
616614
}
617615

618-
isMSSQLHashedSingleFieldUniqueConstraint(): boolean {
619-
return this.isSingleFieldNonUniqueConstraint() && this.columns.get(0).startsWith('_hashed_');
620-
}
621-
622616
isSingleFieldNonUniqueConstraint(): boolean {
623617
return this.type === 'nonunique' && this.columns.size === 1;
624618
}

0 commit comments

Comments
 (0)