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

Commite324ad7

Browse files
author
Nikita Glukhov
committed
Add JsonbRoot(), JsonbGetSize() macros
1 parent3fd88de commite324ad7

File tree

3 files changed

+31
-28
lines changed

3 files changed

+31
-28
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ jsonb_out(PG_FUNCTION_ARGS)
111111
Jsonb*jb=PG_GETARG_JSONB_P(0);
112112
char*out;
113113

114-
out=JsonbToCString(NULL,&jb->root,VARSIZE(jb));
114+
out=JsonbToCString(NULL,JsonbRoot(jb),JsonbGetSize(jb));
115115

116116
PG_RETURN_CSTRING(out);
117117
}
@@ -129,7 +129,7 @@ jsonb_send(PG_FUNCTION_ARGS)
129129
StringInfojtext=makeStringInfo();
130130
intversion=1;
131131

132-
(void)JsonbToCString(jtext,&jb->root,VARSIZE(jb));
132+
(void)JsonbToCString(jtext,JsonbRoot(jb),JsonbGetSize(jb));
133133

134134
pq_begintypsend(&buf);
135135
pq_sendint8(&buf,version);

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

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ jsonb_object_keys(PG_FUNCTION_ARGS)
570570
state->sent_count=0;
571571
state->result=palloc(state->result_size*sizeof(char*));
572572

573-
it=JsonbIteratorInit(&jb->root);
573+
it=JsonbIteratorInit(JsonbRoot(jb));
574574

575575
while ((r=JsonbIteratorNext(&it,&v,skipNested))!=WJB_DONE)
576576
{
@@ -826,7 +826,7 @@ jsonb_object_field(PG_FUNCTION_ARGS)
826826
if (!JB_ROOT_IS_OBJECT(jb))
827827
PG_RETURN_NULL();
828828

829-
v=getKeyJsonValueFromContainer(&jb->root,
829+
v=getKeyJsonValueFromContainer(JsonbRoot(jb),
830830
VARDATA_ANY(key),
831831
VARSIZE_ANY_EXHDR(key),
832832
&vbuf);
@@ -864,7 +864,7 @@ jsonb_object_field_text(PG_FUNCTION_ARGS)
864864
if (!JB_ROOT_IS_OBJECT(jb))
865865
PG_RETURN_NULL();
866866

867-
v=getKeyJsonValueFromContainer(&jb->root,
867+
v=getKeyJsonValueFromContainer(JsonbRoot(jb),
868868
VARDATA_ANY(key),
869869
VARSIZE_ANY_EXHDR(key),
870870
&vbuf);
@@ -911,7 +911,7 @@ jsonb_array_element(PG_FUNCTION_ARGS)
911911
element+=nelements;
912912
}
913913

914-
v=getIthJsonbValueFromContainer(&jb->root,element);
914+
v=getIthJsonbValueFromContainer(JsonbRoot(jb),element);
915915
if (v!=NULL)
916916
PG_RETURN_JSONB_P(JsonbValueToJsonb(v));
917917

@@ -954,7 +954,7 @@ jsonb_array_element_text(PG_FUNCTION_ARGS)
954954
element+=nelements;
955955
}
956956

957-
v=getIthJsonbValueFromContainer(&jb->root,element);
957+
v=getIthJsonbValueFromContainer(JsonbRoot(jb),element);
958958

959959
if (v!=NULL&&v->type!=jbvNull)
960960
PG_RETURN_TEXT_P(JsonbValueAsText(v));
@@ -1468,7 +1468,7 @@ get_jsonb_path_all(FunctionCallInfo fcinfo, bool as_text)
14681468
Datum
14691469
jsonb_get_element(Jsonb*jb,Datum*path,intnpath,bool*isnull,boolas_text)
14701470
{
1471-
JsonbContainer*container=&jb->root;
1471+
JsonbContainer*container=JsonbRoot(jb);
14721472
JsonbValue*jbvp=NULL;
14731473
inti;
14741474
boolhave_object= false,
@@ -1503,7 +1503,7 @@ jsonb_get_element(Jsonb *jb, Datum *path, int npath, bool *isnull, bool as_text)
15031503
{
15041504
returnPointerGetDatum(cstring_to_text(JsonbToCString(NULL,
15051505
container,
1506-
VARSIZE(jb))));
1506+
JsonbGetSize(jb))));
15071507
}
15081508
else
15091509
{
@@ -1623,7 +1623,7 @@ jsonb_set_element(Jsonb *jb, Datum *path, int path_len,
16231623
if (newval->type==jbvArray&&newval->val.array.rawScalar)
16241624
*newval=newval->val.array.elems[0];
16251625

1626-
it=JsonbIteratorInit(&jb->root);
1626+
it=JsonbIteratorInit(JsonbRoot(jb));
16271627

16281628
res=setPath(&it,path,path_nulls,path_len,&state,0,newval,
16291629
JB_PATH_CREATE |JB_PATH_FILL_GAPS |
@@ -1927,7 +1927,7 @@ each_worker_jsonb(FunctionCallInfo fcinfo, const char *funcname, bool as_text)
19271927
"jsonb_each temporary cxt",
19281928
ALLOCSET_DEFAULT_SIZES);
19291929

1930-
it=JsonbIteratorInit(&jb->root);
1930+
it=JsonbIteratorInit(JsonbRoot(jb));
19311931

19321932
while ((r=JsonbIteratorNext(&it,&v,skipNested))!=WJB_DONE)
19331933
{
@@ -2171,7 +2171,7 @@ elements_worker_jsonb(FunctionCallInfo fcinfo, const char *funcname,
21712171
"jsonb_array_elements temporary cxt",
21722172
ALLOCSET_DEFAULT_SIZES);
21732173

2174-
it=JsonbIteratorInit(&jb->root);
2174+
it=JsonbIteratorInit(JsonbRoot(jb));
21752175

21762176
while ((r=JsonbIteratorNext(&it,&v,skipNested))!=WJB_DONE)
21772177
{
@@ -2928,7 +2928,7 @@ populate_scalar(ScalarIOData *io, Oid typid, int32 typmod, JsValue *jsv)
29282928
*/
29292929
Jsonb*jsonb=JsonbValueToJsonb(jbv);
29302930

2931-
str=JsonbToCString(NULL,&jsonb->root,VARSIZE(jsonb));
2931+
str=JsonbToCString(NULL,JsonbRoot(jsonb),JsonbGetSize(jsonb));
29322932
}
29332933
elseif (jbv->type==jbvString)/* quotes are stripped */
29342934
str=pnstrdup(jbv->val.string.val,jbv->val.string.len);
@@ -3487,7 +3487,7 @@ populate_record_worker(FunctionCallInfo fcinfo, const char *funcname,
34873487

34883488
/* fill binary jsonb value pointing to jb */
34893489
jbv.type=jbvBinary;
3490-
jbv.val.binary.data=&jb->root;
3490+
jbv.val.binary.data=JsonbRoot(jb);
34913491
jbv.val.binary.len=VARSIZE(jb)-VARHDRSZ;
34923492
}
34933493

@@ -3850,7 +3850,7 @@ populate_recordset_worker(FunctionCallInfo fcinfo, const char *funcname,
38503850
errmsg("cannot call %s on a non-array",
38513851
funcname)));
38523852

3853-
it=JsonbIteratorInit(&jb->root);
3853+
it=JsonbIteratorInit(JsonbRoot(jb));
38543854

38553855
while ((r=JsonbIteratorNext(&it,&v,skipNested))!=WJB_DONE)
38563856
{
@@ -4187,7 +4187,7 @@ jsonb_strip_nulls(PG_FUNCTION_ARGS)
41874187
if (JB_ROOT_IS_SCALAR(jb))
41884188
PG_RETURN_JSONB_P(jb);
41894189

4190-
it=JsonbIteratorInit(&jb->root);
4190+
it=JsonbIteratorInit(JsonbRoot(jb));
41914191

41924192
while ((type=JsonbIteratorNext(&it,&v, false))!=WJB_DONE)
41934193
{
@@ -4236,7 +4236,7 @@ jsonb_pretty(PG_FUNCTION_ARGS)
42364236
Jsonb*jb=PG_GETARG_JSONB_P(0);
42374237
StringInfostr=makeStringInfo();
42384238

4239-
JsonbToCStringIndent(str,&jb->root,VARSIZE(jb));
4239+
JsonbToCStringIndent(str,JsonbRoot(jb),JsonbGetSize(jb));
42404240

42414241
PG_RETURN_TEXT_P(cstring_to_text_with_len(str->data,str->len));
42424242
}
@@ -4270,8 +4270,8 @@ jsonb_concat(PG_FUNCTION_ARGS)
42704270
PG_RETURN_JSONB_P(jb1);
42714271
}
42724272

4273-
it1=JsonbIteratorInit(&jb1->root);
4274-
it2=JsonbIteratorInit(&jb2->root);
4273+
it1=JsonbIteratorInit(JsonbRoot(jb1));
4274+
it2=JsonbIteratorInit(JsonbRoot(jb2));
42754275

42764276
res=IteratorConcat(&it1,&it2,&state);
42774277

@@ -4309,7 +4309,7 @@ jsonb_delete(PG_FUNCTION_ARGS)
43094309
if (JB_ROOT_COUNT(in)==0)
43104310
PG_RETURN_JSONB_P(in);
43114311

4312-
it=JsonbIteratorInit(&in->root);
4312+
it=JsonbIteratorInit(JsonbRoot(in));
43134313

43144314
while ((r=JsonbIteratorNext(&it,&v,skipNested))!=WJB_DONE)
43154315
{
@@ -4373,7 +4373,7 @@ jsonb_delete_array(PG_FUNCTION_ARGS)
43734373
if (keys_len==0)
43744374
PG_RETURN_JSONB_P(in);
43754375

4376-
it=JsonbIteratorInit(&in->root);
4376+
it=JsonbIteratorInit(JsonbRoot(in));
43774377

43784378
while ((r=JsonbIteratorNext(&it,&v,skipNested))!=WJB_DONE)
43794379
{
@@ -4452,7 +4452,7 @@ jsonb_delete_idx(PG_FUNCTION_ARGS)
44524452
if (JB_ROOT_COUNT(in)==0)
44534453
PG_RETURN_JSONB_P(in);
44544454

4455-
it=JsonbIteratorInit(&in->root);
4455+
it=JsonbIteratorInit(JsonbRoot(in));
44564456

44574457
r=JsonbIteratorNext(&it,&v, false);
44584458
Assert(r==WJB_BEGIN_ARRAY);
@@ -4525,7 +4525,7 @@ jsonb_set(PG_FUNCTION_ARGS)
45254525
if (path_len==0)
45264526
PG_RETURN_JSONB_P(in);
45274527

4528-
it=JsonbIteratorInit(&in->root);
4528+
it=JsonbIteratorInit(JsonbRoot(in));
45294529

45304530
res=setPath(&it,path_elems,path_nulls,path_len,&st,
45314531
0,&newval,create ?JB_PATH_CREATE :JB_PATH_REPLACE);
@@ -4636,7 +4636,7 @@ jsonb_delete_path(PG_FUNCTION_ARGS)
46364636
if (path_len==0)
46374637
PG_RETURN_JSONB_P(in);
46384638

4639-
it=JsonbIteratorInit(&in->root);
4639+
it=JsonbIteratorInit(JsonbRoot(in));
46404640

46414641
res=setPath(&it,path_elems,path_nulls,path_len,&st,
46424642
0,NULL,JB_PATH_DELETE);
@@ -4681,7 +4681,7 @@ jsonb_insert(PG_FUNCTION_ARGS)
46814681
if (path_len==0)
46824682
PG_RETURN_JSONB_P(in);
46834683

4684-
it=JsonbIteratorInit(&in->root);
4684+
it=JsonbIteratorInit(JsonbRoot(in));
46854685

46864686
res=setPath(&it,path_elems,path_nulls,path_len,&st,0,&newval,
46874687
after ?JB_PATH_INSERT_AFTER :JB_PATH_INSERT_BEFORE);
@@ -5168,7 +5168,7 @@ parse_jsonb_index_flags(Jsonb *jb)
51685168
JsonbIteratorTokentype;
51695169
uint32flags=0;
51705170

5171-
it=JsonbIteratorInit(&jb->root);
5171+
it=JsonbIteratorInit(JsonbRoot(jb));
51725172

51735173
type=JsonbIteratorNext(&it,&v, false);
51745174

@@ -5236,7 +5236,7 @@ iterate_jsonb_values(Jsonb *jb, uint32 flags, void *state,
52365236
JsonbValuev;
52375237
JsonbIteratorTokentype;
52385238

5239-
it=JsonbIteratorInit(&jb->root);
5239+
it=JsonbIteratorInit(JsonbRoot(jb));
52405240

52415241
/*
52425242
* Just recursively iterating over jsonb and call callback on all
@@ -5376,7 +5376,7 @@ transform_jsonb_string_values(Jsonb *jsonb, void *action_state,
53765376
JsonbParseState*st=NULL;
53775377
text*out;
53785378

5379-
it=JsonbIteratorInit(&jsonb->root);
5379+
it=JsonbIteratorInit(JsonbRoot(jsonb));
53805380

53815381
while ((type=JsonbIteratorNext(&it,&v, false))!=WJB_DONE)
53825382
{

‎src/include/utils/jsonb.h‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ typedef enum
7575
#definePG_GETARG_JSONB_P_COPY(x)DatumGetJsonbPCopy(PG_GETARG_DATUM(x))
7676
#definePG_RETURN_JSONB_P(x)PG_RETURN_DATUM(JsonbPGetDatum(x))
7777

78+
#defineJsonbRoot(jsonb)(&(jsonb)->root)
79+
#defineJsonbGetSize(jsonb)VARSIZE(jsonb)
80+
7881
typedefstructJsonbPairJsonbPair;
7982
typedefstructJsonbValueJsonbValue;
8083

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp