Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 4555cd0

Browse files
author
Nikita Glukhov
committed
Switch to relative jsonpath item offsets
1 parent 48a7af3 commit 4555cd0

File tree

1 file changed

+12
-20
lines changed

1 file changed

+12
-20
lines changed

src/backend/utils/adt/jsonpath.c

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
708708
void
709709
jspInitByBuffer(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

Comments
 (0)