pg_get_viewdef 7.4 et al - Mailing list pgsql-hackers
| From | Andreas Pflug |
|---|---|
| Subject | pg_get_viewdef 7.4 et al |
| Date | |
| Msg-id | 3E92CC0E.9020200@web.de Whole thread Raw |
| Responses |
Re: pg_get_viewdef 7.4 et al
|
| List | pgsql-hackers |
OK,
here's my proposal for a more economical use of parentheses.
- implicit casted variables are not put in parentheses
(myVar)::integer -> myVar::integer, no chance to misinterpret this
- explicit CASTs are represented as CAST(... AS ...) for better
distinction from implicit ones
- a join's ON expression will not have parentheses automatically JOIN
xxx ON (a.oid=b.relid) -> JOIN xx ON a.oid=b.relid
- JOIN clauses are only in parens if the right expression of a JOIN is a
JOIN itself. For the left fork, the usual left-to-right order is
evaluated by default, so no parentheses are needed.
- Operators will have their operands plain if they are simple. If
T_OpExpr or T_BoolExpr operands are complex themselves, the operands are
put in parens(a+b) -> a+b, a+b*c -> a+(b*c)
This strategy greatly improves readability.
Regards,
Andreas
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/utils/adt/ruleutils.c,v
retrieving revision 1.137
diff -r1.137 ruleutils.c
2126a2127,2147> /*> * get_rule_expr_paren> * checks if the expression is of same kind as <type>> * if so,
parenthesesare needed.> * currently only used for T_OpExpr and T_BoolExpr> */> static void get_rule_expr_paren(Node
*node,deparse_context *context,
bool showimplicit, NodeTag type)> {> StringInfo buf = context->buf;>> bool need_paren = (nodeTag(node) ==
type);> if (need_paren)> appendStringInfoChar(buf, '(');>> get_rule_expr(node, context, showimplicit);>>
if (need_paren)> appendStringInfoChar(buf, ')');> }>>
2293,2294c2314,2315
< appendStringInfoChar(buf, '(');
< get_rule_expr((Node *) lfirst(args), context,
false);
---> get_rule_expr_paren((Node *) lfirst(args),
context,> false, T_BoolExpr);
2297,2299c2318,2320
< appendStringInfo(buf, " AND ");
< get_rule_expr((Node *) lfirst(args), context,
< false);
---> appendStringInfo(buf, " AND ");>
get_rule_expr_paren((Node*)
lfirst(args), context,> false, T_BoolExpr);
2301d2321
< appendStringInfoChar(buf, ')');
2305,2306c2325,2326
< appendStringInfoChar(buf, '(');
< get_rule_expr((Node *) lfirst(args), context,
false);
---> get_rule_expr_paren((Node *) lfirst(args),
context,> false, T_BoolExpr);
2310,2311c2330,2331
< get_rule_expr((Node *) lfirst(args), context,
< false);
---> get_rule_expr_paren((Node *)
lfirst(args), context,> false, T_BoolExpr);
2313d2332
< appendStringInfoChar(buf, ')');
2317,2319c2336,2338
< appendStringInfo(buf, "(NOT ");
< get_rule_expr((Node *) lfirst(args), context,
false);
< appendStringInfoChar(buf, ')');
---> appendStringInfo(buf, "NOT ");> get_rule_expr_paren((Node *)
lfirst(args),
context,> false, T_BoolExpr);
2394d2412
< appendStringInfoChar(buf, '(');
2396c2414
< appendStringInfo(buf, ")::%s",
---> appendStringInfo(buf, "::%s",
2536d2553
< appendStringInfoChar(buf, '(');
2538c2555
< appendStringInfo(buf, ")::%s",
---> appendStringInfo(buf, "::%s",
2566d2582
< appendStringInfoChar(buf, '(');
2573c2589
< get_rule_expr(arg1, context, true);
---> get_rule_expr_paren(arg1, context, true, T_OpExpr);
2578c2594
< get_rule_expr(arg2, context, true);
---> get_rule_expr_paren(arg2, context, true, T_OpExpr);
2585a2602,2604> bool need_paren = (nodeTag(arg) == T_OpExpr);> if (need_paren)>
appendStringInfoChar(buf,'(');
2597,2599c2616,2618
< generate_operator_name(opno,
< InvalidOid,
< exprType(arg)));
---> generate_operator_name(opno,> InvalidOid,>
exprType(arg)));
2605,2607c2624,2626
< generate_operator_name(opno,
< exprType(arg),
< InvalidOid));
---> generate_operator_name(opno,> exprType(arg),>
InvalidOid));
2612a2632,2633> if (need_paren)> appendStringInfoChar(buf, ')');
2614d2634
< appendStringInfoChar(buf, ')');
2663c2683
< appendStringInfoChar(buf, '(');
---> appendStringInfo(buf, "CAST(");
2665c2685
< appendStringInfo(buf, ")::%s",
---> appendStringInfo(buf, " AS %s)",
3112a3133> bool need_paren = !IsA(j->rarg, RangeTblRef);
3114d3134
< appendStringInfoChar(buf, '(');
3141a3162,3165>> if (need_paren)> appendStringInfoChar(buf, '(');>
3142a3167,3170>> if (need_paren)> appendStringInfoChar(buf, ')');>
3161c3189
< appendStringInfo(buf, " ON (");
---> appendStringInfo(buf, " ON ");
3163d3190
< appendStringInfoChar(buf, ')');
3166,3167c3193
< appendStringInfoChar(buf, ')');
< /* Yes, it's correct to put alias after the right paren ... */
--->
pgsql-hackers by date: