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

Commit07b4c48

Browse files
committed
Fix broken logic for pretty-printing parenthesis-suppression in UNION
et al.
1 parenta21bb27 commit07b4c48

File tree

1 file changed

+28
-28
lines changed

1 file changed

+28
-28
lines changed

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

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*back to source text
44
*
55
* IDENTIFICATION
6-
* $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.174 2004/06/25 17:20:24 tgl Exp $
6+
* $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.175 2004/07/06 04:50:21 tgl Exp $
77
*
88
* This software is copyrighted by Jan Wieck - Hamburg.
99
*
@@ -2066,6 +2066,7 @@ get_setop_query(Node *setOp, Query *query, deparse_context *context,
20662066
TupleDescresultDesc)
20672067
{
20682068
StringInfobuf=context->buf;
2069+
boolneed_paren;
20692070

20702071
if (IsA(setOp,RangeTblRef))
20712072
{
@@ -2074,24 +2075,37 @@ get_setop_query(Node *setOp, Query *query, deparse_context *context,
20742075
Query*subquery=rte->subquery;
20752076

20762077
Assert(subquery!=NULL);
2078+
Assert(subquery->setOperations==NULL);
2079+
/* Need parens if ORDER BY, FOR UPDATE, or LIMIT; see gram.y */
2080+
need_paren= (subquery->sortClause||
2081+
subquery->rowMarks||
2082+
subquery->limitOffset||
2083+
subquery->limitCount);
2084+
if (need_paren)
2085+
appendStringInfoChar(buf,'(');
20772086
get_query_def(subquery,buf,context->namespaces,resultDesc,
20782087
context->prettyFlags,context->indentLevel);
2088+
if (need_paren)
2089+
appendStringInfoChar(buf,')');
20792090
}
20802091
elseif (IsA(setOp,SetOperationStmt))
20812092
{
20822093
SetOperationStmt*op= (SetOperationStmt*)setOp;
2083-
boolneed_paren;
2084-
2085-
need_paren= (PRETTY_PAREN(context) ?
2086-
!IsA(op->rarg,RangeTblRef) : true);
20872094

2088-
if (!PRETTY_PAREN(context))
2089-
appendStringInfoString(buf,"((");
2095+
/*
2096+
* We force parens whenever nesting two SetOperationStmts.
2097+
* There are some cases in which parens are needed around a leaf
2098+
* query too, but those are more easily handled at the next level
2099+
* down (see code above).
2100+
*/
2101+
need_paren= !IsA(op->larg,RangeTblRef);
20902102

2103+
if (need_paren)
2104+
appendStringInfoChar(buf,'(');
20912105
get_setop_query(op->larg,query,context,resultDesc);
2092-
2093-
if (!PRETTY_PAREN(context))
2106+
if (need_paren)
20942107
appendStringInfoChar(buf,')');
2108+
20952109
if (!PRETTY_INDENT(context))
20962110
appendStringInfoChar(buf,' ');
20972111
switch (op->op)
@@ -2118,27 +2132,13 @@ get_setop_query(Node *setOp, Query *query, deparse_context *context,
21182132
if (PRETTY_INDENT(context))
21192133
appendStringInfoChar(buf,'\n');
21202134

2121-
if (PRETTY_PAREN(context))
2122-
{
2123-
if (need_paren)
2124-
{
2125-
appendStringInfoChar(buf,'(');
2126-
if (PRETTY_INDENT(context))
2127-
appendStringInfoChar(buf,'\n');
2128-
}
2129-
}
2130-
else
2131-
appendStringInfoChar(buf,'(');
2135+
need_paren= !IsA(op->rarg,RangeTblRef);
21322136

2137+
if (need_paren)
2138+
appendStringInfoChar(buf,'(');
21332139
get_setop_query(op->rarg,query,context,resultDesc);
2134-
2135-
if (PRETTY_PAREN(context))
2136-
{
2137-
if (need_paren)
2138-
appendStringInfoChar(buf,')');
2139-
}
2140-
else
2141-
appendStringInfoString(buf,"))");
2140+
if (need_paren)
2141+
appendStringInfoChar(buf,')');
21422142
}
21432143
else
21442144
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp