mirror of https://github.com/citusdata/citus.git
64 lines
1.5 KiB
C
64 lines
1.5 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* multi_planner.h
|
|
* General Citus planner code.
|
|
*
|
|
* Copyright (c) 2012-2016, Citus Data, Inc.
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef MULTI_PLANNER_H
|
|
#define MULTI_PLANNER_H
|
|
|
|
#include "nodes/plannodes.h"
|
|
#include "nodes/relation.h"
|
|
|
|
#include "distributed/citus_nodes.h"
|
|
|
|
|
|
/* values used by jobs and tasks which do not require identifiers */
|
|
#define INVALID_JOB_ID 0
|
|
#define INVALID_TASK_ID 0
|
|
|
|
|
|
typedef struct RelationRestrictionContext
|
|
{
|
|
bool hasDistributedRelation;
|
|
bool hasLocalRelation;
|
|
bool allReferenceTables;
|
|
List *relationRestrictionList;
|
|
} RelationRestrictionContext;
|
|
|
|
typedef struct RelationRestriction
|
|
{
|
|
Index index;
|
|
Oid relationId;
|
|
bool distributedRelation;
|
|
RangeTblEntry *rte;
|
|
RelOptInfo *relOptInfo;
|
|
PlannerInfo *plannerInfo;
|
|
List *prunedShardIntervalList;
|
|
} RelationRestriction;
|
|
|
|
typedef struct RelationShard
|
|
{
|
|
CitusNode type;
|
|
Oid relationId;
|
|
uint64 shardId;
|
|
} RelationShard;
|
|
|
|
|
|
extern PlannedStmt * multi_planner(Query *parse, int cursorOptions,
|
|
ParamListInfo boundParams);
|
|
|
|
struct MultiPlan;
|
|
extern struct MultiPlan * GetMultiPlan(CustomScan *node);
|
|
extern void multi_relation_restriction_hook(PlannerInfo *root, RelOptInfo *relOptInfo,
|
|
Index index, RangeTblEntry *rte);
|
|
extern bool IsModifyCommand(Query *query);
|
|
extern bool IsModifyMultiPlan(struct MultiPlan *multiPlan);
|
|
extern RangeTblEntry * RemoteScanRangeTableEntry(List *columnNameList);
|
|
|
|
|
|
#endif /* MULTI_PLANNER_H */
|