Skip to content

Commit 120d2f6

Browse files
authored
Fix implicitly used collations after ALTER DOMAIN (#8434)
* Fix implicitly used collations after ALTER DOMAIN * Correction for COLLATE used together with the domain name * Ensure ALTER DOMAIN preserves the specified collation, it also fixes #1627: ALTER DOMAIN supporting collation change
1 parent 0424fb1 commit 120d2f6

File tree

2 files changed

+5
-11
lines changed

2 files changed

+5
-11
lines changed

src/dsql/DdlNodes.epp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6480,11 +6480,10 @@ void RelationNode::defineField(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch
64806480
storeGlobalField(tdbb, transaction, fieldDefinition.fieldSource, field,
64816481
computedSource, computedValue);
64826482
}
6483-
else
6483+
else if (field->collate.hasData())
64846484
{
64856485
// Resolve possible additional collation for domains. For plain types it is already resolved above.
6486-
if (field->collate.hasData())
6487-
DDL_resolve_intl_type(dsqlScratch, field, field->collate);
6486+
DDL_resolve_intl_type(dsqlScratch, field, field->collate);
64886487
}
64896488

64906489
if ((relation->rel_flags & REL_external) &&
@@ -6541,7 +6540,8 @@ void RelationNode::defineField(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch
65416540
}
65426541

65436542
fieldDefinition.defaultValue = defaultValue;
6544-
fieldDefinition.collationId = field->collationId;
6543+
if (field->typeOfName.isEmpty() || field->collate.hasData())
6544+
fieldDefinition.collationId = field->collationId;
65456545
fieldDefinition.store(tdbb, transaction);
65466546

65476547
// Define the field constraints.

src/dsql/parse.y

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4281,13 +4281,7 @@ alter_domain_op($alterDomainNode)
42814281
| TO symbol_column_name
42824282
{ setClause($alterDomainNode->renameTo, "DOMAIN NAME", *$2); }
42834283
| TYPE non_array_type
4284-
{
4285-
//// FIXME: ALTER DOMAIN doesn't support collations, and altered domain's
4286-
//// collation is always lost.
4287-
dsql_fld* type = $2;
4288-
type->collate = "";
4289-
setClause($alterDomainNode->type, "DOMAIN TYPE", type);
4290-
}
4284+
{ setClause($alterDomainNode->type, "DOMAIN TYPE", $2);}
42914285
;
42924286

42934287
%type alter_ops(<relationNode>)

0 commit comments

Comments
 (0)