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

Commit9fee610

Browse files
author
Nikita Glukhov
committed
Add JsonValueInitBinary()
1 parenta0af4ad commit9fee610

File tree

4 files changed

+20
-29
lines changed

4 files changed

+20
-29
lines changed

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2764,13 +2764,10 @@ jsontFillValue(JsonIterator **pit, JsonValue *res, bool skipNested,
27642764
caseJSON_TOKEN_OBJECT_START:
27652765
caseJSON_TOKEN_ARRAY_START:
27662766
{
2767+
JsonContainerData*cont=JsonContainerAlloc();
27672768
char*token_start=lex->token_start;
27682769
intlen;
27692770

2770-
res->type=jbvBinary;
2771-
res->val.binary.data=JsonContainerAlloc();
2772-
res->val.binary.uniquified= false;
2773-
27742771
if (skipNested)
27752772
{
27762773
if (tok==JSON_TOKEN_OBJECT_START)
@@ -2783,12 +2780,14 @@ jsontFillValue(JsonIterator **pit, JsonValue *res, bool skipNested,
27832780
else
27842781
len=lex->input_length- (lex->token_start-lex->input);
27852782

2786-
jsontInitContainer((JsonContainerData*)res->val.binary.data,
2783+
jsontInitContainer(cont,
27872784
token_start,len,
27882785
tok==JSON_TOKEN_OBJECT_START ?jbvObject
27892786
:jbvArray,
27902787
-1);
27912788

2789+
JsonValueInitBinary(res,cont);
2790+
27922791
if (skipNested)
27932792
return false;
27942793

‎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*
@@ -708,11 +702,7 @@ JsonToJsonValue(Json *json, JsonValue *jv)
708702
if (!jv)
709703
jv=palloc(sizeof(JsonValue));
710704

711-
jv->type=jbvBinary;
712-
jv->val.binary.data=&json->root;
713-
jv->val.binary.uniquified=json->root.ops!=&jsontContainerOps;
714-
715-
returnjv;
705+
returnJsonValueInitBinary(jv,&json->root);
716706
}
717707

718708
#defineJSON_FLATTEN_INTO_TARGET

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

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -136,14 +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.len=jc->len;
143-
jbv.val.binary.uniquified=JsonContainerIsUniquified(jc);
144-
145-
binary=&jbv;
146-
}
139+
binary=JsonValueInitBinary(&jbv,jc);
147140

148141
if (!binary->val.binary.uniquified)
149142
binary=JsonValueUniquify(&uniquified,binary);
@@ -624,15 +617,14 @@ fillJsonbValue(const JsonbContainer *container, int index,
624617
}
625618
else
626619
{
620+
JsonContainerData*cont=JsonContainerAlloc();
627621
Assert(JBE_ISCONTAINER(entry));
628-
result->type=jbvBinary;
629-
result->val.binary.data=JsonContainerAlloc();
630-
jsonbInitContainer((JsonContainerData*)result->val.binary.data,
622+
jsonbInitContainer(cont,
631623
/* Remove alignment padding from data pointer and length */
632624
(JsonbContainer*)(base_addr+INTALIGN(offset)),
633625
getJsonbLength(container,index)-
634626
(INTALIGN(offset)-offset));
635-
result->val.binary.uniquified= true;
627+
JsonValueInitBinary(result,cont);
636628
}
637629
}
638630

‎src/include/utils/json_generic.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,16 @@ JsonValueInitArray(JsonValue *val, int nElems, int nElemsAllocated,
355355
returnval;
356356
}
357357

358+
staticinlineJsonValue*
359+
JsonValueInitBinary(JsonValue*val,JsonContainer*cont)
360+
{
361+
val->type=jbvBinary;
362+
val->val.binary.data=cont;
363+
val->val.binary.uniquified=JsonContainerIsUniquified(cont);
364+
365+
returnval;
366+
}
367+
358368
externJson*JsonValueToJson(JsonValue*val);
359369
externJsonValue*JsonToJsonValue(Json*json,JsonValue*jv);
360370
externJsonValue*JsonValueUnpackBinary(constJsonValue*jbv);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp