diff --git a/source/libs/command/inc/commandInt.h b/source/libs/command/inc/commandInt.h index feb1b3cc19..7d6a170ab3 100644 --- a/source/libs/command/inc/commandInt.h +++ b/source/libs/command/inc/commandInt.h @@ -202,13 +202,13 @@ do { \ #define EXPLAIN_SUM_ROW_END() do { varDataSetLen(tbuf, tlen); tlen += VARSTR_HEADER_SIZE; } while (0) #define EXPLAIN_ROW_APPEND_LIMIT_IMPL(_pLimit, sl) do { \ - if (_pLimit) { \ + if (_pLimit && ((SLimitNode*)_pLimit)->limit) { \ EXPLAIN_ROW_APPEND(EXPLAIN_BLANK_FORMAT); \ SLimitNode* pLimit = (SLimitNode*)_pLimit; \ - EXPLAIN_ROW_APPEND(((sl) ? EXPLAIN_SLIMIT_FORMAT : EXPLAIN_LIMIT_FORMAT), pLimit->limit); \ + EXPLAIN_ROW_APPEND(((sl) ? EXPLAIN_SLIMIT_FORMAT : EXPLAIN_LIMIT_FORMAT), pLimit->limit->datum.i); \ if (pLimit->offset) { \ EXPLAIN_ROW_APPEND(EXPLAIN_BLANK_FORMAT); \ - EXPLAIN_ROW_APPEND(((sl) ? EXPLAIN_SOFFSET_FORMAT : EXPLAIN_OFFSET_FORMAT), pLimit->offset);\ + EXPLAIN_ROW_APPEND(((sl) ? EXPLAIN_SOFFSET_FORMAT : EXPLAIN_OFFSET_FORMAT), pLimit->offset->datum.i);\ } \ } \ } while (0) diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index c1227b6994..2a4fdb0136 100755 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -4735,7 +4735,7 @@ static int32_t translateJoinTable(STranslateContext* pCxt, SJoinTableNode* pJoin getFullJoinTypeString(type, *pSType)); } SLimitNode* pJLimit = (SLimitNode*)pJoinTable->pJLimit; - code = translateExpr(pCxt, &pJoinTable->pJLimit); + code = translateExpr(pCxt, (SNode**)&pJLimit->limit); if (TSDB_CODE_SUCCESS != code) { return code; } @@ -7502,7 +7502,14 @@ static int32_t translateSetOperOrderBy(STranslateContext* pCxt, SSetOperator* pS } static int32_t checkSetOperLimit(STranslateContext* pCxt, SLimitNode* pLimit) { - if ((NULL != pLimit && NULL != pLimit->offset && pLimit->offset->datum.i < 0)) { + int32_t code = 0; + if (pLimit && pLimit->limit) { + code = translateExpr(pCxt, (SNode**)&pLimit->limit); + } + if (TSDB_CODE_SUCCESS == code && pLimit && pLimit->offset) { + code = translateExpr(pCxt, (SNode**)&pLimit->offset); + } + if (TSDB_CODE_SUCCESS == code && (NULL != pLimit && NULL != pLimit->offset && pLimit->offset->datum.i < 0)) { return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_OFFSET_LESS_ZERO); } return TSDB_CODE_SUCCESS; diff --git a/tests/system-test/2-query/pk_varchar.py b/tests/system-test/2-query/pk_varchar.py index 167e1079d5..1bfc35147a 100644 --- a/tests/system-test/2-query/pk_varchar.py +++ b/tests/system-test/2-query/pk_varchar.py @@ -153,7 +153,7 @@ class TDTestCase: tdSql.checkData(9, 1, '8') tdSql.checkData(9, 2, 8) - tdSql.query('select * from d1.st order by ts limit 2;') + tdSql.query('select * from d1.st order by ts,pk limit 2;') tdSql.checkRows(2) tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) tdSql.checkData(0, 1, '1') @@ -286,7 +286,7 @@ class TDTestCase: tdSql.checkData(9, 1, '8') tdSql.checkData(9, 2, 8) - tdSql.query('select * from d2.st order by ts limit 2;') + tdSql.query('select * from d2.st order by ts,pk limit 2;') tdSql.checkRows(2) tdSql.checkData(0, 0, datetime.datetime(2021, 4, 19, 0, 0)) tdSql.checkData(0, 1, '1')