diff options
| -rw-r--r-- | doc/build/changelog/unreleased_13/5353.rst | 10 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 3 | ||||
| -rw-r--r-- | test/sql/test_compiler.py | 35 |
3 files changed, 48 insertions, 0 deletions
diff --git a/doc/build/changelog/unreleased_13/5353.rst b/doc/build/changelog/unreleased_13/5353.rst new file mode 100644 index 000000000..39a5ba490 --- /dev/null +++ b/doc/build/changelog/unreleased_13/5353.rst @@ -0,0 +1,10 @@ +.. change:: + :tags: bug, sql + :tickets: 5353 + + Added :meth:`.Select.with_hint` output to the generic SQL string that is + produced when calling ``str()`` on a statement. Previously, this clause + would be omitted under the assumption that it was dialect specific. + The hint text is presented within brackets to indicate the rendering + of such hints varies among backends. + diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 8eae0ab7d..fc66ca517 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -3491,6 +3491,9 @@ class StrSQLCompiler(SQLCompiler): def visit_empty_set_expr(self, type_): return "SELECT 1 WHERE 1!=1" + def get_from_hint_text(self, table, text): + return "[%s]" % text + class DDLCompiler(Compiled): @util.memoized_property diff --git a/test/sql/test_compiler.py b/test/sql/test_compiler.py index efe4d08c5..20f31ba1e 100644 --- a/test/sql/test_compiler.py +++ b/test/sql/test_compiler.py @@ -3886,6 +3886,41 @@ class StringifySpecialTest(fixtures.TestBase): "'%s'" % value, ) + def test_with_hint_table(self): + stmt = ( + select([table1]) + .select_from( + table1.join(table2, table1.c.myid == table2.c.otherid) + ) + .with_hint(table1, "use some_hint") + ) + + # note that some dialects instead use the "with_select_hint" + # hook to put the 'hint' up front + eq_ignore_whitespace( + str(stmt), + "SELECT mytable.myid, mytable.name, mytable.description " + "FROM mytable [use some_hint] " + "JOIN myothertable ON mytable.myid = myothertable.otherid", + ) + + def test_with_hint_statement(self): + stmt = ( + select([table1]) + .select_from( + table1.join(table2, table1.c.myid == table2.c.otherid) + ) + .with_statement_hint("use some_hint") + ) + + eq_ignore_whitespace( + str(stmt), + "SELECT mytable.myid, mytable.name, mytable.description " + "FROM mytable " + "JOIN myothertable ON mytable.myid = myothertable.otherid " + "use some_hint", + ) + class KwargPropagationTest(fixtures.TestBase): @classmethod |
