提交 c3760f27 编写于 作者: dengyihao's avatar dengyihao

enh(index): fix tag query error

上级 70171a66
...@@ -109,17 +109,15 @@ int indexOpen(SIndexOpts* opts, const char* path, SIndex** index) { ...@@ -109,17 +109,15 @@ int indexOpen(SIndexOpts* opts, const char* path, SIndex** index) {
taosThreadMutexInit(&sIdx->mtx, NULL); taosThreadMutexInit(&sIdx->mtx, NULL);
sIdx->refId = indexAddRef(sIdx); sIdx->refId = indexAddRef(sIdx);
taosAcquireRef(indexRefMgt, sIdx->refId); indexAcquireRef(sIdx->refId);
*index = sIdx; *index = sIdx;
return 0; return 0;
END: END:
if (sIdx != NULL) { if (sIdx != NULL) {
indexClose(sIdx); indexClose(sIdx);
} }
*index = NULL; *index = NULL;
return -1; return -1;
} }
......
...@@ -463,7 +463,6 @@ int indexCacheSchedToMerge(IndexCache* pCache) { ...@@ -463,7 +463,6 @@ int indexCacheSchedToMerge(IndexCache* pCache) {
// schedMsg.thandle = taosMemoryCalloc(1, sizeof(int64_t)); // schedMsg.thandle = taosMemoryCalloc(1, sizeof(int64_t));
// memcpy((char*)(schedMsg.thandle), (char*)&(pCache->index->refId), sizeof(int64_t)); // memcpy((char*)(schedMsg.thandle), (char*)&(pCache->index->refId), sizeof(int64_t));
schedMsg.msg = NULL; schedMsg.msg = NULL;
indexAcquireRef(pCache->index->refId); indexAcquireRef(pCache->index->refId);
taosScheduleTask(indexQhandle, &schedMsg); taosScheduleTask(indexQhandle, &schedMsg);
......
...@@ -39,10 +39,36 @@ static TExeCond tCompareLessEqual(void* a, void* b, int8_t type) { ...@@ -39,10 +39,36 @@ static TExeCond tCompareLessEqual(void* a, void* b, int8_t type) {
} }
static TExeCond tCompareGreaterThan(void* a, void* b, int8_t type) { static TExeCond tCompareGreaterThan(void* a, void* b, int8_t type) {
__compar_fn_t func = indexGetCompar(type); __compar_fn_t func = indexGetCompar(type);
if (type == TSDB_DATA_TYPE_INT) {
char* v1 = (char*)a;
char* v2 = (char*)b;
for (int i = 0; i < sizeof(int32_t); i++) {
if (v1[i] == '0') {
v1[i] = 0;
}
if (v2[i] == '0') {
v2[i] = 0;
}
}
return tDoCommpare(func, QUERY_GREATER_THAN, v1, v2);
}
return tDoCommpare(func, QUERY_GREATER_THAN, a, b); return tDoCommpare(func, QUERY_GREATER_THAN, a, b);
} }
static TExeCond tCompareGreaterEqual(void* a, void* b, int8_t type) { static TExeCond tCompareGreaterEqual(void* a, void* b, int8_t type) {
__compar_fn_t func = indexGetCompar(type); __compar_fn_t func = indexGetCompar(type);
if (type == TSDB_DATA_TYPE_INT) {
char* v1 = (char*)a;
char* v2 = (char*)b;
for (int i = 0; i < sizeof(int32_t); i++) {
if (v1[i] == '0') {
v1[i] = 0;
}
if (v2[i] == '0') {
v2[i] = 0;
}
}
return tDoCommpare(func, QUERY_GREATER_EQUAL, v1, v2);
}
return tDoCommpare(func, QUERY_GREATER_EQUAL, a, b); return tDoCommpare(func, QUERY_GREATER_EQUAL, a, b);
} }
...@@ -216,7 +242,7 @@ int32_t indexConvertData(void* src, int8_t type, void** dst) { ...@@ -216,7 +242,7 @@ int32_t indexConvertData(void* src, int8_t type, void** dst) {
} }
*dst = *dst - tlen; *dst = *dst - tlen;
if (type != TSDB_DATA_TYPE_BINARY && type != TSDB_DATA_TYPE_NCHAR && type != TSDB_DATA_TYPE_VARBINARY && if (type != TSDB_DATA_TYPE_BINARY && type != TSDB_DATA_TYPE_NCHAR && type != TSDB_DATA_TYPE_VARBINARY &&
type == TSDB_DATA_TYPE_VARCHAR) { type != TSDB_DATA_TYPE_VARCHAR) {
uint8_t* p = *dst; uint8_t* p = *dst;
for (int i = 0; i < tlen; i++) { for (int i = 0; i < tlen; i++) {
if (p[i] == 0) { if (p[i] == 0) {
......
...@@ -204,9 +204,10 @@ TEST_F(JsonEnv, testWriteMillonData) { ...@@ -204,9 +204,10 @@ TEST_F(JsonEnv, testWriteMillonData) {
TEST_F(JsonEnv, testWriteJsonNumberData) { TEST_F(JsonEnv, testWriteJsonNumberData) {
{ {
std::string colName("test"); std::string colName("test");
std::string colVal("10"); // std::string colVal("10");
int val = 10;
SIndexTerm* term = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(), SIndexTerm* term = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
colVal.c_str(), colVal.size()); (const char*)&val, sizeof(val));
SIndexMultiTerm* terms = indexMultiTermCreate(); SIndexMultiTerm* terms = indexMultiTermCreate();
indexMultiTermAdd(terms, term); indexMultiTermAdd(terms, term);
...@@ -217,9 +218,9 @@ TEST_F(JsonEnv, testWriteJsonNumberData) { ...@@ -217,9 +218,9 @@ TEST_F(JsonEnv, testWriteJsonNumberData) {
} }
{ {
std::string colName("test2"); std::string colName("test2");
std::string colVal("20"); int val = 20;
SIndexTerm* term = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(), SIndexTerm* term = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
colVal.c_str(), colVal.size()); (const char*)&val, sizeof(val));
SIndexMultiTerm* terms = indexMultiTermCreate(); SIndexMultiTerm* terms = indexMultiTermCreate();
indexMultiTermAdd(terms, term); indexMultiTermAdd(terms, term);
...@@ -229,10 +230,10 @@ TEST_F(JsonEnv, testWriteJsonNumberData) { ...@@ -229,10 +230,10 @@ TEST_F(JsonEnv, testWriteJsonNumberData) {
indexMultiTermDestroy(terms); indexMultiTermDestroy(terms);
} }
{ {
std::string colName("test2"); std::string colName("test");
std::string colVal("15"); int val = 15;
SIndexTerm* term = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(), SIndexTerm* term = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
colVal.c_str(), colVal.size()); (const char*)&val, sizeof(val));
SIndexMultiTerm* terms = indexMultiTermCreate(); SIndexMultiTerm* terms = indexMultiTermCreate();
indexMultiTermAdd(terms, term); indexMultiTermAdd(terms, term);
...@@ -243,9 +244,9 @@ TEST_F(JsonEnv, testWriteJsonNumberData) { ...@@ -243,9 +244,9 @@ TEST_F(JsonEnv, testWriteJsonNumberData) {
} }
{ {
std::string colName("test2"); std::string colName("test2");
std::string colVal("15"); const char* val = "test";
SIndexTerm* term = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(), SIndexTerm* term = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_BINARY, colName.c_str(), colName.size(),
colVal.c_str(), colVal.size()); (const char*)val, strlen(val));
SIndexMultiTerm* terms = indexMultiTermCreate(); SIndexMultiTerm* terms = indexMultiTermCreate();
indexMultiTermAdd(terms, term); indexMultiTermAdd(terms, term);
...@@ -255,12 +256,11 @@ TEST_F(JsonEnv, testWriteJsonNumberData) { ...@@ -255,12 +256,11 @@ TEST_F(JsonEnv, testWriteJsonNumberData) {
indexMultiTermDestroy(terms); indexMultiTermDestroy(terms);
} }
{ {
std::string colName("test"); std::string colName("test");
std::string colVal("10"); int val = 15;
SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST); SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(), colVal.c_str(), SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
colVal.size()); (const char*)&val, sizeof(val));
SArray* result = taosArrayInit(1, sizeof(uint64_t)); SArray* result = taosArrayInit(1, sizeof(uint64_t));
indexMultiTermQueryAdd(mq, q, QUERY_TERM); indexMultiTermQueryAdd(mq, q, QUERY_TERM);
...@@ -270,11 +270,11 @@ TEST_F(JsonEnv, testWriteJsonNumberData) { ...@@ -270,11 +270,11 @@ TEST_F(JsonEnv, testWriteJsonNumberData) {
} }
{ {
std::string colName("test"); std::string colName("test");
std::string colVal("10"); int val = 15;
SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST); SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(), colVal.c_str(), SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
colVal.size()); (const char*)&val, sizeof(val));
SArray* result = taosArrayInit(1, sizeof(uint64_t)); SArray* result = taosArrayInit(1, sizeof(uint64_t));
indexMultiTermQueryAdd(mq, q, QUERY_GREATER_THAN); indexMultiTermQueryAdd(mq, q, QUERY_GREATER_THAN);
...@@ -284,11 +284,12 @@ TEST_F(JsonEnv, testWriteJsonNumberData) { ...@@ -284,11 +284,12 @@ TEST_F(JsonEnv, testWriteJsonNumberData) {
} }
{ {
std::string colName("test"); std::string colName("test");
std::string colVal("10"); int val = 10;
;
SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST); SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(), colVal.c_str(), SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
colVal.size()); (const char*)&val, sizeof(int));
SArray* result = taosArrayInit(1, sizeof(uint64_t)); SArray* result = taosArrayInit(1, sizeof(uint64_t));
indexMultiTermQueryAdd(mq, q, QUERY_GREATER_EQUAL); indexMultiTermQueryAdd(mq, q, QUERY_GREATER_EQUAL);
...@@ -298,11 +299,12 @@ TEST_F(JsonEnv, testWriteJsonNumberData) { ...@@ -298,11 +299,12 @@ TEST_F(JsonEnv, testWriteJsonNumberData) {
} }
{ {
std::string colName("test"); std::string colName("test");
std::string colVal("10"); int val = 10;
// std::string colVal("10");
SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST); SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(), colVal.c_str(), SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
colVal.size()); (const char*)&val, sizeof(val));
SArray* result = taosArrayInit(1, sizeof(uint64_t)); SArray* result = taosArrayInit(1, sizeof(uint64_t));
indexMultiTermQueryAdd(mq, q, QUERY_LESS_THAN); indexMultiTermQueryAdd(mq, q, QUERY_LESS_THAN);
...@@ -312,11 +314,12 @@ TEST_F(JsonEnv, testWriteJsonNumberData) { ...@@ -312,11 +314,12 @@ TEST_F(JsonEnv, testWriteJsonNumberData) {
} }
{ {
std::string colName("test"); std::string colName("test");
std::string colVal("10"); int val = 10;
// std::string colVal("10");
SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST); SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(), colVal.c_str(), SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
colVal.size()); (const char*)&val, sizeof(val));
SArray* result = taosArrayInit(1, sizeof(uint64_t)); SArray* result = taosArrayInit(1, sizeof(uint64_t));
indexMultiTermQueryAdd(mq, q, QUERY_LESS_EQUAL); indexMultiTermQueryAdd(mq, q, QUERY_LESS_EQUAL);
...@@ -329,9 +332,9 @@ TEST_F(JsonEnv, testWriteJsonNumberData) { ...@@ -329,9 +332,9 @@ TEST_F(JsonEnv, testWriteJsonNumberData) {
TEST_F(JsonEnv, testWriteJsonTfileAndCache) { TEST_F(JsonEnv, testWriteJsonTfileAndCache) {
{ {
std::string colName("test1"); std::string colName("test1");
std::string colVal("10"); int val = 10;
SIndexTerm* term = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(), SIndexTerm* term = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
colVal.c_str(), colVal.size()); (const char*)&val, sizeof(val));
SIndexMultiTerm* terms = indexMultiTermCreate(); SIndexMultiTerm* terms = indexMultiTermCreate();
indexMultiTermAdd(terms, term); indexMultiTermAdd(terms, term);
...@@ -355,11 +358,11 @@ TEST_F(JsonEnv, testWriteJsonTfileAndCache) { ...@@ -355,11 +358,11 @@ TEST_F(JsonEnv, testWriteJsonTfileAndCache) {
} }
{ {
std::string colName("test1"); std::string colName("test1");
std::string colVal("10"); int val = 10;
SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST); SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(), colVal.c_str(), SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
colVal.size()); (const char*)&val, sizeof(val));
SArray* result = taosArrayInit(1, sizeof(uint64_t)); SArray* result = taosArrayInit(1, sizeof(uint64_t));
indexMultiTermQueryAdd(mq, q, QUERY_TERM); indexMultiTermQueryAdd(mq, q, QUERY_TERM);
...@@ -369,11 +372,11 @@ TEST_F(JsonEnv, testWriteJsonTfileAndCache) { ...@@ -369,11 +372,11 @@ TEST_F(JsonEnv, testWriteJsonTfileAndCache) {
} }
{ {
std::string colName("test1"); std::string colName("test1");
std::string colVal("10"); int val = 10;
SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST); SIndexMultiTermQuery* mq = indexMultiTermQueryCreate(MUST);
SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(), colVal.c_str(), SIndexTerm* q = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
colVal.size()); (const char*)&val, sizeof(int));
SArray* result = taosArrayInit(1, sizeof(uint64_t)); SArray* result = taosArrayInit(1, sizeof(uint64_t));
indexMultiTermQueryAdd(mq, q, QUERY_GREATER_THAN); indexMultiTermQueryAdd(mq, q, QUERY_GREATER_THAN);
...@@ -426,6 +429,7 @@ TEST_F(JsonEnv, testWriteJsonTfileAndCache) { ...@@ -426,6 +429,7 @@ TEST_F(JsonEnv, testWriteJsonTfileAndCache) {
{ {
std::string colName("other_column"); std::string colName("other_column");
std::string colVal("100"); std::string colVal("100");
SIndexTerm* term = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(), SIndexTerm* term = indexTermCreate(1, ADD_VALUE, TSDB_DATA_TYPE_INT, colName.c_str(), colName.size(),
colVal.c_str(), colVal.size()); colVal.c_str(), colVal.size());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册