Commit 17141df3 authored by haocao's avatar haocao
Browse files

Merge remote-tracking branch 'origin/1.5.0.M2' into 1.5.0.M2

parents 78d1efa3 e1096fb5
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -10,6 +10,9 @@ next = "/00-overview/contribution/"

## 1.5.0.M2

1. 简单子查询支持
1. Oracle与SQLServer分页支持

### 缺陷修正

1. [ISSUE #239](https://github.com/dangdangdotcom/sharding-jdbc/issues/239) LIMIT路由至多查询结果集,若只有一个不为空的结果集,分页结果不正确
@@ -95,7 +98,7 @@ next = "/00-overview/contribution/"
1. [ISSUE #118](https://github.com/dangdangdotcom/sharding-jdbc/issues/118) 同一个线程内先执行DQL后执行DML,DML操作在从库上执行
1. [ISSUE #122](https://github.com/dangdangdotcom/sharding-jdbc/issues/122) bed的fail重试问题
1. [ISSUE #152](https://github.com/dangdangdotcom/sharding-jdbc/issues/152) 可能同一个connection多线程导致问题
1. [ISSUE #150](https://github.com/dangdangdotcom/sharding-jdbc/issues/150) 与最新SQLserver jdbc驱动兼容问题
1. [ISSUE #150](https://github.com/dangdangdotcom/sharding-jdbc/issues/150) 与最新SQLServer jdbc驱动兼容问题
1. [ISSUE #166](https://github.com/dangdangdotcom/sharding-jdbc/issues/166) druid数据源stat过滤器多线程报错

## 1.3.2
+10 −2
Original line number Diff line number Diff line
@@ -27,7 +27,11 @@ import com.dangdang.ddframe.rdb.sharding.api.strategy.database.SingleKeyDatabase
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.MultipleKeysTableShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.SingleKeyTableShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.*;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.BindingTableRuleConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.GenerateKeyColumnConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.ShardingRuleConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.StrategyConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.TableRuleConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.internal.algorithm.ClosureDatabaseShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.config.common.internal.algorithm.ClosureTableShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.config.common.internal.parser.InlineParser;
@@ -42,7 +46,11 @@ import com.google.common.base.Strings;
import com.google.common.collect.Lists;

import javax.sql.DataSource;
import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

/**
+3 −3
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ public final class LimitCouplingResultSet extends AbstractDelegateResultSet {
    }
    
    private boolean skipOffset() throws SQLException {
        for (int i = 0; i < limit.getOffset(); i++) {
        for (int i = 0; i < limit.getOffsetValue(); i++) {
            if (!getDelegate().next()) {
                return false;
            }
@@ -62,8 +62,8 @@ public final class LimitCouplingResultSet extends AbstractDelegateResultSet {
    }
    
    private boolean doNext() throws SQLException {
        if (limit.getRowCount() > 0) {
            return ++rowNumber <= limit.getRowCount() && getDelegate().next();
        if (limit.getRowCountValue() > 0) {
            return ++rowNumber <= limit.getRowCountValue() && getDelegate().next();
        }
        return getDelegate().next();
    }
+5 −6
Original line number Diff line number Diff line
@@ -25,8 +25,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Symbol;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Column;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.condition.Condition;
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.limit.LimitValue;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table.Table;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.table.Tables;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsupportedException;
@@ -350,15 +349,15 @@ public class SQLParser extends AbstractParser {
        }
        if (Symbol.LT == symbol || Symbol.LT_EQ == symbol) {
            if (sqlExpression instanceof SQLNumberExpression) {
                selectStatement.getLimit().setRowCountLimit(new RowCountLimit(((SQLNumberExpression) sqlExpression).getNumber().intValue(), -1));
                selectStatement.getLimit().setRowCount(new LimitValue(((SQLNumberExpression) sqlExpression).getNumber().intValue(), -1));
            } else if (sqlExpression instanceof SQLPlaceholderExpression) {
                selectStatement.getLimit().setRowCountLimit(new RowCountLimit(-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 OffsetLimit(((SQLNumberExpression) sqlExpression).getNumber().intValue(), -1));
                selectStatement.getLimit().setOffset(new LimitValue(((SQLNumberExpression) sqlExpression).getNumber().intValue(), -1));
            } else if (sqlExpression instanceof SQLPlaceholderExpression) {
                selectStatement.getLimit().setOffsetLimit(new OffsetLimit(-1, ((SQLPlaceholderExpression) sqlExpression).getIndex()));
                selectStatement.getLimit().setOffset(new LimitValue(-1, ((SQLPlaceholderExpression) sqlExpression).getIndex()));
            }
        }
    }
+18 −18
Original line number Diff line number Diff line
@@ -41,17 +41,17 @@ public final class Limit {
    
    private final boolean rowCountRewriteFlag;
    
    private OffsetLimit offsetLimit;
    private LimitValue offset;
    
    private RowCountLimit rowCountLimit;
    private LimitValue rowCount;
    
    /**
     * 获取分页偏移量.
     * 
     * @return 分页偏移量
     */
    public int getOffset() {
        return null != offsetLimit ? offsetLimit.getOffset() : 0;
    public int getOffsetValue() {
        return null != offset ? offset.getValue() : 0;
    }
    
    /**
@@ -59,8 +59,8 @@ public final class Limit {
     *
     * @return 分页行数
     */
    public int getRowCount() {
        return null != rowCountLimit ? rowCountLimit.getRowCount() : 0;
    public int getRowCountValue() {
        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.getOffsetParameterIndex() ? getOffset() : roundHalfUp(parameters.get(offsetLimit.getOffsetParameterIndex()));
            offsetLimit.setOffset(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.getRowCountParameterIndex() ? getRowCount() : roundHalfUp(parameters.get(rowCountLimit.getRowCountParameterIndex()));
            rowCountLimit.setRowCount(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 : getOffset() + rowCountLimit.getRowCount();
            rewriteRowCount = null == rowCount ? -1 : getOffsetValue() + rowCount.getValue();
        } else {
            rewriteRowCount = rowCountLimit.getRowCount();
            rewriteRowCount = rowCount.getValue();
        }
        if (null != offsetLimit && offsetLimit.getOffsetParameterIndex() > -1) {
            parameters.set(offsetLimit.getOffsetParameterIndex(), rewriteOffset);
        if (null != offset && offset.getIndex() > -1) {
            parameters.set(offset.getIndex(), rewriteOffset);
        }
        if (null != rowCountLimit && rowCountLimit.getRowCountParameterIndex() > -1) {
            parameters.set(rowCountLimit.getRowCountParameterIndex(), rewriteRowCount);
        if (null != rowCount && rowCount.getIndex() > -1) {
            parameters.set(rowCount.getIndex(), rewriteRowCount);
        }
    }
}
Loading