diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-12-02 17:00:10 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-12-02 18:31:36 -0500 |
| commit | 96db7cdd53ee9004be66545989b4ac5632bb7ccf (patch) | |
| tree | 92f3947dd30a15d2dcb3931da7606ab7a08806a7 /lib/sqlalchemy/dialects | |
| parent | 7a5a4c14545f4d86d9fb49a2ef50c74119e919d3 (diff) | |
| download | sqlalchemy-96db7cdd53ee9004be66545989b4ac5632bb7ccf.tar.gz | |
add spaces, leading underscore to oracle checks
Expand the test suite from #8708 which unfortunately did
not exercise the bound parameter codepaths completely.
Continued fixes for Oracle fix :ticket:`8708` released in 1.4.43 where
bound parameter names that start with underscores, which are disallowed by
Oracle, were still not being properly escaped in all circumstances.
Fixes: #8708
Change-Id: Ic389c09bd7c53b773e5de35f1a18ef20769b92a7
Diffstat (limited to 'lib/sqlalchemy/dialects')
| -rw-r--r-- | lib/sqlalchemy/dialects/oracle/cx_oracle.py | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/sqlalchemy/dialects/oracle/cx_oracle.py b/lib/sqlalchemy/dialects/oracle/cx_oracle.py index 0be309cd4..8f80aed65 100644 --- a/lib/sqlalchemy/dialects/oracle/cx_oracle.py +++ b/lib/sqlalchemy/dialects/oracle/cx_oracle.py @@ -445,13 +445,13 @@ from ...sql._typing import is_sql_compiler _CX_ORACLE_MAGIC_LOB_SIZE = 131072 -_ORACLE_BIND_TRANSLATE_RE = re.compile(r"[%\(\):\[\]\.\/\?]") +_ORACLE_BIND_TRANSLATE_RE = re.compile(r"[%\(\):\[\]\.\/\? ]") # Oracle bind names can't start with digits or underscores. # currently we rely upon Oracle-specific quoting of bind names in most cases. # however for expanding params, the escape chars are used. # see #8708 -_ORACLE_BIND_TRANSLATE_CHARS = dict(zip("%():[]./?", "PAZCCCCCCC")) +_ORACLE_BIND_TRANSLATE_CHARS = dict(zip("%():[]./? ", "PAZCCCCCCCC")) class _OracleInteger(sqltypes.Integer): @@ -729,11 +729,11 @@ class OracleCompiler_cx_oracle(OracleCompiler): lambda m: _ORACLE_BIND_TRANSLATE_CHARS[m.group(0)], name, ) - if new_name[0].isdigit(): + if new_name[0].isdigit() or new_name[0] == "_": new_name = "D" + new_name kw["escaped_from"] = name name = new_name - elif name[0].isdigit(): + elif name[0].isdigit() or name[0] == "_": new_name = "D" + name kw["escaped_from"] = name name = new_name |
