diff --git a/source/client/src/clientSml.c b/source/client/src/clientSml.c index 7a697bfad83166bdcd526e05ee513451d92c96ed..2a0e85092b522dc8c2945405717db9c9aa6745c4 100644 --- a/source/client/src/clientSml.c +++ b/source/client/src/clientSml.c @@ -148,8 +148,8 @@ static int32_t smlBuildInvalidDataMsg(SSmlMsgBuf* pBuf, const char *msg1, const } static int smlCompareKv(const void* p1, const void* p2) { - SSmlKv* kv1 = (SSmlKv*)p1; - SSmlKv* kv2 = (SSmlKv*)p2; + SSmlKv* kv1 = *(SSmlKv**)p1; + SSmlKv* kv2 = *(SSmlKv**)p2; int32_t kvLen1 = kv1->keyLen; int32_t kvLen2 = kv2->keyLen; int32_t res = strncasecmp(kv1->key, kv2->key, TMIN(kvLen1, kvLen2)); diff --git a/source/libs/parser/src/parInsert.c b/source/libs/parser/src/parInsert.c index c1ee4f48e9ed139f2df44e4814a08acd2f725363..11dfe600154fad2ca5a5b7c658882b4823c9d21a 100644 --- a/source/libs/parser/src/parInsert.c +++ b/source/libs/parser/src/parInsert.c @@ -1707,7 +1707,7 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols } // 1. set the parsed value from sql string - for (int c = 0; c < spd->numOfBound; ++c) { + for (int c = 0, j = 0; c < spd->numOfBound; ++c) { SSchema* pColSchema = &pSchema[spd->boundColumns[c] - 1]; param.schema = pColSchema; @@ -1715,20 +1715,14 @@ int32_t smlBindData(void *handle, SArray *tags, SArray *colsFormat, SArray *cols SSmlKv *kv = NULL; if(format){ - do{ - if(rowDataSize >= c){ - break; - } - kv = taosArrayGetP(rowData, c); - if (rowDataSize != spd->numOfBound && kv && (kv->keyLen != strlen(pColSchema->name) || strncmp(kv->key, pColSchema->name, kv->keyLen) != 0)){ - MemRowAppend(&pBuf, NULL, 0, ¶m); - c++; - if(c >= spd->numOfBound) break; - pColSchema = &pSchema[spd->boundColumns[c] - 1]; - continue; + if(j < rowDataSize){ + kv = taosArrayGetP(rowData, j); + if (rowDataSize != spd->numOfBound && (kv->keyLen != strlen(pColSchema->name) || strncmp(kv->key, pColSchema->name, kv->keyLen) != 0)){ + kv = NULL; + }else{ + j++; } - break; - }while(1); + } }else{ void **p =taosHashGet(rowData, pColSchema->name, strlen(pColSchema->name)); if(p) kv = *p;