Skip to content

Commit f105a59

Browse files
authored
fix: reset aggregator (#1784)
* bugfix: reset aggregator * add ut
1 parent 0e94f70 commit f105a59

File tree

3 files changed

+104
-3
lines changed

3 files changed

+104
-3
lines changed

hybridse/src/vm/aggregator.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@ class Aggregator : public BaseAggregator {
9090
}
9191

9292
Row Output() override {
93-
return OutputInternal();
93+
auto row = OutputInternal();
94+
// reset the aggregator
95+
Reset();
96+
return row;
9497
}
9598

9699
void Reset() override {

hybridse/src/vm/runner.cc

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3051,8 +3051,6 @@ std::shared_ptr<TableHandler> RequestAggUnionRunner::RequestUnionWindow(
30513051

30523052
window_table->AddRow(start, aggregator_->Output());
30533053
DLOG(INFO) << "REQUEST AGG UNION cnt = " << window_table->GetCount();
3054-
// reset the aggregator
3055-
aggregator_->Reset();
30563054
return window_table;
30573055
}
30583056

src/cmd/sql_cmd_test.cc

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,106 @@ void PrepareRequestRowForLongWindow(const std::string& base_db, const std::strin
619619
ASSERT_TRUE(req->Build());
620620
}
621621

622+
TEST_P(DBSDKTest, DeployLongWindowsEmpty) {
623+
auto cli = GetParam();
624+
cs = cli->cs;
625+
sr = cli->sr;
626+
::hybridse::sdk::Status status;
627+
sr->ExecuteSQL("SET @@execute_mode='online';", &status);
628+
std::string base_table = "t_lw" + GenRand();
629+
std::string base_db = "d_lw" + GenRand();
630+
bool ok;
631+
std::string msg;
632+
CreateDBTableForLongWindow(base_db, base_table);
633+
634+
std::string deploy_sql = "deploy test_aggr options(LONG_WINDOWS='w1:2') select col1, col2,"
635+
" sum(i64_col) over w1 as w1_sum_i64_col,"
636+
" sum(i16_col) over w1 as w1_sum_i16_col,"
637+
" sum(i32_col) over w1 as w1_sum_i32_col,"
638+
" sum(f_col) over w1 as w1_sum_f_col,"
639+
" sum(d_col) over w1 as w1_sum_d_col,"
640+
" sum(t_col) over w1 as w1_sum_t_col,"
641+
" sum(col3) over w2 as w2_sum_col3"
642+
" from " + base_table +
643+
" WINDOW w1 AS (PARTITION BY " + base_table + ".col1," + base_table + ".col2 ORDER BY col3"
644+
" ROWS_RANGE BETWEEN 5 PRECEDING AND CURRENT ROW), "
645+
" w2 AS (PARTITION BY col1,col2 ORDER BY i64_col"
646+
" ROWS BETWEEN 6 PRECEDING AND CURRENT ROW);";
647+
sr->ExecuteSQL(base_db, "use " + base_db + ";", &status);
648+
ASSERT_TRUE(status.IsOK()) << status.msg;
649+
sr->ExecuteSQL(base_db, deploy_sql, &status);
650+
ASSERT_TRUE(status.IsOK()) << status.msg;
651+
652+
std::string pre_aggr_db = openmldb::nameserver::PRE_AGG_DB;
653+
std::string result_sql = "select * from pre_test_aggr_w1_sum_i64_col;";
654+
auto rs = sr->ExecuteSQL(pre_aggr_db, result_sql, &status);
655+
ASSERT_EQ(0, rs->Size());
656+
657+
result_sql = "select * from pre_test_aggr_w1_sum_i16_col;";
658+
rs = sr->ExecuteSQL(pre_aggr_db, result_sql, &status);
659+
ASSERT_EQ(0, rs->Size());
660+
661+
result_sql = "select * from pre_test_aggr_w1_sum_i32_col;";
662+
rs = sr->ExecuteSQL(pre_aggr_db, result_sql, &status);
663+
ASSERT_EQ(0, rs->Size());
664+
665+
result_sql = "select * from pre_test_aggr_w1_sum_f_col;";
666+
rs = sr->ExecuteSQL(pre_aggr_db, result_sql, &status);
667+
ASSERT_EQ(0, rs->Size());
668+
669+
result_sql = "select * from pre_test_aggr_w1_sum_d_col;";
670+
rs = sr->ExecuteSQL(pre_aggr_db, result_sql, &status);
671+
ASSERT_EQ(0, rs->Size());
672+
673+
result_sql = "select * from pre_test_aggr_w1_sum_t_col;";
674+
rs = sr->ExecuteSQL(pre_aggr_db, result_sql, &status);
675+
ASSERT_EQ(0, rs->Size());
676+
677+
int req_num = 2;
678+
for (int i = 0; i < req_num; i++) {
679+
std::shared_ptr<sdk::SQLRequestRow> req;
680+
PrepareRequestRowForLongWindow(base_db, "test_aggr", req);
681+
auto res = sr->CallProcedure(base_db, "test_aggr", req, &status);
682+
ASSERT_TRUE(status.IsOK());
683+
ASSERT_EQ(1, res->Size());
684+
ASSERT_TRUE(res->Next());
685+
ASSERT_EQ("str1", res->GetStringUnsafe(0));
686+
ASSERT_EQ("str2", res->GetStringUnsafe(1));
687+
int64_t exp = 11;
688+
ASSERT_EQ(exp, res->GetInt64Unsafe(2));
689+
ASSERT_EQ(exp, res->GetInt16Unsafe(3));
690+
ASSERT_EQ(exp, res->GetInt32Unsafe(4));
691+
ASSERT_EQ(exp, res->GetFloatUnsafe(5));
692+
ASSERT_EQ(exp, res->GetDoubleUnsafe(6));
693+
ASSERT_EQ(exp, res->GetTimeUnsafe(7));
694+
ASSERT_EQ(exp, res->GetInt64Unsafe(8));
695+
}
696+
697+
ASSERT_TRUE(cs->GetNsClient()->DropProcedure(base_db, "test_aggr", msg));
698+
std::string pre_aggr_table = "pre_test_aggr_w1_sum_i64_col";
699+
ok = sr->ExecuteDDL(pre_aggr_db, "drop table " + pre_aggr_table + ";", &status);
700+
ASSERT_TRUE(ok);
701+
pre_aggr_table = "pre_test_aggr_w1_sum_i16_col";
702+
ok = sr->ExecuteDDL(pre_aggr_db, "drop table " + pre_aggr_table + ";", &status);
703+
ASSERT_TRUE(ok);
704+
pre_aggr_table = "pre_test_aggr_w1_sum_i32_col";
705+
ok = sr->ExecuteDDL(pre_aggr_db, "drop table " + pre_aggr_table + ";", &status);
706+
ASSERT_TRUE(ok);
707+
pre_aggr_table = "pre_test_aggr_w1_sum_f_col";
708+
ok = sr->ExecuteDDL(pre_aggr_db, "drop table " + pre_aggr_table + ";", &status);
709+
ASSERT_TRUE(ok);
710+
pre_aggr_table = "pre_test_aggr_w1_sum_d_col";
711+
ok = sr->ExecuteDDL(pre_aggr_db, "drop table " + pre_aggr_table + ";", &status);
712+
ASSERT_TRUE(ok);
713+
pre_aggr_table = "pre_test_aggr_w1_sum_t_col";
714+
ok = sr->ExecuteDDL(pre_aggr_db, "drop table " + pre_aggr_table + ";", &status);
715+
ASSERT_TRUE(ok);
716+
ok = sr->ExecuteDDL(base_db, "drop table " + base_table + ";", &status);
717+
ASSERT_TRUE(ok);
718+
ok = sr->DropDB(base_db, &status);
719+
ASSERT_TRUE(ok);
720+
}
721+
622722
TEST_P(DBSDKTest, DeployLongWindowsExecuteSum) {
623723
auto cli = GetParam();
624724
cs = cli->cs;

0 commit comments

Comments
 (0)