citus/src/include/distributed/extended_op_node_utils.h

48 lines
1.3 KiB
C

/*-------------------------------------------------------------------------
*
* extended_op_node_utils.h
* General Citus planner code.
*
* Copyright (c) Citus Data, Inc.
*-------------------------------------------------------------------------
*/
#ifndef EXTENDED_OP_NODE_UTILS_H_
#define EXTENDED_OP_NODE_UTILS_H_
#include "distributed/multi_logical_planner.h"
/*
* ExtendedOpNodeProperties is a helper structure that is used to
* share the common information among the worker and coordinator extended
* op nodes.
*
* It is designed to be a read-only singleton object per extended op node
* generation and processing.
*/
typedef struct ExtendedOpNodeProperties
{
bool groupedByDisjointPartitionColumn;
bool repartitionSubquery;
bool hasNonPartitionColumnDistinctAgg;
bool pullDistinctColumns;
bool hasWindowFuncs;
bool onlyPushableWindowFunctions;
bool pullUpIntermediateRows;
bool pushDownGroupingAndHaving;
/* indicates whether the MultiExtendedOp has a GROUP BY */
bool hasGroupBy;
/* indicates whether the MultiExtendedOp has an aggregate on the target list */
bool hasAggregate;
} ExtendedOpNodeProperties;
extern ExtendedOpNodeProperties BuildExtendedOpNodeProperties(
MultiExtendedOp *extendedOpNode, bool hasNonDistributableAggregates);
#endif /* EXTENDED_OP_NODE_UTILS_H_ */