| /*------------------------------------------------------------------------- | |
| * | |
| * predtest_valueset.h | |
| * functions for "value set" tests. | |
| * | |
| * | |
| * Portions Copyright (c) 2005-2009, Greenplum inc | |
| * Portions Copyright (c) 2012-Present VMware, Inc. or its affiliates. | |
| * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group | |
| * Portions Copyright (c) 1994, Regents of the University of California | |
| * | |
| * src/include/optimizer/predtest_valueset.h | |
| * | |
| *------------------------------------------------------------------------- | |
| */ | |
| #ifndef PREDTEST_VALUESET_H | |
| #define PREDTEST_VALUESET_H | |
| #include "nodes/primnodes.h" | |
| #include "utils/hsearch.h" | |
| #include "utils/memutils.h" | |
| /*************************************************************************************** | |
| * BEGIN functions and structures for determining a set of possible values from a clause | |
| */ | |
| typedef struct | |
| { | |
| /** | |
| * the set of possible values, if this can be determined from the clause. | |
| */ | |
| HTAB *set; | |
| /** | |
| * The memory context that contains the hashtable and its set of possible values | |
| */ | |
| MemoryContext memoryContext; | |
| /** | |
| * if true then set should be ignored and instead we know that we don't know anything about the set of values | |
| */ | |
| bool isAnyValuePossible; | |
| } PossibleValueSet; | |
| extern PossibleValueSet DeterminePossibleValueSet(Node *clause, Node *variable, Oid opfamily); | |
| /* returns a newly allocated list */ | |
| extern Node **GetPossibleValuesAsArray(PossibleValueSet *pvs, int *numValuesOut); | |
| extern void DeletePossibleValueSetData(PossibleValueSet *pvs); | |
| extern void InitPossibleValueSetData(PossibleValueSet *pvs); | |
| extern void AddUnmatchingValues(PossibleValueSet *pvs, PossibleValueSet *toCheck); | |
| extern void RemoveUnmatchingValues(PossibleValueSet *pvs, PossibleValueSet *toCheck); | |
| extern bool TryProcessExprForPossibleValues(Node *expr, Node *variable, Oid opfamily, PossibleValueSet *resultOut); | |
| #endif /* PREDTEST_VALUESET_H */ |