未验证 提交 9efd067e 编写于 作者: D dapan1121 提交者: GitHub

Merge pull request #21413 from taosdata/fix/TD-21457-3.0

fix: tsdb read and append _wstart for tsma 
...@@ -810,7 +810,7 @@ static int32_t tsdbReaderCreate(SVnode* pVnode, SQueryTableDataCond* pCond, STsd ...@@ -810,7 +810,7 @@ static int32_t tsdbReaderCreate(SVnode* pVnode, SQueryTableDataCond* pCond, STsd
if (pReader->suppInfo.colId[0] != PRIMARYKEY_TIMESTAMP_COL_ID) { if (pReader->suppInfo.colId[0] != PRIMARYKEY_TIMESTAMP_COL_ID) {
tsdbError("the first column isn't primary timestamp, %d, %s", pReader->suppInfo.colId[0], pReader->idStr); tsdbError("the first column isn't primary timestamp, %d, %s", pReader->suppInfo.colId[0], pReader->idStr);
terrno = TSDB_CODE_INVALID_PARA; code = TSDB_CODE_INVALID_PARA;
goto _end; goto _end;
} }
...@@ -819,7 +819,7 @@ static int32_t tsdbReaderCreate(SVnode* pVnode, SQueryTableDataCond* pCond, STsd ...@@ -819,7 +819,7 @@ static int32_t tsdbReaderCreate(SVnode* pVnode, SQueryTableDataCond* pCond, STsd
if (type != TSDB_DATA_TYPE_TIMESTAMP) { if (type != TSDB_DATA_TYPE_TIMESTAMP) {
tsdbError("the first column isn't primary timestamp in result block, actual: %s, %s", tDataTypes[type].name, tsdbError("the first column isn't primary timestamp in result block, actual: %s, %s", tDataTypes[type].name,
pReader->idStr); pReader->idStr);
terrno = TSDB_CODE_INVALID_PARA; code = TSDB_CODE_INVALID_PARA;
goto _end; goto _end;
} }
...@@ -4510,7 +4510,7 @@ int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, void* pTableL ...@@ -4510,7 +4510,7 @@ int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, void* pTableL
_err: _err:
tsdbError("failed to create data reader, code:%s %s", tstrerror(code), idstr); tsdbError("failed to create data reader, code:%s %s", tstrerror(code), idstr);
tsdbReaderClose(pReader); tsdbReaderClose(*ppReader);
*ppReader = NULL; // reset the pointer value. *ppReader = NULL; // reset the pointer value.
return code; return code;
} }
......
...@@ -1292,6 +1292,16 @@ static int32_t smaIndexOptFindSmaFunc(SNode* pQueryFunc, SNodeList* pSmaFuncs) { ...@@ -1292,6 +1292,16 @@ static int32_t smaIndexOptFindSmaFunc(SNode* pQueryFunc, SNodeList* pSmaFuncs) {
return -1; return -1;
} }
static SNode* smaIndexOptFindWStartFunc(SNodeList* pSmaFuncs) {
SNode* pSmaFunc = NULL;
FOREACH(pSmaFunc, pSmaFuncs) {
if (QUERY_NODE_FUNCTION == nodeType(pSmaFunc) && FUNCTION_TYPE_WSTART == ((SFunctionNode*)pSmaFunc)->funcType) {
return pSmaFunc;
}
}
return NULL;
}
static int32_t smaIndexOptCreateSmaCols(SNodeList* pFuncs, uint64_t tableId, SNodeList* pSmaFuncs, static int32_t smaIndexOptCreateSmaCols(SNodeList* pFuncs, uint64_t tableId, SNodeList* pSmaFuncs,
SNodeList** pOutput) { SNodeList** pOutput) {
SNodeList* pCols = NULL; SNodeList* pCols = NULL;
...@@ -1299,6 +1309,7 @@ static int32_t smaIndexOptCreateSmaCols(SNodeList* pFuncs, uint64_t tableId, SNo ...@@ -1299,6 +1309,7 @@ static int32_t smaIndexOptCreateSmaCols(SNodeList* pFuncs, uint64_t tableId, SNo
int32_t code = TSDB_CODE_SUCCESS; int32_t code = TSDB_CODE_SUCCESS;
int32_t index = 0; int32_t index = 0;
int32_t smaFuncIndex = -1; int32_t smaFuncIndex = -1;
bool hasWStart = false;
FOREACH(pFunc, pFuncs) { FOREACH(pFunc, pFuncs) {
smaFuncIndex = smaIndexOptFindSmaFunc(pFunc, pSmaFuncs); smaFuncIndex = smaIndexOptFindSmaFunc(pFunc, pSmaFuncs);
if (smaFuncIndex < 0) { if (smaFuncIndex < 0) {
...@@ -1308,11 +1319,35 @@ static int32_t smaIndexOptCreateSmaCols(SNodeList* pFuncs, uint64_t tableId, SNo ...@@ -1308,11 +1319,35 @@ static int32_t smaIndexOptCreateSmaCols(SNodeList* pFuncs, uint64_t tableId, SNo
if (TSDB_CODE_SUCCESS != code) { if (TSDB_CODE_SUCCESS != code) {
break; break;
} }
if (!hasWStart) {
if (PRIMARYKEY_TIMESTAMP_COL_ID == ((SColumnNode*)pCols->pTail->pNode)->colId) {
hasWStart = true;
}
}
} }
++index; ++index;
} }
if (TSDB_CODE_SUCCESS == code && smaFuncIndex >= 0) { if (TSDB_CODE_SUCCESS == code && smaFuncIndex >= 0) {
if (!hasWStart) {
SNode* pWsNode = smaIndexOptFindWStartFunc(pSmaFuncs);
if (!pWsNode) {
nodesDestroyList(pCols);
code = TSDB_CODE_APP_ERROR;
qError("create sma cols failed since %s(_wstart not exist)", tstrerror(code));
return code;
}
SExprNode exprNode;
exprNode.resType = ((SExprNode*)pWsNode)->resType;
sprintf(exprNode.aliasName, "#expr_%d", index + 1);
SNode* pkNode = smaIndexOptCreateSmaCol((SNode*)&exprNode, tableId, PRIMARYKEY_TIMESTAMP_COL_ID);
code = nodesListPushFront(pCols, pkNode);
if (TSDB_CODE_SUCCESS != code) {
nodesDestroyNode(pkNode);
nodesDestroyList(pCols);
return code;
}
}
*pOutput = pCols; *pOutput = pCols;
} else { } else {
nodesDestroyList(pCols); nodesDestroyList(pCols);
......
...@@ -78,7 +78,7 @@ if $rows != 5 then ...@@ -78,7 +78,7 @@ if $rows != 5 then
return -1 return -1
endi endi
print =============== select * from stb from memory in designated vgroup print =============== select with _wstart from stb from memory in designated vgroup
sql select _wstart, _wend, min(c1),max(c2),max(c1) from stb interval(5m,10s) sliding(5m); sql select _wstart, _wend, min(c1),max(c2),max(c1) from stb interval(5m,10s) sliding(5m);
print $data00 $data01 $data02 $data03 $data04 print $data00 $data01 $data02 $data03 $data04
print $data10 $data11 $data12 $data13 $data14 print $data10 $data11 $data12 $data13 $data14
...@@ -102,6 +102,30 @@ if $data04 != 20 then ...@@ -102,6 +102,30 @@ if $data04 != 20 then
return -1 return -1
endi endi
print =============== select without _wstart from stb from memory in designated vgroup
sql select min(c1),max(c2),max(c1) from stb interval(5m,10s) sliding(5m);
print $data00 $data01 $data02
print $data10 $data11 $data12
if $rows != 1 then
print rows $rows != 1
return -1
endi
if $data00 != -13 then
print data00 $data00 != -13
return -1
endi
if $data01 != 20.00000 then
print data01 $data01 != 20.00000
return -1
endi
if $data02 != 20 then
print data02 $data02 != 20
return -1
endi
print =============== select * from stb from memory in common vgroups print =============== select * from stb from memory in common vgroups
sql select _wstart, _wend, min(c1),max(c2),max(c1),max(c3) from stb interval(5m,10s) sliding(5m); sql select _wstart, _wend, min(c1),max(c2),max(c1),max(c3) from stb interval(5m,10s) sliding(5m);
print $data00 $data01 $data02 $data03 $data04 $data05 print $data00 $data01 $data02 $data03 $data04 $data05
...@@ -148,7 +172,7 @@ if $rows != 5 then ...@@ -148,7 +172,7 @@ if $rows != 5 then
return -1 return -1
endi endi
print =============== select * from stb from memory in designated vgroup after reboot print =============== select with _wstart from stb from memory in designated vgroup after reboot
sql select _wstart, _wend, min(c1),max(c2),max(c1) from stb interval(5m,10s) sliding(5m); sql select _wstart, _wend, min(c1),max(c2),max(c1) from stb interval(5m,10s) sliding(5m);
print $data00 $data01 $data02 $data03 $data04 print $data00 $data01 $data02 $data03 $data04
print $data10 $data11 $data12 $data13 $data14 print $data10 $data11 $data12 $data13 $data14
...@@ -172,6 +196,30 @@ if $data04 != 20 then ...@@ -172,6 +196,30 @@ if $data04 != 20 then
return -1 return -1
endi endi
print =============== select without _wstart from stb from memory in designated vgroup after reboot
sql select min(c1),max(c2),max(c1) from stb interval(5m,10s) sliding(5m);
print $data00 $data01 $data02
print $data10 $data11 $data12
if $rows != 1 then
print rows $rows != 1
return -1
endi
if $data00 != -13 then
print data00 $data00 != -13
return -1
endi
if $data01 != 20.00000 then
print data01 $data01 != 20.00000
return -1
endi
if $data02 != 20 then
print data02 $data02 != 20
return -1
endi
print =============== select * from stb from memory in common vgroups after reboot print =============== select * from stb from memory in common vgroups after reboot
sql select _wstart, _wend, min(c1),max(c2),max(c1),max(c3) from stb interval(5m,10s) sliding(5m); sql select _wstart, _wend, min(c1),max(c2),max(c1),max(c3) from stb interval(5m,10s) sliding(5m);
print $data00 $data01 $data02 $data03 $data04 $data05 print $data00 $data01 $data02 $data03 $data04 $data05
...@@ -218,7 +266,7 @@ if $rows != 5 then ...@@ -218,7 +266,7 @@ if $rows != 5 then
return -1 return -1
endi endi
print =============== select * from stb from file in designated vgroup print =============== select with _wstart from stb from file in designated vgroup
sql select _wstart, _wend, min(c1),max(c2),max(c1) from stb interval(5m,10s) sliding(5m); sql select _wstart, _wend, min(c1),max(c2),max(c1) from stb interval(5m,10s) sliding(5m);
print $data00 $data01 $data02 $data03 $data04 print $data00 $data01 $data02 $data03 $data04
if $rows != 1 then if $rows != 1 then
...@@ -241,6 +289,29 @@ if $data04 != 20 then ...@@ -241,6 +289,29 @@ if $data04 != 20 then
return -1 return -1
endi endi
print =============== select without _wstart from stb from file in designated vgroup
sql select _wend, min(c1),max(c2),max(c1) from stb interval(5m,10s) sliding(5m);
print $data00 $data01 $data02 $data03
if $rows != 1 then
print rows $rows != 1
return -1
endi
if $data01 != -13 then
print data01 $data01 != -13
return -1
endi
if $data02 != 20.00000 then
print data02 $data02 != 20.00000
return -1
endi
if $data03 != 20 then
print data03 $data03 != 20
return -1
endi
print =============== select * from stb from file in common vgroups print =============== select * from stb from file in common vgroups
sql select _wstart, _wend, min(c1),max(c2),max(c1),max(c3) from stb interval(5m,10s) sliding(5m); sql select _wstart, _wend, min(c1),max(c2),max(c1),max(c3) from stb interval(5m,10s) sliding(5m);
print $data00 $data01 $data02 $data03 $data04 $data05 print $data00 $data01 $data02 $data03 $data04 $data05
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册