Commit 0cfa34c2 authored by Heikki Linnakangas's avatar Heikki Linnakangas

Rename GinLogicValue to GinTernaryValue.

It's more descriptive. Also, get rid of the enum, and use #defines instead,
per Greg Stark's suggestion.
parent 7317d8d9
......@@ -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
* 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;
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment