@@ -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 jpiLikeRegex :
@@ -127,7 +127,7 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
127
127
chld = flattenJsonPathParseItem (buf , item -> value .like_regex .expr ,
128
128
allowCurrent ,
129
129
insideArraySubscript );
130
- * (int32 * )(buf -> data + offs ) = chld ;
130
+ * (int32 * )(buf -> data + offs ) = chld - pos ;
131
131
}
132
132
break ;
133
133
case jpiFilter :
@@ -154,7 +154,7 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
154
154
allowCurrent ||
155
155
allowCurrentInArg ,
156
156
insideArraySubscript );
157
- * (int32 * )(buf -> data + arg ) = chld ;
157
+ * (int32 * )(buf -> data + arg ) = chld - pos ;
158
158
}
159
159
break ;
160
160
case jpiNull :
@@ -195,12 +195,12 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
195
195
int32 frompos =
196
196
flattenJsonPathParseItem (buf ,
197
197
item -> value .array .elems [i ].from ,
198
- true, true);
198
+ true, true) - pos ;
199
199
200
200
if (item -> value .array .elems [i ].to )
201
201
topos = flattenJsonPathParseItem (buf ,
202
202
item -> value .array .elems [i ].to ,
203
- true, true);
203
+ true, true) - pos ;
204
204
else
205
205
topos = 0 ;
206
206
@@ -243,11 +243,11 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
243
243
244
244
foreach (lc , item -> value .sequence .elems )
245
245
{
246
- int32 pos =
246
+ int32 elempos =
247
247
flattenJsonPathParseItem (buf , lfirst (lc ),
248
248
allowCurrent , insideArraySubscript );
249
249
250
- * (int32 * ) & buf -> data [offset ] = pos ;
250
+ * (int32 * ) & buf -> data [offset ] = elempos - pos ;
251
251
offset += sizeof (int32 );
252
252
}
253
253
}
@@ -277,8 +277,8 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
277
277
insideArraySubscript );
278
278
int32 * ppos = (int32 * ) & buf -> data [offset ];
279
279
280
- ppos [0 ] = keypos ;
281
- ppos [1 ] = valpos ;
280
+ ppos [0 ] = keypos - pos ;
281
+ ppos [1 ] = valpos - pos ;
282
282
283
283
offset += 2 * sizeof (int32 );
284
284
}
@@ -291,7 +291,7 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
291
291
if (item -> next )
292
292
* (int32 * )(buf -> data + next ) =
293
293
flattenJsonPathParseItem (buf , item -> next , allowCurrent ,
294
- insideArraySubscript );
294
+ insideArraySubscript ) - pos ;
295
295
296
296
return pos ;
297
297
}
@@ -763,18 +763,10 @@ jspInit(JsonPathItem *v, JsonPath *js)
763
763
void
764
764
jspInitByBuffer (JsonPathItem * v , char * base , int32 pos )
765
765
{
766
- v -> base = base ;
766
+ v -> base = base + pos ;
767
767
768
768
read_byte (v -> type , base , pos );
769
-
770
- switch (INTALIGN (pos ) - pos )
771
- {
772
- case 3 : pos ++ ;
773
- case 2 : pos ++ ;
774
- case 1 : pos ++ ;
775
- default : break ;
776
- }
777
-
769
+ pos = INTALIGN ((uintptr_t )(base + pos )) - (uintptr_t ) base ;
778
770
read_int32 (v -> nextPos , base , pos );
779
771
780
772
switch (v -> type )
0 commit comments