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

Commitd941ff4

Browse files
committed
pathman: regression tests for UPDATE and DELETE
1 parent26d3945 commitd941ff4

File tree

3 files changed

+49
-16
lines changed

3 files changed

+49
-16
lines changed

‎contrib/pg_pathman/expected/pg_pathman.out

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -753,8 +753,9 @@ EXPLAIN (COSTS OFF) SELECT * FROM hash_rel WHERE id = 1234;
753753
/* Range */
754754
CREATE TABLE range_rel (
755755
id SERIAL PRIMARY KEY,
756-
dt TIMESTAMP NOT NULL);
757-
INSERT INTO range_rel (dt) SELECT g FROM generate_series('2010-01-01'::date, '2010-12-31'::date, '1 day') as g;
756+
dt TIMESTAMP NOT NULL,
757+
value INTEGER);
758+
INSERT INTO range_rel (dt, value) SELECT g, extract(day from g) FROM generate_series('2010-01-01'::date, '2010-12-31'::date, '1 day') as g;
758759
SELECT create_range_partitions('range_rel', 'dt', '2010-01-01'::date, '1 month'::interval, 12);
759760
NOTICE: sequence "range_rel_seq" does not exist, skipping
760761
NOTICE: Copying data to partitions...
@@ -817,6 +818,36 @@ EXPLAIN (COSTS OFF) SELECT * FROM range_rel WHERE dt > '2010-12-15';
817818
-> Seq Scan on range_rel_14
818819
(4 rows)
819820

821+
/* Test UPDATE and DELETE */
822+
EXPLAIN (COSTS OFF) UPDATE range_rel SET value = 111 WHERE dt = '2010-06-15';
823+
QUERY PLAN
824+
--------------------------------------------------------------------------------
825+
Update on range_rel_6
826+
-> Seq Scan on range_rel_6
827+
Filter: (dt = 'Tue Jun 15 00:00:00 2010'::timestamp without time zone)
828+
(3 rows)
829+
830+
UPDATE range_rel SET value = 111 WHERE dt = '2010-06-15';
831+
SELECT * FROM range_rel WHERE dt = '2010-06-15';
832+
id | dt | value
833+
-----+--------------------------+-------
834+
166 | Tue Jun 15 00:00:00 2010 | 111
835+
(1 row)
836+
837+
EXPLAIN (COSTS OFF) DELETE FROM range_rel WHERE dt = '2010-06-15';
838+
QUERY PLAN
839+
--------------------------------------------------------------------------------
840+
Delete on range_rel_6
841+
-> Seq Scan on range_rel_6
842+
Filter: (dt = 'Tue Jun 15 00:00:00 2010'::timestamp without time zone)
843+
(3 rows)
844+
845+
DELETE FROM range_rel WHERE dt = '2010-06-15';
846+
SELECT * FROM range_rel WHERE dt = '2010-06-15';
847+
id | dt | value
848+
----+----+-------
849+
(0 rows)
850+
820851
/* Create range partitions from whole range */
821852
SELECT drop_range_partitions('range_rel');
822853
NOTICE: 0 rows copied from range_rel_15
@@ -828,7 +859,7 @@ NOTICE: 31 rows copied from range_rel_10
828859
NOTICE: 30 rows copied from range_rel_9
829860
NOTICE: 31 rows copied from range_rel_8
830861
NOTICE: 31 rows copied from range_rel_7
831-
NOTICE:30 rows copied from range_rel_6
862+
NOTICE:29 rows copied from range_rel_6
832863
NOTICE: 31 rows copied from range_rel_5
833864
NOTICE: 30 rows copied from range_rel_4
834865
NOTICE: 31 rows copied from range_rel_3

‎contrib/pg_pathman/pg_pathman.c

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,6 @@ pathman_planner_hook(Query *parse, int cursorOptions, ParamListInfo boundParams)
196196
}
197197

198198
inheritance_disabled= false;
199-
200-
// if (parse->commandType != CMD_SELECT)
201-
202199
switch(parse->commandType)
203200
{
204201
caseCMD_SELECT:
@@ -275,7 +272,6 @@ handle_modification_query(Query *parse)
275272
PartRelationInfo*prel;
276273
List*ranges,
277274
*wrappers=NIL;
278-
// ListCell *lc;
279275
RangeTblEntry*rte;
280276
WrapperNode*wrap;
281277
boolfound;
@@ -286,23 +282,20 @@ handle_modification_query(Query *parse)
286282
rte= (RangeTblEntry*)linitial(parse->rtable);
287283
prel=get_pathman_relation_info(rte->relid,&found);
288284

289-
// foreach(lc, parse->jointree->quals)
290-
// {
291-
// WrapperNode *wrap;
292-
// Expr *expr = (Expr *) lfirst(lc);
285+
if (!found)
286+
return;
293287

294-
// wrap = walk_expr_tree(expr, prel);
288+
/* Parse syntax tree and extract partition ranges */
295289
ranges=list_make1_int(make_irange(0,prel->children_count-1, false));
296290
wrap=walk_expr_tree( (Expr*)parse->jointree->quals,prel);
297291
wrappers=lappend(wrappers,wrap);
298292
ranges=irange_list_intersect(ranges,wrap->rangeset);
299-
// }
300293

301294
/* If only one partition is affected then substitute parent table with partition */
302295
if (irange_list_length(ranges)==1)
303296
{
304297
IndexRangeirange= (IndexRange)linitial_oid(ranges);
305-
elog(WARNING,"lower: %d, upper: %d, lossy: %d",irange_lower(irange),irange_upper(irange),irange_is_lossy(irange));
298+
//elog(WARNING, "lower: %d, upper: %d, lossy: %d", irange_lower(irange), irange_upper(irange), irange_is_lossy(irange));
306299
if (irange_lower(irange)==irange_upper(irange))
307300
{
308301
Oid*children= (Oid*)dsm_array_get_pointer(&prel->children);

‎contrib/pg_pathman/sql/pg_pathman.sql

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,9 @@ EXPLAIN (COSTS OFF) SELECT * FROM hash_rel WHERE id = 1234;
191191
/* Range*/
192192
CREATETABLErange_rel (
193193
idSERIALPRIMARY KEY,
194-
dtTIMESTAMPNOT NULL);
195-
INSERT INTO range_rel (dt)SELECT gFROM generate_series('2010-01-01'::date,'2010-12-31'::date,'1 day')as g;
194+
dtTIMESTAMPNOT NULL,
195+
valueINTEGER);
196+
INSERT INTO range_rel (dt, value)SELECT g, extract(dayfrom g)FROM generate_series('2010-01-01'::date,'2010-12-31'::date,'1 day')as g;
196197
SELECT create_range_partitions('range_rel','dt','2010-01-01'::date,'1 month'::interval,12);
197198
SELECT merge_range_partitions('range_rel_1','range_rel_2');
198199
SELECT split_range_partition('range_rel_1','2010-02-15'::date);
@@ -201,6 +202,14 @@ SELECT prepend_range_partition('range_rel');
201202
EXPLAIN (COSTS OFF)SELECT*FROM range_relWHERE dt<'2010-03-01';
202203
EXPLAIN (COSTS OFF)SELECT*FROM range_relWHERE dt>'2010-12-15';
203204

205+
/* Test UPDATE and DELETE*/
206+
EXPLAIN (COSTS OFF)UPDATE range_relSET value=111WHERE dt='2010-06-15';
207+
UPDATE range_relSET value=111WHERE dt='2010-06-15';
208+
SELECT*FROM range_relWHERE dt='2010-06-15';
209+
EXPLAIN (COSTS OFF)DELETEFROM range_relWHERE dt='2010-06-15';
210+
DELETEFROM range_relWHERE dt='2010-06-15';
211+
SELECT*FROM range_relWHERE dt='2010-06-15';
212+
204213
/* Create range partitions from whole range*/
205214
SELECT drop_range_partitions('range_rel');
206215
SELECT create_partitions_from_range('range_rel','id',1,1000,100);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp