citus/src/include/distributed/query_utils.h

51 lines
1.7 KiB
C

/*-------------------------------------------------------------------------
*
* query_utils.h
*
* Declarations for query-walker utility functions and related types.
*
* Copyright (c), Citus Data, Inc.
*
**---------------------------------------------------------------------------
*/
#ifndef QUERY_UTILS_H
#define QUERY_UTILS_H
#include "postgres.h"
#include "nodes/pg_list.h"
#include "nodes/primnodes.h"
/* Enum to define execution flow of ExtractRangeTableList */
typedef enum ExtractRangeTableMode
{
EXTRACT_RELATION_ENTRIES, /* inclduding local, foreign and partitioned tables */
EXTRACT_ALL_ENTRIES
} ExtractRangeTableMode;
/* Struct to pass rtable list and execution flow flag to query_walker_tree */
typedef struct ExtractRangeTableWalkerContext
{
List **rangeTableList;
ExtractRangeTableMode walkerMode;
} ExtractRangeTableWalkerContext;
/* Struct to pass rtable list and the result list to walker */
typedef struct ExtractRangeTableIdsContext
{
List **idList;
List *rtable;
} ExtractRangeTableIdsContext;
/* Function declarations for query-walker utility functions */
extern bool ExtractRangeTableList(Node *node, ExtractRangeTableWalkerContext *context);
/* Below two functions wrap ExtractRangeTableList function to determine the execution flow */
extern bool ExtractRangeTableRelationWalker(Node *node, List **rangeTableList);
extern bool ExtractRangeTableEntryWalker(Node *node, List **rangeTableList);
extern bool ExtractRangeTableIndexWalker(Node *node, List **rangeTableIndexList);
extern bool ExtractRangeTableIds(Node *node, ExtractRangeTableIdsContext *context);
extern bool CheckIfAllCitusRTEsAreColocated(Node *node, List *rtable, RangeTblEntry **rte);
#endif /* QUERY_UTILS_H */