当前使用版本(必填,否则不予处理)
3.4.0
该问题是如何引起的?(确定最新版也有问题再提!!!)
神通数据库使用shardingsphere进行分表,分页插件自动生成count脚本缺少别名会导致shardingsphere脚本解析错误
重现步骤(如果有就写完整)
报错信息
java.lang.IllegalStateException: Can't find index: AggregationProjection(type=COUNT, innerExpression=(*), alias=Optional.empty, derivedAggregationProjections=[], index=-1), please add alias for aggregate selections
at com.google.common.base.Preconditions.checkState(Preconditions.java:481) ~[guava-22.0.jar:na]
at org.apache.shardingsphere.sql.parser.binder.statement.dml.SelectStatementContext.setIndexForAggregationProjection(SelectStatementContext.java:128) ~[shardingsphere-sql-parser-binder-4.1.0.jar:4.1.0]
at org.apache.shardingsphere.sql.parser.binder.statement.dml.SelectStatementContext.setIndexes(SelectStatementContext.java:121) ~[shardingsphere-sql-parser-binder-4.1.0.jar:4.1.0]
at org.apache.shardingsphere.sharding.merge.dql.ShardingDQLResultMerger.merge(ShardingDQLResultMerger.java:62) ~[sharding-core-merge-4.1.0.jar:4.1.0]
at org.apache.shardingsphere.underlying.merge.MergeEntry.merge(MergeEntry.java:85) ~[shardingsphere-merge-4.1.0.jar:4.1.0]
at org.apache.shardingsphere.underlying.merge.MergeEntry.process(MergeEntry.java:75) ~[shardingsphere-merge-4.1.0.jar:4.1.0]
at org.apache.shardingsphere.underlying.pluggble.merge.MergeEngine.merge(MergeEngine.java:61) ~[shardingsphere-pluggable-4.1.0.jar:4.1.0]
at org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement.mergeQuery(ShardingPreparedStatement.java:190) ~[sharding-jdbc-core-4.1.0.jar:4.1.0]
at org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement.getResultSet(ShardingPreparedStatement.java:158) ~[sharding-jdbc-core-4.1.0.jar:4.1.0]
at com.p6spy.engine.wrapper.StatementWrapper.getResultSet(StatementWrapper.java:66) ~[p6spy-3.9.0.jar:na]
at com.p6spy.engine.wrapper.StatementWrapper.getResultSet(StatementWrapper.java:66) ~[p6spy-3.9.0.jar:na]
at com.p6spy.engine.wrapper.StatementWrapper.getResultSet(StatementWrapper.java:66) ~[p6spy-3.9.0.jar:na]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getFirstResultSet(DefaultResultSetHandler.java:237) ~[mybatis-3.5.5.jar:3.5.5]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:187) ~[mybatis-3.5.5.jar:3.5.5]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) ~[mybatis-3.5.5.jar:3.5.5]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) ~[mybatis-3.5.5.jar:3.5.5]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_231]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_231]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_231]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_231]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63) ~[mybatis-3.5.5.jar:3.5.5]
at com.sun.proxy.$Proxy133.query(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:69) ~[mybatis-plus-core-3.4.0.jar:3.4.0]
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) ~[mybatis-3.5.5.jar:3.5.5]
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) ~[mybatis-3.5.5.jar:3.5.5]
at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165) ~[mybatis-plus-core-3.4.0.jar:3.4.0]
at com.htht.dboperation.common.page.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:164) ~[classes/:na]
建议处理
分页插件中加入别名配置
/**
* 获取jsqlparser中count的SelectItem
*/
private static SelectItem defaultCountSelectItem() {
Function function = new Function();
function.setName("COUNT");
function.setAllColumns(true);
SelectExpressionItem selectExpressionItem = new SelectExpressionItem(function);
selectExpressionItem.setAlias(new Alias("total"));
return selectExpressionItem;
}
Comment From: miemieYaho
130cda9
Comment From: shyupc