more code

This commit is contained in:
Hongze Cheng 2024-02-21 15:21:46 +08:00
parent 4b71031014
commit b0b71bc3c2
3 changed files with 34 additions and 40 deletions

View File

@ -192,15 +192,10 @@ struct SValue {
};
#define TD_MAX_PRIMARY_KEY_COL 8
typedef struct {
int8_t type;
SValue value;
} STypeValue;
struct SRowKey {
TSKEY ts;
uint8_t numOfKeys;
STypeValue keys[TD_MAX_PRIMARY_KEY_COL];
TSKEY ts;
uint8_t numOfKeys;
SValue keys[TD_MAX_PRIMARY_KEY_COL];
};
struct SColVal {

View File

@ -1175,9 +1175,9 @@ void tRowGetKey(SRow *pRow, SRowKey *key) {
}
for (uint8_t iKey = 0; iKey < key->numOfKeys; iKey++) {
int32_t index;
uint8_t *pData;
STypeValue *pValue = &key->keys[iKey];
int32_t index;
uint8_t *pData;
SValue *pValue = &key->keys[iKey];
pEnd -= tGetI8(pEnd, &pValue->type, false);
pEnd -= tGetI32v(pEnd, &index, false);
@ -1192,10 +1192,10 @@ void tRowGetKey(SRow *pRow, SRowKey *key) {
pData += tGetI16v(pData, NULL, true);
if (IS_VAR_DATA_TYPE(pValue->type)) {
pData += tGetU32v(pData, &pValue->value.nData, true);
pValue->value.pData = pData;
pData += tGetU32v(pData, &pValue->nData, true);
pValue->pData = pData;
} else {
memcpy(&pValue->value.val, pData, TYPE_BYTES[pValue->type]);
memcpy(&pValue->val, pData, TYPE_BYTES[pValue->type]);
}
}
} else { // Tuple format
@ -1222,17 +1222,17 @@ void tRowGetKey(SRow *pRow, SRowKey *key) {
}
for (uint8_t iKey = 0; iKey < key->numOfKeys; iKey++) {
int32_t offset;
STypeValue *pValue = &key->keys[iKey];
int32_t offset;
SValue *pValue = &key->keys[iKey];
pEnd -= tGetI8(pEnd, &pValue->type, false);
pEnd -= tGetI32v(pEnd, &offset, false);
if (IS_VAR_DATA_TYPE(key->keys[iKey].type)) {
pValue->value.pData = pv + *(int32_t *)(pf + offset);
pValue->value.pData += tGetU32v(pValue->value.pData, &pValue->value.nData, true);
pValue->pData = pv + *(int32_t *)(pf + offset);
pValue->pData += tGetU32v(pValue->pData, &pValue->nData, true);
} else {
memcpy(&key->keys[iKey].value.val, pf + offset, TYPE_BYTES[key->keys[iKey].type]);
memcpy(&key->keys[iKey].val, pf + offset, TYPE_BYTES[key->keys[iKey].type]);
}
}
}
@ -1250,45 +1250,44 @@ void tRowGetKey(SRow *pRow, SRowKey *key) {
} \
} while (0)
static int32_t tTypeValueCmpr(const STypeValue *tv1, const STypeValue *tv2) {
static int32_t tValueCompare(const SValue *tv1, const SValue *tv2) {
ASSERT(tv1->type == tv2->type);
switch (tv1->type) {
case TSDB_DATA_TYPE_BOOL:
case TSDB_DATA_TYPE_TINYINT:
T_COMPARE_SCALAR_VALUE(int8_t, &tv1->value.val, &tv2->value.val);
T_COMPARE_SCALAR_VALUE(int8_t, &tv1->val, &tv2->val);
case TSDB_DATA_TYPE_SMALLINT:
T_COMPARE_SCALAR_VALUE(int16_t, &tv1->value.val, &tv2->value.val);
T_COMPARE_SCALAR_VALUE(int16_t, &tv1->val, &tv2->val);
case TSDB_DATA_TYPE_INT:
T_COMPARE_SCALAR_VALUE(int32_t, &tv1->value.val, &tv2->value.val);
T_COMPARE_SCALAR_VALUE(int32_t, &tv1->val, &tv2->val);
case TSDB_DATA_TYPE_BIGINT:
case TSDB_DATA_TYPE_TIMESTAMP:
T_COMPARE_SCALAR_VALUE(int64_t, &tv1->value.val, &tv2->value.val);
T_COMPARE_SCALAR_VALUE(int64_t, &tv1->val, &tv2->val);
case TSDB_DATA_TYPE_FLOAT:
T_COMPARE_SCALAR_VALUE(float, &tv1->value.val, &tv2->value.val);
T_COMPARE_SCALAR_VALUE(float, &tv1->val, &tv2->val);
case TSDB_DATA_TYPE_DOUBLE:
T_COMPARE_SCALAR_VALUE(double, &tv1->value.val, &tv2->value.val);
T_COMPARE_SCALAR_VALUE(double, &tv1->val, &tv2->val);
case TSDB_DATA_TYPE_UTINYINT:
T_COMPARE_SCALAR_VALUE(uint8_t, &tv1->value.val, &tv2->value.val);
T_COMPARE_SCALAR_VALUE(uint8_t, &tv1->val, &tv2->val);
case TSDB_DATA_TYPE_USMALLINT:
T_COMPARE_SCALAR_VALUE(uint16_t, &tv1->value.val, &tv2->value.val);
T_COMPARE_SCALAR_VALUE(uint16_t, &tv1->val, &tv2->val);
case TSDB_DATA_TYPE_UINT:
T_COMPARE_SCALAR_VALUE(uint32_t, &tv1->value.val, &tv2->value.val);
T_COMPARE_SCALAR_VALUE(uint32_t, &tv1->val, &tv2->val);
case TSDB_DATA_TYPE_UBIGINT:
T_COMPARE_SCALAR_VALUE(uint64_t, &tv1->value.val, &tv2->value.val);
T_COMPARE_SCALAR_VALUE(uint64_t, &tv1->val, &tv2->val);
case TSDB_DATA_TYPE_GEOMETRY:
case TSDB_DATA_TYPE_BINARY: {
return strcmp((const char *)tv1->value.pData, (const char *)tv2->value.pData);
return strcmp((const char *)tv1->pData, (const char *)tv2->pData);
}
case TSDB_DATA_TYPE_NCHAR: {
int32_t ret = tasoUcs4Compare((TdUcs4 *)tv1->value.pData, (TdUcs4 *)tv2->value.pData,
tv1->value.nData < tv2->value.nData ? tv1->value.nData : tv2->value.nData);
return ret ? ret : (tv1->value.nData < tv2->value.nData ? -1 : (tv1->value.nData > tv2->value.nData ? 1 : 0));
int32_t ret = tasoUcs4Compare((TdUcs4 *)tv1->pData, (TdUcs4 *)tv2->pData,
tv1->nData < tv2->nData ? tv1->nData : tv2->nData);
return ret ? ret : (tv1->nData < tv2->nData ? -1 : (tv1->nData > tv2->nData ? 1 : 0));
}
case TSDB_DATA_TYPE_VARBINARY: {
int32_t ret = memcmp(tv1->value.pData, tv2->value.pData,
tv1->value.nData < tv2->value.nData ? tv1->value.nData : tv2->value.nData);
return ret ? ret : (tv1->value.nData < tv2->value.nData ? -1 : (tv1->value.nData > tv2->value.nData ? 1 : 0));
int32_t ret = memcmp(tv1->pData, tv2->pData, tv1->nData < tv2->nData ? tv1->nData : tv2->nData);
return ret ? ret : (tv1->nData < tv2->nData ? -1 : (tv1->nData > tv2->nData ? 1 : 0));
}
case TSDB_DATA_TYPE_DECIMAL:
ASSERT(0);
@ -1311,7 +1310,7 @@ int32_t tRowKeyCmpr(const void *p1, const void *p2) {
}
for (uint8_t iKey = 0; iKey < key1->numOfKeys; iKey++) {
int32_t ret = tTypeValueCmpr(&key1->keys[iKey], &key2->keys[iKey]);
int32_t ret = tValueCompare(&key1->keys[iKey], &key2->keys[iKey]);
if (ret) return ret;
}

View File

@ -614,8 +614,8 @@ void tsdbRowGetKey(TSDBROW *row, STsdbRowKey *key) {
if (pColData->cflag & COL_IS_KEY) {
SColVal cv;
tColDataGetValue(pColData, row->iRow, &cv);
key->key.keys[key->key.numOfKeys].type = pColData->type;
key->key.keys[key->key.numOfKeys].value = cv.value;
ASSERT(COL_VAL_IS_VALUE(&cv));
key->key.keys[key->key.numOfKeys] = cv.value;
key->key.numOfKeys++;
} else {
break;