Skip to content

Commit

Permalink
fixed #339
Browse files Browse the repository at this point in the history
  • Loading branch information
terrymanu committed Aug 19, 2017
1 parent 244c730 commit 16d07c3
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 6 deletions.
1 change: 1 addition & 0 deletions RELEASE-NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertSelectWithInnerJoin">
<sql id="assertSelectWithInnerJoinAndRelatedWithTableAlias">
<sharding-rule value="tbl">
<data parameter="1000" expected="select_relation/SelectWithInnerJoin.xml" />
</sharding-rule>
</sql>
<sql id="assertSelectWithInnerJoinAndRelatedWithTableName">
<sharding-rule value="tbl">
<data parameter="1000" expected="select_relation/SelectWithInnerJoin.xml" />
</sharding-rule>
Expand Down
13 changes: 12 additions & 1 deletion sharding-jdbc-core/src/test/resources/parser/select_relation.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<asserts>
<assert id="assertSelectWithInnerJoin" parameters="1000">
<assert id="assertSelectWithInnerJoinAndRelatedWithTableAlias" parameters="1000">
<tables>
<table name="t_order" alias="o"/>
<table name="t_order_item" alias="i" />
Expand All @@ -11,6 +11,17 @@
</condition>
</conditions>
</assert>
<assert id="assertSelectWithInnerJoinAndRelatedWithTableName" parameters="1000">
<tables>
<table name="t_order" />
<table name="t_order_item" />
</tables>
<conditions>
<condition column-name="order_id" table-name="t_order" operator="EQUAL">
<value index="0" literal="1000" type="int" />
</condition>
</conditions>
</assert>
<assert id="assertSelectWithJoinUsing" parameters="1000">
<tables>
<table name="t_order" alias="o" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<sqls>
<sql id="assertSelectWithInnerJoin" value="SELECT i.* FROM t_order o INNER JOIN t_order_item i ON o.order_id = i.order_id WHERE o.order_id = %s" />
<sql id="assertSelectWithInnerJoinAndRelatedWithTableAlias" value="SELECT i.* FROM t_order o INNER JOIN t_order_item i ON o.order_id = i.order_id WHERE o.order_id = %s" />
<sql id="assertSelectWithInnerJoinAndRelatedWithTableName" value="SELECT t_order_item.* FROM t_order JOIN t_order_item ON t_order.order_id = t_order_item.order_id WHERE t_order.order_id = %s" />
<sql id="assertSelectWithJoinUsing" value="SELECT i.* FROM t_order o JOIN t_order_item i USING(order_id) WHERE o.order_id = %s" type="MySQL,PostgreSQL" />
</sqls>

0 comments on commit 16d07c3

Please sign in to comment.