Datum jsquery_join_or(PG_FUNCTION_ARGS) { JsQuery *jq1 = PG_GETARG_JSQUERY(0); JsQuery *jq2 = PG_GETARG_JSQUERY(1); JsQuery *out; out = joinJsQuery(jqiOr, jq1, jq2); PG_FREE_IF_COPY(jq1, 0); PG_FREE_IF_COPY(jq2, 1); PG_RETURN_JSQUERY(out); }
Datum jsquery_gt(PG_FUNCTION_ARGS) { JsQuery *jq1 = PG_GETARG_JSQUERY(0); JsQuery *jq2 = PG_GETARG_JSQUERY(1); int32 res; res = compareJsQuery(VARDATA(jq1), 0, VARDATA(jq2), 0); PG_FREE_IF_COPY(jq1, 0); PG_FREE_IF_COPY(jq2, 1); PG_RETURN_BOOL(res > 0); }
Datum jsquery_gt(PG_FUNCTION_ARGS) { JsQuery *jq1 = PG_GETARG_JSQUERY(0); JsQuery *jq2 = PG_GETARG_JSQUERY(1); int32 res; JsQueryItem v1, v2; jsqInit(&v1, jq1); jsqInit(&v2, jq2); res = compareJsQuery(&v1, &v2); PG_FREE_IF_COPY(jq1, 0); PG_FREE_IF_COPY(jq2, 1); PG_RETURN_BOOL(res > 0); }
Datum jsquery_hash(PG_FUNCTION_ARGS) { JsQuery *jq = PG_GETARG_JSQUERY(0); pg_crc32 res; INIT_CRC32(res); hashJsQuery(VARDATA(jq), 0, &res); FIN_CRC32(res); PG_FREE_IF_COPY(jq, 0); PG_RETURN_INT32(res); }
Datum jsquery_hash(PG_FUNCTION_ARGS) { JsQuery *jq = PG_GETARG_JSQUERY(0); JsQueryItem v; pg_crc32 res; INIT_CRC32(res); jsqInit(&v, jq); hashJsQuery(&v, &res); FIN_CRC32(res); PG_FREE_IF_COPY(jq, 0); PG_RETURN_INT32(res); }
Datum json_jsquery_exec(PG_FUNCTION_ARGS) { Jsonb *jb = PG_GETARG_JSONB(0); JsQuery *jq = PG_GETARG_JSQUERY(1); bool res; JsonbValue jbv; jbv.type = jbvBinary; jbv.val.binary.data = VARDATA(jb); jbv.val.binary.len = jbv.estSize = VARSIZE_ANY_EXHDR(jb); res = recursiveExecute(VARDATA(jq), 0, &jbv); PG_FREE_IF_COPY(jb, 0); PG_FREE_IF_COPY(jq, 1); PG_RETURN_BOOL(res); }
Datum json_jsquery_exec(PG_FUNCTION_ARGS) { Jsonb *jb = PG_GETARG_JSONB(0); JsQuery *jq = PG_GETARG_JSQUERY(1); bool res; JsonbValue jbv; JsQueryItem jsq; jbv.type = jbvBinary; jbv.val.binary.data = &jb->root; jbv.val.binary.len = VARSIZE_ANY_EXHDR(jb); jsqInit(&jsq, jq); res = recursiveExecute(&jsq, &jbv, NULL); PG_FREE_IF_COPY(jb, 0); PG_FREE_IF_COPY(jq, 1); PG_RETURN_BOOL(res); }
Datum jsquery_not(PG_FUNCTION_ARGS) { JsQuery *jq = PG_GETARG_JSQUERY(0); JsQuery *out; StringInfoData buf; int32 arg, chld; JsQueryItem v; initStringInfo(&buf); enlargeStringInfo(&buf, VARSIZE_ANY(jq) + 4 * sizeof(int32) + VARHDRSZ); appendStringInfoSpaces(&buf, VARHDRSZ); /* form jsquery header */ appendStringInfoChar(&buf, (char)jqiNot); alignStringInfoInt(&buf); /* nextPos field of header*/ chld = 0; /* actual value, not a fake */ appendBinaryStringInfo(&buf, (char*)&chld, sizeof(chld)); arg = buf.len; appendBinaryStringInfo(&buf, (char*)&arg /* fake value */, sizeof(arg)); jsqInit(&v, jq); chld = copyJsQuery(&buf, &v); *(int32*)(buf.data + arg) = chld; out = (JsQuery*)buf.data; SET_VARSIZE(out, buf.len); PG_FREE_IF_COPY(jq, 0); PG_RETURN_JSQUERY(out); }