From 0cfa34c25a7c8e7017cac346d954016fad0dfc16 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas <heikki.linnakangas@iki.fi> Date: Mon, 31 Mar 2014 10:26:38 +0300 Subject: [PATCH] Rename GinLogicValue to GinTernaryValue. It's more descriptive. Also, get rid of the enum, and use #defines instead, per Greg Stark's suggestion. --- src/backend/access/gin/ginarrayproc.c | 6 ++-- src/backend/access/gin/ginget.c | 2 +- src/backend/access/gin/ginlogic.c | 44 ++++++++++++++------------- src/backend/utils/adt/jsonb_gin.c | 12 ++++---- src/backend/utils/adt/tsginidx.c | 16 +++++----- src/include/access/gin.h | 26 ++++++++-------- src/include/access/gin_private.h | 2 +- 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; -- GitLab