未验证 提交 6b5cd86d 编写于 作者: D dapan1121 提交者: GitHub

Merge pull request #19281 from taosdata/fix/TD-21547-3.0

fix: insert into select with disorder column issue
...@@ -41,6 +41,7 @@ typedef struct SDataInserterHandle { ...@@ -41,6 +41,7 @@ typedef struct SDataInserterHandle {
SHashObj* pCols; SHashObj* pCols;
int32_t status; int32_t status;
bool queryEnd; bool queryEnd;
bool fullOrderColList;
uint64_t useconds; uint64_t useconds;
uint64_t cachedSize; uint64_t cachedSize;
TdThreadMutex mutex; TdThreadMutex mutex;
...@@ -153,7 +154,6 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp ...@@ -153,7 +154,6 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp
SSubmitReq2* pReq = *ppReq; SSubmitReq2* pReq = *ppReq;
SArray* pVals = NULL; SArray* pVals = NULL;
int32_t numOfBlks = 0; int32_t numOfBlks = 0;
bool fullCol = (pInserter->pNode->pCols->length == pTSchema->numOfCols);
terrno = TSDB_CODE_SUCCESS; terrno = TSDB_CODE_SUCCESS;
...@@ -196,7 +196,7 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp ...@@ -196,7 +196,7 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp
for (int32_t k = 0; k < pTSchema->numOfCols; ++k) { // iterate by column for (int32_t k = 0; k < pTSchema->numOfCols; ++k) { // iterate by column
int16_t colIdx = k; int16_t colIdx = k;
const STColumn* pCol = &pTSchema->columns[k]; const STColumn* pCol = &pTSchema->columns[k];
if (!fullCol) { if (!pInserter->fullOrderColList) {
int16_t* slotId = taosHashGet(pInserter->pCols, &pCol->colId, sizeof(pCol->colId)); int16_t* slotId = taosHashGet(pInserter->pCols, &pCol->colId, sizeof(pCol->colId));
if (NULL == slotId) { if (NULL == slotId) {
continue; continue;
...@@ -439,12 +439,19 @@ int32_t createDataInserter(SDataSinkManager* pManager, const SDataSinkNode* pDat ...@@ -439,12 +439,19 @@ int32_t createDataInserter(SDataSinkManager* pManager, const SDataSinkNode* pDat
return TSDB_CODE_OUT_OF_MEMORY; return TSDB_CODE_OUT_OF_MEMORY;
} }
inserter->fullOrderColList = pInserterNode->pCols->length == inserter->pSchema->numOfCols;
inserter->pCols = taosHashInit(pInserterNode->pCols->length, taosGetDefaultHashFunction(TSDB_DATA_TYPE_SMALLINT), inserter->pCols = taosHashInit(pInserterNode->pCols->length, taosGetDefaultHashFunction(TSDB_DATA_TYPE_SMALLINT),
false, HASH_NO_LOCK); false, HASH_NO_LOCK);
SNode* pNode = NULL; SNode* pNode = NULL;
int32_t i = 0;
FOREACH(pNode, pInserterNode->pCols) { FOREACH(pNode, pInserterNode->pCols) {
SColumnNode* pCol = (SColumnNode*)pNode; SColumnNode* pCol = (SColumnNode*)pNode;
taosHashPut(inserter->pCols, &pCol->colId, sizeof(pCol->colId), &pCol->slotId, sizeof(pCol->slotId)); taosHashPut(inserter->pCols, &pCol->colId, sizeof(pCol->colId), &pCol->slotId, sizeof(pCol->slotId));
if (inserter->fullOrderColList && pCol->colId != inserter->pSchema->columns[i].colId) {
inserter->fullOrderColList = false;
}
++i;
} }
tsem_init(&inserter->ready, 0, 0); tsem_init(&inserter->ready, 0, 0);
......
...@@ -42,4 +42,24 @@ if $rows != 2 then ...@@ -42,4 +42,24 @@ if $rows != 2 then
return -1 return -1
endi endi
print ======== step2
sql drop database if exists db1;
sql create database db1 vgroups 1;
sql use db1;
sql create table t1(ts timestamp, a int, b int );
sql create table t2(ts timestamp, a int, b int );
sql insert into t1 values(1648791211000,1,2);
sql insert into t2 (ts, b, a) select ts, a, b from t1;
sql select * from t2;
if $rows != 1 then
return -1
endi
if $data01 != 2 then
return -1
endi
if $data02 != 1 then
return -1
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT system sh/exec.sh -n dnode1 -s stop -x SIGINT
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册