diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2020-12-26 11:16:51 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2020-12-26 11:16:51 -0500 |
| commit | e81bc1f098ea40cf38ec4e4007c11c7f3ffc9712 (patch) | |
| tree | 55f5d0663d3239182fc01605c2c144bb54657127 /test/dialect/mysql | |
| parent | 0cc8a08262f6b92746a280387282d55beb24fa9d (diff) | |
| download | sqlalchemy-e81bc1f098ea40cf38ec4e4007c11c7f3ffc9712.tar.gz | |
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
Diffstat (limited to 'test/dialect/mysql')
| -rw-r--r-- | test/dialect/mysql/test_compiler.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/test/dialect/mysql/test_compiler.py b/test/dialect/mysql/test_compiler.py index 7bddebd17..2993f96b8 100644 --- a/test/dialect/mysql/test_compiler.py +++ b/test/dialect/mysql/test_compiler.py @@ -40,6 +40,7 @@ from sqlalchemy import String from sqlalchemy import Table from sqlalchemy import testing from sqlalchemy import TEXT +from sqlalchemy import text from sqlalchemy import TIME from sqlalchemy import Time from sqlalchemy import TIMESTAMP @@ -99,6 +100,45 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL): "CREATE FULLTEXT INDEX test_idx1 " "ON testtbl (data(10))", ) + def test_create_index_with_text(self): + m = MetaData() + tbl = Table("testtbl", m, Column("data", String(255))) + idx = Index("test_idx1", text("created_at desc"), _table=tbl) + + self.assert_compile( + schema.CreateIndex(idx), + "CREATE INDEX test_idx1 ON testtbl (created_at desc)", + ) + + def test_create_index_with_arbitrary_column_element(self): + from sqlalchemy.ext.compiler import compiles + + class _textual_index_element(sql.ColumnElement): + """alembic's wrapper""" + + __visit_name__ = "_textual_idx_element" + + def __init__(self, table, text): + self.table = table + self.text = text + + @compiles(_textual_index_element) + def _render_textual_index_column(element, compiler, **kw): + return compiler.process(element.text, **kw) + + m = MetaData() + tbl = Table("testtbl", m, Column("data", String(255))) + idx = Index( + "test_idx1", + _textual_index_element(tbl, text("created_at desc")), + _table=tbl, + ) + + self.assert_compile( + schema.CreateIndex(idx), + "CREATE INDEX test_idx1 ON testtbl (created_at desc)", + ) + def test_create_index_with_parser(self): m = MetaData() tbl = Table("testtbl", m, Column("data", String(255))) |
