@@ -99,12 +99,12 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
9999 allowCurrent ||
100100 allowCurrentInArg ,
101101 insideArraySubscript );
102- * (int32 * )(buf -> data + left ) = chld ;
102+ * (int32 * )(buf -> data + left ) = chld - pos ;
103103 chld = flattenJsonPathParseItem (buf , item -> value .args .right ,
104104 allowCurrent ||
105105 allowCurrentInArg ,
106106 insideArraySubscript );
107- * (int32 * )(buf -> data + right ) = chld ;
107+ * (int32 * )(buf -> data + right ) = chld - pos ;
108108 }
109109 break ;
110110 case jpiFilter :
@@ -131,7 +131,7 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
131131 allowCurrent ||
132132 allowCurrentInArg ,
133133 insideArraySubscript );
134- * (int32 * )(buf -> data + arg ) = chld ;
134+ * (int32 * )(buf -> data + arg ) = chld - pos ;
135135 }
136136 break ;
137137 case jpiNull :
@@ -172,12 +172,12 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
172172 int32 frompos =
173173 flattenJsonPathParseItem (buf ,
174174 item -> value .array .elems [i ].from ,
175- true, true);
175+ true, true) - pos ;
176176
177177 if (item -> value .array .elems [i ].to )
178178 topos = flattenJsonPathParseItem (buf ,
179179 item -> value .array .elems [i ].to ,
180- true, true);
180+ true, true) - pos ;
181181 else
182182 topos = 0 ;
183183
@@ -220,11 +220,11 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
220220
221221 foreach (lc , item -> value .sequence .elems )
222222 {
223- int32 pos =
223+ int32 elempos =
224224 flattenJsonPathParseItem (buf , lfirst (lc ),
225225 allowCurrent , insideArraySubscript );
226226
227- * (int32 * ) & buf -> data [offset ] = pos ;
227+ * (int32 * ) & buf -> data [offset ] = elempos - pos ;
228228 offset += sizeof (int32 );
229229 }
230230 }
@@ -254,8 +254,8 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
254254 insideArraySubscript );
255255 int32 * ppos = (int32 * ) & buf -> data [offset ];
256256
257- ppos [0 ] = keypos ;
258- ppos [1 ] = valpos ;
257+ ppos [0 ] = keypos - pos ;
258+ ppos [1 ] = valpos - pos ;
259259
260260 offset += 2 * sizeof (int32 );
261261 }
@@ -268,7 +268,7 @@ flattenJsonPathParseItem(StringInfo buf, JsonPathParseItem *item,
268268 if (item -> next )
269269 * (int32 * )(buf -> data + next ) =
270270 flattenJsonPathParseItem (buf , item -> next , allowCurrent ,
271- insideArraySubscript );
271+ insideArraySubscript ) - pos ;
272272
273273 return pos ;
274274}
@@ -708,18 +708,10 @@ jspInit(JsonPathItem *v, JsonPath *js)
708708void
709709jspInitByBuffer (JsonPathItem * v , char * base , int32 pos )
710710{
711- v -> base = base ;
711+ v -> base = base + pos ;
712712
713713 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 ;
723715 read_int32 (v -> nextPos , base , pos );
724716
725717 switch (v -> type )
0 commit comments