feat: correct slimit&limit clause
This commit is contained in:
parent
8b2dc48cde
commit
5df32cbc78
|
@ -641,7 +641,7 @@ int32_t* taosGetErrno();
|
|||
#define TSDB_CODE_PAR_INCORRECT_NUM_OF_COL TAOS_DEF_ERROR_CODE(0, 0x2634)
|
||||
#define TSDB_CODE_PAR_INCORRECT_TIMESTAMP_VAL TAOS_DEF_ERROR_CODE(0, 0x2635)
|
||||
#define TSDB_CODE_PAR_OFFSET_LESS_ZERO TAOS_DEF_ERROR_CODE(0, 0x2637)
|
||||
#define TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_BY TAOS_DEF_ERROR_CODE(0, 0x2638)
|
||||
#define TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_GROUP_BY TAOS_DEF_ERROR_CODE(0, 0x2638)
|
||||
#define TSDB_CODE_PAR_INVALID_TOPIC_QUERY TAOS_DEF_ERROR_CODE(0, 0x2639)
|
||||
#define TSDB_CODE_PAR_INVALID_DROP_STABLE TAOS_DEF_ERROR_CODE(0, 0x263A)
|
||||
#define TSDB_CODE_PAR_INVALID_FILL_TIME_RANGE TAOS_DEF_ERROR_CODE(0, 0x263B)
|
||||
|
|
|
@ -277,6 +277,7 @@ static void doHashGroupbyAgg(SOperatorInfo* pOperator, SSDataBlock* pBlock) {
|
|||
terrno = TSDB_CODE_SUCCESS;
|
||||
|
||||
int32_t num = 0;
|
||||
uint64_t groupId = 0;
|
||||
for (int32_t j = 0; j < pBlock->info.rows; ++j) {
|
||||
// Compare with the previous row of this column, and do not set the output buffer again if they are identical.
|
||||
if (!pInfo->isInit) {
|
||||
|
@ -306,8 +307,9 @@ static void doHashGroupbyAgg(SOperatorInfo* pOperator, SSDataBlock* pBlock) {
|
|||
}
|
||||
|
||||
len = buildGroupKeys(pInfo->keyBuf, pInfo->pGroupColVals);
|
||||
groupId = calcGroupId(pInfo->keyBuf, len);
|
||||
int32_t ret = setGroupResultOutputBuf(pOperator, &(pInfo->binfo), pOperator->exprSupp.numOfExprs, pInfo->keyBuf,
|
||||
len, pBlock->info.id.groupId, pInfo->aggSup.pResultBuf, &pInfo->aggSup);
|
||||
len, groupId, pInfo->aggSup.pResultBuf, &pInfo->aggSup);
|
||||
if (ret != TSDB_CODE_SUCCESS) { // null data, too many state code
|
||||
T_LONG_JMP(pTaskInfo->env, TSDB_CODE_APP_ERROR);
|
||||
}
|
||||
|
@ -324,8 +326,9 @@ static void doHashGroupbyAgg(SOperatorInfo* pOperator, SSDataBlock* pBlock) {
|
|||
|
||||
if (num > 0) {
|
||||
len = buildGroupKeys(pInfo->keyBuf, pInfo->pGroupColVals);
|
||||
groupId = calcGroupId(pInfo->keyBuf, len);
|
||||
int32_t ret = setGroupResultOutputBuf(pOperator, &(pInfo->binfo), pOperator->exprSupp.numOfExprs, pInfo->keyBuf,
|
||||
len, pBlock->info.id.groupId, pInfo->aggSup.pResultBuf, &pInfo->aggSup);
|
||||
len, groupId, pInfo->aggSup.pResultBuf, &pInfo->aggSup);
|
||||
if (ret != TSDB_CODE_SUCCESS) {
|
||||
T_LONG_JMP(pTaskInfo->env, TSDB_CODE_APP_ERROR);
|
||||
}
|
||||
|
|
|
@ -3373,8 +3373,8 @@ static int32_t checkLimit(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
|||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_OFFSET_LESS_ZERO);
|
||||
}
|
||||
|
||||
if (NULL != pSelect->pSlimit && NULL == pSelect->pPartitionByList) {
|
||||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_BY);
|
||||
if (NULL != pSelect->pSlimit && (NULL == pSelect->pPartitionByList && NULL == pSelect->pGroupByList)) {
|
||||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_GROUP_BY);
|
||||
}
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
|
|
@ -103,8 +103,8 @@ static char* getSyntaxErrFormat(int32_t errCode) {
|
|||
return "Incorrect TIMESTAMP value: %s";
|
||||
case TSDB_CODE_PAR_OFFSET_LESS_ZERO:
|
||||
return "soffset/offset can not be less than 0";
|
||||
case TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_BY:
|
||||
return "slimit/soffset only available for PARTITION BY query";
|
||||
case TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_GROUP_BY:
|
||||
return "slimit/soffset only available for PARTITION/GROUP BY query";
|
||||
case TSDB_CODE_PAR_INVALID_TOPIC_QUERY:
|
||||
return "Invalid topic query";
|
||||
case TSDB_CODE_PAR_INVALID_DROP_STABLE:
|
||||
|
|
|
@ -514,7 +514,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_PAR_ONLY_ONE_JSON_TAG, "Only one tag if ther
|
|||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INCORRECT_NUM_OF_COL, "Query block has incorrect number of result columns")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INCORRECT_TIMESTAMP_VAL, "Incorrect TIMESTAMP value")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_OFFSET_LESS_ZERO, "soffset/offset can not be less than 0")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_BY, "slimit/soffset only available for PARTITION BY query")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_SLIMIT_LEAK_PARTITION_GROUP_BY, "slimit/soffset only available for PARTITION/GROUP BY query")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_TOPIC_QUERY, "Invalid topic query")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_DROP_STABLE, "Cannot drop super table in batch")
|
||||
TAOS_DEFINE_ERROR(TSDB_CODE_PAR_INVALID_FILL_TIME_RANGE, "Start(end) time of query range required or time range too large")
|
||||
|
|
|
@ -168,6 +168,7 @@
|
|||
,,y,script,./test.sh -f tsim/parser/union.sim
|
||||
,,y,script,./test.sh -f tsim/parser/union_sysinfo.sim
|
||||
,,y,script,./test.sh -f tsim/parser/where.sim
|
||||
,,y,script,./test.sh -f tsim/parser/slimit_limit.sim
|
||||
,,y,script,./test.sh -f tsim/query/tagLikeFilter.sim
|
||||
,,y,script,./test.sh -f tsim/query/charScalarFunction.sim
|
||||
,,y,script,./test.sh -f tsim/query/explain.sim
|
||||
|
|
|
@ -0,0 +1,113 @@
|
|||
system sh/stop_dnodes.sh
|
||||
system sh/deploy.sh -n dnode1 -i 1
|
||||
system sh/exec.sh -n dnode1 -s start
|
||||
sql connect
|
||||
|
||||
sql drop database if exists db1;
|
||||
sql create database db1 vgroups 1;
|
||||
sql use db1;
|
||||
sql create stable sta (ts timestamp, f1 int, f2 binary(200)) tags(t1 int, t2 int, t3 int);
|
||||
sql create table tba1 using sta tags(1, 1, 1);
|
||||
sql create table tba2 using sta tags(2, 2, 2);
|
||||
sql create table tba3 using sta tags(3, 3, 3);
|
||||
sql create table tba4 using sta tags(4, 4, 4);
|
||||
sql create table tba5 using sta tags(5, 5, 5);
|
||||
sql create table tba6 using sta tags(6, 6, 6);
|
||||
sql create table tba7 using sta tags(7, 7, 7);
|
||||
sql create table tba8 using sta tags(8, 8, 8);
|
||||
sql create index index1 on sta (t2);
|
||||
sql insert into tba1 values ('2022-04-26 15:15:01', 1, "a");
|
||||
sql insert into tba1 values ('2022-04-26 15:15:02', 11, "a");
|
||||
sql insert into tba2 values ('2022-04-26 15:15:01', 2, "a");
|
||||
sql insert into tba2 values ('2022-04-26 15:15:02', 22, "a");
|
||||
sql insert into tba3 values ('2022-04-26 15:15:01', 3, "a");
|
||||
sql insert into tba4 values ('2022-04-26 15:15:01', 4, "a");
|
||||
sql insert into tba5 values ('2022-04-26 15:15:01', 5, "a");
|
||||
sql insert into tba6 values ('2022-04-26 15:15:01', 6, "a");
|
||||
sql insert into tba7 values ('2022-04-26 15:15:01', 7, "a");
|
||||
sql insert into tba8 values ('2022-04-26 15:15:01', 8, "a");
|
||||
|
||||
sql select t1,count(*) from sta group by t1 limit 1;
|
||||
if $rows != 8 then
|
||||
return -1
|
||||
endi
|
||||
sql select t1,count(*) from sta group by t1 slimit 1;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
sql select f1,count(*) from sta group by f1 limit 1;
|
||||
if $rows != 10 then
|
||||
return -1
|
||||
endi
|
||||
sql select f1,count(*) from sta group by f1 slimit 1;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
sql select t1,f1,count(*) from sta group by t1, f1 limit 1;
|
||||
if $rows != 10 then
|
||||
return -1
|
||||
endi
|
||||
sql select t1,f1,count(*) from sta group by t1, f1 slimit 1;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
sql select t1,f1,count(*) from sta group by f1, t1 limit 1;
|
||||
if $rows != 10 then
|
||||
return -1
|
||||
endi
|
||||
sql select t1,f1,count(*) from sta group by f1, t1 slimit 1;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select t1,count(*) from sta group by t1 order by t1 limit 1;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
sql select t1,count(*) from sta group by t1 order by t1 slimit 1;
|
||||
if $rows != 8 then
|
||||
return -1
|
||||
endi
|
||||
sql select f1,count(*) from sta group by f1 order by f1 limit 1;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
sql select f1,count(*) from sta group by f1 order by f1 slimit 1;
|
||||
if $rows != 10 then
|
||||
return -1
|
||||
endi
|
||||
sql select t1,f1,count(*) from sta group by t1, f1 order by t1,f1 limit 1;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
sql select t1,f1,count(*) from sta group by t1, f1 order by t1,f1 slimit 1;
|
||||
if $rows != 10 then
|
||||
return -1
|
||||
endi
|
||||
sql select t1,f1,count(*) from sta group by f1, t1 order by f1,t1 limit 1;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
sql select t1,f1,count(*) from sta group by f1, t1 order by f1,t1 slimit 1;
|
||||
if $rows != 10 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select t1,count(*) from sta group by t1 slimit 1 limit 1;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
sql select f1,count(*) from sta group by f1 slimit 1 limit 1;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
sql select t1,f1,count(*) from sta group by t1, f1 slimit 1 limit 1;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
sql select t1,f1,count(*) from sta group by f1, t1 slimit 1 limit 1;
|
||||
if $rows != 1 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
Loading…
Reference in New Issue