From f6306921353b94ed2ffc36b3d04e0ba4284f4898 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 7 Apr 2021 10:56:12 -0400 Subject: Expand reg for schema translate map for most special characters Fixed regression where usage of a token in the :paramref:`_engine.Connection.execution_options.schema_translate_map` dictionary which contained special characters such as braces would fail to be substituted properly. Use of square bracket characters ``[]`` is now explicitly disallowed as these are used as a delimiter character in the current implementation. Fixes: #6216 Change-Id: I7ccfc2292b17340054cedf485ed1adf3119b96c8 --- lib/sqlalchemy/sql/compiler.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'lib/sqlalchemy/sql') diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 61dfbeb07..9aa747056 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -4661,6 +4661,11 @@ class IdentifierPreparer(object): def symbol_getter(obj): name = obj.schema if name in schema_translate_map and obj._use_schema_map: + if name is not None and ("[" in name or "]" in name): + raise exc.CompileError( + "Square bracket characters ([]) not supported " + "in schema translate name '%s'" % name + ) return quoted_name( "[SCHEMA_%s]" % (name or "_none"), quote=False ) @@ -4688,7 +4693,7 @@ class IdentifierPreparer(object): ) return self.quote(effective_schema) - return re.sub(r"(\[SCHEMA_([\w\d_]+)\])", replace, statement) + return re.sub(r"(\[SCHEMA_([^\]]+)\])", replace, statement) def _escape_identifier(self, value): """Escape an identifier. -- cgit v1.2.1