Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5531ce0

Browse files
committed
regression tests for half-open ranges
1 parent9cbefb5 commit5531ce0

File tree

4 files changed

+73
-5
lines changed

4 files changed

+73
-5
lines changed

‎expected/pathman_basic.out‎

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1452,6 +1452,62 @@ CREATE TABLE test.range_rel_test2 (
14521452
dt TIMESTAMP);
14531453
SELECT pathman.attach_range_partition('test.range_rel', 'test.range_rel_test2', '2013-01-01'::DATE, '2014-01-01'::DATE);
14541454
ERROR: partition must have the exact same structure as parent
1455+
/* Half open ranges */
1456+
SELECT pathman.add_range_partition('test.range_rel', NULL, '2014-12-01'::DATE, 'test.range_rel_minus_infinity');
1457+
add_range_partition
1458+
-------------------------------
1459+
test.range_rel_minus_infinity
1460+
(1 row)
1461+
1462+
SELECT pathman.add_range_partition('test.range_rel', '2015-06-01'::DATE, NULL, 'test.range_rel_plus_infinity');
1463+
add_range_partition
1464+
------------------------------
1465+
test.range_rel_plus_infinity
1466+
(1 row)
1467+
1468+
SELECT pathman.append_range_partition('test.range_rel');
1469+
ERROR: Cannot append partition because last partition's range is half open
1470+
SELECT pathman.prepend_range_partition('test.range_rel');
1471+
ERROR: Cannot prepend partition because first partition's range is half open
1472+
DROP TABLE test.range_rel_minus_infinity;
1473+
CREATE TABLE test.range_rel_minus_infinity (LIKE test.range_rel INCLUDING ALL);
1474+
SELECT pathman.attach_range_partition('test.range_rel', 'test.range_rel_minus_infinity', NULL, '2014-12-01'::DATE);
1475+
attach_range_partition
1476+
-------------------------------
1477+
test.range_rel_minus_infinity
1478+
(1 row)
1479+
1480+
SELECT * FROM pathman.pathman_partition_list WHERE parent = 'test.range_rel'::REGCLASS;
1481+
parent | partition | parttype | partattr | range_min | range_max
1482+
----------------+-------------------------------+----------+----------+--------------------------+--------------------------
1483+
test.range_rel | test.range_rel_minus_infinity | 2 | dt | NULL | Mon Dec 01 00:00:00 2014
1484+
test.range_rel | test.range_rel_8 | 2 | dt | Mon Dec 01 00:00:00 2014 | Thu Jan 01 00:00:00 2015
1485+
test.range_rel | test.range_rel_1 | 2 | dt | Thu Jan 01 00:00:00 2015 | Sun Feb 01 00:00:00 2015
1486+
test.range_rel | test.range_rel_2 | 2 | dt | Sun Feb 01 00:00:00 2015 | Sun Mar 01 00:00:00 2015
1487+
test.range_rel | test.range_rel_3 | 2 | dt | Sun Mar 01 00:00:00 2015 | Wed Apr 01 00:00:00 2015
1488+
test.range_rel | test.range_rel_4 | 2 | dt | Wed Apr 01 00:00:00 2015 | Fri May 01 00:00:00 2015
1489+
test.range_rel | test.range_rel_6 | 2 | dt | Fri May 01 00:00:00 2015 | Mon Jun 01 00:00:00 2015
1490+
test.range_rel | test.range_rel_plus_infinity | 2 | dt | Mon Jun 01 00:00:00 2015 | NULL
1491+
(8 rows)
1492+
1493+
INSERT INTO test.range_rel (dt) VALUES ('2012-06-15');
1494+
INSERT INTO test.range_rel (dt) VALUES ('2015-12-15');
1495+
EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel WHERE dt < '2015-01-01';
1496+
QUERY PLAN
1497+
--------------------------------------------
1498+
Append
1499+
-> Seq Scan on range_rel_minus_infinity
1500+
-> Seq Scan on range_rel_8
1501+
(3 rows)
1502+
1503+
EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel WHERE dt >= '2015-05-01';
1504+
QUERY PLAN
1505+
-------------------------------------------
1506+
Append
1507+
-> Seq Scan on range_rel_6
1508+
-> Seq Scan on range_rel_plus_infinity
1509+
(3 rows)
1510+
14551511
/*
14561512
* Zero partitions count and adding partitions with specified name
14571513
*/
@@ -1560,7 +1616,7 @@ NOTICE: 0 rows copied from test.num_range_rel_6
15601616

15611617
DROP TABLE test.num_range_rel CASCADE;
15621618
DROP TABLE test.range_rel CASCADE;
1563-
NOTICE: drop cascades to7 other objects
1619+
NOTICE: drop cascades to9 other objects
15641620
/* Test automatic partition creation */
15651621
CREATE TABLE test.range_rel (
15661622
idSERIAL PRIMARY KEY,

‎range.sql‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ BEGIN
765765
INTO p_range;
766766

767767
IF p_range[2] ISNULL THEN
768-
RAISE EXCEPTION'Cannot append partition because last partition is half open';
768+
RAISE EXCEPTION'Cannot append partition because last partition''s range is half open';
769769
END IF;
770770

771771
IF @extschema@.is_date_type(p_atttype) THEN
@@ -879,7 +879,7 @@ BEGIN
879879
INTO p_range;
880880

881881
IF p_range[1] ISNULL THEN
882-
RAISE EXCEPTION'Cannot prepend partition because first partition is half open';
882+
RAISE EXCEPTION'Cannot prepend partition because first partition''s range is half open';
883883
END IF;
884884

885885
IF @extschema@.is_date_type(p_atttype) THEN

‎sql/pathman_basic.sql‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,20 @@ CREATE TABLE test.range_rel_test2 (
398398
dtTIMESTAMP);
399399
SELECTpathman.attach_range_partition('test.range_rel','test.range_rel_test2','2013-01-01'::DATE,'2014-01-01'::DATE);
400400

401+
/* Half open ranges*/
402+
SELECTpathman.add_range_partition('test.range_rel',NULL,'2014-12-01'::DATE,'test.range_rel_minus_infinity');
403+
SELECTpathman.add_range_partition('test.range_rel','2015-06-01'::DATE,NULL,'test.range_rel_plus_infinity');
404+
SELECTpathman.append_range_partition('test.range_rel');
405+
SELECTpathman.prepend_range_partition('test.range_rel');
406+
DROPTABLEtest.range_rel_minus_infinity;
407+
CREATETABLEtest.range_rel_minus_infinity (LIKEtest.range_rel INCLUDING ALL);
408+
SELECTpathman.attach_range_partition('test.range_rel','test.range_rel_minus_infinity',NULL,'2014-12-01'::DATE);
409+
SELECT*FROMpathman.pathman_partition_listWHERE parent='test.range_rel'::REGCLASS;
410+
INSERT INTOtest.range_rel (dt)VALUES ('2012-06-15');
411+
INSERT INTOtest.range_rel (dt)VALUES ('2015-12-15');
412+
EXPLAIN (COSTS OFF)SELECT*FROMtest.range_relWHERE dt<'2015-01-01';
413+
EXPLAIN (COSTS OFF)SELECT*FROMtest.range_relWHERE dt>='2015-05-01';
414+
401415
/*
402416
* Zero partitions count and adding partitions with specified name
403417
*/

‎src/relation_info.h‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@ typedef struct
5656

5757
/*
5858
* Comparison macros for bounds
59-
*If both bounds are minus infinite or plus infinite then they are equal.
60-
*Else call original comparison function.
6159
*/
6260
inlinestaticint8_t
6361
cmp_bounds(FmgrInfo*cmp_func,constBound*b1,constBound*b2)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp