From e81bc1f098ea40cf38ec4e4007c11c7f3ffc9712 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 26 Dec 2020 11:16:51 -0500 Subject: narrow the check for double-paren exprs in mysql create_index Fixed regression from SQLAlchemy 1.3.20 caused by the fix for :ticket:`5462` which adds double-parenthesis for MySQL functional expressions in indexes, as is required by the backend, this inadvertently extended to include arbitrary :func:`_sql.text` expressions as well as Alembic's internal textual component, which are required by Alembic for arbitrary index expressions which don't imply double parenthesis. The check has been narrowed to include only binary/ unary/functional expressions directly. Fixes: #5800 Change-Id: I40f83c6f9dd04b984d0c86eba632a588570709a1 --- lib/sqlalchemy/dialects/mysql/base.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'lib/sqlalchemy/dialects') diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index f90d961d8..7a4d3261f 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -978,6 +978,7 @@ from ...engine import reflection from ...sql import coercions from ...sql import compiler from ...sql import elements +from ...sql import functions from ...sql import operators from ...sql import roles from ...sql import util as sql_util @@ -2027,12 +2028,13 @@ class MySQLDDLCompiler(compiler.DDLCompiler): self.sql_compiler.process( elements.Grouping(expr) if ( - not isinstance(expr, elements.ColumnClause) - and ( - not isinstance(expr, elements.UnaryExpression) - or expr.modifier + isinstance(expr, elements.BinaryExpression) + or ( + isinstance(expr, elements.UnaryExpression) + and expr.modifier not in (operators.desc_op, operators.asc_op) ) + or isinstance(expr, functions.FunctionElement) ) else expr, include_table=False, -- cgit v1.2.1