bugfix: Fixed OceanBase parameter binding issue #64
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
When using oceanbase-sqlalchemy to connect to OceanBase Oracle tenant databases, queries that use reserved words as parameter names (e.g., :start, :end) fail with:
OBE-01036: illegal variable name/number
Issue:
Error Example:
❌ OceanBase error: OBE-01036
Generated SQL:
WHERE date BETWEEN :"start" AND :end
Root Cause
This is a database kernel-level design difference:
SQLAlchemy's Oracle dialect automatically adds quotes to reserved word parameter names during SQL compilation (via OracleCompiler_cx_oracle.bindparam_string), but OceanBase's database kernel does not support quoted parameter names.
Solution
Override bindparam_string in OceanBaseCompiler_cx_oracle to skip Oracle's quoting logic by directly calling the parent OracleCompiler.bindparam_string, avoiding quotes on parameter names.
Key Changes:
Solution Description