Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit048b449

Browse files
author
Nikita Glukhov
committed
Add JsonValueInitBinary()
1 parent75f4598 commit048b449

File tree

6 files changed

+24
-47
lines changed

6 files changed

+24
-47
lines changed

‎src/backend/utils/adt/json_generic.c

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -153,16 +153,10 @@ JsonValueUnwrap(const JsonValue *val, JsonValue *valbuf)
153153
JsonValue*
154154
JsonValueWrapInBinary(constJsonValue*val,JsonValue*bin)
155155
{
156-
JsonContainer*jc=JsonValueToContainer(val);
157-
158156
if (!bin)
159157
bin= (JsonValue*)palloc(sizeof(JsonValue));
160158

161-
bin->type=jbvBinary;
162-
bin->val.binary.data=jc;
163-
bin->val.binary.uniquified=JsonValueIsUniquified(val);
164-
165-
returnbin;
159+
returnJsonValueInitBinary(bin,JsonValueToContainer(val));
166160
}
167161

168162
staticinlineJsonValue*
@@ -716,11 +710,7 @@ JsonToJsonValue(Json *json, JsonValue *jv)
716710
if (!jv)
717711
jv=palloc(sizeof(JsonValue));
718712

719-
jv->type=jbvBinary;
720-
jv->val.binary.data=&json->root;
721-
jv->val.binary.uniquified=json->root.ops!=&jsontContainerOps;
722-
723-
returnjv;
713+
returnJsonValueInitBinary(jv,&json->root);
724714
}
725715

726716
#ifdefJSON_FLATTEN_INTO_JSONEXT

‎src/backend/utils/adt/jsonb_util.c

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,7 @@ JsonContainerFlatten(JsonContainer *jc, JsonValueEncoder encoder,
136136
if (binary)
137137
Assert(binary->type==jbvBinary);
138138
else
139-
{
140-
jbv.type=jbvBinary;
141-
jbv.val.binary.data=jc;
142-
jbv.val.binary.uniquified=JsonContainerIsUniquified(jc);
143-
144-
binary=&jbv;
145-
}
139+
binary=JsonValueInitBinary(&jbv,jc);
146140

147141
if (!binary->val.binary.uniquified)
148142
binary=JsonValueUniquify(&uniquified,binary);
@@ -654,15 +648,14 @@ fillJsonbValue(const JsonbContainer *container, int index,
654648
}
655649
else
656650
{
651+
JsonContainerData*cont=JsonContainerAlloc();
657652
Assert(JBE_ISCONTAINER(entry));
658-
result->type=jbvBinary;
659-
result->val.binary.data=JsonContainerAlloc();
660-
jsonbInitContainer((JsonContainerData*)result->val.binary.data,
653+
jsonbInitContainer(cont,
661654
/* Remove alignment padding from data pointer and length */
662655
(JsonbContainer*)(base_addr+INTALIGN(offset)),
663656
getJsonbLength(container,index)-
664657
(INTALIGN(offset)-offset));
665-
result->val.binary.uniquified= true;
658+
JsonValueInitBinary(result,cont);
666659
}
667660
}
668661

‎src/backend/utils/adt/jsonfuncs.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3538,9 +3538,7 @@ populate_record_worker(FunctionCallInfo fcinfo, const char *funcname,
35383538
jsv.val.jsonb=&jbv;
35393539

35403540
/* fill binary jsonb value pointing to jb */
3541-
jbv.type=jbvBinary;
3542-
jbv.val.binary.data=&jb->root;
3543-
jbv.val.binary.uniquified= true;
3541+
JsonValueInitBinary(&jbv,JsonRoot(jb));
35443542
}
35453543

35463544
rettuple=populate_composite(&cache->c.io.composite,cache->argtype,

‎src/backend/utils/adt/jsonpath_exec.c

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,6 @@ static void JsonValueListInitIterator(const JsonValueList *jvl,
247247
staticJsonbValue*JsonValueListNext(constJsonValueList*jvl,
248248
JsonValueListIterator*it);
249249
staticintJsonbType(JsonbValue*jb);
250-
staticJsonbValue*JsonbInitBinary(JsonbValue*jbv,Jsonb*jb);
251250
staticintJsonbType(JsonbValue*jb);
252251
staticJsonbValue*getScalar(JsonbValue*scalar,enumjbvTypetype);
253252
staticJsonbValue*wrapItemsInArray(constJsonValueList*items);
@@ -646,7 +645,7 @@ executeJsonPath(JsonPath *path, Jsonb *vars, Jsonb *json, bool throwErrors,
646645
jspInit(&jsp,path);
647646

648647
if (!JsonbExtractScalar(&json->root,&jbv))
649-
JsonbInitBinary(&jbv,json);
648+
JsonValueInitBinary(&jbv,JsonRoot(json));
650649

651650
if (vars&& !JsonContainerIsObject(&vars->root))
652651
{
@@ -2119,7 +2118,7 @@ executeKeyValueMethod(JsonPathExecContext *cxt, JsonPathItem *jsp,
21192118

21202119
jsonb=JsonbValueToJsonb(keyval);
21212120

2122-
JsonbInitBinary(&obj,jsonb);
2121+
JsonValueInitBinary(&obj,JsonRoot(jsonb));
21232122

21242123
baseObject=setBaseObject(cxt,&obj,cxt->lastGeneratedObjectId++);
21252124

@@ -2238,7 +2237,7 @@ getJsonPathVariable(JsonPathExecContext *cxt, JsonPathItem *variable,
22382237
pnstrdup(varName,varNameLength))));
22392238
}
22402239

2241-
JsonbInitBinary(&tmp,vars);
2240+
JsonValueInitBinary(&tmp,JsonRoot(vars));
22422241
setBaseObject(cxt,&tmp,1);
22432242
}
22442243

@@ -2617,18 +2616,6 @@ JsonValueListNext(const JsonValueList *jvl, JsonValueListIterator *it)
26172616
returnresult;
26182617
}
26192618

2620-
/*
2621-
* Initialize a binary JsonbValue with the given jsonb container.
2622-
*/
2623-
staticJsonbValue*
2624-
JsonbInitBinary(JsonbValue*jbv,Jsonb*jb)
2625-
{
2626-
jbv->type=jbvBinary;
2627-
jbv->val.binary.data=&jb->root;
2628-
2629-
returnjbv;
2630-
}
2631-
26322619
/*
26332620
* Returns jbv* type of JsonbValue. Note, it never returns jbvBinary as is.
26342621
*/

‎src/common/jsonapi.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1329,13 +1329,10 @@ jsontFillValue(JsonIterator **pit, JsonValue *res, bool skipNested,
13291329
caseJSON_TOKEN_OBJECT_START:
13301330
caseJSON_TOKEN_ARRAY_START:
13311331
{
1332+
JsonContainerData*cont=JsonContainerAlloc();
13321333
char*token_start=lex->token_start;
13331334
intlen;
13341335

1335-
res->type=jbvBinary;
1336-
res->val.binary.data=JsonContainerAlloc();
1337-
res->val.binary.uniquified= false;
1338-
13391336
if (skipNested)
13401337
{
13411338
if (tok==JSON_TOKEN_OBJECT_START)
@@ -1348,12 +1345,14 @@ jsontFillValue(JsonIterator **pit, JsonValue *res, bool skipNested,
13481345
else
13491346
len=lex->input_length- (lex->token_start-lex->input);
13501347

1351-
jsontInitContainer((JsonContainerData*)res->val.binary.data,
1348+
jsontInitContainer(cont,
13521349
token_start,len,
13531350
tok==JSON_TOKEN_OBJECT_START ?jbvObject
13541351
:jbvArray,
13551352
-1);
13561353

1354+
JsonValueInitBinary(res,cont);
1355+
13571356
if (skipNested)
13581357
return false;
13591358

‎src/include/utils/json_generic.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,16 @@ JsonValueInitArray(JsonValue *val, int nElems, int nElemsAllocated,
369369
returnval;
370370
}
371371

372+
staticinlineJsonValue*
373+
JsonValueInitBinary(JsonValue*val,JsonContainer*cont)
374+
{
375+
val->type=jbvBinary;
376+
val->val.binary.data=cont;
377+
val->val.binary.uniquified=JsonContainerIsUniquified(cont);
378+
379+
returnval;
380+
}
381+
372382
externJson*JsonValueToJson(JsonValue*val);
373383
externJsonValue*JsonToJsonValue(Json*json,JsonValue*jv);
374384
externJsonValue*JsonValueUnpackBinary(constJsonValue*jbv);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp