[td-1317]
This commit is contained in:
parent
0ef20b379b
commit
b77b767a02
|
@ -1951,36 +1951,36 @@ static void changeExecuteScanOrder(SQInfo *pQInfo, SQueryTableMsg* pQueryMsg, bo
|
|||
|
||||
// todo handle the case the the order irrelevant query type mixed up with order critical query type
|
||||
// descending order query for last_row query
|
||||
if (isFirstLastRowQuery(pQuery)) {
|
||||
if (isFirstLastRowQuery(pQuery) && !QUERY_IS_ASC_QUERY(pQuery)) {
|
||||
qDebug("QInfo:%p scan order changed for last_row query, old:%d, new:%d", GET_QINFO_ADDR(pQuery),
|
||||
pQuery->order.order, TSDB_ORDER_ASC);
|
||||
|
||||
SWAP(pQuery->window.skey, pQuery->window.ekey, TSKEY);
|
||||
pQuery->order.order = TSDB_ORDER_ASC;
|
||||
if (pQuery->window.skey > pQuery->window.ekey) {
|
||||
SWAP(pQuery->window.skey, pQuery->window.ekey, TSKEY);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (isGroupbyNormalCol(pQuery->pGroupbyExpr) && pQuery->order.order == TSDB_ORDER_DESC) {
|
||||
pQuery->order.order = TSDB_ORDER_ASC;
|
||||
if (pQuery->window.skey > pQuery->window.ekey) {
|
||||
SWAP(pQuery->window.skey, pQuery->window.ekey, TSKEY);
|
||||
}
|
||||
assert (pQuery->window.skey <= pQuery->window.ekey);
|
||||
|
||||
doExchangeTimeWindow(pQInfo, &pQuery->window);
|
||||
return;
|
||||
}
|
||||
|
||||
if (isPointInterpoQuery(pQuery) && pQuery->intervalTime == 0) {
|
||||
if (!QUERY_IS_ASC_QUERY(pQuery)) {
|
||||
qDebug(msg, GET_QINFO_ADDR(pQuery), "interp", pQuery->order.order, TSDB_ORDER_ASC, pQuery->window.skey,
|
||||
pQuery->window.ekey, pQuery->window.ekey, pQuery->window.skey);
|
||||
SWAP(pQuery->window.skey, pQuery->window.ekey, TSKEY);
|
||||
}
|
||||
if (isGroupbyNormalCol(pQuery->pGroupbyExpr) && !QUERY_IS_ASC_QUERY(pQuery)) {
|
||||
pQuery->order.order = TSDB_ORDER_ASC;
|
||||
SWAP(pQuery->window.skey, pQuery->window.ekey, TSKEY);
|
||||
assert (pQuery->window.skey <= pQuery->window.ekey);
|
||||
|
||||
doExchangeTimeWindow(pQInfo, &pQuery->window);
|
||||
return;
|
||||
}
|
||||
|
||||
if (isPointInterpoQuery(pQuery) && (pQuery->intervalTime == 0) && !QUERY_IS_ASC_QUERY(pQuery)) {
|
||||
qDebug(msg, GET_QINFO_ADDR(pQuery), "interp", pQuery->order.order, TSDB_ORDER_ASC, pQuery->window.skey,
|
||||
pQuery->window.ekey, pQuery->window.ekey, pQuery->window.skey);
|
||||
SWAP(pQuery->window.skey, pQuery->window.ekey, TSKEY);
|
||||
|
||||
pQuery->order.order = TSDB_ORDER_ASC;
|
||||
|
||||
assert (pQuery->window.skey <= pQuery->window.ekey);
|
||||
doExchangeTimeWindow(pQInfo, &pQuery->window);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -295,9 +295,10 @@ out_of_memory:
|
|||
}
|
||||
|
||||
TsdbQueryHandleT tsdbQueryLastRow(TSDB_REPO_T *tsdb, STsdbQueryCond *pCond, STableGroupInfo *groupList, void* qinfo) {
|
||||
pCond->order = TSDB_ORDER_ASC;
|
||||
pCond->twindow = changeTableGroupByLastrow(groupList);
|
||||
STsdbQueryHandle *pQueryHandle = (STsdbQueryHandle*) tsdbQueryTables(tsdb, pCond, groupList, qinfo);
|
||||
|
||||
assert(pCond->order == TSDB_ORDER_ASC && pCond->twindow.skey <= pCond->twindow.ekey);
|
||||
return pQueryHandle;
|
||||
}
|
||||
|
||||
|
@ -1982,7 +1983,6 @@ STimeWindow changeTableGroupByLastrow(STableGroupInfo *groupList) {
|
|||
STimeWindow window = {INT64_MAX, INT64_MIN};
|
||||
|
||||
// NOTE: starts from the buffer in case of descending timestamp order check data blocks
|
||||
// todo consider the query time window, current last_row does not apply the query time window
|
||||
size_t numOfGroups = taosArrayGetSize(groupList->pGroupList);
|
||||
for(int32_t j = 0; j < numOfGroups; ++j) {
|
||||
SArray* pGroup = taosArrayGetP(groupList->pGroupList, j);
|
||||
|
@ -2019,6 +2019,11 @@ STimeWindow changeTableGroupByLastrow(STableGroupInfo *groupList) {
|
|||
}
|
||||
}
|
||||
|
||||
// window does not being updated, so set the original
|
||||
if (window.skey == INT64_MAX && window.ekey == INT64_MIN) {
|
||||
window = TSWINDOW_INITIALIZER;
|
||||
}
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
|
|
|
@ -153,4 +153,9 @@ if $rows != 46 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
|
||||
print ========>td-1317, empty table last_row query crashed
|
||||
sql create table t1(ts timestamp, k int)
|
||||
sql select last_row(*) from t1
|
||||
if $rows != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
|
Loading…
Reference in New Issue