aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/gin/ginarrayproc.c6
-rw-r--r--src/backend/access/gin/ginget.c2
-rw-r--r--src/backend/access/gin/ginlogic.c44
-rw-r--r--src/backend/utils/adt/jsonb_gin.c12
-rw-r--r--src/backend/utils/adt/tsginidx.c16
-rw-r--r--src/include/access/gin.h26
-rw-r--r--src/include/access/gin_private.h2
7 files changed, 56 insertions, 52 deletions
diff --git a/src/backend/access/gin/ginarrayproc.c b/src/backend/access/gin/ginarrayproc.c
index d04b851e3cf..32dbed68c77 100644
--- a/src/backend/access/gin/ginarrayproc.c
+++ b/src/backend/access/gin/ginarrayproc.c
@@ -225,7 +225,7 @@ ginarrayconsistent(PG_FUNCTION_ARGS)
Datum
ginarraytriconsistent(PG_FUNCTION_ARGS)
{
- GinLogicValue *check = (GinLogicValue *) PG_GETARG_POINTER(0);
+ GinTernaryValue *check = (GinTernaryValue *) PG_GETARG_POINTER(0);
StrategyNumber strategy = PG_GETARG_UINT16(1);
/* ArrayType *query = PG_GETARG_ARRAYTYPE_P(2); */
@@ -234,7 +234,7 @@ ginarraytriconsistent(PG_FUNCTION_ARGS)
/* Pointer *extra_data = (Pointer *) PG_GETARG_POINTER(4); */
/* Datum *queryKeys = (Datum *) PG_GETARG_POINTER(5); */
bool *nullFlags = (bool *) PG_GETARG_POINTER(6);
- GinLogicValue res;
+ GinTernaryValue res;
int32 i;
switch (strategy)
@@ -300,5 +300,5 @@ ginarraytriconsistent(PG_FUNCTION_ARGS)
res = false;
}
- PG_RETURN_GIN_LOGIC_VALUE(res);
+ PG_RETURN_GIN_TERNARY_VALUE(res);
}
diff --git a/src/backend/access/gin/ginget.c b/src/backend/access/gin/ginget.c
index 9d96bf5d5f7..dfc3dc48c80 100644
--- a/src/backend/access/gin/ginget.c
+++ b/src/backend/access/gin/ginget.c
@@ -873,7 +873,7 @@ keyGetItem(GinState *ginstate, MemoryContext tempCtx, GinScanKey key,
uint32 i;
bool haveLossyEntry;
GinScanEntry entry;
- GinLogicValue res;
+ GinTernaryValue res;
MemoryContext oldCtx;
bool allFinished;
diff --git a/src/backend/access/gin/ginlogic.c b/src/backend/access/gin/ginlogic.c
index e6d9e051696..167d25ea5c7 100644
--- a/src/backend/access/gin/ginlogic.c
+++ b/src/backend/access/gin/ginlogic.c
@@ -58,7 +58,7 @@ trueConsistentFn(GinScanKey key)
key->recheckCurItem = false;
return true;
}
-static GinLogicValue
+static GinTernaryValue
trueTriConsistentFn(GinScanKey key)
{
return GIN_TRUE;
@@ -91,17 +91,18 @@ directBoolConsistentFn(GinScanKey key)
/*
* A helper function for calling a native ternary logic consistent function.
*/
-static GinLogicValue
+static GinTernaryValue
directTriConsistentFn(GinScanKey key)
{
- return DatumGetGinLogicValue(FunctionCall7Coll(key->triConsistentFmgrInfo,
- key->collation,
- PointerGetDatum(key->entryRes),
- UInt16GetDatum(key->strategy),
- key->query,
- UInt32GetDatum(key->nuserentries),
- PointerGetDatum(key->extra_data),
- PointerGetDatum(key->queryValues),
+ return DatumGetGinTernaryValue(FunctionCall7Coll(
+ key->triConsistentFmgrInfo,
+ key->collation,
+ PointerGetDatum(key->entryRes),
+ UInt16GetDatum(key->strategy),
+ key->query,
+ UInt32GetDatum(key->nuserentries),
+ PointerGetDatum(key->extra_data),
+ PointerGetDatum(key->queryValues),
PointerGetDatum(key->queryCategories)));
}
@@ -113,15 +114,16 @@ directTriConsistentFn(GinScanKey key)
static bool
shimBoolConsistentFn(GinScanKey key)
{
- GinLogicValue result;
- result = DatumGetGinLogicValue(FunctionCall7Coll(key->triConsistentFmgrInfo,
- key->collation,
- PointerGetDatum(key->entryRes),
- UInt16GetDatum(key->strategy),
- key->query,
- UInt32GetDatum(key->nuserentries),
- PointerGetDatum(key->extra_data),
- PointerGetDatum(key->queryValues),
+ GinTernaryValue result;
+ result = DatumGetGinTernaryValue(FunctionCall7Coll(
+ key->triConsistentFmgrInfo,
+ key->collation,
+ PointerGetDatum(key->entryRes),
+ UInt16GetDatum(key->strategy),
+ key->query,
+ UInt32GetDatum(key->nuserentries),
+ PointerGetDatum(key->extra_data),
+ PointerGetDatum(key->queryValues),
PointerGetDatum(key->queryCategories)));
if (result == GIN_MAYBE)
{
@@ -147,7 +149,7 @@ shimBoolConsistentFn(GinScanKey key)
*
* NB: This function modifies the key->entryRes array!
*/
-static GinLogicValue
+static GinTernaryValue
shimTriConsistentFn(GinScanKey key)
{
int nmaybe;
@@ -155,7 +157,7 @@ shimTriConsistentFn(GinScanKey key)
int i;
bool boolResult;
bool recheck = false;
- GinLogicValue curResult;
+ GinTernaryValue curResult;
/*
* Count how many MAYBE inputs there are, and store their indexes in
diff --git a/src/backend/utils/adt/jsonb_gin.c b/src/backend/utils/adt/jsonb_gin.c
index 4a6b8fd6888..32ca024c694 100644
--- a/src/backend/utils/adt/jsonb_gin.c
+++ b/src/backend/utils/adt/jsonb_gin.c
@@ -288,12 +288,12 @@ gin_consistent_jsonb(PG_FUNCTION_ARGS)
Datum
gin_triconsistent_jsonb(PG_FUNCTION_ARGS)
{
- GinLogicValue *check = (GinLogicValue *) PG_GETARG_POINTER(0);
+ GinTernaryValue *check = (GinTernaryValue *) PG_GETARG_POINTER(0);
StrategyNumber strategy = PG_GETARG_UINT16(1);
/* Jsonb *query = PG_GETARG_JSONB(2); */
int32 nkeys = PG_GETARG_INT32(3);
/* Pointer *extra_data = (Pointer *) PG_GETARG_POINTER(4); */
- GinLogicValue res = GIN_TRUE;
+ GinTernaryValue res = GIN_TRUE;
int32 i;
@@ -366,7 +366,7 @@ gin_triconsistent_jsonb(PG_FUNCTION_ARGS)
else
elog(ERROR, "unrecognized strategy number: %d", strategy);
- PG_RETURN_GIN_LOGIC_VALUE(res);
+ PG_RETURN_GIN_TERNARY_VALUE(res);
}
/*
@@ -414,12 +414,12 @@ gin_consistent_jsonb_hash(PG_FUNCTION_ARGS)
Datum
gin_triconsistent_jsonb_hash(PG_FUNCTION_ARGS)
{
- GinLogicValue *check = (GinLogicValue *) PG_GETARG_POINTER(0);
+ GinTernaryValue *check = (GinTernaryValue *) PG_GETARG_POINTER(0);
StrategyNumber strategy = PG_GETARG_UINT16(1);
/* Jsonb *query = PG_GETARG_JSONB(2); */
int32 nkeys = PG_GETARG_INT32(3);
/* Pointer *extra_data = (Pointer *) PG_GETARG_POINTER(4); */
- GinLogicValue res = GIN_TRUE;
+ GinTernaryValue res = GIN_TRUE;
int32 i;
bool has_maybe = false;
@@ -455,7 +455,7 @@ gin_triconsistent_jsonb_hash(PG_FUNCTION_ARGS)
if (!has_maybe && res == GIN_TRUE)
res = GIN_MAYBE;
- PG_RETURN_GIN_LOGIC_VALUE(res);
+ PG_RETURN_GIN_TERNARY_VALUE(res);
}
Datum
diff --git a/src/backend/utils/adt/tsginidx.c b/src/backend/utils/adt/tsginidx.c
index 49e44bd8a7e..df47105d0b2 100644
--- a/src/backend/utils/adt/tsginidx.c
+++ b/src/backend/utils/adt/tsginidx.c
@@ -173,12 +173,12 @@ gin_extract_tsquery(PG_FUNCTION_ARGS)
typedef struct
{
QueryItem *first_item;
- GinLogicValue *check;
+ GinTernaryValue *check;
int *map_item_operand;
bool *need_recheck;
} GinChkVal;
-static GinLogicValue
+static GinTernaryValue
checkcondition_gin(void *checkval, QueryOperand *val)
{
GinChkVal *gcv = (GinChkVal *) checkval;
@@ -202,11 +202,11 @@ checkcondition_gin(void *checkval, QueryOperand *val)
* checkval can be used to pass information to the callback. TS_execute doesn't
* do anything with it.
*/
-static GinLogicValue
+static GinTernaryValue
TS_execute_ternary(QueryItem *curitem, void *checkval,
- GinLogicValue (*chkcond) (void *checkval, QueryOperand *val))
+ GinTernaryValue (*chkcond) (void *checkval, QueryOperand *val))
{
- GinLogicValue val1, val2, result;
+ GinTernaryValue val1, val2, result;
/* since this function recurses, it could be driven to stack overflow */
check_stack_depth();
@@ -297,14 +297,14 @@ gin_tsquery_consistent(PG_FUNCTION_ARGS)
Datum
gin_tsquery_triconsistent(PG_FUNCTION_ARGS)
{
- GinLogicValue *check = (GinLogicValue *) PG_GETARG_POINTER(0);
+ GinTernaryValue *check = (GinTernaryValue *) PG_GETARG_POINTER(0);
/* StrategyNumber strategy = PG_GETARG_UINT16(1); */
TSQuery query = PG_GETARG_TSQUERY(2);
/* int32 nkeys = PG_GETARG_INT32(3); */
Pointer *extra_data = (Pointer *) PG_GETARG_POINTER(4);
- GinLogicValue res = GIN_FALSE;
+ GinTernaryValue res = GIN_FALSE;
bool recheck;
/* The query requires recheck only if it involves weights */
@@ -332,7 +332,7 @@ gin_tsquery_triconsistent(PG_FUNCTION_ARGS)
res = GIN_MAYBE;
}
- PG_RETURN_GIN_LOGIC_VALUE(res);
+ PG_RETURN_GIN_TERNARY_VALUE(res);
}
/*
diff --git a/src/include/access/gin.h b/src/include/access/gin.h
index 34f4405bf69..f1894274fb3 100644
--- a/src/include/access/gin.h
+++ b/src/include/access/gin.h
@@ -47,20 +47,22 @@ typedef struct GinStatsData
int32 ginVersion;
} GinStatsData;
-/* ginlogic.c */
-enum GinLogicValueEnum
-{
- GIN_FALSE = 0, /* item is not present / does not match */
- GIN_TRUE = 1, /* item is present / matches */
- GIN_MAYBE = 2 /* don't know if item is present / don't know if
- * matches */
-};
+/*
+ * A ternary value used by tri-consistent functions.
+ *
+ * For convenience, this is compatible with booleans. A boolean can be
+ * safely cast to a GinTernaryValue.
+ */
+typedef char GinTernaryValue;
-typedef char GinLogicValue;
+#define GIN_FALSE 0 /* item is not present / does not match */
+#define GIN_TRUE 1 /* item is present / matches */
+#define GIN_MAYBE 2 /* don't know if item is present / don't know if
+ * matches */
-#define DatumGetGinLogicValue(X) ((GinLogicValue)(X))
-#define GinLogicValueGetDatum(X) ((Datum)(X))
-#define PG_RETURN_GIN_LOGIC_VALUE(x) return GinLogicValueGetDatum(x)
+#define DatumGetGinTernaryValue(X) ((GinTernaryValue)(X))
+#define GinTernaryValueGetDatum(X) ((Datum)(X))
+#define PG_RETURN_GIN_TERNARY_VALUE(x) return GinTernaryValueGetDatum(x)
/* GUC parameter */
extern PGDLLIMPORT int GinFuzzySearchLimit;
diff --git a/src/include/access/gin_private.h b/src/include/access/gin_private.h
index a7beed1f256..d11811acb57 100644
--- a/src/include/access/gin_private.h
+++ b/src/include/access/gin_private.h
@@ -763,7 +763,7 @@ typedef struct GinScanKeyData
/* array of check flags, reported to consistentFn */
bool *entryRes;
bool (*boolConsistentFn) (GinScanKey key);
- GinLogicValue (*triConsistentFn) (GinScanKey key);
+ GinTernaryValue (*triConsistentFn) (GinScanKey key);
FmgrInfo *consistentFmgrInfo;
FmgrInfo *triConsistentFmgrInfo;
Oid collation;