upgrade_ops.ops.append(modify_table_ops)
-def _make_index(params: Dict[str, Any], conn_table: "Table") -> "Index":
+def _make_index(
+ params: Dict[str, Any], conn_table: "Table"
+) -> Optional["Index"]:
+ exprs = []
+ for col_name in params["column_names"]:
+ if col_name is None:
+ util.warn(
+ "Skipping reflected expression-based "
+ f"index {params['name']!r}"
+ )
+ return None
+ else:
+ item = conn_table.c[col_name]
+ exprs.append(item)
ix = sa_schema.Index(
- params["name"],
- *[conn_table.c[cname] for cname in params["column_names"]],
- unique=params["unique"],
- _table=conn_table,
+ params["name"], *exprs, unique=params["unique"], _table=conn_table
)
if "duplicates_constraint" in params:
ix.info["duplicates_constraint"] = params["duplicates_constraint"]
)
conn_indexes = set( # type:ignore[assignment]
- _make_index(ix, conn_table) for ix in conn_indexes
+ index
+ for index in (_make_index(ix, conn_table) for ix in conn_indexes)
+ if index is not None
)
# 2a. if the dialect dupes unique indexes as unique constraints
while isinstance(expr, UnaryExpression):
expr = expr.element
if not isinstance(expr, Column):
+ if sqla_compat.sqla_2:
+ msg = ""
+ else:
+ msg = "; not supported by SQLAlchemy reflection"
util.warn(
- "autogenerate skipping functional index %s; "
- "not supported by SQLAlchemy reflection" % idx.name
+ "autogenerate skipping functional index "
+ f"{idx.name!r}{msg}"
)
metadata_indexes.discard(idx)
return exclusions.closed()
+ @property
+ def materialized_views(self):
+ """needed for sqlalchemy compat"""
+ return exclusions.closed()
+
@property
def unique_constraint_reflection(self):
def doesnt_have_check_uq_constraints(config):
eq_(diffs[0][1].name, "uq_name")
eq_(len(diffs), 1)
+ def _functional_index_warn(self):
+ return (r"Skip.*refl",)
+
def test_functional_ix_one(self):
m1 = MetaData()
m2 = MetaData()
)
Index("email_idx", func.lower(t2.c.email), unique=True)
- with assertions.expect_warnings(
- "Skipped unsupported reflection",
- "autogenerate skipping functional index",
- ):
+ with assertions.expect_warnings(*self._functional_index_warn()):
diffs = self._fixture(m1, m2)
eq_(diffs, [])
unique=True,
)
- with assertions.expect_warnings(
- "Skipped unsupported reflection",
- "autogenerate skipping functional index",
- ):
+ with assertions.expect_warnings(*self._functional_index_warn()):
diffs = self._fixture(m1, m2)
eq_(diffs, [])