aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_clause.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2012-03-23 17:29:57 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2012-03-23 17:29:57 -0400
commit0339047bc93147c1c6f78f867ae6b0c215406235 (patch)
tree116a4cd10a9eb1b0b6beb4cf871bc126c504572a /src/backend/parser/parse_clause.c
parente08b4101e1daa2f4e6644330918177a10cac0aab (diff)
downloadpostgresql-0339047bc93147c1c6f78f867ae6b0c215406235.tar.gz
postgresql-0339047bc93147c1c6f78f867ae6b0c215406235.zip
Code review for protransform patches.
Fix loss of previous expression-simplification work when a transform function fires: we must not simply revert to untransformed input tree. Instead build a dummy FuncExpr node to pass to the transform function. This has the additional advantage of providing a simpler, more uniform API for transform functions. Move documentation to a somewhat less buried spot, relocate some poorly-placed code, be more wary of null constants and invalid typmod values, add an opr_sanity check on protransform function signatures, and some other minor cosmetic adjustments. Note: although this patch touches pg_proc.h, no need for catversion bump, because the changes are cosmetic and don't actually change the intended catalog contents.
Diffstat (limited to 'src/backend/parser/parse_clause.c')
-rw-r--r--src/backend/parser/parse_clause.c22
1 files changed, 0 insertions, 22 deletions
diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c
index 3a23cddd337..97ab9d5581a 100644
--- a/src/backend/parser/parse_clause.c
+++ b/src/backend/parser/parse_clause.c
@@ -2271,25 +2271,3 @@ transformFrameOffset(ParseState *pstate, int frameOptions, Node *clause)
return node;
}
-
-/*
- * relabel_to_typmod
- * Add a RelabelType node that changes just the typmod, and remove all
- * now-superfluous RelabelType nodes beneath it.
- */
-Node *
-relabel_to_typmod(Node *expr, int32 typmod)
-{
- Oid type = exprType(expr);
- Oid coll = exprCollation(expr);
-
- /*
- * Strip any existing RelabelType, then add one. This is to preserve the
- * invariant of no redundant RelabelTypes.
- */
- while (IsA(expr, RelabelType))
- expr = (Node *) ((RelabelType *) expr)->arg;
-
- return (Node *) makeRelabelType((Expr *) expr, type, typmod, coll,
- COERCE_DONTCARE);
-}