mirror of
https://github.com/postgres/postgres.git
synced 2025-08-13 00:04:51 -04:00
Compare commits
2 Commits
6189a0d379
...
617a239272
Author | SHA1 | Date | |
---|---|---|---|
|
617a239272 | ||
|
1748379b63 |
@ -12231,8 +12231,29 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
|
||||
RememberConstraintForRebuilding(foundObject.objectId, tab);
|
||||
break;
|
||||
|
||||
case OCLASS_PROC:
|
||||
|
||||
/*
|
||||
* A new-style SQL function can depend on a column, if that
|
||||
* column is referenced in the parsed function body. Ideally
|
||||
* we'd automatically update the function by deparsing and
|
||||
* reparsing it, but that's risky and might well fail anyhow.
|
||||
* FIXME someday.
|
||||
*/
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot alter type of a column used by a function or procedure"),
|
||||
errdetail("%s depends on column \"%s\"",
|
||||
getObjectDescription(&foundObject, false),
|
||||
colName)));
|
||||
break;
|
||||
|
||||
case OCLASS_REWRITE:
|
||||
/* XXX someday see if we can cope with revising views */
|
||||
|
||||
/*
|
||||
* View/rule bodies have pretty much the same issues as
|
||||
* function bodies. FIXME someday.
|
||||
*/
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot alter type of a column used by a view or rule"),
|
||||
@ -12248,9 +12269,9 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
|
||||
* specified as an update target, or because the column is
|
||||
* used in the trigger's WHEN condition. The first case would
|
||||
* not require any extra work, but the second case would
|
||||
* require updating the WHEN expression, which will take a
|
||||
* significant amount of new code. Since we can't easily tell
|
||||
* which case applies, we punt for both. FIXME someday.
|
||||
* require updating the WHEN expression, which has the same
|
||||
* issues as above. Since we can't easily tell which case
|
||||
* applies, we punt for both. FIXME someday.
|
||||
*/
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
@ -12296,7 +12317,6 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
|
||||
RememberStatisticsForRebuilding(foundObject.objectId, tab);
|
||||
break;
|
||||
|
||||
case OCLASS_PROC:
|
||||
case OCLASS_TYPE:
|
||||
case OCLASS_CAST:
|
||||
case OCLASS_COLLATION:
|
||||
|
@ -2859,7 +2859,10 @@ timestamp_pl_interval(PG_FUNCTION_ARGS)
|
||||
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
|
||||
errmsg("timestamp out of range")));
|
||||
|
||||
tm->tm_mon += span->month;
|
||||
if (pg_add_s32_overflow(tm->tm_mon, span->month, &tm->tm_mon))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
|
||||
errmsg("timestamp out of range")));
|
||||
if (tm->tm_mon > MONTHS_PER_YEAR)
|
||||
{
|
||||
tm->tm_year += (tm->tm_mon - 1) / MONTHS_PER_YEAR;
|
||||
@ -2911,7 +2914,10 @@ timestamp_pl_interval(PG_FUNCTION_ARGS)
|
||||
errmsg("timestamp out of range")));
|
||||
}
|
||||
|
||||
timestamp += span->time;
|
||||
if (pg_add_s64_overflow(timestamp, span->time, ×tamp))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
|
||||
errmsg("timestamp out of range")));
|
||||
|
||||
if (!IS_VALID_TIMESTAMP(timestamp))
|
||||
ereport(ERROR,
|
||||
@ -2973,7 +2979,10 @@ timestamptz_pl_interval(PG_FUNCTION_ARGS)
|
||||
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
|
||||
errmsg("timestamp out of range")));
|
||||
|
||||
tm->tm_mon += span->month;
|
||||
if (pg_add_s32_overflow(tm->tm_mon, span->month, &tm->tm_mon))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
|
||||
errmsg("timestamp out of range")));
|
||||
if (tm->tm_mon > MONTHS_PER_YEAR)
|
||||
{
|
||||
tm->tm_year += (tm->tm_mon - 1) / MONTHS_PER_YEAR;
|
||||
@ -3032,7 +3041,10 @@ timestamptz_pl_interval(PG_FUNCTION_ARGS)
|
||||
errmsg("timestamp out of range")));
|
||||
}
|
||||
|
||||
timestamp += span->time;
|
||||
if (pg_add_s64_overflow(timestamp, span->time, ×tamp))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
|
||||
errmsg("timestamp out of range")));
|
||||
|
||||
if (!IS_VALID_TIMESTAMP(timestamp))
|
||||
ereport(ERROR,
|
||||
|
Loading…
x
Reference in New Issue
Block a user