Skip to content

Commit

Permalink
Fix hash join test on 10.5
Browse files Browse the repository at this point in the history
  • Loading branch information
ildus committed Sep 13, 2018
1 parent 94f621b commit 0c69df3
Show file tree
Hide file tree
Showing 9 changed files with 194 additions and 50 deletions.
2 changes: 1 addition & 1 deletion META.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"pg_pathman": {
"file": "pg_pathman--1.4.sql",
"docfile": "README.md",
"version": "1.4.13",
"version": "1.4.14",
"abstract": "Partitioning tool"
}
},
Expand Down
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ REGRESS = pathman_array_qual \
pathman_interval \
pathman_join_clause \
pathman_lateral \
pathman_hashjoin \
pathman_mergejoin \
pathman_multilevel \
pathman_only \
Expand Down
35 changes: 0 additions & 35 deletions expected/pathman_basic.out
Original file line number Diff line number Diff line change
Expand Up @@ -810,41 +810,6 @@ EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel_1 UNION ALL SELECT * FROM test.
-> Index Scan using range_rel_2_dt_idx on range_rel_2
(4 rows)

/*
* Join
*/
set enable_nestloop = OFF;
SET enable_hashjoin = ON;
SET enable_mergejoin = OFF;
EXPLAIN (COSTS OFF)
SELECT * FROM test.range_rel j1
JOIN test.range_rel j2 on j2.id = j1.id
JOIN test.num_range_rel j3 on j3.id = j1.id
WHERE j1.dt < '2015-03-01' AND j2.dt >= '2015-02-01' ORDER BY j2.dt;
QUERY PLAN
-------------------------------------------------------------------------------------------
Sort
Sort Key: j2.dt
-> Hash Join
Hash Cond: (j3.id = j2.id)
-> Append
-> Index Scan using num_range_rel_1_pkey on num_range_rel_1 j3
-> Index Scan using num_range_rel_2_pkey on num_range_rel_2 j3_1
-> Index Scan using num_range_rel_3_pkey on num_range_rel_3 j3_2
-> Index Scan using num_range_rel_4_pkey on num_range_rel_4 j3_3
-> Hash
-> Hash Join
Hash Cond: (j2.id = j1.id)
-> Append
-> Index Scan using range_rel_2_dt_idx on range_rel_2 j2
-> Index Scan using range_rel_3_dt_idx on range_rel_3 j2_1
-> Index Scan using range_rel_4_dt_idx on range_rel_4 j2_2
-> Hash
-> Append
-> Index Scan using range_rel_1_pkey on range_rel_1 j1
-> Index Scan using range_rel_2_pkey on range_rel_2 j1_1
(20 rows)

/*
* Test inlined SQL functions
*/
Expand Down
2 changes: 1 addition & 1 deletion expected/pathman_calamity.out
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ SELECT debug_capture();
SELECT get_pathman_lib_version();
get_pathman_lib_version
-------------------------
1.4.13
1.4.14
(1 row)

set client_min_messages = NOTICE;
Expand Down
73 changes: 73 additions & 0 deletions expected/pathman_hashjoin.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
\set VERBOSITY terse
SET search_path = 'public';
CREATE SCHEMA pathman;
CREATE EXTENSION pg_pathman SCHEMA pathman;
CREATE SCHEMA test;
CREATE TABLE test.range_rel (
id SERIAL PRIMARY KEY,
dt TIMESTAMP NOT NULL,
txt TEXT);
CREATE INDEX ON test.range_rel (dt);
INSERT INTO test.range_rel (dt, txt)
SELECT g, md5(g::TEXT) FROM generate_series('2015-01-01', '2015-04-30', '1 day'::interval) as g;
SELECT pathman.create_range_partitions('test.range_rel', 'DT', '2015-01-01'::DATE, '1 month'::INTERVAL);
create_range_partitions
-------------------------
4
(1 row)

CREATE TABLE test.num_range_rel (
id SERIAL PRIMARY KEY,
txt TEXT);
SELECT pathman.create_range_partitions('test.num_range_rel', 'id', 0, 1000, 4);
create_range_partitions
-------------------------
4
(1 row)

INSERT INTO test.num_range_rel
SELECT g, md5(g::TEXT) FROM generate_series(1, 3000) as g;
SET pg_pathman.enable_runtimeappend = OFF;
SET pg_pathman.enable_runtimemergeappend = OFF;
VACUUM;
/*
* Hash join
*/
SET enable_indexscan = ON;
SET enable_seqscan = OFF;
SET enable_nestloop = OFF;
SET enable_hashjoin = ON;
SET enable_mergejoin = OFF;
EXPLAIN (COSTS OFF)
SELECT * FROM test.range_rel j1
JOIN test.range_rel j2 on j2.id = j1.id
JOIN test.num_range_rel j3 on j3.id = j1.id
WHERE j1.dt < '2015-03-01' AND j2.dt >= '2015-02-01' ORDER BY j2.dt;
QUERY PLAN
---------------------------------------------------------------------------------------
Sort
Sort Key: j2.dt
-> Hash Join
Hash Cond: (j1.id = j2.id)
-> Hash Join
Hash Cond: (j3.id = j1.id)
-> Append
-> Index Scan using num_range_rel_1_pkey on num_range_rel_1 j3
-> Index Scan using num_range_rel_2_pkey on num_range_rel_2 j3_1
-> Index Scan using num_range_rel_3_pkey on num_range_rel_3 j3_2
-> Index Scan using num_range_rel_4_pkey on num_range_rel_4 j3_3
-> Hash
-> Append
-> Index Scan using range_rel_1_pkey on range_rel_1 j1
-> Index Scan using range_rel_2_pkey on range_rel_2 j1_1
-> Hash
-> Append
-> Index Scan using range_rel_2_dt_idx on range_rel_2 j2
-> Index Scan using range_rel_3_dt_idx on range_rel_3 j2_1
-> Index Scan using range_rel_4_dt_idx on range_rel_4 j2_2
(20 rows)

DROP SCHEMA test CASCADE;
NOTICE: drop cascades to 12 other objects
DROP EXTENSION pg_pathman CASCADE;
DROP SCHEMA pathman CASCADE;
73 changes: 73 additions & 0 deletions expected/pathman_hashjoin_1.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
\set VERBOSITY terse
SET search_path = 'public';
CREATE SCHEMA pathman;
CREATE EXTENSION pg_pathman SCHEMA pathman;
CREATE SCHEMA test;
CREATE TABLE test.range_rel (
id SERIAL PRIMARY KEY,
dt TIMESTAMP NOT NULL,
txt TEXT);
CREATE INDEX ON test.range_rel (dt);
INSERT INTO test.range_rel (dt, txt)
SELECT g, md5(g::TEXT) FROM generate_series('2015-01-01', '2015-04-30', '1 day'::interval) as g;
SELECT pathman.create_range_partitions('test.range_rel', 'DT', '2015-01-01'::DATE, '1 month'::INTERVAL);
create_range_partitions
-------------------------
4
(1 row)

CREATE TABLE test.num_range_rel (
id SERIAL PRIMARY KEY,
txt TEXT);
SELECT pathman.create_range_partitions('test.num_range_rel', 'id', 0, 1000, 4);
create_range_partitions
-------------------------
4
(1 row)

INSERT INTO test.num_range_rel
SELECT g, md5(g::TEXT) FROM generate_series(1, 3000) as g;
SET pg_pathman.enable_runtimeappend = OFF;
SET pg_pathman.enable_runtimemergeappend = OFF;
VACUUM;
/*
* Hash join
*/
SET enable_indexscan = ON;
SET enable_seqscan = OFF;
SET enable_nestloop = OFF;
SET enable_hashjoin = ON;
SET enable_mergejoin = OFF;
EXPLAIN (COSTS OFF)
SELECT * FROM test.range_rel j1
JOIN test.range_rel j2 on j2.id = j1.id
JOIN test.num_range_rel j3 on j3.id = j1.id
WHERE j1.dt < '2015-03-01' AND j2.dt >= '2015-02-01' ORDER BY j2.dt;
QUERY PLAN
-------------------------------------------------------------------------------------------
Sort
Sort Key: j2.dt
-> Hash Join
Hash Cond: (j3.id = j2.id)
-> Append
-> Index Scan using num_range_rel_1_pkey on num_range_rel_1 j3
-> Index Scan using num_range_rel_2_pkey on num_range_rel_2 j3_1
-> Index Scan using num_range_rel_3_pkey on num_range_rel_3 j3_2
-> Index Scan using num_range_rel_4_pkey on num_range_rel_4 j3_3
-> Hash
-> Hash Join
Hash Cond: (j2.id = j1.id)
-> Append
-> Index Scan using range_rel_2_dt_idx on range_rel_2 j2
-> Index Scan using range_rel_3_dt_idx on range_rel_3 j2_1
-> Index Scan using range_rel_4_dt_idx on range_rel_4 j2_2
-> Hash
-> Append
-> Index Scan using range_rel_1_pkey on range_rel_1 j1
-> Index Scan using range_rel_2_pkey on range_rel_2 j1_1
(20 rows)

DROP SCHEMA test CASCADE;
NOTICE: drop cascades to 12 other objects
DROP EXTENSION pg_pathman CASCADE;
DROP SCHEMA pathman CASCADE;
12 changes: 0 additions & 12 deletions sql/pathman_basic.sql
Original file line number Diff line number Diff line change
Expand Up @@ -215,18 +215,6 @@ SET enable_seqscan = OFF;
EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel WHERE dt < '2015-03-01' ORDER BY dt;
EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel_1 UNION ALL SELECT * FROM test.range_rel_2 ORDER BY dt;

/*
* Join
*/
set enable_nestloop = OFF;
SET enable_hashjoin = ON;
SET enable_mergejoin = OFF;
EXPLAIN (COSTS OFF)
SELECT * FROM test.range_rel j1
JOIN test.range_rel j2 on j2.id = j1.id
JOIN test.num_range_rel j3 on j3.id = j1.id
WHERE j1.dt < '2015-03-01' AND j2.dt >= '2015-02-01' ORDER BY j2.dt;

/*
* Test inlined SQL functions
*/
Expand Down
44 changes: 44 additions & 0 deletions sql/pathman_hashjoin.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
\set VERBOSITY terse

SET search_path = 'public';
CREATE SCHEMA pathman;
CREATE EXTENSION pg_pathman SCHEMA pathman;
CREATE SCHEMA test;

CREATE TABLE test.range_rel (
id SERIAL PRIMARY KEY,
dt TIMESTAMP NOT NULL,
txt TEXT);
CREATE INDEX ON test.range_rel (dt);
INSERT INTO test.range_rel (dt, txt)
SELECT g, md5(g::TEXT) FROM generate_series('2015-01-01', '2015-04-30', '1 day'::interval) as g;
SELECT pathman.create_range_partitions('test.range_rel', 'DT', '2015-01-01'::DATE, '1 month'::INTERVAL);

CREATE TABLE test.num_range_rel (
id SERIAL PRIMARY KEY,
txt TEXT);
SELECT pathman.create_range_partitions('test.num_range_rel', 'id', 0, 1000, 4);
INSERT INTO test.num_range_rel
SELECT g, md5(g::TEXT) FROM generate_series(1, 3000) as g;

SET pg_pathman.enable_runtimeappend = OFF;
SET pg_pathman.enable_runtimemergeappend = OFF;
VACUUM;

/*
* Hash join
*/
SET enable_indexscan = ON;
SET enable_seqscan = OFF;
SET enable_nestloop = OFF;
SET enable_hashjoin = ON;
SET enable_mergejoin = OFF;
EXPLAIN (COSTS OFF)
SELECT * FROM test.range_rel j1
JOIN test.range_rel j2 on j2.id = j1.id
JOIN test.num_range_rel j3 on j3.id = j1.id
WHERE j1.dt < '2015-03-01' AND j2.dt >= '2015-02-01' ORDER BY j2.dt;

DROP SCHEMA test CASCADE;
DROP EXTENSION pg_pathman CASCADE;
DROP SCHEMA pathman CASCADE;
2 changes: 1 addition & 1 deletion src/include/init.h
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ simpify_mcxt_name(MemoryContext mcxt)
#define LOWEST_COMPATIBLE_FRONT 0x010400

/* Current version of native C library (0xAA_BB_CC) */
#define CURRENT_LIB_VERSION 0x010413
#define CURRENT_LIB_VERSION 0x010414


void *pathman_cache_search_relid(HTAB *cache_table,
Expand Down

0 comments on commit 0c69df3

Please sign in to comment.