@@ -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
@@ -2048,15 +2053,11 @@ executeJsonPath(JsonPath *path, List *vars, Jsonb *json, JsonValueList *foundJso
2048
2053
JsonPathItem jsp ;
2049
2054
JsonbValue jbv ;
2050
2055
2051
- jbv .type = jbvBinary ;
2052
- jbv .val .binary .data = & json -> root ;
2053
- jbv .val .binary .len = VARSIZE_ANY_EXHDR (json );
2054
-
2055
2056
jspInit (& jsp , path );
2056
2057
2057
2058
cxt .vars = vars ;
2058
2059
cxt .lax = (path -> header & JSONPATH_LAX ) != 0 ;
2059
- cxt .root = & jbv ;
2060
+ cxt .root = JsonbInitBinary ( & jbv , json ) ;
2060
2061
cxt .innermostArraySize = -1 ;
2061
2062
2062
2063
if (!cxt .lax && !foundJson )
0 commit comments