mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-30 19:00:29 +08:00
Rename GinLogicValue to GinTernaryValue.
It's more descriptive. Also, get rid of the enum, and use #defines instead, per Greg Stark's suggestion.
This commit is contained in:
parent
7317d8d961
commit
0cfa34c25a
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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
|
||||
/*
|
||||
* 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;
|
||||
|
||||
#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 */
|
||||
};
|
||||
|
||||
typedef char GinLogicValue;
|
||||
|
||||
#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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user