summaryrefslogtreecommitdiff
path: root/alembic
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2023-05-03 13:19:07 +0000
committerGerrit Code Review <gerrit@bbpush.zzzcomputing.com>2023-05-03 13:19:07 +0000
commit9f70100b639616dbd307c6d7977f15494538c116 (patch)
tree8bbe3e18a14087a4ae310c1b8ed49739ec54badb /alembic
parent3336e3719184e35487d7ff42c5fd90f3b8babc27 (diff)
parentac0785dc3e56ebe9fc8caa78cd9c564d5e796da3 (diff)
downloadalembic-9f70100b639616dbd307c6d7977f15494538c116.tar.gz
Merge "Fix ExcludeConstraint with func." into main
Diffstat (limited to 'alembic')
-rw-r--r--alembic/ddl/postgresql.py51
1 files changed, 22 insertions, 29 deletions
diff --git a/alembic/ddl/postgresql.py b/alembic/ddl/postgresql.py
index 5fb981d..cc0488b 100644
--- a/alembic/ddl/postgresql.py
+++ b/alembic/ddl/postgresql.py
@@ -25,6 +25,7 @@ from sqlalchemy.sql import operators
from sqlalchemy.sql.elements import ColumnClause
from sqlalchemy.sql.elements import TextClause
from sqlalchemy.sql.elements import UnaryExpression
+from sqlalchemy.sql.functions import FunctionElement
from sqlalchemy.types import NULLTYPE
from .base import alter_column
@@ -662,22 +663,15 @@ def _exclude_constraint(
("name", render._render_gen_name(autogen_context, constraint.name))
)
- if alter:
+ def do_expr_where_opts():
args = [
- repr(render._render_gen_name(autogen_context, constraint.name))
+ "(%s, %r)"
+ % (
+ _render_potential_column(sqltext, autogen_context),
+ opstring,
+ )
+ for sqltext, name, opstring in constraint._render_exprs # type:ignore[attr-defined] # noqa
]
- if not has_batch:
- args += [repr(render._ident(constraint.table.name))]
- args.extend(
- [
- "(%s, %r)"
- % (
- _render_potential_column(sqltext, autogen_context),
- opstring,
- )
- for sqltext, name, opstring in constraint._render_exprs # type:ignore[attr-defined] # noqa
- ]
- )
if constraint.where is not None:
args.append(
"where=%s"
@@ -686,24 +680,21 @@ def _exclude_constraint(
)
)
args.extend(["%s=%r" % (k, v) for k, v in opts])
+ return args
+
+ if alter:
+ args = [
+ repr(render._render_gen_name(autogen_context, constraint.name))
+ ]
+ if not has_batch:
+ args += [repr(render._ident(constraint.table.name))]
+ args.extend(do_expr_where_opts())
return "%(prefix)screate_exclude_constraint(%(args)s)" % {
"prefix": render._alembic_autogenerate_prefix(autogen_context),
"args": ", ".join(args),
}
else:
- args = [
- "(%s, %r)"
- % (_render_potential_column(sqltext, autogen_context), opstring)
- for sqltext, name, opstring in constraint._render_exprs
- ]
- if constraint.where is not None:
- args.append(
- "where=%s"
- % render._render_potential_expr(
- constraint.where, autogen_context
- )
- )
- args.extend(["%s=%r" % (k, v) for k, v in opts])
+ args = do_expr_where_opts()
return "%(prefix)sExcludeConstraint(%(args)s)" % {
"prefix": _postgresql_autogenerate_prefix(autogen_context),
"args": ", ".join(args),
@@ -711,7 +702,7 @@ def _exclude_constraint(
def _render_potential_column(
- value: Union[ColumnClause, Column, TextClause],
+ value: Union[ColumnClause, Column, TextClause, FunctionElement],
autogen_context: AutogenContext,
) -> str:
if isinstance(value, ColumnClause):
@@ -727,5 +718,7 @@ def _render_potential_column(
}
else:
return render._render_potential_expr(
- value, autogen_context, wrap_in_text=isinstance(value, TextClause)
+ value,
+ autogen_context,
+ wrap_in_text=isinstance(value, (TextClause, FunctionElement)),
)