JsonPathVariable *var = palloc(sizeof(*var));
var->name = argname->sval;
+ var->namelen = strlen(var->name);
var->typid = exprType((Node *) argexpr);
var->typmod = exprTypmod((Node *) argexpr);
{
JsonPathVariable *curvar = lfirst(lc);
- if (!strncmp(curvar->name, varName, varNameLen))
+ if (curvar->namelen == varNameLen &&
+ strncmp(curvar->name, varName, varNameLen) == 0)
{
var = curvar;
break;
JsonPathVariable *var = palloc(sizeof(*var));
var->name = pstrdup(name->sval);
+ var->namelen = strlen(var->name);
var->typid = exprType((Node *) state->expr);
var->typmod = exprTypmod((Node *) state->expr);
typedef struct JsonPathVariable
{
char *name;
+ int namelen; /* strlen(name) as cache for GetJsonPathVar() */
Oid typid;
int32 typmod;
Datum value;
"aaa"
(1 row)
+-- Test PASSING argument parsing
+SELECT JSON_QUERY(jsonb 'null', '$xyz' PASSING 1 AS xy);
+ERROR: could not find jsonpath variable "xyz"
+SELECT JSON_QUERY(jsonb 'null', '$xy' PASSING 1 AS xyz);
+ERROR: could not find jsonpath variable "xy"
+SELECT JSON_QUERY(jsonb 'null', '$xyz' PASSING 1 AS xyz);
+ json_query
+------------
+ 1
+(1 row)
+
-- Test non-const jsonpath
CREATE TEMP TABLE jsonpaths (path) AS SELECT '$';
SELECT json_value('"aaa"', path RETURNING json) FROM jsonpaths;
+
+-- Test PASSING argument parsing
+SELECT JSON_QUERY(jsonb 'null', '$xyz' PASSING 1 AS xy);
+SELECT JSON_QUERY(jsonb 'null', '$xy' PASSING 1 AS xyz);
+SELECT JSON_QUERY(jsonb 'null', '$xyz' PASSING 1 AS xyz);