v = findJsonbValueFromContainer(&jb->root,
JB_FOBJECT | JB_FARRAY,
&kval);
PG_RETURN_BOOL(v != NULL);
}
Datum
jsonb_exists_any(PG_FUNCTION_ARGS)
{
Jsonb *jb = PG_GETARG_JSONB_P(0);
ArrayType *keys = PG_GETARG_ARRAYTYPE_P(1); int i;
Datum *key_datums; bool *key_nulls; int elem_count;
for (i = 0; i < elem_count; i++)
{
JsonbValue strVal;
if (key_nulls[i]) continue;
strVal.type = jbvString; /* We rely on the array elements not being toasted */
strVal.val.string.val = VARDATA_ANY(key_datums[i]);
strVal.val.string.len = VARSIZE_ANY_EXHDR(key_datums[i]);
if (findJsonbValueFromContainer(&jb->root,
JB_FOBJECT | JB_FARRAY,
&strVal) != NULL)
PG_RETURN_BOOL(true);
}
PG_RETURN_BOOL(false);
}
Datum
jsonb_exists_all(PG_FUNCTION_ARGS)
{
Jsonb *jb = PG_GETARG_JSONB_P(0);
ArrayType *keys = PG_GETARG_ARRAYTYPE_P(1); int i;
Datum *key_datums; bool *key_nulls; int elem_count;
for (i = 0; i < elem_count; i++)
{
JsonbValue strVal;
if (key_nulls[i]) continue;
strVal.type = jbvString; /* We rely on the array elements not being toasted */
strVal.val.string.val = VARDATA_ANY(key_datums[i]);
strVal.val.string.len = VARSIZE_ANY_EXHDR(key_datums[i]);
if (findJsonbValueFromContainer(&jb->root,
JB_FOBJECT | JB_FARRAY,
&strVal) == NULL)
PG_RETURN_BOOL(false);
}
while ((r = JsonbIteratorNext(&it, &v, false)) != WJB_DONE)
{ switch (r)
{ /* Rotation is left to JsonbHashScalarValue() */ case WJB_BEGIN_ARRAY:
hash ^= JB_FARRAY; break; case WJB_BEGIN_OBJECT:
hash ^= JB_FOBJECT; break; case WJB_KEY: case WJB_VALUE: case WJB_ELEM:
JsonbHashScalarValue(&v, &hash); break; case WJB_END_ARRAY: case WJB_END_OBJECT: break; default:
elog(ERROR, "invalid JsonbIteratorNext rc: %d", (int) r);
}
}
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.