mirror of https://github.com/citusdata/citus.git
Merge pull request #1600 from citusdata/fix_multi_row_returning
Add alias for target in multi-row INSERTspull/1607/head
commit
a67d10957f
|
@ -82,11 +82,15 @@ RebuildQueryStrings(Query *originalQuery, List *taskList)
|
||||||
|
|
||||||
UpdateRelationToShardNames((Node *) copiedSubquery, relationShardList);
|
UpdateRelationToShardNames((Node *) copiedSubquery, relationShardList);
|
||||||
}
|
}
|
||||||
else if (task->upsertQuery)
|
else if (task->upsertQuery || valuesRTE != NULL)
|
||||||
{
|
{
|
||||||
RangeTblEntry *rangeTableEntry = NULL;
|
RangeTblEntry *rangeTableEntry = NULL;
|
||||||
|
|
||||||
/* setting an alias simplifies deparsing of UPSERTs */
|
/*
|
||||||
|
* Always an alias in UPSERTs and multi-row INSERTs to avoid
|
||||||
|
* deparsing issues (e.g. RETURNING might reference the original
|
||||||
|
* table name, which has been replaced by a shard name).
|
||||||
|
*/
|
||||||
rangeTableEntry = linitial(query->rtable);
|
rangeTableEntry = linitial(query->rtable);
|
||||||
if (rangeTableEntry->alias == NULL)
|
if (rangeTableEntry->alias == NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -305,7 +305,7 @@ Custom Scan (Citus Router)
|
||||||
Tasks Shown: All
|
Tasks Shown: All
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=57638 dbname=regression
|
Node: host=localhost port=57638 dbname=regression
|
||||||
-> Insert on lineitem_290000
|
-> Insert on lineitem_290000 citus_table_alias
|
||||||
-> Values Scan on "*VALUES*"
|
-> Values Scan on "*VALUES*"
|
||||||
-- Test update
|
-- Test update
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
|
|
|
@ -305,7 +305,7 @@ Custom Scan (Citus Router)
|
||||||
Tasks Shown: All
|
Tasks Shown: All
|
||||||
-> Task
|
-> Task
|
||||||
Node: host=localhost port=57638 dbname=regression
|
Node: host=localhost port=57638 dbname=regression
|
||||||
-> Insert on lineitem_290000
|
-> Insert on lineitem_290000 citus_table_alias
|
||||||
-> Values Scan on "*VALUES*"
|
-> Values Scan on "*VALUES*"
|
||||||
-- Test update
|
-- Test update
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
|
|
|
@ -211,10 +211,18 @@ SELECT COUNT(*) FROM limit_orders WHERE id BETWEEN 12037 AND 12039;
|
||||||
3
|
3
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- even those with functions
|
-- even those with functions and returning
|
||||||
INSERT INTO limit_orders VALUES (22037, 'GOOG', 5634, now(), 'buy', 0.50),
|
INSERT INTO limit_orders VALUES (22037, 'GOOG', 5634, now(), 'buy', 0.50),
|
||||||
(22038, 'GOOG', 5634, now(), 'buy', 2.50),
|
(22038, 'GOOG', 5634, now(), 'buy', 2.50),
|
||||||
(22039, 'GOOG', 5634, now(), 'buy', 1.50);
|
(22039, 'GOOG', 5634, now(), 'buy', 1.50)
|
||||||
|
RETURNING id;
|
||||||
|
id
|
||||||
|
-------
|
||||||
|
22038
|
||||||
|
22039
|
||||||
|
22037
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
SELECT COUNT(*) FROM limit_orders WHERE id BETWEEN 22037 AND 22039;
|
SELECT COUNT(*) FROM limit_orders WHERE id BETWEEN 22037 AND 22039;
|
||||||
count
|
count
|
||||||
-------
|
-------
|
||||||
|
|
|
@ -153,10 +153,11 @@ INSERT INTO limit_orders VALUES (12037, 'GOOG', 5634, '2001-04-16 03:37:28', 'bu
|
||||||
|
|
||||||
SELECT COUNT(*) FROM limit_orders WHERE id BETWEEN 12037 AND 12039;
|
SELECT COUNT(*) FROM limit_orders WHERE id BETWEEN 12037 AND 12039;
|
||||||
|
|
||||||
-- even those with functions
|
-- even those with functions and returning
|
||||||
INSERT INTO limit_orders VALUES (22037, 'GOOG', 5634, now(), 'buy', 0.50),
|
INSERT INTO limit_orders VALUES (22037, 'GOOG', 5634, now(), 'buy', 0.50),
|
||||||
(22038, 'GOOG', 5634, now(), 'buy', 2.50),
|
(22038, 'GOOG', 5634, now(), 'buy', 2.50),
|
||||||
(22039, 'GOOG', 5634, now(), 'buy', 1.50);
|
(22039, 'GOOG', 5634, now(), 'buy', 1.50)
|
||||||
|
RETURNING id;
|
||||||
|
|
||||||
SELECT COUNT(*) FROM limit_orders WHERE id BETWEEN 22037 AND 22039;
|
SELECT COUNT(*) FROM limit_orders WHERE id BETWEEN 22037 AND 22039;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue