Skip to content

Commit f4895ed

Browse files
committed
add multi-col test
1 parent 2e4ec40 commit f4895ed

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

enginetest/queries/script_queries.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10507,6 +10507,8 @@ where
1050710507
SetUpScript: []string{
1050810508
"create table parent (d decimal(4, 2) primary key);",
1050910509
"insert into parent values (1.23), (45.67), (78.9);",
10510+
"create table parent_multi (d1 decimal(4,2), d2 decimal(3,1), primary key (d1, d2));",
10511+
"insert into parent_multi values (1.23, 4.5), (45.67, 78.9), (99.99, 0.1);",
1051010512
},
1051110513
Assertions: []ScriptTestAssertion{
1051210514
{
@@ -10569,6 +10571,21 @@ where
1056910571
Query: "insert into child_dec_4_1 values (99.9);",
1057010572
ExpectedErr: sql.ErrForeignKeyChildViolation,
1057110573
},
10574+
{
10575+
Query: "create table child_multi_4_2_3_1 (d1 decimal(4,2), d2 decimal(3,1), foreign key (d1, d2) references parent_multi (d1, d2));",
10576+
Expected: []sql.Row{
10577+
{types.NewOkResult(0)},
10578+
}},
10579+
{
10580+
Query: "insert into child_multi_4_2_3_1 values (1.23, 4.5), (45.67, 78.9), (NULL, NULL);",
10581+
Expected: []sql.Row{
10582+
{types.NewOkResult(3)},
10583+
},
10584+
},
10585+
{
10586+
Query: "insert into child_multi_4_2_3_1 values (1.23, 9.9);",
10587+
ExpectedErr: sql.ErrForeignKeyChildViolation,
10588+
},
1057210589
},
1057310590
},
1057410591

sql/plan/foreign_key_editor.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ func (reference *ForeignKeyReferenceHandler) CheckReference(ctx *sql.Context, ro
513513
}
514514
if err == nil {
515515
// We have a parent row, but for DECIMAL types we need to be strict about precision/scale
516-
if shouldReject := reference.validateDecimalMatch(ctx, row); shouldReject {
516+
if shouldReject := reference.validateDecimalMatch(); shouldReject {
517517
return sql.ErrForeignKeyChildViolationMySQL845.New(reference.ForeignKey.Database, reference.ForeignKey.Table,
518518
reference.ForeignKey.Name, strings.Join(reference.ForeignKey.Columns, ", "),
519519
reference.ForeignKey.ParentTable, strings.Join(reference.ForeignKey.ParentColumns, ", "))
@@ -541,12 +541,11 @@ func (reference *ForeignKeyReferenceHandler) CheckReference(ctx *sql.Context, ro
541541
}
542542
}
543543

544-
return sql.ErrForeignKeyChildViolation.New(reference.ForeignKey.Database, reference.ForeignKey.Table,
545-
reference.ForeignKey.Name, strings.Join(reference.ForeignKey.Columns, ", "),
546-
reference.ForeignKey.ParentTable, strings.Join(reference.ForeignKey.ParentColumns, ", "))
544+
return sql.ErrForeignKeyChildViolation.New(reference.ForeignKey.Name, reference.ForeignKey.Table,
545+
reference.ForeignKey.ParentTable, reference.RowMapper.GetKeyString(row))
547546
}
548547

549-
func (reference *ForeignKeyReferenceHandler) validateDecimalMatch(ctx *sql.Context, row sql.Row) bool {
548+
func (reference *ForeignKeyReferenceHandler) validateDecimalMatch() bool {
550549
if reference.RowMapper.Index == nil {
551550
return false
552551
}
@@ -622,7 +621,6 @@ func (mapper *ForeignKeyRowMapper) GetIter(ctx *sql.Context, row sql.Row, refChe
622621
}
623622

624623
targetType := mapper.SourceSch[rowPos].Type
625-
626624
// Transform the type of the value in this row to the one in the other table for the index lookup, if necessary
627625
if mapper.TargetTypeConversions != nil && mapper.TargetTypeConversions[rowPos] != nil {
628626
var err error

0 commit comments

Comments
 (0)