From 36888a62e506436ae76d4345fa9a410259cb00ce Mon Sep 17 00:00:00 2001 From: msepga Date: Thu, 26 Sep 2024 13:15:53 -0400 Subject: [PATCH] Deparse `JSON`, `JSON_SCALAR`, `JSON_SERIALIZE` --- src/postgres_deparse.c | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/postgres_deparse.c b/src/postgres_deparse.c index a341f8ee..e13f1657 100644 --- a/src/postgres_deparse.c +++ b/src/postgres_deparse.c @@ -196,6 +196,11 @@ static void deparseJsonArrayAgg(StringInfo str, JsonArrayAgg *json_array_agg); static void deparseJsonObjectConstructor(StringInfo str, JsonObjectConstructor *json_object_constructor); static void deparseJsonArrayConstructor(StringInfo str, JsonArrayConstructor *json_array_constructor); static void deparseJsonArrayQueryConstructor(StringInfo str, JsonArrayQueryConstructor *json_array_query_constructor); +static void deparseJsonValueExpr(StringInfo str, JsonValueExpr *json_value_expr); +static void deparseJsonOutput(StringInfo str, JsonOutput *json_output); +static void deparseJsonParseExpr(StringInfo str, JsonParseExpr *json_parse_expr); +static void deparseJsonScalarExpr(StringInfo str, JsonScalarExpr *json_scalar_expr); +static void deparseJsonSerializeExpr(StringInfo str, JsonSerializeExpr *json_serialize_expr); static void deparseConstraint(StringInfo str, Constraint *constraint); static void deparseSchemaStmt(StringInfo str, Node *node); static void deparseExecuteStmt(StringInfo str, ExecuteStmt *execute_stmt); @@ -343,6 +348,15 @@ static void deparseExpr(StringInfo str, Node *node) case T_MergeSupportFunc: appendStringInfoString(str, "merge_action() "); break; + case T_JsonParseExpr: + deparseJsonParseExpr(str, castNode(JsonParseExpr, node)); + break; + case T_JsonScalarExpr: + deparseJsonScalarExpr(str, castNode(JsonScalarExpr, node)); + break; + case T_JsonSerializeExpr: + deparseJsonSerializeExpr(str, castNode(JsonSerializeExpr, node)); + break; case T_FuncCall: case T_SQLValueFunction: case T_MinMaxExpr: @@ -10560,6 +10574,37 @@ static void deparseJsonArrayQueryConstructor(StringInfo str, JsonArrayQueryConst appendStringInfoChar(str, ')'); } +static void deparseJsonParseExpr(StringInfo str, JsonParseExpr *json_parse_expr) +{ + appendStringInfoString(str, "JSON("); + + deparseJsonValueExpr(str, json_parse_expr->expr); + + if (json_parse_expr->unique_keys) + appendStringInfoString(str, " WITH UNIQUE KEYS"); + + appendStringInfoString(str, ")"); +} + +static void deparseJsonScalarExpr(StringInfo str, JsonScalarExpr *json_scalar_expr) +{ + appendStringInfoString(str, "JSON_SCALAR("); + deparseExpr(str, (Node*) json_scalar_expr->expr); + appendStringInfoString(str, ")"); +} + +static void deparseJsonSerializeExpr(StringInfo str, JsonSerializeExpr *json_serialize_expr) +{ + appendStringInfoString(str, "JSON_SERIALIZE("); + + deparseJsonValueExpr(str, json_serialize_expr->expr); + + if (json_serialize_expr->output) + deparseJsonOutput(str, json_serialize_expr->output); + + appendStringInfoString(str, ")"); +} + static void deparseGroupingFunc(StringInfo str, GroupingFunc *grouping_func) { appendStringInfoString(str, "GROUPING(");