commit
043776caab
|
@ -143,84 +143,84 @@ typedef struct {
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define SET_TYPED_DATA_MIN(_v, _type) \
|
#define SET_TYPED_DATA_MIN(_v, _type) \
|
||||||
do { \
|
do { \
|
||||||
switch (_type) { \
|
switch (_type) { \
|
||||||
case TSDB_DATA_TYPE_BOOL: \
|
case TSDB_DATA_TYPE_BOOL: \
|
||||||
case TSDB_DATA_TYPE_TINYINT: \
|
case TSDB_DATA_TYPE_TINYINT: \
|
||||||
*(int8_t *)(_v) = INT8_MIN; \
|
*(int8_t *)(_v) = INT8_MIN; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_SMALLINT: \
|
case TSDB_DATA_TYPE_SMALLINT: \
|
||||||
*(int16_t *)(_v) = INT16_MIN; \
|
*(int16_t *)(_v) = INT16_MIN; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_INT: \
|
case TSDB_DATA_TYPE_INT: \
|
||||||
*(int32_t *)(_v) = INT32_MIN; \
|
*(int32_t *)(_v) = INT32_MIN; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_BIGINT: \
|
case TSDB_DATA_TYPE_BIGINT: \
|
||||||
case TSDB_DATA_TYPE_TIMESTAMP: \
|
case TSDB_DATA_TYPE_TIMESTAMP: \
|
||||||
*(int64_t *)(_v) = INT64_MIN; \
|
*(int64_t *)(_v) = INT64_MIN; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_FLOAT: \
|
case TSDB_DATA_TYPE_FLOAT: \
|
||||||
*(float *)(_v) = FLT_MIN; \
|
*(float *)(_v) = FLT_MIN; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_DOUBLE: \
|
case TSDB_DATA_TYPE_DOUBLE: \
|
||||||
*(double *)(_v) = DBL_MIN; \
|
*(double *)(_v) = DBL_MIN; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_UTINYINT: \
|
case TSDB_DATA_TYPE_UTINYINT: \
|
||||||
*(uint8_t *)(_v) = 0; \
|
*(uint8_t *)(_v) = 0; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_USMALLINT: \
|
case TSDB_DATA_TYPE_USMALLINT: \
|
||||||
*(uint16_t *)(_v) = 0; \
|
*(uint16_t *)(_v) = 0; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_UBIGINT: \
|
case TSDB_DATA_TYPE_UBIGINT: \
|
||||||
*(uint64_t *)(_v) = 0; \
|
*(uint64_t *)(_v) = 0; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_UINT: \
|
case TSDB_DATA_TYPE_UINT: \
|
||||||
*(uint32_t *)(_v) = 0; \
|
*(uint32_t *)(_v) = 0; \
|
||||||
break; \
|
break; \
|
||||||
default: \
|
default: \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define SET_TYPED_DATA_MAX(_v, _type) \
|
#define SET_TYPED_DATA_MAX(_v, _type) \
|
||||||
do { \
|
do { \
|
||||||
switch (_type) { \
|
switch (_type) { \
|
||||||
case TSDB_DATA_TYPE_BOOL: \
|
case TSDB_DATA_TYPE_BOOL: \
|
||||||
case TSDB_DATA_TYPE_TINYINT: \
|
case TSDB_DATA_TYPE_TINYINT: \
|
||||||
*(int8_t *)(_v) = INT8_MAX; \
|
*(int8_t *)(_v) = INT8_MAX; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_SMALLINT: \
|
case TSDB_DATA_TYPE_SMALLINT: \
|
||||||
*(int16_t *)(_v) = INT16_MAX; \
|
*(int16_t *)(_v) = INT16_MAX; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_INT: \
|
case TSDB_DATA_TYPE_INT: \
|
||||||
*(int32_t *)(_v) = INT32_MAX; \
|
*(int32_t *)(_v) = INT32_MAX; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_BIGINT: \
|
case TSDB_DATA_TYPE_BIGINT: \
|
||||||
case TSDB_DATA_TYPE_TIMESTAMP: \
|
case TSDB_DATA_TYPE_TIMESTAMP: \
|
||||||
*(int64_t *)(_v) = INT64_MAX; \
|
*(int64_t *)(_v) = INT64_MAX; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_FLOAT: \
|
case TSDB_DATA_TYPE_FLOAT: \
|
||||||
*(float *)(_v) = FLT_MAX; \
|
*(float *)(_v) = FLT_MAX; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_DOUBLE: \
|
case TSDB_DATA_TYPE_DOUBLE: \
|
||||||
*(double *)(_v) = DBL_MAX; \
|
*(double *)(_v) = DBL_MAX; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_UTINYINT: \
|
case TSDB_DATA_TYPE_UTINYINT: \
|
||||||
*(uint8_t *)(_v) = UINT8_MAX; \
|
*(uint8_t *)(_v) = UINT8_MAX; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_USMALLINT: \
|
case TSDB_DATA_TYPE_USMALLINT: \
|
||||||
*(uint16_t *)(_v) = UINT16_MAX; \
|
*(uint16_t *)(_v) = UINT16_MAX; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_UINT: \
|
case TSDB_DATA_TYPE_UINT: \
|
||||||
*(uint32_t *)(_v) = UINT32_MAX; \
|
*(uint32_t *)(_v) = UINT32_MAX; \
|
||||||
break; \
|
break; \
|
||||||
case TSDB_DATA_TYPE_UBIGINT: \
|
case TSDB_DATA_TYPE_UBIGINT: \
|
||||||
*(uint64_t *)(_v) = UINT64_MAX; \
|
*(uint64_t *)(_v) = UINT64_MAX; \
|
||||||
break; \
|
break; \
|
||||||
default: \
|
default: \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define NUM_TO_STRING(_inputType, _input, _outputBytes, _output) \
|
#define NUM_TO_STRING(_inputType, _input, _outputBytes, _output) \
|
||||||
|
@ -260,10 +260,9 @@ typedef struct {
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
// TODO: use varchar(0) to represent NULL type
|
||||||
//TODO: use varchar(0) to represent NULL type
|
#define IS_VAR_NULL_TYPE(_t, _b) ((_t) == TSDB_DATA_TYPE_VARCHAR && (_b) == 0)
|
||||||
#define IS_VAR_NULL_TYPE(_t, _b) ((_t) == TSDB_DATA_TYPE_VARCHAR && (_b) == 0)
|
#define IS_NULL_TYPE(_t) ((_t) == TSDB_DATA_TYPE_NULL)
|
||||||
#define IS_NULL_TYPE(_t) ((_t) == TSDB_DATA_TYPE_NULL)
|
|
||||||
|
|
||||||
#define IS_SIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_TINYINT && (_t) <= TSDB_DATA_TYPE_BIGINT)
|
#define IS_SIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_TINYINT && (_t) <= TSDB_DATA_TYPE_BIGINT)
|
||||||
#define IS_UNSIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_UTINYINT && (_t) <= TSDB_DATA_TYPE_UBIGINT)
|
#define IS_UNSIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_UTINYINT && (_t) <= TSDB_DATA_TYPE_UBIGINT)
|
||||||
|
@ -329,7 +328,7 @@ typedef struct tDataTypeDescriptor {
|
||||||
int16_t type;
|
int16_t type;
|
||||||
int16_t nameLen;
|
int16_t nameLen;
|
||||||
int32_t bytes;
|
int32_t bytes;
|
||||||
char * name;
|
char *name;
|
||||||
int64_t minValue;
|
int64_t minValue;
|
||||||
int64_t maxValue;
|
int64_t maxValue;
|
||||||
int32_t (*compFunc)(const char *const input, int32_t inputSize, const int32_t nelements, char *const output,
|
int32_t (*compFunc)(const char *const input, int32_t inputSize, const int32_t nelements, char *const output,
|
||||||
|
|
|
@ -81,11 +81,11 @@ static FORCE_INLINE double taos_align_get_double(const char *pBuf) {
|
||||||
typedef uint16_t VarDataLenT; // maxVarDataLen: 32767
|
typedef uint16_t VarDataLenT; // maxVarDataLen: 32767
|
||||||
#define VARSTR_HEADER_SIZE sizeof(VarDataLenT)
|
#define VARSTR_HEADER_SIZE sizeof(VarDataLenT)
|
||||||
|
|
||||||
#define varDataLen(v) ((VarDataLenT *)(v))[0]
|
#define varDataLen(v) ((VarDataLenT *)(v))[0]
|
||||||
#define varDataVal(v) ((char *)(v) + VARSTR_HEADER_SIZE)
|
#define varDataVal(v) ((char *)(v) + VARSTR_HEADER_SIZE)
|
||||||
#define varDataTLen(v) (sizeof(VarDataLenT) + varDataLen(v))
|
#define varDataTLen(v) (sizeof(VarDataLenT) + varDataLen(v))
|
||||||
|
|
||||||
#define NCHAR_WIDTH_TO_BYTES(n) ((n) * TSDB_NCHAR_SIZE + VARSTR_HEADER_SIZE)
|
#define NCHAR_WIDTH_TO_BYTES(n) ((n)*TSDB_NCHAR_SIZE + VARSTR_HEADER_SIZE)
|
||||||
|
|
||||||
typedef int32_t VarDataOffsetT;
|
typedef int32_t VarDataOffsetT;
|
||||||
|
|
||||||
|
|
|
@ -89,13 +89,13 @@ void metaReaderClear(SMetaReader *pReader);
|
||||||
int32_t metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid);
|
int32_t metaGetTableEntryByUid(SMetaReader *pReader, tb_uid_t uid);
|
||||||
int32_t metaReadNext(SMetaReader *pReader);
|
int32_t metaReadNext(SMetaReader *pReader);
|
||||||
const void *metaGetTableTagVal(SMetaEntry *pEntry, int16_t type, STagVal *tagVal);
|
const void *metaGetTableTagVal(SMetaEntry *pEntry, int16_t type, STagVal *tagVal);
|
||||||
int metaGetTableNameByUid(void* meta, uint64_t uid, char* tbName);
|
int metaGetTableNameByUid(void *meta, uint64_t uid, char *tbName);
|
||||||
|
|
||||||
typedef struct SMetaFltParam {
|
typedef struct SMetaFltParam {
|
||||||
tb_uid_t suid;
|
tb_uid_t suid;
|
||||||
int16_t cid;
|
int16_t cid;
|
||||||
int16_t type;
|
int16_t type;
|
||||||
char *val;
|
void *val;
|
||||||
bool reverse;
|
bool reverse;
|
||||||
int (*filterFunc)(void *a, void *b, int16_t type);
|
int (*filterFunc)(void *a, void *b, int16_t type);
|
||||||
|
|
||||||
|
|
|
@ -315,7 +315,8 @@ static int tagIdxKeyCmpr(const void *pKey1, int kLen1, const void *pKey2, int kL
|
||||||
return 1;
|
return 1;
|
||||||
} else if (!pTagIdxKey1->isNull && !pTagIdxKey2->isNull) {
|
} else if (!pTagIdxKey1->isNull && !pTagIdxKey2->isNull) {
|
||||||
// all not NULL, compr tag vals
|
// all not NULL, compr tag vals
|
||||||
c = doCompare(pTagIdxKey1->data, pTagIdxKey2->data, pTagIdxKey1->type, 0);
|
__compar_fn_t func = getComparFunc(pTagIdxKey1->type, 0);
|
||||||
|
c = func(pTagIdxKey1->data, pTagIdxKey2->data);
|
||||||
if (c) return c;
|
if (c) return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,9 +98,9 @@ tb_uid_t metaGetTableEntryUidByName(SMeta *pMeta, const char *name) {
|
||||||
return uid;
|
return uid;
|
||||||
}
|
}
|
||||||
|
|
||||||
int metaGetTableNameByUid(void* meta, uint64_t uid, char* tbName) {
|
int metaGetTableNameByUid(void *meta, uint64_t uid, char *tbName) {
|
||||||
SMetaReader mr = {0};
|
SMetaReader mr = {0};
|
||||||
metaReaderInit(&mr, (SMeta*)meta, 0);
|
metaReaderInit(&mr, (SMeta *)meta, 0);
|
||||||
metaGetTableEntryByUid(&mr, uid);
|
metaGetTableEntryByUid(&mr, uid);
|
||||||
|
|
||||||
STR_TO_VARSTR(tbName, mr.me.name);
|
STR_TO_VARSTR(tbName, mr.me.name);
|
||||||
|
|
|
@ -793,9 +793,6 @@ static int metaUpdateTableTagVal(SMeta *pMeta, int64_t version, SVAlterTbReq *pA
|
||||||
goto _err;
|
goto _err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iCol == 0) {
|
|
||||||
// TODO : need to update tag index
|
|
||||||
}
|
|
||||||
ctbEntry.version = version;
|
ctbEntry.version = version;
|
||||||
if (pTagSchema->nCols == 1 && pTagSchema->pSchema[0].type == TSDB_DATA_TYPE_JSON) {
|
if (pTagSchema->nCols == 1 && pTagSchema->pSchema[0].type == TSDB_DATA_TYPE_JSON) {
|
||||||
ctbEntry.ctbEntry.pTags = taosMemoryMalloc(pAlterTbReq->nTagVal);
|
ctbEntry.ctbEntry.pTags = taosMemoryMalloc(pAlterTbReq->nTagVal);
|
||||||
|
@ -849,6 +846,10 @@ static int metaUpdateTableTagVal(SMeta *pMeta, int64_t version, SVAlterTbReq *pA
|
||||||
// save to uid.idx
|
// save to uid.idx
|
||||||
tdbTbUpsert(pMeta->pUidIdx, &ctbEntry.uid, sizeof(tb_uid_t), &version, sizeof(version), &pMeta->txn);
|
tdbTbUpsert(pMeta->pUidIdx, &ctbEntry.uid, sizeof(tb_uid_t), &version, sizeof(version), &pMeta->txn);
|
||||||
|
|
||||||
|
if (iCol == 0) {
|
||||||
|
metaUpdateTagIdx(pMeta, &ctbEntry);
|
||||||
|
}
|
||||||
|
|
||||||
tDecoderClear(&dc1);
|
tDecoderClear(&dc1);
|
||||||
tDecoderClear(&dc2);
|
tDecoderClear(&dc2);
|
||||||
if (ctbEntry.ctbEntry.pTags) taosMemoryFree((void *)ctbEntry.ctbEntry.pTags);
|
if (ctbEntry.ctbEntry.pTags) taosMemoryFree((void *)ctbEntry.ctbEntry.pTags);
|
||||||
|
@ -1131,7 +1132,7 @@ static int metaUpdateTagIdx(SMeta *pMeta, const SMetaEntry *pCtbEntry) {
|
||||||
pCtbEntry->uid, &pTagIdxKey, &nTagIdxKey) < 0) {
|
pCtbEntry->uid, &pTagIdxKey, &nTagIdxKey) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
tdbTbInsert(pMeta->pTagIdx, pTagIdxKey, nTagIdxKey, NULL, 0, &pMeta->txn);
|
tdbTbUpsert(pMeta->pTagIdx, pTagIdxKey, nTagIdxKey, NULL, 0, &pMeta->txn);
|
||||||
metaDestroyTagIdxKey(pTagIdxKey);
|
metaDestroyTagIdxKey(pTagIdxKey);
|
||||||
tDecoderClear(&dc);
|
tDecoderClear(&dc);
|
||||||
tdbFree(pData);
|
tdbFree(pData);
|
||||||
|
|
|
@ -385,6 +385,37 @@ static int32_t sifDoIndex(SIFParam *left, SIFParam *right, int8_t operType, SIFP
|
||||||
.reverse = reverse,
|
.reverse = reverse,
|
||||||
.filterFunc = filterFunc};
|
.filterFunc = filterFunc};
|
||||||
|
|
||||||
|
char buf[128] = {0};
|
||||||
|
float f = 0.0;
|
||||||
|
double d = 0.0;
|
||||||
|
if (IS_VAR_DATA_TYPE(left->colValType)) {
|
||||||
|
if (!IS_VAR_DATA_TYPE(right->colValType)) {
|
||||||
|
NUM_TO_STRING(right->colValType, right->condValue, sizeof(buf) - 2, buf + VARSTR_HEADER_SIZE);
|
||||||
|
varDataSetLen(buf, strlen(buf + VARSTR_HEADER_SIZE));
|
||||||
|
param.val = buf;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (left->colValType == TSDB_DATA_TYPE_FLOAT) {
|
||||||
|
if (right->colValType == TSDB_DATA_TYPE_DOUBLE) {
|
||||||
|
f = GET_DOUBLE_VAL(right->condValue);
|
||||||
|
param.val = &f;
|
||||||
|
} else if (right->colValType == TSDB_DATA_TYPE_BIGINT) {
|
||||||
|
f = *(int64_t *)(right->condValue);
|
||||||
|
param.val = &f;
|
||||||
|
} else {
|
||||||
|
f = *(int32_t *)(right->condValue);
|
||||||
|
param.val = &f;
|
||||||
|
}
|
||||||
|
} else if (left->colValType == TSDB_DATA_TYPE_DOUBLE) {
|
||||||
|
if (right->colValType == TSDB_DATA_TYPE_DOUBLE) {
|
||||||
|
d = GET_DOUBLE_VAL(right->condValue);
|
||||||
|
param.val = &d;
|
||||||
|
} else if (right->colValType == TSDB_DATA_TYPE_BIGINT) {
|
||||||
|
d = *(int64_t *)(right->condValue);
|
||||||
|
param.val = &d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
ret = metaFilterTableIds(arg->metaEx, ¶m, output->result);
|
ret = metaFilterTableIds(arg->metaEx, ¶m, output->result);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue