mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-05-18 06:32:08 -04:00
Render table hints in generic SQL
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. Fixes: #5353 References: #4667 Change-Id: I01d97d6baa993e495519036ec7ecd5ae62856c16
This commit is contained in:
+10
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user