diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index c5fccae9f018f..983025c5169ad 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -4,6 +4,7 @@ 1. [ISSUE #334](https://github.com/dangdangdotcom/sharding-jdbc/issues/334) 解析有函数的ORDER BY会将后面的ASC, DESC解析到OrderItem的name属性中 1. [ISSUE #335](https://github.com/dangdangdotcom/sharding-jdbc/issues/335) 支持GROUP BY + 自定义函数的SQL +1. [ISSUE #335](https://github.com/dangdangdotcom/sharding-jdbc/issues/339) 使用表全名关联的JOIN解析不正确 ## 1.5.1 diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/dql/select/AbstractSelectParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/dql/select/AbstractSelectParser.java index 8aaa36266c481..353fbc54bd9ac 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/dql/select/AbstractSelectParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/dql/select/AbstractSelectParser.java @@ -250,9 +250,9 @@ protected void parseJoinTable(final SelectStatement selectStatement) { parseTable(selectStatement); if (sqlParser.skipIfEqual(DefaultKeyword.ON)) { do { - parseTableCondition(sqlParser.getLexer().getCurrentToken().getEndPosition(), selectStatement); + parseTableCondition(selectStatement); sqlParser.accept(Symbol.EQ); - parseTableCondition(sqlParser.getLexer().getCurrentToken().getEndPosition() - sqlParser.getLexer().getCurrentToken().getLiterals().length(), selectStatement); + parseTableCondition(selectStatement); } while (sqlParser.skipIfEqual(DefaultKeyword.AND)); } else if (sqlParser.skipIfEqual(DefaultKeyword.USING)) { sqlParser.skipParentheses(); @@ -261,7 +261,8 @@ protected void parseJoinTable(final SelectStatement selectStatement) { } } - private void parseTableCondition(final int startPosition, final SelectStatement selectStatement) { + private void parseTableCondition(final SelectStatement selectStatement) { + int startPosition = sqlParser.getLexer().getCurrentToken().getEndPosition() - sqlParser.getLexer().getCurrentToken().getLiterals().length(); SQLExpression sqlExpression = sqlParser.parseExpression(); if (!(sqlExpression instanceof SQLPropertyExpression)) { return; diff --git a/sharding-jdbc-core/src/test/resources/integrate/assert/select_relation.xml b/sharding-jdbc-core/src/test/resources/integrate/assert/select_relation.xml index 284de1587ab9e..69116d857248f 100644 --- a/sharding-jdbc-core/src/test/resources/integrate/assert/select_relation.xml +++ b/sharding-jdbc-core/src/test/resources/integrate/assert/select_relation.xml @@ -1,6 +1,11 @@ - + + + + + + diff --git a/sharding-jdbc-core/src/test/resources/parser/select_relation.xml b/sharding-jdbc-core/src/test/resources/parser/select_relation.xml index 23bcb17fe2634..06200e0251665 100644 --- a/sharding-jdbc-core/src/test/resources/parser/select_relation.xml +++ b/sharding-jdbc-core/src/test/resources/parser/select_relation.xml @@ -1,6 +1,6 @@ - +
@@ -11,6 +11,17 @@ + + +
+
+ + + + + + +
diff --git a/sharding-jdbc-core/src/test/resources/sql/dql/select_relation.xml b/sharding-jdbc-core/src/test/resources/sql/dql/select_relation.xml index 30d1a9ea5fe76..6b8f01df6f256 100644 --- a/sharding-jdbc-core/src/test/resources/sql/dql/select_relation.xml +++ b/sharding-jdbc-core/src/test/resources/sql/dql/select_relation.xml @@ -1,5 +1,6 @@ - + +