enh: index support between
This commit is contained in:
parent
098be04ab6
commit
1f5ad0f1ec
|
@ -39,13 +39,14 @@ TExeCond tDoCompare(__compar_fn_t func, int8_t cmpType, void* a, void* b);
|
||||||
|
|
||||||
_cache_range_compare indexGetCompare(RangeType ty);
|
_cache_range_compare indexGetCompare(RangeType ty);
|
||||||
|
|
||||||
int32_t indexConvertData(void* src, int8_t type, void** dst);
|
int32_t idxConvertData(void* src, int8_t type, void** dst);
|
||||||
int32_t indexConvertDataToStr(void* src, int8_t type, void** dst);
|
int32_t idxConvertDataToStr(void* src, int8_t type, void** dst);
|
||||||
|
|
||||||
int32_t indexGetDataByteLen(int8_t type);
|
int32_t idxGetDataByteLen(int8_t type);
|
||||||
|
|
||||||
char* indexInt2str(int64_t val, char* dst, int radix);
|
char* idxInt2str(int64_t val, char* dst, int radix);
|
||||||
|
|
||||||
|
int idxUidCompare(const void* a, const void* b);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Binary file not shown.
|
@ -289,7 +289,7 @@ SIndexTerm* indexTermCreate(int64_t suid, SIndexOperOnColumn oper, uint8_t colTy
|
||||||
tm->nColName = nColName;
|
tm->nColName = nColName;
|
||||||
|
|
||||||
char* buf = NULL;
|
char* buf = NULL;
|
||||||
int32_t len = indexConvertDataToStr((void*)colVal, INDEX_TYPE_GET_TYPE(colType), (void**)&buf);
|
int32_t len = idxConvertDataToStr((void*)colVal, INDEX_TYPE_GET_TYPE(colType), (void**)&buf);
|
||||||
assert(len != -1);
|
assert(len != -1);
|
||||||
|
|
||||||
tm->colVal = buf;
|
tm->colVal = buf;
|
||||||
|
@ -625,7 +625,7 @@ int32_t indexSerialCacheKey(ICacheKey* key, char* buf) {
|
||||||
|
|
||||||
char* p = buf;
|
char* p = buf;
|
||||||
char tbuf[65] = {0};
|
char tbuf[65] = {0};
|
||||||
indexInt2str((int64_t)key->suid, tbuf, 0);
|
idxInt2str((int64_t)key->suid, tbuf, 0);
|
||||||
|
|
||||||
SERIALIZE_STR_VAR_TO_BUF(buf, tbuf, strlen(tbuf));
|
SERIALIZE_STR_VAR_TO_BUF(buf, tbuf, strlen(tbuf));
|
||||||
SERIALIZE_VAR_TO_BUF(buf, '_', char);
|
SERIALIZE_VAR_TO_BUF(buf, '_', char);
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
char JSON_COLUMN[] = "JSON";
|
char JSON_COLUMN[] = "JSON";
|
||||||
char JSON_VALUE_DELIM = '&';
|
char JSON_VALUE_DELIM = '&';
|
||||||
|
|
||||||
char* indexInt2str(int64_t val, char* dst, int radix) {
|
char* idxInt2str(int64_t val, char* dst, int radix) {
|
||||||
char buffer[65] = {0};
|
char buffer[65] = {0};
|
||||||
char* p;
|
char* p;
|
||||||
int64_t new_val;
|
int64_t new_val;
|
||||||
|
@ -257,7 +257,12 @@ char* indexPackJsonDataPrefix(SIndexTerm* itm, int32_t* skip) {
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t indexConvertData(void* src, int8_t type, void** dst) {
|
int idxUidCompare(const void* a, const void* b) {
|
||||||
|
uint64_t l = *(uint64_t*)a;
|
||||||
|
uint64_t r = *(uint64_t*)b;
|
||||||
|
return l - r;
|
||||||
|
}
|
||||||
|
int32_t idxConvertData(void* src, int8_t type, void** dst) {
|
||||||
int tlen = -1;
|
int tlen = -1;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case TSDB_DATA_TYPE_TIMESTAMP:
|
case TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
|
@ -342,44 +347,44 @@ int32_t indexConvertData(void* src, int8_t type, void** dst) {
|
||||||
// indexMayFillNumbericData(*dst, tlen);
|
// indexMayFillNumbericData(*dst, tlen);
|
||||||
return tlen;
|
return tlen;
|
||||||
}
|
}
|
||||||
int32_t indexConvertDataToStr(void* src, int8_t type, void** dst) {
|
int32_t idxConvertDataToStr(void* src, int8_t type, void** dst) {
|
||||||
int tlen = tDataTypes[type].bytes;
|
int tlen = tDataTypes[type].bytes;
|
||||||
int32_t bufSize = 64;
|
int32_t bufSize = 64;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case TSDB_DATA_TYPE_TIMESTAMP:
|
case TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(int64_t*)src, *dst, -1);
|
idxInt2str(*(int64_t*)src, *dst, -1);
|
||||||
tlen = strlen(*dst);
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_BOOL:
|
case TSDB_DATA_TYPE_BOOL:
|
||||||
case TSDB_DATA_TYPE_UTINYINT:
|
case TSDB_DATA_TYPE_UTINYINT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(uint8_t*)src, *dst, 1);
|
idxInt2str(*(uint8_t*)src, *dst, 1);
|
||||||
tlen = strlen(*dst);
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_TINYINT:
|
case TSDB_DATA_TYPE_TINYINT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(int8_t*)src, *dst, 1);
|
idxInt2str(*(int8_t*)src, *dst, 1);
|
||||||
tlen = strlen(*dst);
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_SMALLINT:
|
case TSDB_DATA_TYPE_SMALLINT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(int16_t*)src, *dst, -1);
|
idxInt2str(*(int16_t*)src, *dst, -1);
|
||||||
tlen = strlen(*dst);
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_USMALLINT:
|
case TSDB_DATA_TYPE_USMALLINT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(uint16_t*)src, *dst, -1);
|
idxInt2str(*(uint16_t*)src, *dst, -1);
|
||||||
tlen = strlen(*dst);
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_INT:
|
case TSDB_DATA_TYPE_INT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(int32_t*)src, *dst, -1);
|
idxInt2str(*(int32_t*)src, *dst, -1);
|
||||||
tlen = strlen(*dst);
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_UINT:
|
case TSDB_DATA_TYPE_UINT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(uint32_t*)src, *dst, 1);
|
idxInt2str(*(uint32_t*)src, *dst, 1);
|
||||||
tlen = strlen(*dst);
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_BIGINT:
|
case TSDB_DATA_TYPE_BIGINT:
|
||||||
|
@ -389,7 +394,7 @@ int32_t indexConvertDataToStr(void* src, int8_t type, void** dst) {
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_UBIGINT:
|
case TSDB_DATA_TYPE_UBIGINT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(uint64_t*)src, *dst, 1);
|
idxInt2str(*(uint64_t*)src, *dst, 1);
|
||||||
tlen = strlen(*dst);
|
tlen = strlen(*dst);
|
||||||
case TSDB_DATA_TYPE_FLOAT:
|
case TSDB_DATA_TYPE_FLOAT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
|
|
|
@ -547,6 +547,8 @@ static int32_t sifExecLogic(SLogicConditionNode *node, SIFCtx *ctx, SIFParam *ou
|
||||||
} else if (node->condType == LOGIC_COND_TYPE_NOT) {
|
} else if (node->condType == LOGIC_COND_TYPE_NOT) {
|
||||||
// taosArrayAddAll(output->result, params[m].result);
|
// taosArrayAddAll(output->result, params[m].result);
|
||||||
}
|
}
|
||||||
|
taosArraySort(output->result, idxUidCompare);
|
||||||
|
taosArrayRemoveDuplicate(output->result, idxUidCompare, NULL);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int32_t m = 0; m < node->pParameterList->length; m++) {
|
for (int32_t m = 0; m < node->pParameterList->length; m++) {
|
||||||
|
|
|
@ -578,8 +578,8 @@ int tfileWriterPut(TFileWriter* tw, void* data, bool order) {
|
||||||
// ugly code, refactor later
|
// ugly code, refactor later
|
||||||
for (size_t i = 0; i < sz; i++) {
|
for (size_t i = 0; i < sz; i++) {
|
||||||
TFileValue* v = taosArrayGetP((SArray*)data, i);
|
TFileValue* v = taosArrayGetP((SArray*)data, i);
|
||||||
taosArraySort(v->tableId, tfileUidCompare);
|
taosArraySort(v->tableId, idxUidCompare);
|
||||||
taosArrayRemoveDuplicate(v->tableId, tfileUidCompare, NULL);
|
taosArrayRemoveDuplicate(v->tableId, idxUidCompare, NULL);
|
||||||
int32_t tbsz = taosArrayGetSize(v->tableId);
|
int32_t tbsz = taosArrayGetSize(v->tableId);
|
||||||
fstOffset += TF_TABLE_TATOAL_SIZE(tbsz);
|
fstOffset += TF_TABLE_TATOAL_SIZE(tbsz);
|
||||||
}
|
}
|
||||||
|
@ -791,11 +791,6 @@ TFileReader* tfileGetReaderByCol(IndexTFile* tf, uint64_t suid, char* colName) {
|
||||||
return rd;
|
return rd;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tfileUidCompare(const void* a, const void* b) {
|
|
||||||
uint64_t l = *(uint64_t*)a;
|
|
||||||
uint64_t r = *(uint64_t*)b;
|
|
||||||
return l - r;
|
|
||||||
}
|
|
||||||
static int tfileStrCompare(const void* a, const void* b) {
|
static int tfileStrCompare(const void* a, const void* b) {
|
||||||
int ret = strcmp((char*)a, (char*)b);
|
int ret = strcmp((char*)a, (char*)b);
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
|
|
|
@ -327,13 +327,13 @@ TEST_F(UtilEnv, testFill) {
|
||||||
for (int i = 0; i < 1000000; i++) {
|
for (int i = 0; i < 1000000; i++) {
|
||||||
int64_t val = i;
|
int64_t val = i;
|
||||||
char buf[65] = {0};
|
char buf[65] = {0};
|
||||||
indexInt2str(val, buf, 1);
|
idxInt2str(val, buf, 1);
|
||||||
EXPECT_EQ(val, taosStr2int64(buf));
|
EXPECT_EQ(val, taosStr2int64(buf));
|
||||||
}
|
}
|
||||||
for (int i = 0; i < 1000000; i++) {
|
for (int i = 0; i < 1000000; i++) {
|
||||||
int64_t val = 0 - i;
|
int64_t val = 0 - i;
|
||||||
char buf[65] = {0};
|
char buf[65] = {0};
|
||||||
indexInt2str(val, buf, -1);
|
idxInt2str(val, buf, -1);
|
||||||
EXPECT_EQ(val, taosStr2int64(buf));
|
EXPECT_EQ(val, taosStr2int64(buf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ sql insert into db.ctb5 values(now, 5, "2")
|
||||||
|
|
||||||
sql create table db.ctb6 using db.stb tags(6, "102")
|
sql create table db.ctb6 using db.stb tags(6, "102")
|
||||||
sql insert into db.ctb6 values(now, 6, "2")
|
sql insert into db.ctb6 values(now, 6, "2")
|
||||||
|
// int
|
||||||
sql select * from db.stb where t1 = 1
|
sql select * from db.stb where t1 = 1
|
||||||
if $rows != 1 then
|
if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
|
|
Loading…
Reference in New Issue