Skip to content
Snippets Groups Projects
Commit 0cfa34c2 authored by Heikki Linnakangas's avatar Heikki Linnakangas
Browse files

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
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment