exprType((Node *) tle->expr) == UNKNOWNOID)
expr = tle->expr;
else
- expr = (Expr *) makeVar(rtr->rtindex,
- tle->resno,
- exprType((Node *) tle->expr),
- exprTypmod((Node *) tle->expr),
- 0);
+ {
+ Var *var = makeVar(rtr->rtindex,
+ tle->resno,
+ exprType((Node *) tle->expr),
+ exprTypmod((Node *) tle->expr),
+ 0);
+ var->location = exprLocation((Node *) tle->expr);
+ expr = (Expr *) var;
+ }
exprList = lappend(exprList, expr);
}
* location error cursor position for the target column, or -1
*
* Returns the modified expression.
+ *
+ * Note: location points at the target column name (SET target or INSERT
+ * column name list entry), and must therefore be -1 in an INSERT that
+ * omits the column name list. So we should usually prefer to use
+ * exprLocation(expr) for errors that can happen in a default INSERT.
*/
Expr *
transformAssignedExpr(ParseState *pstate,
* For normal non-qualified target column, do type checking and
* coercion.
*/
+ Node *orig_expr = (Node *) expr;
+
expr = (Expr *)
coerce_to_target_type(pstate,
- (Node *) expr, type_id,
+ orig_expr, type_id,
attrtype, attrtypmod,
COERCION_ASSIGNMENT,
COERCE_IMPLICIT_CAST,
format_type_be(attrtype),
format_type_be(type_id)),
errhint("You will need to rewrite or cast the expression."),
- parser_errposition(pstate, location)));
+ parser_errposition(pstate, exprLocation(orig_expr))));
}
return expr;