Closed CatInRl closed 2 months ago
The reason i can find is sql parse engine's parse result SqlStatement. org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement#sqlStatement
sqlStatement = sqlParserEngine.parse(sql, true);
More precisely is SQLStatement
's InsertStatement.values
's InsertValuesSegment.values
's FunctionSegment
's parameters.
Some functions's parse result has no parameters, thus no second parameter pass to JDBC parameter execute.
In my test, maybe all customKeyword
has problems.
I have test SUBSTRING
, SUBSTR
, TRIM
, all of these has same exception.
And I randomly test function FORMAT
, that's work.
Currently I have no knowledge of ANTLR and can't understand how SqlParser works.
Bug Report
For English only, other languages will not accept.
Before report a bug, make sure you have:
Please pay attention on issues you submitted, because we maybe need more details. If no response anymore and we cannot reproduce it on current information, we will close it.
Please answer these questions before submitting your issue. Thanks!
Which version of ShardingSphere did you use?
5.2.0
Which project did you use? ShardingSphere-JDBC or ShardingSphere-Proxy?
ShardingSphere-JDBC
Expected behavior
insert success and return insert count
Actual behavior
throw exception below:
Reason analyze (If you can)
ShardingSphere-JDBC doesn't handle parameters in sql function well, maybe.
Steps to reproduce the behavior, such as: SQL to execute, sharding rule configuration, when exception occur etc.
Example codes for reproduce this issue (such as a github link).
https://github.com/CatInRl/sharding-jdbc-demo
curl "127.0.0.1:8080/order/new?orderName=order1&orderId=1"