Move INSERT ... SELECT planning logic into one place

pull/1469/head
Marco Slot 2017-06-22 16:56:14 +02:00
parent 907274a58a
commit da47a03b18
9 changed files with 1101 additions and 1045 deletions

View File

@ -16,6 +16,7 @@
#include "distributed/citus_nodefuncs.h" #include "distributed/citus_nodefuncs.h"
#include "distributed/citus_ruleutils.h" #include "distributed/citus_ruleutils.h"
#include "distributed/deparse_shard_query.h" #include "distributed/deparse_shard_query.h"
#include "distributed/insert_select_planner.h"
#include "distributed/metadata_cache.h" #include "distributed/metadata_cache.h"
#include "distributed/multi_physical_planner.h" #include "distributed/multi_physical_planner.h"
#include "distributed/multi_router_planner.h" #include "distributed/multi_router_planner.h"

File diff suppressed because it is too large Load Diff

View File

@ -22,6 +22,7 @@
#include "distributed/citus_clauses.h" #include "distributed/citus_clauses.h"
#include "distributed/colocation_utils.h" #include "distributed/colocation_utils.h"
#include "distributed/metadata_cache.h" #include "distributed/metadata_cache.h"
#include "distributed/insert_select_planner.h"
#include "distributed/multi_logical_optimizer.h" #include "distributed/multi_logical_optimizer.h"
#include "distributed/multi_logical_planner.h" #include "distributed/multi_logical_planner.h"
#include "distributed/multi_physical_planner.h" #include "distributed/multi_physical_planner.h"

View File

@ -281,16 +281,8 @@ CreateDistributedPlan(PlannedStmt *localPlan, Query *originalQuery, Query *query
{ {
if (InsertSelectIntoDistributedTable(originalQuery)) if (InsertSelectIntoDistributedTable(originalQuery))
{ {
distributedPlan = CreateDistributedInsertSelectPlan(originalQuery, distributedPlan =
plannerRestrictionContext); CreateInsertSelectPlan(originalQuery, plannerRestrictionContext);
if (distributedPlan->planningError != NULL)
{
RaiseDeferredError(distributedPlan->planningError, DEBUG1);
/* if INSERT..SELECT cannot be distributed, pull to coordinator */
distributedPlan = CreateCoordinatorInsertSelectPlan(originalQuery);
}
} }
else else
{ {

File diff suppressed because it is too large Load Diff

View File

@ -19,6 +19,7 @@
#include "catalog/pg_type.h" #include "catalog/pg_type.h"
#include "distributed/master_protocol.h" #include "distributed/master_protocol.h"
#include "distributed/citus_ruleutils.h" #include "distributed/citus_ruleutils.h"
#include "distributed/insert_select_planner.h"
#include "distributed/multi_router_planner.h" #include "distributed/multi_router_planner.h"
#include "distributed/test_helper_functions.h" /* IWYU pragma: keep */ #include "distributed/test_helper_functions.h" /* IWYU pragma: keep */
#include "lib/stringinfo.h" #include "lib/stringinfo.h"

View File

@ -9,6 +9,7 @@
#include "postgres.h" #include "postgres.h"
#include "distributed/citus_clauses.h" #include "distributed/citus_clauses.h"
#include "distributed/insert_select_planner.h"
#include "distributed/multi_router_planner.h" #include "distributed/multi_router_planner.h"
#include "catalog/pg_type.h" #include "catalog/pg_type.h"

View File

@ -17,13 +17,21 @@
#include "postgres.h" #include "postgres.h"
#include "distributed/multi_physical_planner.h" #include "distributed/multi_physical_planner.h"
#include "distributed/multi_planner.h"
#include "nodes/execnodes.h" #include "nodes/execnodes.h"
#include "nodes/parsenodes.h" #include "nodes/parsenodes.h"
#include "nodes/plannodes.h" #include "nodes/plannodes.h"
extern MultiPlan * CreateCoordinatorInsertSelectPlan(Query *originalQuery); extern bool InsertSelectIntoDistributedTable(Query *query);
extern Query * ReorderInsertSelectTargetLists(Query *originalQuery,
RangeTblEntry *insertRte,
RangeTblEntry *subqueryRte);
extern void CoordinatorInsertSelectExplainScan(CustomScanState *node, List *ancestors, extern void CoordinatorInsertSelectExplainScan(CustomScanState *node, List *ancestors,
struct ExplainState *es); struct ExplainState *es);
extern MultiPlan * CreateInsertSelectPlan(Query *originalQuery,
PlannerRestrictionContext *
plannerRestrictionContext);
#endif /* INSERT_SELECT_PLANNER_H */ #endif /* INSERT_SELECT_PLANNER_H */

View File

@ -35,18 +35,12 @@ extern bool RouterSelectQuery(Query *originalQuery,
RelationRestrictionContext *restrictionContext, RelationRestrictionContext *restrictionContext,
List **placementList, uint64 *anchorShardId, List **placementList, uint64 *anchorShardId,
List **relationShardList, bool replacePrunedQueryWithDummy); List **relationShardList, bool replacePrunedQueryWithDummy);
extern MultiPlan * CreateDistributedInsertSelectPlan(Query *originalQuery, extern List * IntersectPlacementList(List *lhsPlacementList, List *rhsPlacementList);
PlannerRestrictionContext *
plannerRestrictionContext);
extern DeferredErrorMessage * ModifyQuerySupported(Query *queryTree); extern DeferredErrorMessage * ModifyQuerySupported(Query *queryTree);
extern Query * ReorderInsertSelectTargetLists(Query *originalQuery,
RangeTblEntry *insertRte,
RangeTblEntry *subqueryRte);
extern List * ShardIntervalOpExpressions(ShardInterval *shardInterval, Index rteIndex); extern List * ShardIntervalOpExpressions(ShardInterval *shardInterval, Index rteIndex);
extern RelationRestrictionContext * CopyRelationRestrictionContext( extern RelationRestrictionContext * CopyRelationRestrictionContext(
RelationRestrictionContext *oldContext); RelationRestrictionContext *oldContext);
extern bool InsertSelectIntoDistributedTable(Query *query);
extern Oid ExtractFirstDistributedTableId(Query *query); extern Oid ExtractFirstDistributedTableId(Query *query);
extern RangeTblEntry * ExtractSelectRangeTableEntry(Query *query); extern RangeTblEntry * ExtractSelectRangeTableEntry(Query *query);
extern RangeTblEntry * ExtractInsertRangeTableEntry(Query *query); extern RangeTblEntry * ExtractInsertRangeTableEntry(Query *query);