summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/sql')
-rw-r--r--lib/sqlalchemy/sql/ddl.py4
-rw-r--r--lib/sqlalchemy/sql/elements.py14
-rw-r--r--lib/sqlalchemy/sql/schema.py2
3 files changed, 18 insertions, 2 deletions
diff --git a/lib/sqlalchemy/sql/ddl.py b/lib/sqlalchemy/sql/ddl.py
index 3bd831292..f1012292b 100644
--- a/lib/sqlalchemy/sql/ddl.py
+++ b/lib/sqlalchemy/sql/ddl.py
@@ -373,6 +373,10 @@ class _CreateDropBase(DDLElement):
self.element = element
self.bind = bind
+ @property
+ def stringify_dialect(self):
+ return self.element.create_drop_stringify_dialect
+
def _create_rule_disable(self, compiler):
"""Allow disable of _create_rule using a callable.
diff --git a/lib/sqlalchemy/sql/elements.py b/lib/sqlalchemy/sql/elements.py
index 03476633a..86611baeb 100644
--- a/lib/sqlalchemy/sql/elements.py
+++ b/lib/sqlalchemy/sql/elements.py
@@ -199,6 +199,9 @@ class ClauseElement(
"""
supports_execution = False
+
+ stringify_dialect = "default"
+
_from_objects = []
bind = None
description = None
@@ -435,6 +438,7 @@ class ClauseElement(
return self
@util.preload_module("sqlalchemy.engine.default")
+ @util.preload_module("sqlalchemy.engine.url")
def compile(self, bind=None, dialect=None, **kw):
"""Compile this SQL expression.
@@ -482,14 +486,20 @@ class ClauseElement(
"""
- default = util.preloaded.engine_default
if not dialect:
if bind:
dialect = bind.dialect
elif self.bind:
dialect = self.bind.dialect
else:
- dialect = default.StrCompileDialect()
+ if self.stringify_dialect == "default":
+ default = util.preloaded.engine_default
+ dialect = default.StrCompileDialect()
+ else:
+ url = util.preloaded.engine_url
+ dialect = url.URL.create(
+ self.stringify_dialect
+ ).get_dialect()()
return self._compiler(dialect, **kw)
diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py
index ab635cd56..98ea8648a 100644
--- a/lib/sqlalchemy/sql/schema.py
+++ b/lib/sqlalchemy/sql/schema.py
@@ -100,6 +100,8 @@ class SchemaItem(SchemaEventTarget, visitors.Visitable):
__visit_name__ = "schema_item"
+ create_drop_stringify_dialect = "default"
+
def _init_items(self, *args, **kw):
"""Initialize the list of child items for this SchemaItem."""
for item in args: