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

Commitfba12c8

Browse files
committed
Simplify addJsonbToParseState()
This function no longer needs to walk non-scalar structures passed toit, following commit54547bd.
1 parent54547bd commitfba12c8

File tree

1 file changed

+13
-22
lines changed

1 file changed

+13
-22
lines changed

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

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3225,8 +3225,9 @@ jsonb_strip_nulls(PG_FUNCTION_ARGS)
32253225
* If the parse state container is an object, the jsonb is pushed as
32263226
* a value, not a key.
32273227
*
3228-
* This needs to be done using an iterator because pushJsonbValue doesn't
3229-
* like getting jbvBinary values, so we can't just push jb as a whole.
3228+
* If the new value is a root scalar, extract the value using an iterator, and
3229+
* just add that. Otherwise, add the value as the type appropriate for
3230+
* the container.
32303231
*/
32313232
staticvoid
32323233
addJsonbToParseState(JsonbParseState**jbps,Jsonb*jb)
@@ -3236,36 +3237,26 @@ addJsonbToParseState(JsonbParseState **jbps, Jsonb *jb)
32363237
inttype;
32373238
JsonbValuev;
32383239

3239-
it=JsonbIteratorInit(&jb->root);
3240-
32413240
Assert(o->type==jbvArray||o->type==jbvObject);
32423241

32433242
if (JB_ROOT_IS_SCALAR(jb))
32443243
{
3244+
it=JsonbIteratorInit(&jb->root);
3245+
32453246
(void)JsonbIteratorNext(&it,&v, false);/* skip array header */
32463247
(void)JsonbIteratorNext(&it,&v, false);/* fetch scalar value */
32473248

3248-
switch (o->type)
3249-
{
3250-
casejbvArray:
3251-
(void)pushJsonbValue(jbps,WJB_ELEM,&v);
3252-
break;
3253-
casejbvObject:
3254-
(void)pushJsonbValue(jbps,WJB_VALUE,&v);
3255-
break;
3256-
default:
3257-
elog(ERROR,"unexpected parent of nested structure");
3258-
}
3249+
if (o->type==jbvArray)
3250+
(void)pushJsonbValue(jbps,WJB_ELEM,&v);
3251+
else
3252+
(void)pushJsonbValue(jbps,WJB_VALUE,&v);
32593253
}
32603254
else
32613255
{
3262-
while ((type=JsonbIteratorNext(&it,&v, false))!=WJB_DONE)
3263-
{
3264-
if (type==WJB_KEY||type==WJB_VALUE||type==WJB_ELEM)
3265-
(void)pushJsonbValue(jbps,type,&v);
3266-
else
3267-
(void)pushJsonbValue(jbps,type,NULL);
3268-
}
3256+
if (o->type==jbvArray)
3257+
(void)pushJsonbValue(jbps,WJB_ELEM,&jb->root);
3258+
else
3259+
(void)pushJsonbValue(jbps,WJB_VALUE,&jb->root);
32693260
}
32703261

32713262
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp