Loading sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/limit/Limit.java +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit; import com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingException; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; Loading @@ -33,6 +34,7 @@ import static com.dangdang.ddframe.rdb.sharding.util.NumberUtil.roundHalfUp; * @author zhangliang * @author caohao */ @NoArgsConstructor @AllArgsConstructor @Getter @Setter Loading sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleParser.java +4 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.lexer.dialect.oracle.OracleKeyw import com.dangdang.ddframe.rdb.sharding.parsing.lexer.dialect.oracle.OracleLexer; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Symbol; import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit.Limit; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit.OffsetLimit; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit.RowCountLimit; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.selectitem.SelectItem; Loading Loading @@ -68,6 +69,9 @@ public final class OracleParser extends SQLParser { Symbol symbol = (Symbol) getLexer().getCurrentToken().getType(); getLexer().nextToken(); SQLExpression sqlExpression = parseExpression(selectStatement); if (null == selectStatement.getLimit()) { selectStatement.setLimit(new Limit()); } if (Symbol.LT == symbol || Symbol.LT_EQ == symbol) { if (sqlExpression instanceof SQLNumberExpression) { selectStatement.getLimit().setRowCountLimit(new RowCountLimit(((SQLNumberExpression) sqlExpression).getNumber().intValue(), -1)); Loading sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleSelectParser.java +11 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.oracle; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.dialect.oracle.OracleKeyword; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Assist; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Symbol; import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser; Loading Loading @@ -191,11 +192,16 @@ public class OracleSelectParser extends AbstractSelectParser { @Override public final void parseTable() { if (getSqlParser().equalAny(Symbol.LEFT_PAREN)) { throw new UnsupportedOperationException("Cannot support subquery"); if (getSqlParser().skipIfEqual(Symbol.LEFT_PAREN)) { if (!getSelectStatement().getTables().isEmpty()) { throw new UnsupportedOperationException("Cannot support subquery for nested tables."); } getSelectStatement().setContainStar(false); parse(); getSqlParser().accept(Symbol.RIGHT_PAREN); if (getSqlParser().equalAny(DefaultKeyword.WHERE, Assist.END)) { return; } if (getSqlParser().equalAny(DefaultKeyword.SELECT)) { throw new SQLParsingUnsupportedException(getSqlParser().getLexer().getCurrentToken().getType()); } if (getSqlParser().skipIfEqual(OracleKeyword.ONLY)) { getSqlParser().skipIfEqual(Symbol.LEFT_PAREN); Loading sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/select/AbstractSelectParser.java +8 −1 Original line number Diff line number Diff line Loading @@ -64,6 +64,8 @@ public abstract class AbstractSelectParser implements SQLStatementParser { @Setter private int parametersIndex; private boolean appendDerivedColumnsFlag; public AbstractSelectParser(final SQLParser sqlParser) { this.sqlParser = sqlParser; selectStatement = new SelectStatement(); Loading Loading @@ -273,7 +275,8 @@ public abstract class AbstractSelectParser implements SQLStatementParser { if (!selectStatement.getTables().isEmpty()) { throw new UnsupportedOperationException("Cannot support subquery for nested tables."); } query(); selectStatement.setContainStar(false); parse(); sqlParser.accept(Symbol.RIGHT_PAREN); if (sqlParser.equalAny(DefaultKeyword.WHERE, Assist.END)) { return; Loading Loading @@ -326,6 +329,10 @@ public abstract class AbstractSelectParser implements SQLStatementParser { } private void appendDerivedColumns() { if (appendDerivedColumnsFlag) { return; } appendDerivedColumnsFlag = true; ItemsToken itemsToken = new ItemsToken(selectStatement.getSelectListLastPosition()); appendAvgDerivedColumns(itemsToken); appendDerivedOrderColumns(itemsToken, selectStatement.getOrderByList(), ORDER_BY_DERIVED_ALIAS); Loading sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/AbstractDBUnitTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -18,8 +18,8 @@ package com.dangdang.ddframe.rdb.integrate; import com.dangdang.ddframe.rdb.integrate.sql.DatabaseTestSQL; import com.dangdang.ddframe.rdb.integrate.util.DataBaseEnvironment; import com.dangdang.ddframe.rdb.integrate.util.DBUnitUtil; import com.dangdang.ddframe.rdb.integrate.util.DataBaseEnvironment; import com.dangdang.ddframe.rdb.integrate.util.ShardingJdbcDatabaseTester; import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType; import lombok.AccessLevel; Loading Loading
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/limit/Limit.java +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit; import com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingException; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; Loading @@ -33,6 +34,7 @@ import static com.dangdang.ddframe.rdb.sharding.util.NumberUtil.roundHalfUp; * @author zhangliang * @author caohao */ @NoArgsConstructor @AllArgsConstructor @Getter @Setter Loading
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleParser.java +4 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.lexer.dialect.oracle.OracleKeyw import com.dangdang.ddframe.rdb.sharding.parsing.lexer.dialect.oracle.OracleLexer; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Symbol; import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit.Limit; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit.OffsetLimit; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.limit.RowCountLimit; import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.selectitem.SelectItem; Loading Loading @@ -68,6 +69,9 @@ public final class OracleParser extends SQLParser { Symbol symbol = (Symbol) getLexer().getCurrentToken().getType(); getLexer().nextToken(); SQLExpression sqlExpression = parseExpression(selectStatement); if (null == selectStatement.getLimit()) { selectStatement.setLimit(new Limit()); } if (Symbol.LT == symbol || Symbol.LT_EQ == symbol) { if (sqlExpression instanceof SQLNumberExpression) { selectStatement.getLimit().setRowCountLimit(new RowCountLimit(((SQLNumberExpression) sqlExpression).getNumber().intValue(), -1)); Loading
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleSelectParser.java +11 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.oracle; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.dialect.oracle.OracleKeyword; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Assist; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Symbol; import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser; Loading Loading @@ -191,11 +192,16 @@ public class OracleSelectParser extends AbstractSelectParser { @Override public final void parseTable() { if (getSqlParser().equalAny(Symbol.LEFT_PAREN)) { throw new UnsupportedOperationException("Cannot support subquery"); if (getSqlParser().skipIfEqual(Symbol.LEFT_PAREN)) { if (!getSelectStatement().getTables().isEmpty()) { throw new UnsupportedOperationException("Cannot support subquery for nested tables."); } getSelectStatement().setContainStar(false); parse(); getSqlParser().accept(Symbol.RIGHT_PAREN); if (getSqlParser().equalAny(DefaultKeyword.WHERE, Assist.END)) { return; } if (getSqlParser().equalAny(DefaultKeyword.SELECT)) { throw new SQLParsingUnsupportedException(getSqlParser().getLexer().getCurrentToken().getType()); } if (getSqlParser().skipIfEqual(OracleKeyword.ONLY)) { getSqlParser().skipIfEqual(Symbol.LEFT_PAREN); Loading
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/select/AbstractSelectParser.java +8 −1 Original line number Diff line number Diff line Loading @@ -64,6 +64,8 @@ public abstract class AbstractSelectParser implements SQLStatementParser { @Setter private int parametersIndex; private boolean appendDerivedColumnsFlag; public AbstractSelectParser(final SQLParser sqlParser) { this.sqlParser = sqlParser; selectStatement = new SelectStatement(); Loading Loading @@ -273,7 +275,8 @@ public abstract class AbstractSelectParser implements SQLStatementParser { if (!selectStatement.getTables().isEmpty()) { throw new UnsupportedOperationException("Cannot support subquery for nested tables."); } query(); selectStatement.setContainStar(false); parse(); sqlParser.accept(Symbol.RIGHT_PAREN); if (sqlParser.equalAny(DefaultKeyword.WHERE, Assist.END)) { return; Loading Loading @@ -326,6 +329,10 @@ public abstract class AbstractSelectParser implements SQLStatementParser { } private void appendDerivedColumns() { if (appendDerivedColumnsFlag) { return; } appendDerivedColumnsFlag = true; ItemsToken itemsToken = new ItemsToken(selectStatement.getSelectListLastPosition()); appendAvgDerivedColumns(itemsToken); appendDerivedOrderColumns(itemsToken, selectStatement.getOrderByList(), ORDER_BY_DERIVED_ALIAS); Loading
sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/AbstractDBUnitTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -18,8 +18,8 @@ package com.dangdang.ddframe.rdb.integrate; import com.dangdang.ddframe.rdb.integrate.sql.DatabaseTestSQL; import com.dangdang.ddframe.rdb.integrate.util.DataBaseEnvironment; import com.dangdang.ddframe.rdb.integrate.util.DBUnitUtil; import com.dangdang.ddframe.rdb.integrate.util.DataBaseEnvironment; import com.dangdang.ddframe.rdb.integrate.util.ShardingJdbcDatabaseTester; import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType; import lombok.AccessLevel; Loading