diff options
Diffstat (limited to 'lib/sqlalchemy/sql/schema.py')
-rw-r--r-- | lib/sqlalchemy/sql/schema.py | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index c84e3ee21..c63a3160f 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -2738,7 +2738,9 @@ def _to_schema_column(element): def _to_schema_column_or_string(element): - if hasattr(element, "__clause_element__"): + if element is None: + return element + elif hasattr(element, "__clause_element__"): element = element.__clause_element__() if not isinstance(element, util.string_types + (ColumnElement,)): msg = "Element %r is not a string name or column element" @@ -2816,11 +2818,16 @@ class ColumnCollectionMixin(object): ) ) + def _col_expressions(self, table): + return [ + table.c[col] if isinstance(col, util.string_types) else col + for col in self._pending_colargs + ] + def _set_parent(self, table): - for col in self._pending_colargs: - if isinstance(col, util.string_types): - col = table.c[col] - self.columns.add(col) + for col in self._col_expressions(table): + if col is not None: + self.columns.add(col) class ColumnCollectionConstraint(ColumnCollectionMixin, Constraint): @@ -3616,8 +3623,7 @@ class Index(DialectKWArgs, ColumnCollectionMixin, SchemaItem): ) in coercions.expect_col_expression_collection( roles.DDLConstraintColumnRole, expressions ): - if add_element is not None: - columns.append(add_element) + columns.append(add_element) processed_expressions.append(expr) self.expressions = processed_expressions @@ -3655,11 +3661,12 @@ class Index(DialectKWArgs, ColumnCollectionMixin, SchemaItem): self.table = table table.indexes.add(self) + expressions = self.expressions + col_expressions = self._col_expressions(table) + assert len(expressions) == len(col_expressions) self.expressions = [ expr if isinstance(expr, ClauseElement) else colexpr - for expr, colexpr in util.zip_longest( - self.expressions, self.columns - ) + for expr, colexpr in zip(expressions, col_expressions) ] @property |