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

Commit404852a

Browse files
author
Nikita Glukhov
committed
Minor refactoring of datum_to_jsonb()
1 parent8ea2d2b commit404852a

File tree

1 file changed

+18
-28
lines changed

1 file changed

+18
-28
lines changed

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

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -716,7 +716,6 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
716716
char*outputstr;
717717
boolnumeric_error;
718718
JsonbValuejb;
719-
boolscalar_jsonb= false;
720719

721720
check_stack_depth();
722721

@@ -746,10 +745,10 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
746745
{
747746
caseJSONBTYPE_ARRAY:
748747
array_to_jsonb_internal(val,result);
749-
break;
748+
return;
750749
caseJSONBTYPE_COMPOSITE:
751750
composite_to_jsonb(val,result);
752-
break;
751+
return;
753752
caseJSONBTYPE_BOOL:
754753
if (key_scalar)
755754
{
@@ -843,7 +842,7 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
843842

844843
pg_parse_json_or_ereport(lex,&sem);
845844
}
846-
break;
845+
return;
847846
caseJSONBTYPE_JSONB:
848847
{
849848
Jsonb*jsonb=DatumGetJsonbP(val);
@@ -856,35 +855,33 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
856855
(void)JsonbIteratorNext(&it,&jb, true);
857856
Assert(jb.type==jbvArray);
858857
(void)JsonbIteratorNext(&it,&jb, true);
859-
scalar_jsonb= true;
858+
break;
860859
}
861-
else
862-
{
863-
JsonbIteratorTokentype;
864-
865860

866-
if (result->parseState)
867-
{
861+
if (result->parseState)
862+
result->res=
868863
pushScalarJsonbValue(&result->parseState,
869864
JsonToJsonValue(jsonb,&jb),
870865
false, false);
871-
return;
872-
}
866+
else
867+
{
868+
JsonbIteratorTokentype;
873869

874870
while ((type=JsonbIteratorNext(&it,&jb, false))
875871
!=WJB_DONE)
876872
{
877-
if (type==WJB_END_ARRAY||type==WJB_END_OBJECT||
878-
type==WJB_BEGIN_ARRAY||type==WJB_BEGIN_OBJECT)
879-
result->res=pushJsonbValue(&result->parseState,
880-
type,NULL);
881-
else
882-
result->res=pushJsonbValue(&result->parseState,
883-
type,&jb);
873+
JsonbValue*jv=
874+
type==WJB_END_ARRAY||
875+
type==WJB_END_OBJECT||
876+
type==WJB_BEGIN_ARRAY||
877+
type==WJB_BEGIN_OBJECT ?NULL :&jb;
878+
879+
result->res=pushJsonbValue(&result->parseState,
880+
type,jv);
884881
}
885882
}
886883
}
887-
break;
884+
return;
888885
default:
889886
outputstr=OidOutputFunctionCall(outfuncoid,val);
890887
jb.type=jbvString;
@@ -895,13 +892,6 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
895892
}
896893

897894
/* Now insert jb into result, unless we did it recursively */
898-
if (!is_null&& !scalar_jsonb&&
899-
tcategory >=JSONBTYPE_JSON&&tcategory <=JSONBTYPE_JSONCAST)
900-
{
901-
/* work has been done recursively */
902-
return;
903-
}
904-
905895
result->res=pushScalarJsonbValue(&result->parseState,&jb,key_scalar,
906896
true);
907897
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp