diff options
| author | Tom Lane | 2011-03-26 00:10:42 +0000 |
|---|---|---|
| committer | Tom Lane | 2011-03-26 00:10:42 +0000 |
| commit | bfa4440ca5d948c4d4f0ab5bb82d433200c35288 (patch) | |
| tree | 729b839f5f03c46773250ce3d33fc351f394e63e /src/backend/parser | |
| parent | c8e993503d0f1a0cb8f187a136fb64cead9ba591 (diff) | |
Pass collation to makeConst() instead of looking it up internally.
In nearly all cases, the caller already knows the correct collation, and
in a number of places, the value the caller has handy is more correct than
the default for the type would be. (In particular, this patch makes it
significantly less likely that eval_const_expressions will result in
changing the exposed collation of an expression.) So an internal lookup
is both expensive and wrong.
Diffstat (limited to 'src/backend/parser')
| -rw-r--r-- | src/backend/parser/parse_coerce.c | 5 | ||||
| -rw-r--r-- | src/backend/parser/parse_node.c | 3 | ||||
| -rw-r--r-- | src/backend/parser/parse_relation.c | 3 | ||||
| -rw-r--r-- | src/backend/parser/parse_target.c | 3 |
4 files changed, 11 insertions, 3 deletions
diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c index 9b59b032976..cc03f9f48e6 100644 --- a/src/backend/parser/parse_coerce.c +++ b/src/backend/parser/parse_coerce.c @@ -753,6 +753,7 @@ build_coercion_expression(Node *node, /* Pass target typmod as an int4 constant */ cons = makeConst(INT4OID, -1, + InvalidOid, sizeof(int32), Int32GetDatum(targetTypMod), false, @@ -766,6 +767,7 @@ build_coercion_expression(Node *node, /* Pass it a boolean isExplicit parameter, too */ cons = makeConst(BOOLOID, -1, + InvalidOid, sizeof(bool), BoolGetDatum(isExplicit), false, @@ -890,7 +892,8 @@ coerce_record_to_complex(ParseState *pstate, Node *node, * can't use atttypid here, but it doesn't really matter what type * the Const claims to be. */ - newargs = lappend(newargs, makeNullConst(INT4OID, -1)); + newargs = lappend(newargs, + makeNullConst(INT4OID, -1, InvalidOid)); continue; } diff --git a/src/backend/parser/parse_node.c b/src/backend/parser/parse_node.c index 2c76c557ecc..07257accc82 100644 --- a/src/backend/parser/parse_node.c +++ b/src/backend/parser/parse_node.c @@ -347,6 +347,7 @@ transformArraySubscripts(ParseState *pstate, /* Make a constant 1 */ subexpr = (Node *) makeConst(INT4OID, -1, + InvalidOid, sizeof(int32), Int32GetDatum(1), false, @@ -526,6 +527,7 @@ make_const(ParseState *pstate, Value *value, int location) /* return a null const */ con = makeConst(UNKNOWNOID, -1, + InvalidOid, -2, (Datum) 0, true, @@ -540,6 +542,7 @@ make_const(ParseState *pstate, Value *value, int location) con = makeConst(typeid, -1, /* typmod -1 is OK for all cases */ + InvalidOid, /* all cases are uncollatable types */ typelen, val, false, diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c index 488b1425a35..7bfafdb5cfb 100644 --- a/src/backend/parser/parse_relation.c +++ b/src/backend/parser/parse_relation.c @@ -1870,7 +1870,8 @@ expandTupleDesc(TupleDesc tupdesc, Alias *eref, * can't use atttypid here, but it doesn't really matter * what type the Const claims to be. */ - *colvars = lappend(*colvars, makeNullConst(INT4OID, -1)); + *colvars = lappend(*colvars, + makeNullConst(INT4OID, -1, InvalidOid)); } } continue; diff --git a/src/backend/parser/parse_target.c b/src/backend/parser/parse_target.c index 550783547e8..8e92b99b5b2 100644 --- a/src/backend/parser/parse_target.c +++ b/src/backend/parser/parse_target.c @@ -434,7 +434,8 @@ transformAssignedExpr(ParseState *pstate, * is not really a source value to work with. Insert a NULL * constant as the source value. */ - colVar = (Node *) makeNullConst(attrtype, attrtypmod); + colVar = (Node *) makeNullConst(attrtype, attrtypmod, + attrcollation); } else { |
