summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/schema.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/sql/schema.py')
-rw-r--r--lib/sqlalchemy/sql/schema.py27
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