@@ -149,6 +149,16 @@ JsonValueListNext(const JsonValueList *jvl, JsonValueListIterator *it)
149
149
return lfirst (it -> lcell );
150
150
}
151
151
152
+ static inline JsonbValue *
153
+ JsonbInitBinary (JsonbValue * jbv , Jsonb * jb )
154
+ {
155
+ jbv -> type = jbvBinary ;
156
+ jbv -> val .binary .data = & jb -> root ;
157
+ jbv -> val .binary .len = VARSIZE_ANY_EXHDR (jb );
158
+
159
+ return jbv ;
160
+ }
161
+
152
162
/********************Execute functions for JsonPath***************************/
153
163
154
164
/*
@@ -251,11 +261,7 @@ computeJsonPathVariable(JsonPathItem *variable, List *vars, JsonbValue *value)
251
261
if (JB_ROOT_IS_SCALAR (jb ))
252
262
JsonbExtractScalar (& jb -> root , value );
253
263
else
254
- {
255
- value -> type = jbvBinary ;
256
- value -> val .binary .data = & jb -> root ;
257
- value -> val .binary .len = VARSIZE_ANY_EXHDR (jb );
258
- }
264
+ JsonbInitBinary (value , jb );
259
265
}
260
266
break ;
261
267
default :
@@ -1896,8 +1902,7 @@ recursiveExecuteNoUnwrap(JsonPathExecContext *cxt, JsonPathItem *jsp,
1896
1902
1897
1903
jsonb = JsonbValueToJsonb (keyval );
1898
1904
1899
- obj .val .binary .data = & jsonb -> root ;
1900
- obj .val .binary .len = VARSIZE (jsonb ) - VARHDRSZ ;
1905
+ JsonbInitBinary (& obj , jsonb );
1901
1906
1902
1907
res = recursiveExecuteNext (cxt , jsp , & elem , & obj , found , true);
1903
1908
@@ -2026,15 +2031,11 @@ executeJsonPath(JsonPath *path, List *vars, Jsonb *json, JsonValueList *foundJso
2026
2031
JsonPathItem jsp ;
2027
2032
JsonbValue jbv ;
2028
2033
2029
- jbv .type = jbvBinary ;
2030
- jbv .val .binary .data = & json -> root ;
2031
- jbv .val .binary .len = VARSIZE_ANY_EXHDR (json );
2032
-
2033
2034
jspInit (& jsp , path );
2034
2035
2035
2036
cxt .vars = vars ;
2036
2037
cxt .lax = (path -> header & JSONPATH_LAX ) != 0 ;
2037
- cxt .root = & jbv ;
2038
+ cxt .root = JsonbInitBinary ( & jbv , json ) ;
2038
2039
cxt .innermostArraySize = -1 ;
2039
2040
2040
2041
if (!cxt .lax && !foundJson )
0 commit comments