Add test case for Issue #4
authorPallavi Sontakke <[email protected]>
Mon, 25 Jul 2016 11:46:41 +0000 (17:16 +0530)
committerPallavi Sontakke <[email protected]>
Mon, 25 Jul 2016 11:46:41 +0000 (17:16 +0530)
Tableoid to relation name mapping broken

src/test/regress/expected/xl_reported_bugs.out
src/test/regress/sql/xl_reported_bugs.sql

index c41288dc6ac38a18cfd2dbd761a9eb2184d65e09..38c470078774e30b48e024f85873225e233998da 100644 (file)
@@ -1,3 +1,94 @@
+-- #4
+-- Tableoid to relation name mapping broken
+create table cities (
+       name            text,
+       population      float8,
+       altitude        int             -- (in ft)
+);
+create table capitals (
+       state           char(2)
+) inherits (cities);
+-- Create unique indexes.  Due to a general limitation of inheritance,
+-- uniqueness is only enforced per-relation.  Unique index inference
+-- specification will do the right thing, though.
+create unique index cities_names_unique on cities (name);
+create unique index capitals_names_unique on capitals (name);
+-- prepopulate the tables.
+insert into cities values ('San Francisco', 7.24E+5, 63);
+insert into cities values ('Las Vegas', 2.583E+5, 2174);
+insert into cities values ('Mariposa', 1200, 1953);
+insert into capitals values ('Sacramento', 3.694E+5, 30, 'CA');
+insert into capitals values ('Madison', 1.913E+5, 845, 'WI');
+-- Tests proper for inheritance:
+select * from capitals;
+    name    | population | altitude | state 
+------------+------------+----------+-------
+ Madison    |     191300 |      845 | WI
+ Sacramento |     369400 |       30 | CA
+(2 rows)
+
+-- Succeeds:
+insert into cities values ('Las Vegas', 2.583E+5, 2174) on conflict do nothing;
+insert into capitals values ('Sacramento', 4664.E+5, 30, 'CA') on conflict (name) do update set population = excluded.population;
+-- Wrong "Sacramento", so do nothing:
+insert into capitals values ('Sacramento', 50, 2267, 'NE') on conflict (name) do nothing;
+select * from capitals;
+    name    | population | altitude | state 
+------------+------------+----------+-------
+ Madison    |     191300 |      845 | WI
+ Sacramento |  466400000 |       30 | CA
+(2 rows)
+
+insert into cities values ('Las Vegas', 5.83E+5, 2001) on conflict (name) do update set population = excluded.population, altitude = excluded.altitude;
+select tableoid::regclass, * from cities;
+ tableoid |     name      | population | altitude 
+----------+---------------+------------+----------
+ capitals | Madison       |     191300 |      845
+ cities   | San Francisco |     724000 |       63
+ cities   | Mariposa      |       1200 |     1953
+ cities   | Las Vegas     |     583000 |     2001
+ capitals | Sacramento    |  466400000 |       30
+(5 rows)
+
+insert into capitals values ('Las Vegas', 5.83E+5, 2222, 'NV') on conflict (name) do update set population = excluded.population;
+-- Capitals will contain new capital, Las Vegas:
+select * from capitals;
+    name    | population | altitude | state 
+------------+------------+----------+-------
+ Madison    |     191300 |      845 | WI
+ Sacramento |  466400000 |       30 | CA
+ Las Vegas  |     583000 |     2222 | NV
+(3 rows)
+
+-- Cities contains two instances of "Las Vegas", since unique constraints don't
+-- work across inheritance:
+select tableoid::regclass, * from cities;
+ tableoid |     name      | population | altitude 
+----------+---------------+------------+----------
+ capitals | Madison       |     191300 |      845
+ cities   | San Francisco |     724000 |       63
+ cities   | Mariposa      |       1200 |     1953
+ cities   | Las Vegas     |     583000 |     2001
+ capitals | Sacramento    |  466400000 |       30
+ capitals | Las Vegas     |     583000 |     2222
+(6 rows)
+
+-- This only affects "cities" version of "Las Vegas":
+insert into cities values ('Las Vegas', 5.86E+5, 2223) on conflict (name) do update set population = excluded.population, altitude = excluded.altitude;
+select tableoid::regclass, * from cities;
+ tableoid |     name      | population | altitude 
+----------+---------------+------------+----------
+ capitals | Madison       |     191300 |      845
+ cities   | San Francisco |     724000 |       63
+ cities   | Mariposa      |       1200 |     1953
+ cities   | Las Vegas     |     586000 |     2223
+ capitals | Sacramento    |  466400000 |       30
+ capitals | Las Vegas     |     583000 |     2222
+(6 rows)
+
+-- clean up
+drop table capitals;
+drop table cities;
 -- #16
 -- Windowing function throws an error when subquery has ORDER BY clause
 CREATE TABLE test (a int, b int);
index 7dbd26dd26b4636f4dd51ad4f92c857cab6d44f8..cc44e3a2c1d705d6bd80ac4ba614361e98858388 100644 (file)
@@ -1,3 +1,54 @@
+-- #4
+-- Tableoid to relation name mapping broken
+create table cities (
+       name            text,
+       population      float8,
+       altitude        int             -- (in ft)
+);
+
+create table capitals (
+       state           char(2)
+) inherits (cities);
+
+-- Create unique indexes.  Due to a general limitation of inheritance,
+-- uniqueness is only enforced per-relation.  Unique index inference
+-- specification will do the right thing, though.
+create unique index cities_names_unique on cities (name);
+create unique index capitals_names_unique on capitals (name);
+
+-- prepopulate the tables.
+insert into cities values ('San Francisco', 7.24E+5, 63);
+insert into cities values ('Las Vegas', 2.583E+5, 2174);
+insert into cities values ('Mariposa', 1200, 1953);
+
+insert into capitals values ('Sacramento', 3.694E+5, 30, 'CA');
+insert into capitals values ('Madison', 1.913E+5, 845, 'WI');
+
+-- Tests proper for inheritance:
+select * from capitals;
+
+-- Succeeds:
+insert into cities values ('Las Vegas', 2.583E+5, 2174) on conflict do nothing;
+insert into capitals values ('Sacramento', 4664.E+5, 30, 'CA') on conflict (name) do update set population = excluded.population;
+-- Wrong "Sacramento", so do nothing:
+insert into capitals values ('Sacramento', 50, 2267, 'NE') on conflict (name) do nothing;
+select * from capitals;
+insert into cities values ('Las Vegas', 5.83E+5, 2001) on conflict (name) do update set population = excluded.population, altitude = excluded.altitude;
+select tableoid::regclass, * from cities;
+insert into capitals values ('Las Vegas', 5.83E+5, 2222, 'NV') on conflict (name) do update set population = excluded.population;
+-- Capitals will contain new capital, Las Vegas:
+select * from capitals;
+-- Cities contains two instances of "Las Vegas", since unique constraints don't
+-- work across inheritance:
+select tableoid::regclass, * from cities;
+-- This only affects "cities" version of "Las Vegas":
+insert into cities values ('Las Vegas', 5.86E+5, 2223) on conflict (name) do update set population = excluded.population, altitude = excluded.altitude;
+select tableoid::regclass, * from cities;
+
+-- clean up
+drop table capitals;
+drop table cities;
+
 -- #16
 -- Windowing function throws an error when subquery has ORDER BY clause
 CREATE TABLE test (a int, b int);