From ee1f0989585a9927ff5b26e2df3e3a4923c20325 Mon Sep 17 00:00:00 2001 From: cpwu Date: Wed, 29 Sep 2021 13:54:04 +0800 Subject: [PATCH] [TD-6108] fix the case --- tests/pytest/functions/queryTestCases.py | 58 ++++++++++++++++-------- tests/pytest/util/sql.py | 5 +- 2 files changed, 41 insertions(+), 22 deletions(-) diff --git a/tests/pytest/functions/queryTestCases.py b/tests/pytest/functions/queryTestCases.py index 6e1cce04bc..997bef36a8 100644 --- a/tests/pytest/functions/queryTestCases.py +++ b/tests/pytest/functions/queryTestCases.py @@ -1137,10 +1137,7 @@ class TDTestCase: :return: apercentile query statement,default: select apercentile(c1, 0, 1) from t1 ''' - if alias: - return f"select apercentile({col}, {p}{com} {algo}) {alias} from {table_expr} {condition}" - else: - return f"select apercentile({col}, {p}{com} {algo}) from {table_expr} {condition}" + return f"select apercentile({col}, {p}{com} {algo}) {alias} from {table_expr} {condition}" def checkapert(self,col="c1", p=0, com=',', algo='"t-digest"', alias="", table_expr="t1", condition="" ): @@ -1165,28 +1162,54 @@ class TDTestCase: for pi in pset: if "group" in condition: - tdSql.query(self.apercentile_query_form( - col=col, p=pi, com=com, algo='"default"', alias=alias, table_expr=table_expr, condition=condition - )) + tdSql.query(f"select last_row({col}) from {table_expr} {condition}") query_result = tdSql.queryResult query_rows = tdSql.queryRows - tdSql.query(self.apercentile_query_form( - col=col, p=pi, com=com, algo='"t-digest"', alias=alias, table_expr=table_expr, condition=condition - )) for i in range(query_rows): + pre_condition = condition.replace("slimit",'limit').replace("group by tbname", "").split("soffset")[0] + tbname = query_result[i][-1] + tdSql.query(f"select percentile({col}, {pi}) {alias} from {tbname} {pre_condition}") + print(tdSql.sql) + pre_data = tdSql.getData(0, 0) + tdSql.query(self.apercentile_query_form( + col=col, p=pi, com=com, algo='"t-digest"', alias=alias, table_expr=table_expr, condition=condition + )) if abs(tdSql.getData(i, 0)) >= (spread_num*0.02): - tdSql.checkDeviaRation(i, 0, query_result[i][0], 0.1) + tdSql.checkDeviaRation(i, 0, pre_data, 0.1) else: - devia = abs((tdSql.getData(i, 0) - query_result[i][0]) / (spread_num * 0.02)) + devia = abs((tdSql.getData(i, 0) - pre_data) / (spread_num * 0.02)) if devia < 0.5: - tdLog.info(f"sql:{tdSql.sql}, result data:{tdSql.getData(i, 0)}, expect data:{tdSql.queryResult[i][0]}, " + tdLog.info(f"sql:{tdSql.sql}, result data:{tdSql.getData(i, 0)}, expect data:{pre_data}, " f"actual deviation:{devia} <= expect deviation: 0.01") else: tdLog.exit( f"[{inspect.getframeinfo(inspect.stack()[1][0]).lineno}],check failed:sql:{tdSql.sql}, " - f"result data:{tdSql.getData(i, 0)}, expect data:{tdSql.queryResult[i][0]}, " + f"result data:{tdSql.getData(i, 0)}, expect data:{pre_data}, " f"actual deviation:{devia} > expect deviation: 0.01") + # if "group" in condition: + # tdSql.query(self.apercentile_query_form( + # col=col, p=pi, com=com, algo='"default"', alias=alias, table_expr=table_expr, condition=condition + # )) + # query_result = tdSql.queryResult + # query_rows = tdSql.queryRows + # tdSql.query(self.apercentile_query_form( + # col=col, p=pi, com=com, algo='"t-digest"', alias=alias, table_expr=table_expr, condition=condition + # )) + # for i in range(query_rows): + # if abs(tdSql.getData(i, 0)) >= (spread_num*0.02): + # tdSql.checkDeviaRation(i, 0, query_result[i][0], 0.1) + # else: + # devia = abs((tdSql.getData(i, 0) - query_result[i][0]) / (spread_num * 0.02)) + # if devia < 0.5: + # tdLog.info(f"sql:{tdSql.sql}, result data:{tdSql.getData(i, 0)}, expect data:{tdSql.queryResult[i][0]}, " + # f"actual deviation:{devia} <= expect deviation: 0.01") + # else: + # tdLog.exit( + # f"[{inspect.getframeinfo(inspect.stack()[1][0]).lineno}],check failed:sql:{tdSql.sql}, " + # f"result data:{tdSql.getData(i, 0)}, expect data:{tdSql.queryResult[i][0]}, " + # f"actual deviation:{devia} > expect deviation: 0.01") + else: if ',' in alias or not alias: tdSql.query(f"select {col} from {table_expr} {condition}") @@ -1215,11 +1238,6 @@ class TDTestCase: f"result data:{tdSql.getData(0, 0)}, expect data:{np.percentile(query_result, pi)}, " f"actual deviation:{devia} > expect deviation: 0.01") - # if algo == '"t-digest"': - # tdSql.query(self.apercentile_query_form( - # col=col, p=pi, com=com, algo='"default"', alias=alias, table_expr=table_expr, condition=condition - # )) - # tdSql.checkDeviaRation(0, 0, np.percentile(query_result, pi), 0.1) def apercentile_query(self): @@ -1504,7 +1522,7 @@ class TDTestCase: tdLog.printNoPrefix("######## insert data test:") nowtime = int(round(time.time() * 1000)) - per_table_rows = 100 + per_table_rows = 1000 self.apercentile_data(tbnum, per_table_rows, nowtime) self.apercentile_query() self.error_apercentile() diff --git a/tests/pytest/util/sql.py b/tests/pytest/util/sql.py index f675cc0d52..6a70a84221 100644 --- a/tests/pytest/util/sql.py +++ b/tests/pytest/util/sql.py @@ -256,10 +256,11 @@ class TDSql: else: devia = abs((data - self.queryResult[row][col])/data) if devia <= deviation: - tdLog.info(f"sql:{args[2]}, result data:{args[7]}, expect data:{args[3]}, " + tdLog.info(f"sql:{args[2]}, row:{row}, col:{col}, result data:{args[7]}, expect data:{args[3]}, " f"actual deviation:{devia} <= expect deviation:{args[5]}") else: - tdLog.exit(f"{args[0]}({args[1]}) failed: sql:{args[2]}, result data:{args[7]}, expect data:{args[3]}," + tdLog.exit(f"{args[0]}({args[1]}) failed: sql:{args[2]}, row:{row}, col:{col}, " + f"result data:{args[7]}, expect data:{args[3]}," f"actual deviation:{devia} > expect deviation:{args[5]}") pass -- GitLab