当前使用版本(必填,否则不予处理)

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

05468640