From d8615fe224eed4747682e88202faad1251c317f6 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 5 Feb 2019 16:27:00 +0100 Subject: [PATCH v2 1/2] Test case for keys that "look" different but compare as equal --- src/test/regress/expected/foreign_key.out | 34 +++++++++++++++++++++++ src/test/regress/sql/foreign_key.sql | 20 +++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/test/regress/expected/foreign_key.out b/src/test/regress/expected/foreign_key.out index bf2c91d9f0..a68d055e40 100644 --- a/src/test/regress/expected/foreign_key.out +++ b/src/test/regress/expected/foreign_key.out @@ -1474,6 +1474,40 @@ delete from pktable2 where f1 = 1; alter table fktable2 drop constraint fktable2_f1_fkey; ERROR: cannot ALTER TABLE "pktable2" because it has pending trigger events commit; +drop table pktable2, fktable2; +-- +-- Test keys that "look" different but compare as equal +-- +create table pktable2 (a float8, b float8, primary key (a, b)); +create table fktable2 (x float8, y float8, foreign key (x, y) references pktable2 (a, b) on update cascade); +insert into pktable2 values ('-0', '-0'); +insert into fktable2 values ('-0', '-0'); +select * from pktable2; + a | b +----+---- + -0 | -0 +(1 row) + +select * from fktable2; + x | y +----+---- + -0 | -0 +(1 row) + +update pktable2 set a = '0' where a = '-0'; +select * from pktable2; + a | b +---+---- + 0 | -0 +(1 row) + +-- buggy: did not update fktable2.x +select * from fktable2; + x | y +----+---- + -0 | -0 +(1 row) + drop table pktable2, fktable2; -- -- Foreign keys and partitioned tables diff --git a/src/test/regress/sql/foreign_key.sql b/src/test/regress/sql/foreign_key.sql index c8d1214d02..c1fc7d30b1 100644 --- a/src/test/regress/sql/foreign_key.sql +++ b/src/test/regress/sql/foreign_key.sql @@ -1106,6 +1106,26 @@ CREATE TEMP TABLE tasks ( drop table pktable2, fktable2; +-- +-- Test keys that "look" different but compare as equal +-- +create table pktable2 (a float8, b float8, primary key (a, b)); +create table fktable2 (x float8, y float8, foreign key (x, y) references pktable2 (a, b) on update cascade); + +insert into pktable2 values ('-0', '-0'); +insert into fktable2 values ('-0', '-0'); + +select * from pktable2; +select * from fktable2; + +update pktable2 set a = '0' where a = '-0'; + +select * from pktable2; +-- buggy: did not update fktable2.x +select * from fktable2; + +drop table pktable2, fktable2; + -- -- Foreign keys and partitioned tables base-commit: f2d84a4a6b4ec891a0a52f583ed5aa081c71acc6 -- 2.21.0