征文|Sharding-JDBC 4.1.1:when the column name is ‘‘ of SQL query statement

状态:原创

my origin isuue:Sharding-JDBC 4.1.1:Error caused by column name is ‘’ of SQL query statement · Issue #10954 · apache/shardingsphere · GitHub

Expected behavior

Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:658)
at org.apache.shardingsphere.sql.parser.sql.util.SQLUtil.getParenthesesOffset(SQLUtil.java:98)
at org.apache.shardingsphere.sql.parser.sql.util.SQLUtil.getExpressionWithoutOutsideParentheses(SQLUtil.java:92)
at org.apache.shardingsphere.sql.parser.sql.segment.dml.item.ExpressionProjectionSegment.(ExpressionProjectionSegment.java:47)
at org.apache.shardingsphere.sql.parser.mysql.visitor.impl.MySQLDMLVisitor.createProjection(MySQLDMLVisitor.java:474)
at org.apache.shardingsphere.sql.parser.mysql.visitor.impl.MySQLDMLVisitor.visitProjection(MySQLDMLVisitor.java:434)
at org.apache.shardingsphere.sql.parser.mysql.visitor.impl.MySQLDMLVisitor.visitProjection(MySQLDMLVisitor.java:127)
at org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser$ProjectionContext.accept(MySQLStatementParser.java:5370)
at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)

Steps to reproduce the behavior, such as: SQL to execute, sharding rule configuration, when exception occur etc.

This error in shardingsphere-sql-parser-statement-4.1.1.jar.

This class in org.apache.shardingsphere.sql.parser.sql.util.SQLUtil, the method is getParenthesesOffset.

This special case needs to be addressed.

This issue has been addressed in 5.0.0-beta.

​So maybe you can consider 5.0.0-beta version for your product env, because version 4. X is no longer maintained.In 4.1.1 version,you can modify the source code of the method in version 4.1.1 and directly introduce the project to replace the method in the jar package.

Complete code there for judge null value

private static int getParenthesesOffset(final String value) {
int result = 0;
if (Strings.isNullOrEmpty(value)) {
return result;
}
while (Paren.PARENTHESES.getLeftParen() == value.charAt(result)) {
result++;
}
return result;
}

5 个赞
京ICP备2021015875号