Commit 7ab64c64 authored by terrymanu's avatar terrymanu
Browse files

refactor agg for merge

parent 2d29a1e6
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -45,8 +45,7 @@ public abstract class AbstractResultSetRow implements ResultSetRow {
        return result;
    }
    
    @Override
    public final void setCell(final int columnIndex, final Object value) {
    protected final void setCell(final int columnIndex, final Object value) {
        data[columnIndex - 1] = value;
    }
    
+22 −21
Original line number Diff line number Diff line
@@ -17,8 +17,8 @@

package com.dangdang.ddframe.rdb.sharding.merger.resultset.memory.row;

import com.dangdang.ddframe.rdb.sharding.merger.pipeline.coupling.aggregation.AggregationUnit;
import com.dangdang.ddframe.rdb.sharding.merger.pipeline.coupling.aggregation.AggregationUnitFactory;
import com.dangdang.ddframe.rdb.sharding.merger.resultset.memory.row.aggregation.AggregationUnit;
import com.dangdang.ddframe.rdb.sharding.merger.resultset.memory.row.aggregation.AggregationUnitFactory;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.OrderItem;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.selectitem.AggregationSelectItem;
import com.google.common.base.Function;
@@ -31,6 +31,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

/**
 * 具有分组功能的数据行对象.
@@ -46,11 +47,11 @@ public final class GroupByResultSetRow extends AbstractResultSetRow {
    
    private final Map<AggregationSelectItem, AggregationUnit> aggregationUnitMap;
    
    public GroupByResultSetRow(final ResultSet resultSet, final List<OrderItem> groupByList, final List<AggregationSelectItem> aggregationColumns) throws SQLException {
    public GroupByResultSetRow(final ResultSet resultSet, final List<OrderItem> groupByList, final List<AggregationSelectItem> aggregationSelectItems) throws SQLException {
        super(resultSet);
        this.resultSet = resultSet;
        this.groupByList = groupByList;
        aggregationUnitMap = Maps.toMap(aggregationColumns, new Function<AggregationSelectItem, AggregationUnit>() {
        aggregationUnitMap = Maps.toMap(aggregationSelectItems, new Function<AggregationSelectItem, AggregationUnit>() {
            
            @Override
            public AggregationUnit apply(final AggregationSelectItem input) {
@@ -59,15 +60,29 @@ public final class GroupByResultSetRow extends AbstractResultSetRow {
        });
    }
    
    /**
     * 获取分组值.
     *
     * @return 分组值集合
     * @throws SQLException SQL异常
     */
    public List<Object> getGroupValues() throws SQLException {
        List<Object> result = new ArrayList<>(groupByList.size());
        for (OrderItem each : groupByList) {
            result.add(resultSet.getObject(each.getIndex()));
        }
        return result;
    }
    
    /**
     * 处理聚合函数结果集.
     * 
     * @throws SQLException SQL异常
     */
    public void aggregate() throws SQLException {
        for (Map.Entry<AggregationSelectItem, AggregationUnit> each : aggregationUnitMap.entrySet()) {
            each.getValue().merge(getAggregationValues(
                    each.getKey().getDerivedAggregationSelectItems().isEmpty() ? Collections.singletonList(each.getKey()) : each.getKey().getDerivedAggregationSelectItems()));
        for (Entry<AggregationSelectItem, AggregationUnit> entry : aggregationUnitMap.entrySet()) {
            entry.getValue().merge(
                    getAggregationValues(entry.getKey().getDerivedAggregationSelectItems().isEmpty() ? Collections.singletonList(entry.getKey()) : entry.getKey().getDerivedAggregationSelectItems()));
        }
    }
    
@@ -89,18 +104,4 @@ public final class GroupByResultSetRow extends AbstractResultSetRow {
            setCell(each.getIndex(), aggregationUnitMap.get(each).getResult());
        }
    }
    
    /**
     * 获取分组值.
     * 
     * @return 分组值集合
     * @throws SQLException SQL异常
     */
    public List<Object> getGroupValues() throws SQLException {
        List<Object> result = new ArrayList<>(groupByList.size());
        for (OrderItem each : groupByList) {
            result.add(resultSet.getObject(each.getIndex()));
        }
        return result;
    }
}
+0 −8
Original line number Diff line number Diff line
@@ -26,14 +26,6 @@ package com.dangdang.ddframe.rdb.sharding.merger.resultset.memory.row;
 */
public interface ResultSetRow {
    
    /**
     * 设置数据行数据.
     * 
     * @param columnIndex 列索引, 与JDBC保持一致, 从1开始计数
     * @param value 数据行数据
     */
    void setCell(int columnIndex, Object value);
    
    /**
     * 通过列索引访问数据行数据.
     * 
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
 * </p>
 */

package com.dangdang.ddframe.rdb.sharding.merger.pipeline.coupling.aggregation;
package com.dangdang.ddframe.rdb.sharding.merger.resultset.memory.row.aggregation;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
 * </p>
 */

package com.dangdang.ddframe.rdb.sharding.merger.pipeline.coupling.aggregation;
package com.dangdang.ddframe.rdb.sharding.merger.resultset.memory.row.aggregation;

import java.util.List;

Loading