Commit 5798498f authored by terrymanu's avatar terrymanu
Browse files

refactor limit

parent 8752416f
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -349,15 +349,15 @@ public class SQLParser extends AbstractParser {
        }
        if (Symbol.LT == symbol || Symbol.LT_EQ == symbol) {
            if (sqlExpression instanceof SQLNumberExpression) {
                selectStatement.getLimit().setRowCountLimit(new LimitValue(((SQLNumberExpression) sqlExpression).getNumber().intValue(), -1));
                selectStatement.getLimit().setRowCount(new LimitValue(((SQLNumberExpression) sqlExpression).getNumber().intValue(), -1));
            } else if (sqlExpression instanceof SQLPlaceholderExpression) {
                selectStatement.getLimit().setRowCountLimit(new LimitValue(-1, ((SQLPlaceholderExpression) sqlExpression).getIndex()));
                selectStatement.getLimit().setRowCount(new LimitValue(-1, ((SQLPlaceholderExpression) sqlExpression).getIndex()));
            }
        } else if (Symbol.GT == symbol || Symbol.GT_EQ == symbol) {
            if (sqlExpression instanceof SQLNumberExpression) {
                selectStatement.getLimit().setOffsetLimit(new LimitValue(((SQLNumberExpression) sqlExpression).getNumber().intValue(), -1));
                selectStatement.getLimit().setOffset(new LimitValue(((SQLNumberExpression) sqlExpression).getNumber().intValue(), -1));
            } else if (sqlExpression instanceof SQLPlaceholderExpression) {
                selectStatement.getLimit().setOffsetLimit(new LimitValue(-1, ((SQLPlaceholderExpression) sqlExpression).getIndex()));
                selectStatement.getLimit().setOffset(new LimitValue(-1, ((SQLPlaceholderExpression) sqlExpression).getIndex()));
            }
        }
    }
+16 −16
Original line number Diff line number Diff line
@@ -41,9 +41,9 @@ public final class Limit {
    
    private final boolean rowCountRewriteFlag;
    
    private LimitValue offsetLimit;
    private LimitValue offset;
    
    private LimitValue rowCountLimit;
    private LimitValue rowCount;
    
    /**
     * 获取分页偏移量.
@@ -51,7 +51,7 @@ public final class Limit {
     * @return 分页偏移量
     */
    public int getOffsetValue() {
        return null != offsetLimit ? offsetLimit.getValue() : 0;
        return null != offset ? offset.getValue() : 0;
    }
    
    /**
@@ -60,7 +60,7 @@ public final class Limit {
     * @return 分页行数
     */
    public int getRowCountValue() {
        return null != rowCountLimit ? rowCountLimit.getValue() : 0;
        return null != rowCount ? rowCount.getValue() : 0;
    }
    
    /**
@@ -78,14 +78,14 @@ public final class Limit {
    
    private void fill(final List<Object> parameters) {
        int offset = 0;
        if (null != offsetLimit) {
            offset = -1 == offsetLimit.getIndex() ? getOffsetValue() : roundHalfUp(parameters.get(offsetLimit.getIndex()));
            offsetLimit.setValue(offset);
        if (null != this.offset) {
            offset = -1 == this.offset.getIndex() ? getOffsetValue() : roundHalfUp(parameters.get(this.offset.getIndex()));
            this.offset.setValue(offset);
        }
        int rowCount = 0;
        if (null != rowCountLimit) {
            rowCount = -1 == rowCountLimit.getIndex() ? getRowCountValue() : roundHalfUp(parameters.get(rowCountLimit.getIndex()));
            rowCountLimit.setValue(rowCount);
        if (null != this.rowCount) {
            rowCount = -1 == this.rowCount.getIndex() ? getRowCountValue() : roundHalfUp(parameters.get(this.rowCount.getIndex()));
            this.rowCount.setValue(rowCount);
        }
        if (offset < 0 || rowCount < 0) {
            throw new SQLParsingException("LIMIT offset and row count can not be a negative value.");
@@ -96,15 +96,15 @@ public final class Limit {
        int rewriteOffset = 0;
        int rewriteRowCount;
        if (rowCountRewriteFlag) {
            rewriteRowCount = null == rowCountLimit ? -1 : getOffsetValue() + rowCountLimit.getValue();
            rewriteRowCount = null == rowCount ? -1 : getOffsetValue() + rowCount.getValue();
        } else {
            rewriteRowCount = rowCountLimit.getValue();
            rewriteRowCount = rowCount.getValue();
        }
        if (null != offsetLimit && offsetLimit.getIndex() > -1) {
            parameters.set(offsetLimit.getIndex(), rewriteOffset);
        if (null != offset && offset.getIndex() > -1) {
            parameters.set(offset.getIndex(), rewriteOffset);
        }
        if (null != rowCountLimit && rowCountLimit.getIndex() > -1) {
            parameters.set(rowCountLimit.getIndex(), rewriteRowCount);
        if (null != rowCount && rowCount.getIndex() > -1) {
            parameters.set(rowCount.getIndex(), rewriteRowCount);
        }
    }
}
+5 −5
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ public final class MySQLParser extends SQLParser {
            sqlStatement.getSqlTokens().add(new RowCountLimitToken(valueBeginPosition, value));
        }
        Limit result = new Limit(true);
        result.setRowCountLimit(new LimitValue(value, valueIndex));
        result.setRowCount(new LimitValue(value, valueIndex));
        return result;
    }
    
@@ -106,8 +106,8 @@ public final class MySQLParser extends SQLParser {
            sqlStatement.getSqlTokens().add(new RowCountLimitToken(rowCountBeginPosition, rowCount));
        }
        Limit result = new Limit(true);
        result.setRowCountLimit(new LimitValue(rowCount, rowCountIndex));
        result.setOffsetLimit(new LimitValue(value, valueIndex));
        result.setRowCount(new LimitValue(rowCount, rowCountIndex));
        result.setOffset(new LimitValue(value, valueIndex));
        return result;
    }
    
@@ -136,8 +136,8 @@ public final class MySQLParser extends SQLParser {
            sqlStatement.getSqlTokens().add(new RowCountLimitToken(valueBeginPosition, value));
        }
        Limit result = new Limit(true);
        result.setRowCountLimit(new LimitValue(value, valueIndex));
        result.setOffsetLimit(new LimitValue(offset, offsetIndex));
        result.setRowCount(new LimitValue(value, valueIndex));
        result.setOffset(new LimitValue(offset, offsetIndex));
        return result;
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -133,10 +133,10 @@ public class PostgreSQLSelectParser extends AbstractSelectParser {
    private void setLimit(final Optional<LimitValue> offsetLimit, final Optional<LimitValue> rowCountLimit) {
        Limit limit = new Limit(true);
        if (offsetLimit.isPresent()) {
            limit.setOffsetLimit(offsetLimit.get());
            limit.setOffset(offsetLimit.get());
        }
        if (rowCountLimit.isPresent()) {
            limit.setRowCountLimit(rowCountLimit.get());
            limit.setRowCount(rowCountLimit.get());
        }
        getSelectStatement().setLimit(limit);
    }
+5 −5
Original line number Diff line number Diff line
@@ -74,10 +74,10 @@ public final class SQLServerParser extends SQLParser {
            }
            if (null == sqlStatement.getLimit()) {
                Limit limit = new Limit(false);
                limit.setRowCountLimit(rowCountLimit);
                limit.setRowCount(rowCountLimit);
                sqlStatement.setLimit(limit);
            } else {
                sqlStatement.getLimit().setRowCountLimit(rowCountLimit);
                sqlStatement.getLimit().setRowCount(rowCountLimit);
            }
            skipIfEqual(SQLServerKeyword.PERCENT);
        }
@@ -120,10 +120,10 @@ public final class SQLServerParser extends SQLParser {
            }
            getLexer().nextToken();
            getLexer().nextToken();
            limit.setRowCountLimit(new LimitValue(rowCount, rowCountIndex));
            limit.setOffsetLimit(new LimitValue(offset, offsetIndex));
            limit.setRowCount(new LimitValue(rowCount, rowCountIndex));
            limit.setOffset(new LimitValue(offset, offsetIndex));
        } else {
            limit.setOffsetLimit(new LimitValue(offset, offsetIndex));
            limit.setOffset(new LimitValue(offset, offsetIndex));
        }
        selectStatement.setLimit(limit);
    }
Loading