fix: set operator limit issue
This commit is contained in:
parent
46a7ec74de
commit
463212513f
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue