Fix issue with some zero-shard modifications

pull/3262/head
Marco Slot 2019-12-02 00:37:09 +01:00
parent 2c040d2c8f
commit e7a8db5493
4 changed files with 26 additions and 1 deletions

View File

@ -5122,6 +5122,11 @@ ReorderAndAssignTaskList(List *taskList, List * (*reorderFunction)(Task *, List
ListCell *placementListCell = NULL; ListCell *placementListCell = NULL;
uint32 unAssignedTaskCount = 0; uint32 unAssignedTaskCount = 0;
if (taskList == NIL)
{
return NIL;
}
/* /*
* We first sort tasks by their anchor shard id. We then sort placements for * We first sort tasks by their anchor shard id. We then sort placements for
* each anchor shard by the placement's insertion time. Note that we sort * each anchor shard by the placement's insertion time. Note that we sort

View File

@ -1715,6 +1715,11 @@ RouterJob(Query *originalQuery, PlannerRestrictionContext *plannerRestrictionCon
MODIFY_TASK, MODIFY_TASK,
requiresMasterEvaluation); requiresMasterEvaluation);
} }
else if (shardId == INVALID_SHARD_ID)
{
/* modification that prunes to 0 shards */
job->taskList = NIL;
}
else else
{ {
job->taskList = SingleShardModifyTaskList(originalQuery, job->jobId, job->taskList = SingleShardModifyTaskList(originalQuery, job->jobId,
@ -2068,7 +2073,6 @@ PlanRouterQuery(Query *originalQuery,
} }
Assert(UpdateOrDeleteQuery(originalQuery)); Assert(UpdateOrDeleteQuery(originalQuery));
planningError = ModifyQuerySupported(originalQuery, originalQuery, planningError = ModifyQuerySupported(originalQuery, originalQuery,
isMultiShardQuery, isMultiShardQuery,
plannerRestrictionContext); plannerRestrictionContext);

View File

@ -875,6 +875,13 @@ INSERT INTO raw_table VALUES (2, 400);
INSERT INTO raw_table VALUES (2, 500); INSERT INTO raw_table VALUES (2, 500);
INSERT INTO summary_table VALUES (1); INSERT INTO summary_table VALUES (1);
INSERT INTO summary_table VALUES (2); INSERT INTO summary_table VALUES (2);
-- test noop deletes and updates
DELETE FROM summary_table WHERE false;
DELETE FROM summary_table WHERE null;
DELETE FROM summary_table WHERE null > jsonb_build_array();
UPDATE summary_table SET uniques = 0 WHERE false;
UPDATE summary_table SET uniques = 0 WHERE null;
UPDATE summary_table SET uniques = 0 WHERE null > jsonb_build_array();
SELECT * FROM summary_table ORDER BY id; SELECT * FROM summary_table ORDER BY id;
id | min_value | average_value | count | uniques id | min_value | average_value | count | uniques
----+-----------+---------------+-------+--------- ----+-----------+---------------+-------+---------

View File

@ -547,6 +547,15 @@ INSERT INTO raw_table VALUES (2, 500);
INSERT INTO summary_table VALUES (1); INSERT INTO summary_table VALUES (1);
INSERT INTO summary_table VALUES (2); INSERT INTO summary_table VALUES (2);
-- test noop deletes and updates
DELETE FROM summary_table WHERE false;
DELETE FROM summary_table WHERE null;
DELETE FROM summary_table WHERE null > jsonb_build_array();
UPDATE summary_table SET uniques = 0 WHERE false;
UPDATE summary_table SET uniques = 0 WHERE null;
UPDATE summary_table SET uniques = 0 WHERE null > jsonb_build_array();
SELECT * FROM summary_table ORDER BY id; SELECT * FROM summary_table ORDER BY id;
UPDATE summary_table SET average_value = average_query.average FROM ( UPDATE summary_table SET average_value = average_query.average FROM (