@@ -99,12 +99,12 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
99
99
allowCurrent ||
100
100
allowCurrentInArg ,
101
101
insideArraySubscript );
102
- * (int32 * )(buf -> data + left ) = chld ;
102
+ * (int32 * )(buf -> data + left ) = chld - pos ;
103
103
chld = flattenJsonPathParseItem (buf , item -> value .args .right ,
104
104
allowCurrent ||
105
105
allowCurrentInArg ,
106
106
insideArraySubscript );
107
- * (int32 * )(buf -> data + right ) = chld ;
107
+ * (int32 * )(buf -> data + right ) = chld - pos ;
108
108
}
109
109
break ;
110
110
case jpiFilter :
@@ -131,7 +131,7 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
131
131
allowCurrent ||
132
132
allowCurrentInArg ,
133
133
insideArraySubscript );
134
- * (int32 * )(buf -> data + arg ) = chld ;
134
+ * (int32 * )(buf -> data + arg ) = chld - pos ;
135
135
}
136
136
break ;
137
137
case jpiNull :
@@ -172,12 +172,12 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
172
172
int32 frompos =
173
173
flattenJsonPathParseItem (buf ,
174
174
item -> value .array .elems [i ].from ,
175
- true, true);
175
+ true, true) - pos ;
176
176
177
177
if (item -> value .array .elems [i ].to )
178
178
topos = flattenJsonPathParseItem (buf ,
179
179
item -> value .array .elems [i ].to ,
180
- true, true);
180
+ true, true) - pos ;
181
181
else
182
182
topos = 0 ;
183
183
@@ -220,11 +220,11 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
220
220
221
221
foreach (lc , item -> value .sequence .elems )
222
222
{
223
- int32 pos =
223
+ int32 elempos =
224
224
flattenJsonPathParseItem (buf , lfirst (lc ),
225
225
allowCurrent , insideArraySubscript );
226
226
227
- * (int32 * ) & buf -> data [offset ] = pos ;
227
+ * (int32 * ) & buf -> data [offset ] = elempos - pos ;
228
228
offset += sizeof (int32 );
229
229
}
230
230
}
@@ -254,8 +254,8 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
254
254
insideArraySubscript );
255
255
int32 * ppos = (int32 * ) & buf -> data [offset ];
256
256
257
- ppos [0 ] = keypos ;
258
- ppos [1 ] = valpos ;
257
+ ppos [0 ] = keypos - pos ;
258
+ ppos [1 ] = valpos - pos ;
259
259
260
260
offset += 2 * sizeof (int32 );
261
261
}
@@ -268,7 +268,7 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
268
268
if (item -> next )
269
269
* (int32 * )(buf -> data + next ) =
270
270
flattenJsonPathParseItem (buf , item -> next , allowCurrent ,
271
- insideArraySubscript );
271
+ insideArraySubscript ) - pos ;
272
272
273
273
return pos ;
274
274
}
@@ -708,18 +708,10 @@ jspInit(JsonPathItem *v, JsonPath *js)
708
708
void
709
709
jspInitByBuffer (JsonPathItem * v , char * base , int32 pos )
710
710
{
711
- v -> base = base ;
711
+ v -> base = base + pos ;
712
712
713
713
read_byte (v -> type , base , pos );
714
-
715
- switch (INTALIGN (pos ) - pos )
716
- {
717
- case 3 : pos ++ ;
718
- case 2 : pos ++ ;
719
- case 1 : pos ++ ;
720
- default : break ;
721
- }
722
-
714
+ pos = INTALIGN ((uintptr_t )(base + pos )) - (uintptr_t ) base ;
723
715
read_int32 (v -> nextPos , base , pos );
724
716
725
717
switch (v -> type )
0 commit comments