Loading sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/limit/Limit.java +14 −5 Original line number Diff line number Diff line Loading @@ -20,7 +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.RequiredArgsConstructor; import lombok.Setter; import lombok.ToString; Loading @@ -34,22 +34,26 @@ import static com.dangdang.ddframe.rdb.sharding.util.NumberUtil.roundHalfUp; * @author zhangliang * @author caohao */ @NoArgsConstructor @RequiredArgsConstructor @AllArgsConstructor @Getter @Setter @ToString public final class Limit { private final boolean rowCountRewriteFlag; private OffsetLimit offsetLimit; private RowCountLimit rowCountLimit; public Limit(final RowCountLimit rowCount) { public Limit(final boolean rowCountRewriteFlag, final RowCountLimit rowCount) { this.rowCountRewriteFlag = rowCountRewriteFlag; this.rowCountLimit = rowCount; } public Limit(final OffsetLimit offsetLimit) { public Limit(final boolean rowCountRewriteFlag, final OffsetLimit offsetLimit) { this.rowCountRewriteFlag = rowCountRewriteFlag; this.offsetLimit = offsetLimit; } Loading Loading @@ -102,7 +106,12 @@ public final class Limit { private void rewrite(final List<Object> parameters) { int rewriteOffset = 0; int rewriteRowCount = null == rowCountLimit ? -1 : getOffset() + rowCountLimit.getRowCount(); int rewriteRowCount; if (rowCountRewriteFlag) { rewriteRowCount = null == rowCountLimit ? -1 : getOffset() + rowCountLimit.getRowCount(); } else { rewriteRowCount = rowCountLimit.getRowCount(); } if (null != offsetLimit && offsetLimit.getOffsetParameterIndex() > -1) { parameters.set(offsetLimit.getOffsetParameterIndex(), rewriteOffset); } Loading sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLParser.java +3 −3 Original line number Diff line number Diff line Loading @@ -77,7 +77,7 @@ public final class MySQLParser extends SQLParser { if (!isParameterForValue) { sqlStatement.getSqlTokens().add(new RowCountLimitToken(valueBeginPosition, value)); } return new Limit(new RowCountLimit(value, valueIndex)); return new Limit(true, new RowCountLimit(value, valueIndex)); } private Limit getLimitWithComma( Loading @@ -104,7 +104,7 @@ public final class MySQLParser extends SQLParser { if (!isParameterForRowCount) { sqlStatement.getSqlTokens().add(new RowCountLimitToken(rowCountBeginPosition, rowCount)); } return new Limit(new OffsetLimit(value, valueIndex), new RowCountLimit(rowCount, rowCountIndex)); return new Limit(true, new OffsetLimit(value, valueIndex), new RowCountLimit(rowCount, rowCountIndex)); } private Limit getLimitWithOffset( Loading @@ -131,6 +131,6 @@ public final class MySQLParser extends SQLParser { if (!isParameterForValue) { sqlStatement.getSqlTokens().add(new RowCountLimitToken(valueBeginPosition, value)); } return new Limit(new OffsetLimit(offset, offsetIndex), new RowCountLimit(value, valueIndex)); return new Limit(true, new OffsetLimit(offset, offsetIndex), new RowCountLimit(value, valueIndex)); } } sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleParser.java +1 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ public final class OracleParser extends SQLParser { getLexer().nextToken(); SQLExpression sqlExpression = parseExpression(selectStatement); if (null == selectStatement.getLimit()) { selectStatement.setLimit(new Limit()); selectStatement.setLimit(new Limit(false)); } if (Symbol.LT == symbol || Symbol.LT_EQ == symbol) { if (sqlExpression instanceof SQLNumberExpression) { Loading sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/postgresql/PostgreSQLSelectParser.java +3 −3 Original line number Diff line number Diff line Loading @@ -134,11 +134,11 @@ public class PostgreSQLSelectParser extends AbstractSelectParser { private void setLimit(final Optional<OffsetLimit> offsetLimit, final Optional<RowCountLimit> rowCountLimit) { if (offsetLimit.isPresent() && rowCountLimit.isPresent()) { getSelectStatement().setLimit(new Limit(offsetLimit.get(), rowCountLimit.get())); getSelectStatement().setLimit(new Limit(true, offsetLimit.get(), rowCountLimit.get())); } else if (offsetLimit.isPresent()) { getSelectStatement().setLimit(new Limit(offsetLimit.get())); getSelectStatement().setLimit(new Limit(true, offsetLimit.get())); } else if (rowCountLimit.isPresent()) { getSelectStatement().setLimit(new Limit(rowCountLimit.get())); getSelectStatement().setLimit(new Limit(true, rowCountLimit.get())); } } Loading sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/sqlserver/SQLServerParser.java +2 −2 Original line number Diff line number Diff line Loading @@ -109,9 +109,9 @@ public final class SQLServerParser extends SQLParser { } getLexer().nextToken(); getLexer().nextToken(); limit = new Limit(new OffsetLimit(offset, offsetIndex), new RowCountLimit(rowCount, rowCountIndex)); limit = new Limit(true, new OffsetLimit(offset, offsetIndex), new RowCountLimit(rowCount, rowCountIndex)); } else { limit = new Limit(new OffsetLimit(offset, offsetIndex)); limit = new Limit(true, new OffsetLimit(offset, offsetIndex)); } selectStatement.setLimit(limit); } Loading Loading
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/limit/Limit.java +14 −5 Original line number Diff line number Diff line Loading @@ -20,7 +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.RequiredArgsConstructor; import lombok.Setter; import lombok.ToString; Loading @@ -34,22 +34,26 @@ import static com.dangdang.ddframe.rdb.sharding.util.NumberUtil.roundHalfUp; * @author zhangliang * @author caohao */ @NoArgsConstructor @RequiredArgsConstructor @AllArgsConstructor @Getter @Setter @ToString public final class Limit { private final boolean rowCountRewriteFlag; private OffsetLimit offsetLimit; private RowCountLimit rowCountLimit; public Limit(final RowCountLimit rowCount) { public Limit(final boolean rowCountRewriteFlag, final RowCountLimit rowCount) { this.rowCountRewriteFlag = rowCountRewriteFlag; this.rowCountLimit = rowCount; } public Limit(final OffsetLimit offsetLimit) { public Limit(final boolean rowCountRewriteFlag, final OffsetLimit offsetLimit) { this.rowCountRewriteFlag = rowCountRewriteFlag; this.offsetLimit = offsetLimit; } Loading Loading @@ -102,7 +106,12 @@ public final class Limit { private void rewrite(final List<Object> parameters) { int rewriteOffset = 0; int rewriteRowCount = null == rowCountLimit ? -1 : getOffset() + rowCountLimit.getRowCount(); int rewriteRowCount; if (rowCountRewriteFlag) { rewriteRowCount = null == rowCountLimit ? -1 : getOffset() + rowCountLimit.getRowCount(); } else { rewriteRowCount = rowCountLimit.getRowCount(); } if (null != offsetLimit && offsetLimit.getOffsetParameterIndex() > -1) { parameters.set(offsetLimit.getOffsetParameterIndex(), rewriteOffset); } Loading
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/mysql/MySQLParser.java +3 −3 Original line number Diff line number Diff line Loading @@ -77,7 +77,7 @@ public final class MySQLParser extends SQLParser { if (!isParameterForValue) { sqlStatement.getSqlTokens().add(new RowCountLimitToken(valueBeginPosition, value)); } return new Limit(new RowCountLimit(value, valueIndex)); return new Limit(true, new RowCountLimit(value, valueIndex)); } private Limit getLimitWithComma( Loading @@ -104,7 +104,7 @@ public final class MySQLParser extends SQLParser { if (!isParameterForRowCount) { sqlStatement.getSqlTokens().add(new RowCountLimitToken(rowCountBeginPosition, rowCount)); } return new Limit(new OffsetLimit(value, valueIndex), new RowCountLimit(rowCount, rowCountIndex)); return new Limit(true, new OffsetLimit(value, valueIndex), new RowCountLimit(rowCount, rowCountIndex)); } private Limit getLimitWithOffset( Loading @@ -131,6 +131,6 @@ public final class MySQLParser extends SQLParser { if (!isParameterForValue) { sqlStatement.getSqlTokens().add(new RowCountLimitToken(valueBeginPosition, value)); } return new Limit(new OffsetLimit(offset, offsetIndex), new RowCountLimit(value, valueIndex)); return new Limit(true, new OffsetLimit(offset, offsetIndex), new RowCountLimit(value, valueIndex)); } }
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/oracle/OracleParser.java +1 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ public final class OracleParser extends SQLParser { getLexer().nextToken(); SQLExpression sqlExpression = parseExpression(selectStatement); if (null == selectStatement.getLimit()) { selectStatement.setLimit(new Limit()); selectStatement.setLimit(new Limit(false)); } if (Symbol.LT == symbol || Symbol.LT_EQ == symbol) { if (sqlExpression instanceof SQLNumberExpression) { Loading
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/postgresql/PostgreSQLSelectParser.java +3 −3 Original line number Diff line number Diff line Loading @@ -134,11 +134,11 @@ public class PostgreSQLSelectParser extends AbstractSelectParser { private void setLimit(final Optional<OffsetLimit> offsetLimit, final Optional<RowCountLimit> rowCountLimit) { if (offsetLimit.isPresent() && rowCountLimit.isPresent()) { getSelectStatement().setLimit(new Limit(offsetLimit.get(), rowCountLimit.get())); getSelectStatement().setLimit(new Limit(true, offsetLimit.get(), rowCountLimit.get())); } else if (offsetLimit.isPresent()) { getSelectStatement().setLimit(new Limit(offsetLimit.get())); getSelectStatement().setLimit(new Limit(true, offsetLimit.get())); } else if (rowCountLimit.isPresent()) { getSelectStatement().setLimit(new Limit(rowCountLimit.get())); getSelectStatement().setLimit(new Limit(true, rowCountLimit.get())); } } Loading
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/dialect/sqlserver/SQLServerParser.java +2 −2 Original line number Diff line number Diff line Loading @@ -109,9 +109,9 @@ public final class SQLServerParser extends SQLParser { } getLexer().nextToken(); getLexer().nextToken(); limit = new Limit(new OffsetLimit(offset, offsetIndex), new RowCountLimit(rowCount, rowCountIndex)); limit = new Limit(true, new OffsetLimit(offset, offsetIndex), new RowCountLimit(rowCount, rowCountIndex)); } else { limit = new Limit(new OffsetLimit(offset, offsetIndex)); limit = new Limit(true, new OffsetLimit(offset, offsetIndex)); } selectStatement.setLimit(limit); } Loading