@@ -1592,6 +1592,35 @@ t_stree::update_agg_table(
15921592 new_value.set (*std::max_element (values.begin (), values.end ()));
15931593 dst->set_scalar (dst_ridx, new_value);
15941594 } break ;
1595+ case AGGTYPE_MAX_BY : {
1596+ t_tscalar dst_scalar = dst->get_scalar (dst_ridx);
1597+ old_value.set (dst_scalar);
1598+ auto pkeys = get_pkeys (nidx);
1599+ std::vector<t_tscalar> values;
1600+ read_column_from_gstate (
1601+ gstate,
1602+ expression_master_table,
1603+ spec.get_dependencies ()[1 ].name (),
1604+ pkeys,
1605+ values
1606+ );
1607+
1608+ const auto max_row_idx = std::distance (
1609+ values.begin (),
1610+ std::max_element (values.begin (), values.end ())
1611+ );
1612+
1613+ read_column_from_gstate (
1614+ gstate,
1615+ expression_master_table,
1616+ spec.get_dependencies ()[0 ].name (),
1617+ pkeys,
1618+ values
1619+ );
1620+
1621+ new_value.set (values.at (max_row_idx));
1622+ dst->set_scalar (dst_ridx, new_value);
1623+ } break ;
15951624 case AGGTYPE_MIN : {
15961625 t_tscalar dst_scalar = dst->get_scalar (dst_ridx);
15971626 old_value.set (dst_scalar);
@@ -1608,6 +1637,35 @@ t_stree::update_agg_table(
16081637 new_value.set (*std::min_element (values.begin (), values.end ()));
16091638 dst->set_scalar (dst_ridx, new_value);
16101639 } break ;
1640+ case AGGTYPE_MIN_BY : {
1641+ t_tscalar dst_scalar = dst->get_scalar (dst_ridx);
1642+ old_value.set (dst_scalar);
1643+ auto pkeys = get_pkeys (nidx);
1644+ std::vector<t_tscalar> values;
1645+ read_column_from_gstate (
1646+ gstate,
1647+ expression_master_table,
1648+ spec.get_dependencies ()[1 ].name (),
1649+ pkeys,
1650+ values
1651+ );
1652+
1653+ const auto min_row_idx = std::distance (
1654+ values.begin (),
1655+ std::min_element (values.begin (), values.end ())
1656+ );
1657+
1658+ read_column_from_gstate (
1659+ gstate,
1660+ expression_master_table,
1661+ spec.get_dependencies ()[0 ].name (),
1662+ pkeys,
1663+ values
1664+ );
1665+
1666+ new_value.set (values.at (min_row_idx));
1667+ dst->set_scalar (dst_ridx, new_value);
1668+ } break ;
16111669 case AGGTYPE_HIGH_WATER_MARK : {
16121670 t_tscalar src_scalar = src->get_scalar (src_ridx);
16131671 t_tscalar dst_scalar = dst->get_scalar (dst_ridx);
0 commit comments