if (strategy == HStoreContainsStrategyNumber)
{ /* Query is an hstore, so just apply gin_extract_hstore... */
entries = (Datum *)
DatumGetPointer(DirectFunctionCall2(gin_extract_hstore,
PG_GETARG_DATUM(0),
PointerGetDatum(nentries))); /* ... except that "contains {}" requires a full index scan */ if (entries == NULL)
*searchMode = GIN_SEARCH_MODE_ALL;
} elseif (strategy == HStoreExistsStrategyNumber)
{
text *query = PG_GETARG_TEXT_PP(0);
text *item;
*nentries = 1;
entries = (Datum *) palloc(sizeof(Datum));
item = makeitem(VARDATA_ANY(query), VARSIZE_ANY_EXHDR(query), KEYFLAG);
entries[0] = PointerGetDatum(item);
} elseif (strategy == HStoreExistsAnyStrategyNumber ||
strategy == HStoreExistsAllStrategyNumber)
{
ArrayType *query = PG_GETARG_ARRAYTYPE_P(0);
Datum *key_datums; bool *key_nulls; int key_count; int i,
j;
text *item;
if (strategy == HStoreContainsStrategyNumber)
{ /* *Indexdoesn'thaveinformationaboutcorrespondenceofkeysand *values,soweneedrecheck.However,ifnotallthekeysare *present,wecanfailatonce.
*/
*recheck = true; for (i = 0; i < nkeys; i++)
{ if (!check[i])
{
res = false; break;
}
}
} elseif (strategy == HStoreExistsStrategyNumber)
{ /* Existence of key is guaranteed in default search mode */
*recheck = false;
res = true;
} elseif (strategy == HStoreExistsAnyStrategyNumber)
{ /* Existence of key is guaranteed in default search mode */
*recheck = false;
res = true;
} elseif (strategy == HStoreExistsAllStrategyNumber)
{ /* Testing for all the keys being present gives an exact result */
*recheck = false; for (i = 0; i < nkeys; i++)
{ if (!check[i])
{
res = false; break;
}
}
} else
elog(ERROR, "unrecognized strategy number: %d", strategy);
PG_RETURN_BOOL(res);
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-08-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.