Datum jsonb_contains(PG_FUNCTION_ARGS) { Jsonb *val = PG_GETARG_JSONB(0); Jsonb *tmpl = PG_GETARG_JSONB(1); JsonbIterator *it1, *it2; if (JB_ROOT_IS_OBJECT(val) != JB_ROOT_IS_OBJECT(tmpl)) PG_RETURN_BOOL(false); it1 = JsonbIteratorInit(&val->root); it2 = JsonbIteratorInit(&tmpl->root); PG_RETURN_BOOL(JsonbDeepContains(&it1, &it2)); }
Datum jsonb_contained(PG_FUNCTION_ARGS) { /* Commutator of "contains" */ Jsonb *tmpl = PG_GETARG_JSONB(0); Jsonb *val = PG_GETARG_JSONB(1); JsonbIterator *it1, *it2; if (JB_ROOT_COUNT(val) < JB_ROOT_COUNT(tmpl) || JB_ROOT_IS_OBJECT(val) != JB_ROOT_IS_OBJECT(tmpl)) PG_RETURN_BOOL(false); it1 = JsonbIteratorInit(VARDATA(val)); it2 = JsonbIteratorInit(VARDATA(tmpl)); PG_RETURN_BOOL(JsonbDeepContains(&it1, &it2)); }