handle conflict

This commit is contained in:
yihaoDeng 2022-06-05 18:56:43 +08:00
parent f425ccf23b
commit 02e46da0d1
1 changed files with 11 additions and 18 deletions

View File

@ -61,31 +61,26 @@ static int metaSaveJsonVarToIdx(SMeta *pMeta, const SMetaEntry *pCtbEntry, const
if (tTagToValArray((const STag *)data, &pTagVals) != 0) { if (tTagToValArray((const STag *)data, &pTagVals) != 0) {
return -1; return -1;
} }
char key[512] = {0};
SIndexMultiTerm *terms = indexMultiTermCreate(); SIndexMultiTerm *terms = indexMultiTermCreate();
int16_t nCols = taosArrayGetSize(pTagVals); int16_t nCols = taosArrayGetSize(pTagVals);
for (int i = 0; i < nCols; i++) { for (int i = 0; i < nCols; i++) {
STagVal *pTagVal = (STagVal *)taosArrayGet(pTagVals, i); STagVal *pTagVal = (STagVal *)taosArrayGet(pTagVals, i);
char type = pTagVal->type; char type = pTagVal->type;
sprintf(key, "%s_%s", tagName, pTagVal->pKey);
int32_t nKey = strlen(key);
char *Key = pTagVal->pKey;
char *key = taosMemoryCalloc(1, strlen(Key) + 2 + strlen(tagName));
sprintf(key, "%s_%s", tagName, Key);
int32_t nKey = strlen(key);
SIndexTerm *term = NULL; SIndexTerm *term = NULL;
if (type == TSDB_DATA_TYPE_NULL) { if (type == TSDB_DATA_TYPE_NULL) {
// handle null value
} else if (type == TSDB_DATA_TYPE_NCHAR) { } else if (type == TSDB_DATA_TYPE_NCHAR) {
if (pTagVal->nData > 0) { if (pTagVal->nData > 0) {
char * val = taosMemoryCalloc(1, pTagVal->nData); char * val = taosMemoryCalloc(1, pTagVal->nData + VARSTR_HEADER_SIZE);
int32_t len = taosUcs4ToMbs((TdUcs4 *)pTagVal->pData, pTagVal->nData, val); int32_t len = taosUcs4ToMbs((TdUcs4 *)pTagVal->pData, pTagVal->nData, val + VARSTR_HEADER_SIZE);
// printf("val: %s, len: %d", val, len); memcpy(val, (uint16_t *)&len, VARSTR_HEADER_SIZE);
char *tval = taosMemoryCalloc(1, len + VARSTR_HEADER_SIZE);
memcpy(tval, (uint16_t *)&len, VARSTR_HEADER_SIZE);
memcpy(tval + VARSTR_HEADER_SIZE, val, len);
type = TSDB_DATA_TYPE_VARCHAR; type = TSDB_DATA_TYPE_VARCHAR;
term = indexTermCreate(suid, ADD_VALUE, type, key, nKey, tval, len + 2); term = indexTermCreate(suid, ADD_VALUE, type, key, nKey, val, len);
} else if (pTagVal->nData == 0) { } else if (pTagVal->nData == 0) {
char * val = NULL; char * val = NULL;
int32_t len = 0; int32_t len = 0;
@ -100,12 +95,10 @@ static int metaSaveJsonVarToIdx(SMeta *pMeta, const SMetaEntry *pCtbEntry, const
int len = 0; int len = 0;
term = indexTermCreate(suid, ADD_VALUE, type, key, nKey, (const char *)&val, len); term = indexTermCreate(suid, ADD_VALUE, type, key, nKey, (const char *)&val, len);
} }
if (term == NULL) { if (term != NULL) {
// handle except later
} else {
indexMultiTermAdd(terms, term); indexMultiTermAdd(terms, term);
} }
taosMemoryFree(key); memset(key, 0, sizeof(key));
} }
tIndexJsonPut(pMeta->pTagIvtIdx, terms, tuid); tIndexJsonPut(pMeta->pTagIvtIdx, terms, tuid);
indexMultiTermDestroy(terms); indexMultiTermDestroy(terms);