From 6915166b06b84a3f2be9228085ba8f86660c520d Mon Sep 17 00:00:00 2001 From: factosea <285808407@qq.com> Date: Sat, 8 Feb 2025 00:15:35 +0800 Subject: [PATCH 1/5] test case --- source/libs/function/src/tudf.c | 2 +- tests/army/query/queryBugs.py | 81 +++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/source/libs/function/src/tudf.c b/source/libs/function/src/tudf.c index b057194cdb..3ee35b921d 100644 --- a/source/libs/function/src/tudf.c +++ b/source/libs/function/src/tudf.c @@ -2219,7 +2219,7 @@ int32_t callUdf(UdfcFuncHandle handle, int8_t callType, SSDataBlock *input, SUdf break; } } - }; + } taosMemoryFree(task); return code; } diff --git a/tests/army/query/queryBugs.py b/tests/army/query/queryBugs.py index 19459c9581..13d3e21674 100644 --- a/tests/army/query/queryBugs.py +++ b/tests/army/query/queryBugs.py @@ -170,9 +170,90 @@ class TDTestCase(TBase): tdSql.checkData(0, 1, 2) tdSql.checkData(2, 1, 1) + def ts5946(self): + tdLog.info("check bug TD_xx ...\n") + sqls = [ + "drop database if exists ctg_tsdb", + "create database ctg_tsdb cachemodel 'both' stt_trigger 1;", + "use ctg_tsdb;", + "CREATE STABLE `stb_sxny_cn` (`dt` TIMESTAMP ENCODE 'delta-i' COMPRESS 'lz4' LEVEL 'medium', \ + `val` DOUBLE ENCODE 'delta-d' COMPRESS 'tsz' LEVEL 'medium') TAGS (`point` VARCHAR(50), \ + `point_name` VARCHAR(64), `point_path` VARCHAR(2000), `index_name` VARCHAR(64), \ + `country_equipment_code` VARCHAR(64), `index_code` VARCHAR(64), `ps_code` VARCHAR(50), \ + `cnstationno` VARCHAR(255), `index_level` VARCHAR(10), `cz_flag` VARCHAR(255), \ + `blq_flag` VARCHAR(255), `dcc_flag` VARCHAR(255))", + + + "CREATE STABLE `stb_popo_power_station_all` (`ts` TIMESTAMP ENCODE 'delta-i' COMPRESS 'lz4' LEVEL 'medium', \ + `assemble_capacity` DOUBLE ENCODE 'delta-d' COMPRESS 'lz4' LEVEL 'medium', `ps_status` DOUBLE ENCODE \ + 'delta-d' COMPRESS 'lz4' LEVEL 'medium') TAGS (`ps_type` VARCHAR(255), `ps_type_code` VARCHAR(255), \ + `belorg_name` VARCHAR(255), `belorg_code` VARCHAR(255), `country_code` VARCHAR(255), `country_name` \ + VARCHAR(255), `area_name` VARCHAR(255), `area_code` VARCHAR(255), `ps_name` VARCHAR(255), `ps_code` \ + VARCHAR(255), `ps_aab` VARCHAR(255), `ps_type_sec_lvl` VARCHAR(255), `ps_type_sec_lvl_name` VARCHAR(255), \ + `ps_type_name` VARCHAR(255), `longitude` DOUBLE, `latitude` DOUBLE, `is_china` VARCHAR(255), `is_access` \ + VARCHAR(255), `first_put_production_date` VARCHAR(255), `all_put_production_date` VARCHAR(255), `merge_date` \ + VARCHAR(255), `sold_date` VARCHAR(255), `cap_detail` VARCHAR(500), `ps_unit` VARCHAR(255), `region_name` \ + VARCHAR(255))", + ] + + + tdSql.executes(sqls) + + ts = 1657146000000 + + # create subtable and insert data for super table stb_sxny_cn + for i in range(1, 1000): + sql = f"CREATE TABLE `stb_sxny_cn_{i}` USING `stb_sxny_cn` (point, point_name, point_path, index_name, country_equipment_code, \ + index_code, ps_code, cnstationno, index_level, cz_flag, blq_flag, dcc_flag) TAGS('point{i}', 'point_name{i}', 'point_path{i}', 'index_name{i}', \ + 'country_equipment_code{i}', 'index_code{i}', 'ps_code{i%500}', 'cnstationno{i}', '{i}', 'cz_flag{i}', 'blq_flag{i}', 'dcc_flag{i}');" + tdSql.execute(sql) + sql = f"INSERT INTO `stb_sxny_cn_{i}` VALUES " + values = [] + for j in range(1, 100): + values.append(f"({ts+(i%5)*86400000 + j}, {i%500 + j/20})") + sql += ", ".join(values) + tdSql.execute(sql) + tdLog.debug(f"create table stb_sxny_cn_{i} and insert data successfully") + + # create subtable and insert data for super table stb_popo_power_station_all + for i in range(1, 1000): + sql = f"CREATE TABLE `stb_popo_power_station_all_{i}` USING `stb_popo_power_station_all` (ps_type, ps_type_code, belorg_name, belorg_code, \ + country_code, country_name, area_name, area_code, ps_name, ps_code, ps_aab, ps_type_sec_lvl, ps_type_sec_lvl_name, ps_type_name, \ + longitude, latitude, is_china, is_access, first_put_production_date, all_put_production_date, merge_date, sold_date, cap_detail, ps_unit, \ + region_name) TAGS ('ps_type{i}', 'ps_type_code{i}', 'belorg_name{i}', 'belorg_code{i}', 'country_code{i}', 'country_name{i}', 'area_name{i}', \ + 'area_code{i}', 'ps_name{i}', 'ps_code{i}', 'ps_aab{i}', 'ps_type_sec_lvl{i}', 'ps_type_sec_lvl_name{i}', 'ps_type_name{i}', {i}, \ + {i}, 'is_china{i}', 'is_access{i}', 'first_put_production_date{i}', 'all_put_production_date{i}', 'merge_date{i}', 'sold_date{i}', \ + 'cap_detail{i}', 'ps_unit{i}', 'region_name{i}');" + tdSql.execute(sql) + sql = f"INSERT INTO `stb_popo_power_station_all_{i}` VALUES " + values = [] + for j in range(1, 6): + values.append(f"({ts+(j-1)*86400000}, {i*10 + j%10}, {j})") + sql += ", ".join(values) + tdSql.execute(sql) + tdLog.debug(f"create table stb_popo_power_station_all_{i} and insert data successfully") + + for i in range(1, 499, 20): + pscode = f"ps_code{i}" + + querySql = f"select t2.ts ,tt.ps_code,t2.ps_code from \ + ( select TIMETRUNCATE(t1.dt, 1d, 1) dt, t1.ps_code, first(dt) \ + from ctg_tsdb.stb_sxny_cn t1 where ps_code<>'0' and dt >= '2022-07-07 00:00:00.000' \ + and t1.ps_code='{pscode}' partition by point state_window(cast(val as int)) order by \ + TIMETRUNCATE(t1.dt, 1d, 0) ) tt \ + left join ctg_tsdb.stb_popo_power_station_all t2 \ + on TIMETRUNCATE(tt.dt, 1d, 1)=TIMETRUNCATE(t2.ts, 1d, 1) \ + and tt.ps_code = t2.ps_code " + tdSql.query(querySql) + tdSql.checkData(0, 1, pscode) + tdSql.checkData(0, 2, pscode) + tdLog.debug(f"execute sql: {pscode}") + # run def run(self): tdLog.debug(f"start to excute {__file__}") + + self.ts5946() # TD BUGS self.FIX_TD_30686() From cbc52126355d992a883b7f9e6abcc0081be27ad5 Mon Sep 17 00:00:00 2001 From: factosea <285808407@qq.com> Date: Sat, 8 Feb 2025 13:40:32 +0800 Subject: [PATCH 2/5] fix: split --- source/libs/planner/src/planSpliter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/planner/src/planSpliter.c b/source/libs/planner/src/planSpliter.c index 03de345936..15457d6554 100644 --- a/source/libs/planner/src/planSpliter.c +++ b/source/libs/planner/src/planSpliter.c @@ -892,7 +892,7 @@ static int32_t stbSplSplitSessionOrStateForBatch(SSplitContext* pCxt, SStableSpl if (TSDB_CODE_SUCCESS == code) { stbSplSetTableMergeScan(pChild); pInfo->pSubplan->subplanType = SUBPLAN_TYPE_MERGE; - SPLIT_FLAG_SET_MASK(pInfo->pSubplan->splitFlag, SPLIT_FLAG_STABLE_SPLIT); + //SPLIT_FLAG_SET_MASK(pInfo->pSubplan->splitFlag, SPLIT_FLAG_STABLE_SPLIT); ++(pCxt->groupId); } else { nodesDestroyList(pMergeKeys); From 4ebf642369f5e5e4e6d39e1a0ffe58e718251098 Mon Sep 17 00:00:00 2001 From: factosea <285808407@qq.com> Date: Sat, 8 Feb 2025 17:57:50 +0800 Subject: [PATCH 3/5] splitFlag --- source/libs/planner/src/planSpliter.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/libs/planner/src/planSpliter.c b/source/libs/planner/src/planSpliter.c index 15457d6554..2daf2e2866 100644 --- a/source/libs/planner/src/planSpliter.c +++ b/source/libs/planner/src/planSpliter.c @@ -768,7 +768,7 @@ static int32_t stbSplSplitIntervalForBatch(SSplitContext* pCxt, SStableSplitInfo SLogicSubplan* pSubplan = (SLogicSubplan*)pNode; pSubplan->id.groupId = pCxt->groupId; pSubplan->id.queryId = pCxt->queryId; - pSubplan->splitFlag = SPLIT_FLAG_STABLE_SPLIT; + //pSubplan->splitFlag = SPLIT_FLAG_STABLE_SPLIT; splSetSubplanVgroups(pSubplan, pSubplan->pNode); code = stbSplCreatePartWindowNode((SWindowLogicNode*)pSubplan->pNode, &pPartWindow); if (TSDB_CODE_SUCCESS == code) { @@ -1201,7 +1201,7 @@ static int32_t stbSplSplitAggNodeForCrossTableMulSubplan(SSplitContext* pCxt, SS SLogicSubplan* pSubplan = (SLogicSubplan*)pNode; pSubplan->id.groupId = pCxt->groupId; pSubplan->id.queryId = pCxt->queryId; - pSubplan->splitFlag = SPLIT_FLAG_STABLE_SPLIT; + //pSubplan->splitFlag = SPLIT_FLAG_STABLE_SPLIT; splSetSubplanVgroups(pSubplan, pSubplan->pNode); code = stbSplCreatePartAggNode((SAggLogicNode*)pSubplan->pNode, &pPartAgg); if (code) break; @@ -2009,7 +2009,7 @@ static int32_t insertSelectSplit(SSplitContext* pCxt, SLogicSubplan* pSubplan) { code = splMountSubplan(pNewSubplan, pSubplanChildren); } - SPLIT_FLAG_SET_MASK(info.pSubplan->splitFlag, SPLIT_FLAG_INSERT_SPLIT); + //SPLIT_FLAG_SET_MASK(info.pSubplan->splitFlag, SPLIT_FLAG_INSERT_SPLIT); ++(pCxt->groupId); pCxt->split = true; return code; From 56f988b16e756adcd85957a4f4ca4344eefcde57 Mon Sep 17 00:00:00 2001 From: facetosea <285808407@qq.com> Date: Mon, 10 Feb 2025 11:17:53 +0000 Subject: [PATCH 4/5] fix: planner --- source/libs/planner/src/planSpliter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libs/planner/src/planSpliter.c b/source/libs/planner/src/planSpliter.c index 2daf2e2866..c3d407c548 100644 --- a/source/libs/planner/src/planSpliter.c +++ b/source/libs/planner/src/planSpliter.c @@ -2009,7 +2009,7 @@ static int32_t insertSelectSplit(SSplitContext* pCxt, SLogicSubplan* pSubplan) { code = splMountSubplan(pNewSubplan, pSubplanChildren); } - //SPLIT_FLAG_SET_MASK(info.pSubplan->splitFlag, SPLIT_FLAG_INSERT_SPLIT); + SPLIT_FLAG_SET_MASK(info.pSubplan->splitFlag, SPLIT_FLAG_INSERT_SPLIT); ++(pCxt->groupId); pCxt->split = true; return code; From cda798da5178cb829c76b626f470f6d680f3d9ed Mon Sep 17 00:00:00 2001 From: factosea <285808407@qq.com> Date: Tue, 11 Feb 2025 10:21:56 +0800 Subject: [PATCH 5/5] test case --- tests/army/query/queryBugs.py | 37 +++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/army/query/queryBugs.py b/tests/army/query/queryBugs.py index 89dc49978b..cd61b8c620 100644 --- a/tests/army/query/queryBugs.py +++ b/tests/army/query/queryBugs.py @@ -248,6 +248,43 @@ class TDTestCase(TBase): tdSql.checkData(0, 1, pscode) tdSql.checkData(0, 2, pscode) tdLog.debug(f"execute sql: {pscode}") + + querySql = f"select t2.ts ,tt.ps_code,t2.ps_code from ( select last(t1.dt) dt, t1.ps_code, first(dt) \ + from ctg_tsdb.stb_sxny_cn t1 where ps_code<>'0' and dt >= '2022-07-07 00:00:00.000' and \ + t1.ps_code='{pscode}' group by tbname order by dt) tt left join \ + ctg_tsdb.stb_popo_power_station_all t2 on TIMETRUNCATE(tt.dt, 1d, 1)=TIMETRUNCATE(t2.ts, 1d, 1) \ + and tt.ps_code = t2.ps_code" + tdSql.query(querySql) + tdSql.checkData(0, 1, pscode) + tdSql.checkData(0, 2, pscode) + tdLog.debug(f"execute sql: {pscode}") + + querySql = f"select t2.ts ,tt.ps_code,t2.ps_code from ( select last(t1.dt) dt, last(ps_code) ps_code \ + from ctg_tsdb.stb_sxny_cn t1 where ps_code<>'0' and dt >= '2022-07-07 00:00:00.000' and \ + t1.ps_code='{pscode}' order by dt) tt left join ctg_tsdb.stb_popo_power_station_all t2 on \ + TIMETRUNCATE(tt.dt, 1d, 1)=TIMETRUNCATE(t2.ts, 1d, 1) and tt.ps_code = t2.ps_code" + tdSql.query(querySql) + tdSql.checkData(0, 1, pscode) + tdSql.checkData(0, 2, pscode) + tdLog.debug(f"execute sql: {pscode}") + + querySql = f"select t2.ts ,tt.ps_code,t2.ps_code from ( select _wstart dt, t1.ps_code, first(dt) \ + from ctg_tsdb.stb_sxny_cn t1 where ps_code<>'0' and dt >= '2022-07-07 00:00:00.000' and \ + t1.ps_code='{pscode}' interval(1m) order by dt) tt left join ctg_tsdb.stb_popo_power_station_all t2 \ + on TIMETRUNCATE(tt.dt, 1d, 1)=TIMETRUNCATE(t2.ts, 1d, 1) and tt.ps_code = t2.ps_code" + tdSql.query(querySql) + tdSql.checkData(0, 1, pscode) + tdSql.checkData(0, 2, pscode) + tdLog.debug(f"execute sql: {pscode}") + + querySql = f"select t2.ts ,tt.ps_code,t2.ps_code from (select first(dt) dt, t1.ps_code from \ + ctg_tsdb.stb_sxny_cn t1 where ps_code<>'0' and dt >= '2022-07-07 00:00:00.000' and t1.ps_code='{pscode}' \ + session(dt, 1m) order by dt) tt left join ctg_tsdb.stb_popo_power_station_all t2 on \ + TIMETRUNCATE(tt.dt, 1d, 1)=TIMETRUNCATE(t2.ts, 1d, 1) and tt.ps_code = t2.ps_code" + tdSql.query(querySql) + tdSql.checkData(0, 1, pscode) + tdSql.checkData(0, 2, pscode) + tdLog.debug(f"execute sql: {pscode}") def FIX_TS_5984(self): tdLog.info("check bug TS_5984 ...\n")