aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2019-06-05 15:01:14 +0900
committerMichael Paquier <michael@paquier.xyz>2019-06-05 15:01:14 +0900
commitf7e954ad1cf99a65b1785d999058898a6d56e014 (patch)
tree6496c6628b2f7531c20a32f07a7d9dce16969583
parent5efd604ec0a3bdde98fe19d8cada69ab4ef80db3 (diff)
downloadpostgresql-f7e954ad1cf99a65b1785d999058898a6d56e014.tar.gz
postgresql-f7e954ad1cf99a65b1785d999058898a6d56e014.zip
Rework code using list_delete_cell() in MergeAttributes
When merging two attributes, we are sure that at least one remains. However, when deleting one element in the attribute list we may finish with an empty list returned as NIL by list_delete_cell(), but the code failed to track that, which is not project-like. Adjust the call so as we check for an empty list, and make use of it in an assertion. This has been introduced by e7b3349, when adding support for CREATE TABLE OF. Author: Mark Dilger Reviewed-by: Álvaro Herrera, Michael Paquier Discussion: https://postgr.es/m/CAE-h2TpPDqSWgOvfvSziOaMngMPwW+QZcmPpY8hQ_KOJ2+3hXQ@mail.gmail.com
-rw-r--r--src/backend/commands/tablecmds.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 95af5ec2dc7..e13b96d2522 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -2088,7 +2088,13 @@ MergeAttributes(List *schema, List *supers, char relpersistence,
coldef->cooked_default = restdef->cooked_default;
coldef->constraints = restdef->constraints;
coldef->is_from_type = false;
- list_delete_cell(schema, rest, prev);
+ schema = list_delete_cell(schema, rest, prev);
+
+ /*
+ * As two elements are merged and one is removed, we
+ * should never finish with an empty list.
+ */
+ Assert(schema != NIL);
}
else
ereport(ERROR,