@@ -92,17 +92,16 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
92
92
right = buf -> len ;
93
93
appendBinaryStringInfo (buf , (char * )& right /* fake value */ , sizeof (right ));
94
94
95
- chld = !item -> value .args .left ? 0 :
95
+ chld = !item -> value .args .left ? pos :
96
96
flattenJsonPathParseItem (buf , item -> value .args .left ,
97
97
allowCurrent ,
98
98
insideArraySubscript );
99
- * (int32 * )(buf -> data + left ) = chld ;
100
-
101
- chld = !item -> value .args .right ? 0 :
99
+ * (int32 * )(buf -> data + left ) = chld - pos ;
100
+ chld = !item -> value .args .right ? pos :
102
101
flattenJsonPathParseItem (buf , item -> value .args .right ,
103
102
allowCurrent ,
104
103
insideArraySubscript );
105
- * (int32 * )(buf -> data + right ) = chld ;
104
+ * (int32 * )(buf -> data + right ) = chld - pos ;
106
105
}
107
106
break ;
108
107
case jpiLikeRegex :
@@ -125,7 +124,7 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
125
124
chld = flattenJsonPathParseItem (buf , item -> value .like_regex .expr ,
126
125
allowCurrent ,
127
126
insideArraySubscript );
128
- * (int32 * )(buf -> data + offs ) = chld ;
127
+ * (int32 * )(buf -> data + offs ) = chld - pos ;
129
128
}
130
129
break ;
131
130
case jpiFilter :
@@ -144,7 +143,7 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
144
143
item -> type == jpiFilter ||
145
144
allowCurrent ,
146
145
insideArraySubscript );
147
- * (int32 * )(buf -> data + arg ) = chld ;
146
+ * (int32 * )(buf -> data + arg ) = chld - pos ;
148
147
}
149
148
break ;
150
149
case jpiNull :
@@ -185,12 +184,12 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
185
184
int32 frompos =
186
185
flattenJsonPathParseItem (buf ,
187
186
item -> value .array .elems [i ].from ,
188
- true, true);
187
+ true, true) - pos ;
189
188
190
189
if (item -> value .array .elems [i ].to )
191
190
topos = flattenJsonPathParseItem (buf ,
192
191
item -> value .array .elems [i ].to ,
193
- true, true);
192
+ true, true) - pos ;
194
193
else
195
194
topos = 0 ;
196
195
@@ -224,7 +223,7 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
224
223
if (item -> next )
225
224
{
226
225
chld = flattenJsonPathParseItem (buf , item -> next , allowCurrent ,
227
- insideArraySubscript );
226
+ insideArraySubscript ) - pos ;
228
227
* (int32 * )(buf -> data + next ) = chld ;
229
228
}
230
229
@@ -626,18 +625,10 @@ jspInit(JsonPathItem *v, JsonPath *js)
626
625
void
627
626
jspInitByBuffer (JsonPathItem * v , char * base , int32 pos )
628
627
{
629
- v -> base = base ;
628
+ v -> base = base + pos ;
630
629
631
630
read_byte (v -> type , base , pos );
632
-
633
- switch (INTALIGN (pos ) - pos )
634
- {
635
- case 3 : pos ++ ;
636
- case 2 : pos ++ ;
637
- case 1 : pos ++ ;
638
- default : break ;
639
- }
640
-
631
+ pos = INTALIGN ((uintptr_t )(base + pos )) - (uintptr_t ) base ;
641
632
read_int32 (v -> nextPos , base , pos );
642
633
643
634
switch (v -> type )
0 commit comments