From 71fe2885d4044f93a05ed9ad172a11063ab6575b Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Thu, 19 Nov 2020 14:46:46 +0800 Subject: [PATCH 1/9] [TD-225]update sim. --- tests/script/general/parser/groupby.sim | 11 +- tests/script/general/parser/interp.sim | 3 +- tests/script/general/parser/tbnameIn.sim | 3 +- tests/script/general/parser/testSuite.sim | 128 +++++++++++----------- tests/script/general/parser/union.sim | 11 +- tests/script/general/parser/where.sim | 11 +- 6 files changed, 93 insertions(+), 74 deletions(-) diff --git a/tests/script/general/parser/groupby.sim b/tests/script/general/parser/groupby.sim index c0a6709fe4..7f02fe6fa5 100644 --- a/tests/script/general/parser/groupby.sim +++ b/tests/script/general/parser/groupby.sim @@ -33,12 +33,19 @@ sql create database if not exists $db keep 36500 sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) +$half = $tbNum / 2 + $i = 0 -while $i < $tbNum +while $i < $half $tb = $tbPrefix . $i $tg2 = ' . abc $tg2 = $tg2 . ' + + $nextSuffix = $i + $half + $tb1 = $tbPrefix . $nextSuffix + sql create table $tb using $mt tags( $i , $tg2 ) + sql create table $tb1 using $mt tags( $nextSuffix , $tg2 ) $x = 0 while $x < $rowNum @@ -55,7 +62,7 @@ while $i < $tbNum $nchar = $nchar . $c $nchar = $nchar . ' - sql insert into $tb values ($tstart , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar ) + sql insert into $tb values ($tstart , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar ) $tb1 values ($tstart , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar ) $tstart = $tstart + 1 $x = $x + 1 endw diff --git a/tests/script/general/parser/interp.sim b/tests/script/general/parser/interp.sim index 8777c3ed9b..0d5c1804dd 100644 --- a/tests/script/general/parser/interp.sim +++ b/tests/script/general/parser/interp.sim @@ -47,8 +47,7 @@ while $i < $halfNum $binary = $binary . ' $nchar = 'nchar . $c $nchar = $nchar . ' - sql insert into $tb values ( $ts , $c , $c , $c , $c , $c , $c , true, $binary , $nchar ) - sql insert into $tb1 values ( $ts , $c , NULL , $c , NULL , $c , $c , true, $binary , $nchar ) + sql insert into $tb values ( $ts , $c , $c , $c , $c , $c , $c , true, $binary , $nchar ) $tb1 values ( $ts , $c , NULL , $c , NULL , $c , $c , true, $binary , $nchar ) $x = $x + 1 endw diff --git a/tests/script/general/parser/tbnameIn.sim b/tests/script/general/parser/tbnameIn.sim index 87c4871792..d0f74ae53d 100644 --- a/tests/script/general/parser/tbnameIn.sim +++ b/tests/script/general/parser/tbnameIn.sim @@ -55,8 +55,7 @@ while $i < $halfNum $binary = $binary . ' $nchar = 'nchar . $c $nchar = $nchar . ' - sql insert into $tb values ( $ts , $c , $c , $c , $c , $c , $c , true, $binary , $nchar ) - sql insert into $tb1 values ( $ts , $c , NULL , $c , NULL , $c , $c , true, $binary , $nchar ) + sql insert into $tb values ( $ts , $c , $c , $c , $c , $c , $c , true, $binary , $nchar ) $tb1 values ( $ts , $c , NULL , $c , NULL , $c , $c , true, $binary , $nchar ) $x = $x + 1 endw diff --git a/tests/script/general/parser/testSuite.sim b/tests/script/general/parser/testSuite.sim index 0e12379659..7c9dd2b6b5 100644 --- a/tests/script/general/parser/testSuite.sim +++ b/tests/script/general/parser/testSuite.sim @@ -1,67 +1,67 @@ -#sleep 500 -#run general/parser/alter.sim -#sleep 500 -#run general/parser/alter1.sim -#sleep 500 -#run general/parser/alter_stable.sim -#sleep 500 -#run general/parser/auto_create_tb.sim -#sleep 500 -#run general/parser/auto_create_tb_drop_tb.sim -#sleep 500 -#run general/parser/col_arithmetic_operation.sim -#sleep 500 -#run general/parser/columnValue.sim -#sleep 500 -#run general/parser/commit.sim -#sleep 500 -#run general/parser/create_db.sim -#sleep 500 -#run general/parser/create_mt.sim -#sleep 500 -#run general/parser/create_tb.sim -#sleep 500 -#run general/parser/dbtbnameValidate.sim -#sleep 500 -#run general/parser/fill.sim -#sleep 500 -#run general/parser/fill_stb.sim -#sleep 500 -##run general/parser/fill_us.sim # -#sleep 500 -#run general/parser/first_last.sim -#sleep 500 -#run general/parser/import_commit1.sim -#sleep 500 -#run general/parser/import_commit2.sim -#sleep 500 -#run general/parser/import_commit3.sim -#sleep 500 -##run general/parser/import_file.sim -#sleep 500 -#run general/parser/insert_tb.sim -#sleep 500 -#run general/parser/tags_dynamically_specifiy.sim -#sleep 500 -#run general/parser/interp.sim -#sleep 500 -#run general/parser/lastrow.sim -#sleep 500 -#run general/parser/limit.sim -#sleep 500 -#run general/parser/limit1.sim -#sleep 500 -#run general/parser/limit1_tblocks100.sim -#sleep 500 -#run general/parser/limit2.sim -#sleep 500 -#run general/parser/mixed_blocks.sim -#sleep 500 -#run general/parser/nchar.sim -#sleep 500 -#run general/parser/null_char.sim -#sleep 500 -#run general/parser/selectResNum.sim +sleep 500 +run general/parser/alter.sim +sleep 500 +run general/parser/alter1.sim +sleep 500 +run general/parser/alter_stable.sim +sleep 500 +run general/parser/auto_create_tb.sim +sleep 500 +run general/parser/auto_create_tb_drop_tb.sim +sleep 500 +run general/parser/col_arithmetic_operation.sim +sleep 500 +run general/parser/columnValue.sim +sleep 500 +run general/parser/commit.sim +sleep 500 +run general/parser/create_db.sim +sleep 500 +run general/parser/create_mt.sim +sleep 500 +run general/parser/create_tb.sim +sleep 500 +run general/parser/dbtbnameValidate.sim +sleep 500 +run general/parser/fill.sim +sleep 500 +run general/parser/fill_stb.sim +sleep 500 +#run general/parser/fill_us.sim # +sleep 500 +run general/parser/first_last.sim +sleep 500 +run general/parser/import_commit1.sim +sleep 500 +run general/parser/import_commit2.sim +sleep 500 +run general/parser/import_commit3.sim +sleep 500 +#run general/parser/import_file.sim +sleep 500 +run general/parser/insert_tb.sim +sleep 500 +run general/parser/tags_dynamically_specifiy.sim +sleep 500 +run general/parser/interp.sim +sleep 500 +run general/parser/lastrow.sim +sleep 500 +run general/parser/limit.sim +sleep 500 +run general/parser/limit1.sim +sleep 500 +run general/parser/limit1_tblocks100.sim +sleep 500 +run general/parser/limit2.sim +sleep 500 +run general/parser/mixed_blocks.sim +sleep 500 +run general/parser/nchar.sim +sleep 500 +run general/parser/null_char.sim +sleep 500 +run general/parser/selectResNum.sim sleep 500 run general/parser/select_across_vnodes.sim sleep 500 diff --git a/tests/script/general/parser/union.sim b/tests/script/general/parser/union.sim index d779d75731..cb46ac6b0d 100644 --- a/tests/script/general/parser/union.sim +++ b/tests/script/general/parser/union.sim @@ -36,9 +36,16 @@ sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 $i = 0 $t = 1578203484000 -while $i < $tbNum +$half = $tbNum / 2 + +while $i < $half $tb = $tbPrefix . $i + + $nextSuffix = $i + $half + $tb1 = $tbPrefix . $nextSuffix + sql create table $tb using $mt tags( $i ) + sql create table $tb1 using $mt tags( $nextSuffix ) $x = 0 while $x < $rowNum @@ -54,7 +61,7 @@ while $i < $tbNum $nchar = $nchar . ' $t1 = $t + $ms - sql insert into $tb values ($t1 , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar ) + sql insert into $tb values ($t1 , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar ) $tb1 values ($t1 , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar ) $x = $x + 1 endw diff --git a/tests/script/general/parser/where.sim b/tests/script/general/parser/where.sim index 4a38e3c68c..8e17220b5b 100644 --- a/tests/script/general/parser/where.sim +++ b/tests/script/general/parser/where.sim @@ -26,10 +26,17 @@ sql create database if not exists $db sql use $db sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int) +$half = $tbNum / 2 + $i = 0 -while $i < $tbNum +while $i < $half $tb = $tbPrefix . $i + + $nextSuffix = $i + $half + $tb1 = $tbPrefix . $nextSuffix + sql create table $tb using $mt tags( $i ) + sql create table $tb1 using $mt tags( $nextSuffix ) $x = 0 while $x < $rowNum @@ -42,7 +49,7 @@ while $i < $tbNum $binary = $binary . ' $nchar = 'nchar . $c $nchar = $nchar . ' - sql insert into $tb values ($ms , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar ) + sql insert into $tb values ($ms , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar ) $tb1 values ($ms , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar ) $x = $x + 1 endw From 1e1e947310677984fdc42cab5e9aa4a1881d4b98 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Thu, 19 Nov 2020 15:12:18 +0800 Subject: [PATCH 2/9] [TD-225] --- .../java/com/taosdata/jdbc/TSDBDriver.java | 2 +- .../taosdata/jdbc/TSDBResultSetBlockData.java | 18 +++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java index 4dc48c84b3..06f88cebfa 100755 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java @@ -89,7 +89,7 @@ public class TSDBDriver extends AbstractTaosDriver { /** * fetch data from native function in a batch model */ - public static final String PROPERTY_KEY_BATCH_LOAD = "batch"; + public static final String PROPERTY_KEY_BATCH_LOAD = "batchfetch"; private TSDBDatabaseMetaData dbMetaData = null; diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetBlockData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetBlockData.java index 7373890428..9352cf5253 100644 --- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetBlockData.java +++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetBlockData.java @@ -31,8 +31,6 @@ import java.util.List; public class TSDBResultSetBlockData { private int numOfRows = 0; - private int numOfCols = 0; - private int rowIndex = 0; private List columnMetaDataList; @@ -40,22 +38,20 @@ public class TSDBResultSetBlockData { public TSDBResultSetBlockData(List colMeta, int numOfCols) { this.columnMetaDataList = colMeta; - this.setNumOfCols(numOfCols); + this.colData = new ArrayList(numOfCols); } public TSDBResultSetBlockData() { this.colData = new ArrayList(); - this.setNumOfCols(0); } public void clear() { + int size = this.colData.size(); if (this.colData != null) { this.colData.clear(); } - - if (this.numOfCols == 0) { - return; - } + + setNumOfCols(size); } public int getNumOfRows() { @@ -67,12 +63,12 @@ public class TSDBResultSetBlockData { } public int getNumOfCols() { - return numOfCols; + return this.colData.size(); } public void setNumOfCols(int numOfCols) { - this.numOfCols = numOfCols; - this.clear(); + this.colData = new ArrayList(numOfCols); + this.colData.addAll(Collections.nCopies(numOfCols, null)); } public boolean hasMore() { From c3199e6f7939631773b9f289737ebc7b4cc9116f Mon Sep 17 00:00:00 2001 From: plum-lihui Date: Thu, 19 Nov 2020 15:31:40 +0800 Subject: [PATCH 3/9] [TD-2156]: change packaging tool --- packaging/tools/install.sh | 2 +- packaging/tools/install_client.sh | 2 +- src/client/src/tscSubquery.c | 6 +++--- src/connector/grafanaplugin | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packaging/tools/install.sh b/packaging/tools/install.sh index aedfb0a683..ddf7114f08 100755 --- a/packaging/tools/install.sh +++ b/packaging/tools/install.sh @@ -312,7 +312,7 @@ function install_data() { } function install_connector() { - ${csudo} cp -rf ${script_dir}/connector/* ${install_main_dir}/connector + ${csudo} cp -rf ${script_dir}/connector/ ${install_main_dir}/ } function install_examples() { diff --git a/packaging/tools/install_client.sh b/packaging/tools/install_client.sh index 24586d3390..34a9bfaecb 100755 --- a/packaging/tools/install_client.sh +++ b/packaging/tools/install_client.sh @@ -163,7 +163,7 @@ function install_log() { } function install_connector() { - ${csudo} cp -rf ${script_dir}/connector/* ${install_main_dir}/connector + ${csudo} cp -rf ${script_dir}/connector/ ${install_main_dir}/ } function install_examples() { diff --git a/src/client/src/tscSubquery.c b/src/client/src/tscSubquery.c index c2594ddbd8..d4b5269423 100644 --- a/src/client/src/tscSubquery.c +++ b/src/client/src/tscSubquery.c @@ -594,7 +594,7 @@ void tscBuildVgroupTableInfo(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo, SArr if (taosArrayGetSize(result) > 0) { SVgroupTableInfo* prevGroup = taosArrayGet(result, taosArrayGetSize(result) - 1); - tscDebug("%p vgId:%d, tables:%"PRId64, pSql, prevGroup->vgInfo.vgId, taosArrayGetSize(prevGroup->itemList)); + tscDebug("%p vgId:%d, tables:%"PRIzu, pSql, prevGroup->vgInfo.vgId, taosArrayGetSize(prevGroup->itemList)); } taosArrayPush(result, &info); @@ -612,7 +612,7 @@ void tscBuildVgroupTableInfo(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo, SArr if (taosArrayGetSize(result) > 0) { SVgroupTableInfo* g = taosArrayGet(result, taosArrayGetSize(result) - 1); - tscDebug("%p vgId:%d, tables:%"PRId64, pSql, g->vgInfo.vgId, taosArrayGetSize(g->itemList)); + tscDebug("%p vgId:%d, tables:%"PRIzu, pSql, g->vgInfo.vgId, taosArrayGetSize(g->itemList)); } } @@ -753,7 +753,7 @@ static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pPar } #endif - tscDebug("%p tags match complete, result: %"PRId64", %"PRId64, pParentSql, t1, t2); + tscDebug("%p tags match complete, result: %"PRIzu", %"PRIzu, pParentSql, t1, t2); return TSDB_CODE_SUCCESS; } diff --git a/src/connector/grafanaplugin b/src/connector/grafanaplugin index d598db167e..ec77d9049a 160000 --- a/src/connector/grafanaplugin +++ b/src/connector/grafanaplugin @@ -1 +1 @@ -Subproject commit d598db167eb256fe67409b7bb3d0eb7fffc3ff8c +Subproject commit ec77d9049a719dabfd1a7c1122a209e201861944 From 2ae05f8daa0f3bb9186101e0d95cfca59f427cff Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Thu, 19 Nov 2020 16:24:11 +0800 Subject: [PATCH 4/9] [TD-2144] --- src/query/src/qUtil.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/query/src/qUtil.c b/src/query/src/qUtil.c index f4f89a8709..61d080bb6c 100644 --- a/src/query/src/qUtil.c +++ b/src/query/src/qUtil.c @@ -53,7 +53,7 @@ void cleanupTimeWindowInfo(SWindowResInfo *pWindowResInfo) { return; } if (pWindowResInfo->capacity == 0) { - assert(/*pWindowResInfo->hashList == NULL && */pWindowResInfo->pResult == NULL); + assert(pWindowResInfo->pResult == NULL); return; } @@ -88,6 +88,11 @@ void clearFirstNTimeWindow(SQueryRuntimeEnv *pRuntimeEnv, int32_t num) { int16_t type = pWindowResInfo->type; STableId* id = TSDB_TABLEID(pRuntimeEnv->pQuery->current->pTable); // uid is always set to be 0. + int64_t uid = id->uid; + if (pRuntimeEnv->groupbyNormalCol) { + uid = 0; + } + char *key = NULL; int16_t bytes = -1; @@ -97,14 +102,14 @@ void clearFirstNTimeWindow(SQueryRuntimeEnv *pRuntimeEnv, int32_t num) { // todo refactor if (type == TSDB_DATA_TYPE_BINARY || type == TSDB_DATA_TYPE_NCHAR) { - key = varDataVal(pResult->key); + key = varDataVal(pResult->key); bytes = varDataLen(pResult->key); } else { key = (char*) &pResult->win.skey; bytes = tDataTypeDesc[pWindowResInfo->type].nSize; } - SET_RES_WINDOW_KEY(pRuntimeEnv->keyBuf, key, bytes, id->uid); + SET_RES_WINDOW_KEY(pRuntimeEnv->keyBuf, key, bytes, uid); taosHashRemove(pRuntimeEnv->pResultRowHashTable, (const char *)pRuntimeEnv->keyBuf, GET_RES_WINDOW_KEY_LEN(bytes)); } else { break; @@ -137,14 +142,14 @@ void clearFirstNTimeWindow(SQueryRuntimeEnv *pRuntimeEnv, int32_t num) { bytes = tDataTypeDesc[pWindowResInfo->type].nSize; } - SET_RES_WINDOW_KEY(pRuntimeEnv->keyBuf, key, bytes, id->uid); + SET_RES_WINDOW_KEY(pRuntimeEnv->keyBuf, key, bytes, uid); int32_t *p = (int32_t *)taosHashGet(pRuntimeEnv->pResultRowHashTable, (const char *)pRuntimeEnv->keyBuf, GET_RES_WINDOW_KEY_LEN(bytes)); assert(p != NULL); int32_t v = (*p - num); assert(v >= 0 && v <= pWindowResInfo->size); - SET_RES_WINDOW_KEY(pRuntimeEnv->keyBuf, key, bytes, id->uid); + SET_RES_WINDOW_KEY(pRuntimeEnv->keyBuf, key, bytes, uid); taosHashPut(pRuntimeEnv->pResultRowHashTable, pRuntimeEnv->keyBuf, GET_RES_WINDOW_KEY_LEN(bytes), (char *)&v, sizeof(int32_t)); } From ec8c6d0c166b3374e3d4ec5fe55fe86623adf57c Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Thu, 19 Nov 2020 16:54:26 +0800 Subject: [PATCH 5/9] [TD-2159]: fix bugs in limit/offset in group by normal columns. --- src/client/src/tscFunctionImpl.c | 4 +-- src/query/src/qExecutor.c | 2 ++ tests/script/general/parser/groupby.sim | 35 +++++++++++++++++++++++-- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/client/src/tscFunctionImpl.c b/src/client/src/tscFunctionImpl.c index 35dc94f37b..8c11913a66 100644 --- a/src/client/src/tscFunctionImpl.c +++ b/src/client/src/tscFunctionImpl.c @@ -681,7 +681,7 @@ static int32_t firstFuncRequired(SQLFunctionCtx *pCtx, TSKEY start, TSKEY end, i } // no result for first query, data block is required - if (GET_RES_INFO(pCtx)->numOfRes <= 0) { + if (GET_RES_INFO(pCtx) == NULL || GET_RES_INFO(pCtx)->numOfRes <= 0) { return BLK_DATA_ALL_NEEDED; } else { return BLK_DATA_NO_NEEDED; @@ -693,7 +693,7 @@ static int32_t lastFuncRequired(SQLFunctionCtx *pCtx, TSKEY start, TSKEY end, in return BLK_DATA_NO_NEEDED; } - if (GET_RES_INFO(pCtx)->numOfRes <= 0) { + if (GET_RES_INFO(pCtx) == NULL || GET_RES_INFO(pCtx)->numOfRes <= 0) { return BLK_DATA_ALL_NEEDED; } else { return BLK_DATA_NO_NEEDED; diff --git a/src/query/src/qExecutor.c b/src/query/src/qExecutor.c index 2096cf4766..8e939cc10e 100644 --- a/src/query/src/qExecutor.c +++ b/src/query/src/qExecutor.c @@ -5583,6 +5583,8 @@ static void tableIntervalProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo) { pQuery->rec.rows = 0; copyFromWindowResToSData(pQInfo, &pRuntimeEnv->windowResInfo); clearFirstNTimeWindow(pRuntimeEnv, pQInfo->groupIndex); + + limitResults(pRuntimeEnv); } } diff --git a/tests/script/general/parser/groupby.sim b/tests/script/general/parser/groupby.sim index 7f02fe6fa5..7e693b3830 100644 --- a/tests/script/general/parser/groupby.sim +++ b/tests/script/general/parser/groupby.sim @@ -62,7 +62,7 @@ while $i < $half $nchar = $nchar . $c $nchar = $nchar . ' - sql insert into $tb values ($tstart , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar ) $tb1 values ($tstart , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar ) + sql insert into $tb values ($tstart , $c , $c , $x , $x , $c , $c , $c , $binary , $nchar ) $tb1 values ($tstart , $c , $c , $c , $c , $c , $c , $c , $binary , $nchar ) $tstart = $tstart + 1 $x = $x + 1 endw @@ -430,8 +430,39 @@ if $data97 != @group_tb0@ then return -1 endi -print ---------------------------------> group by binary|nchar data add cases +sql select count(*),first(ts),last(ts),min(c3) from group_tb1 group by c4; +if $rows != 10000 then + return -1 +endi +if $data00 != 1 then + return -1 +endi + +if $data01 != @70-01-01 08:01:40.000@ then + return -1 +endi + +if $data02 != @70-01-01 08:01:40.000@ then + return -1 +endi + +if $data03 != 0 then + return -1 +endi + +sql select count(*),first(ts),last(ts),min(c3) from group_tb1 group by c4 limit 1; +if $rows != 1 then + return -1 +endi + +sql select count(*),first(ts),last(ts),min(c3),max(c3),sum(c3),avg(c3),sum(c4)/count(c4) from group_tb1 group by c8; +if $rows != 10000 then + return -1 +endi + +print ---------------------------------> group by binary|nchar data add cases +sql select count(*) from group_tb1 group by c8; #=========================== group by multi tags ====================== sql create table st (ts timestamp, c int) tags (t1 int, t2 int, t3 int, t4 int); From 4a7fc101a0ae16c39e6c3af38d8c8d42a24bc73a Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Thu, 19 Nov 2020 17:18:18 +0800 Subject: [PATCH 6/9] [TD-2159] --- src/client/src/tscSQLParser.c | 4 +++- src/query/src/qExecutor.c | 31 +++++++++++++++++-------- tests/script/general/parser/groupby.sim | 5 ++++ 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 069f7303d6..a149b277e0 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -5509,7 +5509,9 @@ void doAddGroupColumnForSubquery(SQueryInfo* pQueryInfo, int32_t tagIndex) { tscAddSpecialColumnForSelect(pQueryInfo, (int32_t)size, TSDB_FUNC_PRJ, &colIndex, pSchema, TSDB_COL_NORMAL); - SInternalField* pInfo = tscFieldInfoGetInternalField(&pQueryInfo->fieldsInfo, (int32_t)size); + int32_t numOfFields = tscNumOfFields(pQueryInfo); + SInternalField* pInfo = tscFieldInfoGetInternalField(&pQueryInfo->fieldsInfo, numOfFields - 1); + doLimitOutputNormalColOfGroupby(pInfo->pSqlExpr); pInfo->visible = false; } diff --git a/src/query/src/qExecutor.c b/src/query/src/qExecutor.c index 8e939cc10e..ce4fe75669 100644 --- a/src/query/src/qExecutor.c +++ b/src/query/src/qExecutor.c @@ -5533,10 +5533,12 @@ static void tableIntervalProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo) { TSKEY newStartKey = TSKEY_INITIAL_VAL; // skip blocks without load the actual data block from file if no filter condition present - skipTimeInterval(pRuntimeEnv, &newStartKey); - if (pQuery->limit.offset > 0 && pQuery->numOfFilterCols == 0 && pRuntimeEnv->pFillInfo == NULL) { - setQueryStatus(pQuery, QUERY_COMPLETED); - return; + if (!pRuntimeEnv->groupbyNormalCol) { + skipTimeInterval(pRuntimeEnv, &newStartKey); + if (pQuery->limit.offset > 0 && pQuery->numOfFilterCols == 0 && pRuntimeEnv->pFillInfo == NULL) { + setQueryStatus(pQuery, QUERY_COMPLETED); + return; + } } while (1) { @@ -5551,7 +5553,7 @@ static void tableIntervalProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo) { } // no result generated, abort - if (pQuery->rec.rows == 0) { + if (pQuery->rec.rows == 0 || pRuntimeEnv->groupbyNormalCol) { break; } @@ -5579,12 +5581,21 @@ static void tableIntervalProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo) { // all data scanned, the group by normal column can return if (pRuntimeEnv->groupbyNormalCol) { // todo refactor with merge interval time result - pQInfo->groupIndex = 0; - pQuery->rec.rows = 0; - copyFromWindowResToSData(pQInfo, &pRuntimeEnv->windowResInfo); - clearFirstNTimeWindow(pRuntimeEnv, pQInfo->groupIndex); + // maxOutput <= 0, means current query does not generate any results + int32_t numOfClosed = numOfClosedTimeWindow(&pRuntimeEnv->windowResInfo); - limitResults(pRuntimeEnv); + if ((pQuery->limit.offset > 0 && pQuery->limit.offset < numOfClosed) || pQuery->limit.offset == 0) { + // skip offset result rows + clearFirstNTimeWindow(pRuntimeEnv, pQuery->limit.offset); + + pQuery->rec.rows = 0; + pQInfo->groupIndex = 0; + copyFromWindowResToSData(pQInfo, &pRuntimeEnv->windowResInfo); + clearFirstNTimeWindow(pRuntimeEnv, pQInfo->groupIndex); + + doSecondaryArithmeticProcess(pQuery); + limitResults(pRuntimeEnv); + } } } diff --git a/tests/script/general/parser/groupby.sim b/tests/script/general/parser/groupby.sim index 7e693b3830..ed9d7552c6 100644 --- a/tests/script/general/parser/groupby.sim +++ b/tests/script/general/parser/groupby.sim @@ -456,6 +456,11 @@ if $rows != 1 then return -1 endi +sql select count(*),first(ts),last(ts),min(c3) from group_tb1 group by c4 limit 20 offset 9990; +if $rows != 10 then + return -1 +endi + sql select count(*),first(ts),last(ts),min(c3),max(c3),sum(c3),avg(c3),sum(c4)/count(c4) from group_tb1 group by c8; if $rows != 10000 then return -1 From 63c3ae84b8c25bface315db8836e64122b28f53b Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Thu, 19 Nov 2020 17:23:18 +0800 Subject: [PATCH 7/9] [TD-2159] add test cases. --- tests/script/general/parser/groupby.sim | 36 +++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tests/script/general/parser/groupby.sim b/tests/script/general/parser/groupby.sim index ed9d7552c6..9c5e744f89 100644 --- a/tests/script/general/parser/groupby.sim +++ b/tests/script/general/parser/groupby.sim @@ -468,6 +468,42 @@ endi print ---------------------------------> group by binary|nchar data add cases sql select count(*) from group_tb1 group by c8; +if $rows != 100 then + return -1 +endi + +sql select count(*),sum(c4), count(c4), sum(c4)/count(c4) from group_tb1 group by c8 +if $rows != 100 then + return -1 +endi + +if $data00 != 100 then + return -1 +endi + +if $data01 != 495000 then + return -1 +endi + +if $data02 != 100 then + return -1 +endi + +if $data03 != 4950.000000 then + return -1 +endi + +if $data10 != 100 then + return -1 +endi + +if $data11 != 495100 then + return -1 +endi + +if $data13 != 4951.000000 then + return -1 +endi #=========================== group by multi tags ====================== sql create table st (ts timestamp, c int) tags (t1 int, t2 int, t3 int, t4 int); From 5d09399ee963e3c151487866fcfde81c16a59c1b Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Thu, 19 Nov 2020 17:46:12 +0800 Subject: [PATCH 8/9] [TD-2159] --- tests/script/general/parser/groupby.sim | 35 ++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/tests/script/general/parser/groupby.sim b/tests/script/general/parser/groupby.sim index 9c5e744f89..48298733ec 100644 --- a/tests/script/general/parser/groupby.sim +++ b/tests/script/general/parser/groupby.sim @@ -461,7 +461,7 @@ if $rows != 10 then return -1 endi -sql select count(*),first(ts),last(ts),min(c3),max(c3),sum(c3),avg(c3),sum(c4)/count(c4) from group_tb1 group by c8; +sql select count(*),first(ts),last(ts),min(c3),max(c3),sum(c3),avg(c3),sum(c4)/count(c4) from group_tb1 group by c4; if $rows != 10000 then return -1 endi @@ -489,7 +489,8 @@ if $data02 != 100 then return -1 endi -if $data03 != 4950.000000 then +if $data03 != 4950.000000000 then + print expect 4950.000000000 , acutal $data03 return -1 endi @@ -501,10 +502,38 @@ if $data11 != 495100 then return -1 endi -if $data13 != 4951.000000 then +if $data13 != 4951.000000000 then return -1 endi +print ====================> group by normal column + slimit + soffset +sql select count(*), c8 from group_mt0 group by c8 limit 1 offset 0; +if $rows != 100 then + return -1 +endi + +sql select sum(c2),c8,avg(c2), sum(c2)/count(*) from group_mt0 group by c8 slimit 2 soffset 99 +if $rows != 1 then + return -1 +endi + +if $data00 != 79200.000000000 then + return -1 +endi + +if $data01 != @binary99@ then + return -1 +endi + +if $data02 != 99.000000000 then + return -1 +endi + +if $data03 != 99.000000000 then + return -1 +endi + + #=========================== group by multi tags ====================== sql create table st (ts timestamp, c int) tags (t1 int, t2 int, t3 int, t4 int); sql create table t1 using st tags(1, 1, 1, 1); From bc41fa4ae8e0b77c37e0d061004f9c75a49e36e8 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Thu, 19 Nov 2020 17:49:05 +0800 Subject: [PATCH 9/9] [TD-225] --- src/query/src/qExecutor.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/query/src/qExecutor.c b/src/query/src/qExecutor.c index ce4fe75669..6bd4c868b3 100644 --- a/src/query/src/qExecutor.c +++ b/src/query/src/qExecutor.c @@ -5586,7 +5586,7 @@ static void tableIntervalProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo) { if ((pQuery->limit.offset > 0 && pQuery->limit.offset < numOfClosed) || pQuery->limit.offset == 0) { // skip offset result rows - clearFirstNTimeWindow(pRuntimeEnv, pQuery->limit.offset); + clearFirstNTimeWindow(pRuntimeEnv, (int32_t) pQuery->limit.offset); pQuery->rec.rows = 0; pQInfo->groupIndex = 0;