Loading RELEASE-NOTES.md +4 −1 Original line number Diff line number Diff line Loading @@ -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路由至多查询结果集,若只有一个不为空的结果集,分页结果不正确 Loading Loading @@ -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 Loading sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilder.java +10 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; /** Loading sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/merger/pipeline/coupling/LimitCouplingResultSet.java +3 −3 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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(); } Loading sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/SQLParser.java +5 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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())); } } } Loading sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/limit/Limit.java +18 −18 Original line number Diff line number Diff line Loading @@ -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; } /** Loading @@ -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; } /** Loading @@ -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."); Loading @@ -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
RELEASE-NOTES.md +4 −1 Original line number Diff line number Diff line Loading @@ -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路由至多查询结果集,若只有一个不为空的结果集,分页结果不正确 Loading Loading @@ -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 Loading
sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilder.java +10 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; /** Loading
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/merger/pipeline/coupling/LimitCouplingResultSet.java +3 −3 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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(); } Loading
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/SQLParser.java +5 −6 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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())); } } } Loading
sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/context/limit/Limit.java +18 −18 Original line number Diff line number Diff line Loading @@ -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; } /** Loading @@ -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; } /** Loading @@ -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."); Loading @@ -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); } } }