diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 3da003fd09..9f0a501dc5 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/parse_expr.c,v 1.213 2007/03/17 00:11:04 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/parser/parse_expr.c,v 1.214 2007/03/17 01:15:55 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1958,7 +1958,7 @@ exprTypmod(Node *expr) * typmod, else use -1 */ ArrayExpr *arrayexpr = (ArrayExpr *) expr; - Oid arraytype = arrayexpr->array_typeid; + Oid commontype; int32 typmod; ListCell *elem; @@ -1967,11 +1967,15 @@ exprTypmod(Node *expr) typmod = exprTypmod((Node *) linitial(arrayexpr->elements)); if (typmod < 0) return -1; /* no point in trying harder */ + if (arrayexpr->multidims) + commontype = arrayexpr->array_typeid; + else + commontype = arrayexpr->element_typeid; foreach(elem, arrayexpr->elements) { Node *e = (Node *) lfirst(elem); - if (exprType(e) != arraytype) + if (exprType(e) != commontype) return -1; if (exprTypmod(e) != typmod) return -1; diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index b1294b6d32..d97cfee375 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.254 2007/03/17 00:11:05 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.255 2007/03/17 01:15:55 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -4427,8 +4427,11 @@ get_const_expr(Const *constval, deparse_context *context, bool showtype) needlabel = false; break; case NUMERICOID: - /* Float-looking constants will be typed as numeric */ - needlabel = !isfloat; + /* + * Float-looking constants will be typed as numeric, but if + * there's a specific typmod we need to show it. + */ + needlabel = !isfloat || (constval->consttypmod >= 0); break; default: needlabel = true;