@@ -12,8 +12,6 @@ SELECT pathman.create_hash_partitions('test.hash_rel', 'value', 3);
1212ERROR: Partitioning key 'value' must be NOT NULL
1313ALTER TABLE test.hash_rel ALTER COLUMN value SET NOT NULL;
1414SELECT pathman.create_hash_partitions('test.hash_rel', 'Value', 3);
15- NOTICE: function test.hash_rel_insert_trigger_func() does not exist, skipping
16- NOTICE: function test.hash_rel_update_trigger_func() does not exist, skipping
1715NOTICE: Copying data to partitions...
1816 create_hash_partitions
1917------------------------
@@ -728,12 +726,60 @@ begin
728726return 'ok';
729727end;
730728$$ language plpgsql;
729+ create or replace function test.pathman_test_5() returns text as $$
730+ declare
731+ res record;
732+ begin
733+ select
734+ from test.runtime_test_3
735+ where id = (select * from test.vals order by val limit 1)
736+ limit 1
737+ into res; /* test empty tlist */
738+
739+
740+ select id, generate_series(1, 2) gen, val
741+ from test.runtime_test_3
742+ where id = any (select * from test.vals order by val limit 5)
743+ order by id, gen, val
744+ offset 1 limit 1
745+ into res; /* without IndexOnlyScan */
746+
747+ perform test.pathman_equal(res.id::text, '1', 'id is incorrect (t2)');
748+ perform test.pathman_equal(res.gen::text, '2', 'gen is incorrect (t2)');
749+ perform test.pathman_equal(res.val::text, 'k = 1', 'val is incorrect (t2)');
750+
751+
752+ select id
753+ from test.runtime_test_3
754+ where id = any (select * from test.vals order by val limit 5)
755+ order by id
756+ offset 3 limit 1
757+ into res; /* with IndexOnlyScan */
758+
759+ perform test.pathman_equal(res.id::text, '4', 'id is incorrect (t3)');
760+
761+
762+ select v.val v1, generate_series(2, 2) gen, t.val v2
763+ from test.runtime_test_3 t join test.vals v on id = v.val
764+ order by v1, gen, v2
765+ limit 1
766+ into res;
767+
768+ perform test.pathman_equal(res.v1::text, '1', 'v1 is incorrect (t4)');
769+ perform test.pathman_equal(res.gen::text, '2', 'gen is incorrect (t4)');
770+ perform test.pathman_equal(res.v2::text, 'k = 1', 'v2 is incorrect (t4)');
771+
772+ return 'ok';
773+ end;
774+ $$ language plpgsql
775+ set pg_pathman.enable = true
776+ set enable_hashjoin = off
777+ set enable_mergejoin = off;
778+ NOTICE: RuntimeAppend, RuntimeMergeAppend and PartitionFilter nodes have been enabled
731779create table test.run_values as select generate_series(1, 10000) val;
732780create table test.runtime_test_1(id serial primary key, val real);
733781insert into test.runtime_test_1 select generate_series(1, 10000), random();
734782select pathman.create_hash_partitions('test.runtime_test_1', 'id', 6);
735- NOTICE: function test.runtime_test_1_insert_trigger_func() does not exist, skipping
736- NOTICE: function test.runtime_test_1_update_trigger_func() does not exist, skipping
737783NOTICE: Copying data to partitions...
738784 create_hash_partitions
739785------------------------
@@ -745,16 +791,29 @@ create table test.runtime_test_2 (id serial, category_id int not null, name text
745791insert into test.runtime_test_2 (select id, (id % 6) + 1 as category_id, 'good' || id::text as name, random() as rating from generate_series(1, 100000) id);
746792create index on test.runtime_test_2 (category_id, rating);
747793select pathman.create_hash_partitions('test.runtime_test_2', 'category_id', 6);
748- NOTICE: function test.runtime_test_2_insert_trigger_func() does not exist, skipping
749- NOTICE: function test.runtime_test_2_update_trigger_func() does not exist, skipping
750794NOTICE: Copying data to partitions...
751795 create_hash_partitions
752796------------------------
753797 6
754798(1 row)
755799
800+ create table test.vals as (select generate_series(1, 10000) as val);
801+ create table test.runtime_test_3(val text, id serial not null);
802+ insert into test.runtime_test_3(id, val) select * from generate_series(1, 10000) k, format('k = %s', k);
803+ select pathman.create_hash_partitions('test.runtime_test_3', 'id', 4);
804+ NOTICE: Copying data to partitions...
805+ create_hash_partitions
806+ ------------------------
807+ 4
808+ (1 row)
809+
810+ create index on test.runtime_test_3 (id);
811+ create index on test.runtime_test_3_0 (id);
756812analyze test.run_values;
757813analyze test.runtime_test_1;
814+ analyze test.runtime_test_2;
815+ analyze test.runtime_test_3;
816+ analyze test.runtime_test_3_0;
758817set enable_mergejoin = off;
759818set enable_hashjoin = off;
760819set pg_pathman.enable_runtimeappend = on;
@@ -783,12 +842,18 @@ select test.pathman_test_4(); /* RuntimeMergeAppend (lateral) */
783842 ok
784843(1 row)
785844
845+ select test.pathman_test_5(); /* projection tests for RuntimeXXX nodes */
846+ pathman_test_5
847+ ----------------
848+ ok
849+ (1 row)
850+
786851set pg_pathman.enable_runtimeappend = off;
787852set pg_pathman.enable_runtimemergeappend = off;
788853set enable_mergejoin = on;
789854set enable_hashjoin = on;
790- drop table test.run_values, test.runtime_test_1, test.runtime_test_2 cascade;
791- NOTICE: drop cascades to12 other objects
855+ drop table test.run_values, test.runtime_test_1, test.runtime_test_2, test.runtime_test_3, test.vals cascade;
856+ NOTICE: drop cascades to16 other objects
792857/*
793858 * Test split and merge
794859 */
@@ -1009,15 +1074,14 @@ SELECT * FROM test.hash_rel WHERE id = 123;
10091074/*
10101075 * Clean up
10111076 */
1012- SELECT pathman.drop_hash_partitions('test.hash_rel');
1013- NOTICE: drop cascades to trigger test_hash_rel_insert_trigger on table test.hash_rel
1077+ SELECT pathman.drop_partitions('test.hash_rel');
10141078NOTICE: drop cascades to 3 other objects
10151079NOTICE: 2 rows copied from test.hash_rel_2
10161080NOTICE: 3 rows copied from test.hash_rel_1
10171081NOTICE: 2 rows copied from test.hash_rel_0
1018- drop_hash_partitions
1019- ----------------------
1020- 3
1082+ drop_partitions
1083+ -----------------
1084+ 3
10211085(1 row)
10221086
10231087SELECT COUNT(*) FROM ONLY test.hash_rel;
@@ -1027,20 +1091,17 @@ SELECT COUNT(*) FROM ONLY test.hash_rel;
10271091(1 row)
10281092
10291093SELECT pathman.create_hash_partitions('test.hash_rel', 'value', 3);
1030- NOTICE: function test.hash_rel_insert_trigger_func() does not exist, skipping
1031- NOTICE: function test.hash_rel_update_trigger_func() does not exist, skipping
10321094NOTICE: Copying data to partitions...
10331095 create_hash_partitions
10341096------------------------
10351097 3
10361098(1 row)
10371099
1038- SELECT pathman.drop_hash_partitions('test.hash_rel', TRUE);
1039- NOTICE: drop cascades to trigger test_hash_rel_insert_trigger on table test.hash_rel
1100+ SELECT pathman.drop_partitions('test.hash_rel', TRUE);
10401101NOTICE: function test.hash_rel_update_trigger_func() does not exist, skipping
1041- drop_hash_partitions
1042- ----------------------
1043- 3
1102+ drop_partitions
1103+ -----------------
1104+ 3
10441105(1 row)
10451106
10461107SELECT COUNT(*) FROM ONLY test.hash_rel;
@@ -1050,15 +1111,16 @@ SELECT COUNT(*) FROM ONLY test.hash_rel;
10501111(1 row)
10511112
10521113DROP TABLE test.hash_rel CASCADE;
1053- SELECT pathman.drop_range_partitions('test.num_range_rel');
1114+ SELECT pathman.drop_partitions('test.num_range_rel');
1115+ NOTICE: drop cascades to 4 other objects
10541116NOTICE: 0 rows copied from test.num_range_rel_6
10551117NOTICE: 2 rows copied from test.num_range_rel_4
10561118NOTICE: 1000 rows copied from test.num_range_rel_3
10571119NOTICE: 1000 rows copied from test.num_range_rel_2
10581120NOTICE: 998 rows copied from test.num_range_rel_1
1059- drop_range_partitions
1060- -----------------------
1061- 5
1121+ drop_partitions
1122+ -----------------
1123+ 5
10621124(1 row)
10631125
10641126DROP TABLE test.num_range_rel CASCADE;
@@ -1172,8 +1234,6 @@ CREATE TABLE test."TeSt" (a INT NOT NULL, b INT);
11721234SELECT pathman.create_hash_partitions('test.TeSt', 'a', 3);
11731235ERROR: relation "test.test" does not exist at character 39
11741236SELECT pathman.create_hash_partitions('test."TeSt"', 'a', 3);
1175- NOTICE: function test.TeSt_insert_trigger_func() does not exist, skipping
1176- NOTICE: function test.TeSt_update_trigger_func() does not exist, skipping
11771237NOTICE: Copying data to partitions...
11781238 create_hash_partitions
11791239------------------------
@@ -1222,15 +1282,14 @@ EXPLAIN (COSTS OFF) SELECT * FROM test."TeSt" WHERE a = 1;
12221282 Filter: (a = 1)
12231283(3 rows)
12241284
1225- SELECT pathman.drop_hash_partitions('test."TeSt"');
1226- NOTICE: drop cascades to trigger test_TeSt_insert_trigger on table test."TeSt"
1285+ SELECT pathman.drop_partitions('test."TeSt"');
12271286NOTICE: drop cascades to 3 other objects
12281287NOTICE: 0 rows copied from test."TeSt_2"
12291288NOTICE: 3 rows copied from test."TeSt_1"
12301289NOTICE: 0 rows copied from test."TeSt_0"
1231- drop_hash_partitions
1232- ----------------------
1233- 3
1290+ drop_partitions
1291+ -----------------
1292+ 3
12341293(1 row)
12351294
12361295SELECT * FROM test."TeSt";
@@ -1291,15 +1350,16 @@ NOTICE: Done!
12911350 {12-31-2014,01-02-2015}
12921351(1 row)
12931352
1294- SELECT pathman.drop_range_partitions('test."RangeRel"');
1353+ SELECT pathman.drop_partitions('test."RangeRel"');
1354+ NOTICE: function test.RangeRel_update_trigger_func() does not exist, skipping
12951355NOTICE: 1 rows copied from test."RangeRel_6"
12961356NOTICE: 0 rows copied from test."RangeRel_4"
12971357NOTICE: 1 rows copied from test."RangeRel_3"
12981358NOTICE: 1 rows copied from test."RangeRel_2"
12991359NOTICE: 0 rows copied from test."RangeRel_1"
1300- drop_range_partitions
1301- -----------------------
1302- 5
1360+ drop_partitions
1361+ -----------------
1362+ 5
13031363(1 row)
13041364
13051365SELECT pathman.create_partitions_from_range('test."RangeRel"', 'dt', '2015-01-01'::DATE, '2015-01-05'::DATE, '1 day'::INTERVAL);
@@ -1314,7 +1374,7 @@ NOTICE: drop cascades to 5 other objects
13141374SELECT * FROM pathman.pathman_config;
13151375 id | relname | attname | parttype | range_interval
13161376----+--------------------+---------+----------+----------------
1317- 8 | test.num_range_rel | id | 2 | 1000
1377+ 9 | test.num_range_rel | id | 2 | 1000
13181378(1 row)
13191379
13201380CREATE TABLE test."RangeRel" (
@@ -1328,13 +1388,14 @@ NOTICE: Copying data to partitions...
13281388 3
13291389(1 row)
13301390
1331- SELECT pathman.drop_range_partitions('test."RangeRel"');
1391+ SELECT pathman.drop_partitions('test."RangeRel"');
1392+ NOTICE: function test.RangeRel_update_trigger_func() does not exist, skipping
13321393NOTICE: 0 rows copied from test."RangeRel_3"
13331394NOTICE: 0 rows copied from test."RangeRel_2"
13341395NOTICE: 0 rows copied from test."RangeRel_1"
1335- drop_range_partitions
1336- -----------------------
1337- 3
1396+ drop_partitions
1397+ -----------------
1398+ 3
13381399(1 row)
13391400
13401401SELECT pathman.create_partitions_from_range('test."RangeRel"', 'id', 1, 300, 100);
@@ -1355,8 +1416,6 @@ CREATE TABLE hash_rel (
13551416valueINTEGER NOT NULL);
13561417INSERT INTO hash_rel (value) SELECT g FROM generate_series(1, 10000) as g;
13571418SELECT create_hash_partitions('hash_rel', 'value', 3);
1358- NOTICE: function public.hash_rel_insert_trigger_func() does not exist, skipping
1359- NOTICE: function public.hash_rel_update_trigger_func() does not exist, skipping
13601419NOTICE: Copying data to partitions...
13611420 create_hash_partitions
13621421------------------------
@@ -1503,7 +1562,8 @@ EXPLAIN (COSTS OFF) DELETE FROM range_rel r USING tmp t WHERE r.dt = '2010-01-02
15031562
15041563DELETE FROM range_rel r USING tmp t WHERE r.dt = '2010-01-02' AND r.id = t.id;
15051564/* Create range partitions from whole range */
1506- SELECT drop_range_partitions('range_rel');
1565+ SELECT drop_partitions('range_rel');
1566+ NOTICE: function public.range_rel_update_trigger_func() does not exist, skipping
15071567NOTICE: 0 rows copied from range_rel_15
15081568NOTICE: 0 rows copied from range_rel_14
15091569NOTICE: 14 rows copied from range_rel_13
@@ -1518,9 +1578,9 @@ NOTICE: 31 rows copied from range_rel_5
15181578NOTICE: 30 rows copied from range_rel_4
15191579NOTICE: 31 rows copied from range_rel_3
15201580NOTICE: 44 rows copied from range_rel_1
1521- drop_range_partitions
1522- -----------------------
1523- 14
1581+ drop_partitions
1582+ -----------------
1583+ 14
15241584(1 row)
15251585
15261586SELECT create_partitions_from_range('range_rel', 'id', 1, 1000, 100);
@@ -1530,10 +1590,11 @@ NOTICE: Copying data to partitions...
15301590 10
15311591(1 row)
15321592
1533- SELECT drop_range_partitions('range_rel', TRUE);
1534- drop_range_partitions
1535- -----------------------
1536- 10
1593+ SELECT drop_partitions('range_rel', TRUE);
1594+ NOTICE: function public.range_rel_update_trigger_func() does not exist, skipping
1595+ drop_partitions
1596+ -----------------
1597+ 10
15371598(1 row)
15381599
15391600SELECT create_partitions_from_range('range_rel', 'dt', '2015-01-01'::date, '2015-12-01'::date, '1 month'::interval);