fix more
This commit is contained in:
parent
5be361ee08
commit
0ca19fb42b
|
@ -1024,6 +1024,11 @@ static int32_t tCompTimestampEnd(SCompressor *pCmprsor, const uint8_t **ppData,
|
||||||
static int32_t tCompBinaryStart(SCompressor *pCmprsor, int8_t type, int8_t cmprAlg);
|
static int32_t tCompBinaryStart(SCompressor *pCmprsor, int8_t type, int8_t cmprAlg);
|
||||||
static int32_t tCompBinary(SCompressor *pCmprsor, const void *pData, int32_t nData);
|
static int32_t tCompBinary(SCompressor *pCmprsor, const void *pData, int32_t nData);
|
||||||
static int32_t tCompBinaryEnd(SCompressor *pCmprsor, const uint8_t **ppData, int32_t *nData);
|
static int32_t tCompBinaryEnd(SCompressor *pCmprsor, const uint8_t **ppData, int32_t *nData);
|
||||||
|
|
||||||
|
static FORCE_INLINE int64_t tI8ToI64(const void *pData) { return *(int8_t *)pData; }
|
||||||
|
static FORCE_INLINE int64_t tI16ToI64(const void *pData) { return *(int16_t *)pData; }
|
||||||
|
static FORCE_INLINE int64_t tI32ToI64(const void *pData) { return *(int32_t *)pData; }
|
||||||
|
static FORCE_INLINE int64_t tI64ToI64(const void *pData) { return *(int64_t *)pData; }
|
||||||
static struct {
|
static struct {
|
||||||
int8_t type;
|
int8_t type;
|
||||||
int32_t bytes;
|
int32_t bytes;
|
||||||
|
@ -1031,122 +1036,148 @@ static struct {
|
||||||
int32_t (*startFn)(SCompressor *, int8_t type, int8_t cmprAlg);
|
int32_t (*startFn)(SCompressor *, int8_t type, int8_t cmprAlg);
|
||||||
int32_t (*cmprFn)(SCompressor *, const void *, int32_t nData);
|
int32_t (*cmprFn)(SCompressor *, const void *, int32_t nData);
|
||||||
int32_t (*endFn)(SCompressor *, const uint8_t **, int32_t *);
|
int32_t (*endFn)(SCompressor *, const uint8_t **, int32_t *);
|
||||||
|
int64_t (*getI64)(const void *pData);
|
||||||
} DATA_TYPE_INFO[] = {
|
} DATA_TYPE_INFO[] = {
|
||||||
{.type = TSDB_DATA_TYPE_NULL, .bytes = 0, .isVarLen = 0, .startFn = NULL, .cmprFn = NULL, .endFn = NULL},
|
{.type = TSDB_DATA_TYPE_NULL,
|
||||||
|
.bytes = 0,
|
||||||
|
.isVarLen = 0,
|
||||||
|
.startFn = NULL,
|
||||||
|
.cmprFn = NULL,
|
||||||
|
.endFn = NULL,
|
||||||
|
.getI64 = NULL},
|
||||||
{.type = TSDB_DATA_TYPE_BOOL,
|
{.type = TSDB_DATA_TYPE_BOOL,
|
||||||
.bytes = 1,
|
.bytes = 1,
|
||||||
.isVarLen = 0,
|
.isVarLen = 0,
|
||||||
.startFn = tCompBoolStart,
|
.startFn = tCompBoolStart,
|
||||||
.cmprFn = tCompBool,
|
.cmprFn = tCompBool,
|
||||||
.endFn = tCompBoolEnd},
|
.endFn = tCompBoolEnd,
|
||||||
|
.getI64 = NULL},
|
||||||
{.type = TSDB_DATA_TYPE_TINYINT,
|
{.type = TSDB_DATA_TYPE_TINYINT,
|
||||||
.bytes = 1,
|
.bytes = 1,
|
||||||
.isVarLen = 0,
|
.isVarLen = 0,
|
||||||
.startFn = tCompIntStart,
|
.startFn = tCompIntStart,
|
||||||
.cmprFn = tCompInt,
|
.cmprFn = tCompInt,
|
||||||
.endFn = tCompIntEnd},
|
.endFn = tCompIntEnd,
|
||||||
|
.getI64 = tI8ToI64},
|
||||||
{.type = TSDB_DATA_TYPE_SMALLINT,
|
{.type = TSDB_DATA_TYPE_SMALLINT,
|
||||||
.bytes = 2,
|
.bytes = 2,
|
||||||
.isVarLen = 0,
|
.isVarLen = 0,
|
||||||
.startFn = tCompIntStart,
|
.startFn = tCompIntStart,
|
||||||
.cmprFn = tCompInt,
|
.cmprFn = tCompInt,
|
||||||
.endFn = tCompIntEnd},
|
.endFn = tCompIntEnd,
|
||||||
|
.getI64 = tI16ToI64},
|
||||||
{.type = TSDB_DATA_TYPE_INT,
|
{.type = TSDB_DATA_TYPE_INT,
|
||||||
.bytes = 4,
|
.bytes = 4,
|
||||||
.isVarLen = 0,
|
.isVarLen = 0,
|
||||||
.startFn = tCompIntStart,
|
.startFn = tCompIntStart,
|
||||||
.cmprFn = tCompInt,
|
.cmprFn = tCompInt,
|
||||||
.endFn = tCompIntEnd},
|
.endFn = tCompIntEnd,
|
||||||
|
.getI64 = tI32ToI64},
|
||||||
{.type = TSDB_DATA_TYPE_BIGINT,
|
{.type = TSDB_DATA_TYPE_BIGINT,
|
||||||
.bytes = 8,
|
.bytes = 8,
|
||||||
.isVarLen = 0,
|
.isVarLen = 0,
|
||||||
.startFn = tCompIntStart,
|
.startFn = tCompIntStart,
|
||||||
.cmprFn = tCompInt,
|
.cmprFn = tCompInt,
|
||||||
.endFn = tCompIntEnd},
|
.endFn = tCompIntEnd,
|
||||||
|
.getI64 = tI64ToI64},
|
||||||
{.type = TSDB_DATA_TYPE_FLOAT,
|
{.type = TSDB_DATA_TYPE_FLOAT,
|
||||||
.bytes = 4,
|
.bytes = 4,
|
||||||
.isVarLen = 0,
|
.isVarLen = 0,
|
||||||
.startFn = tCompFloatStart,
|
.startFn = tCompFloatStart,
|
||||||
.cmprFn = tCompFloat,
|
.cmprFn = tCompFloat,
|
||||||
.endFn = tCompFloatEnd},
|
.endFn = tCompFloatEnd,
|
||||||
|
.getI64 = NULL},
|
||||||
{.type = TSDB_DATA_TYPE_DOUBLE,
|
{.type = TSDB_DATA_TYPE_DOUBLE,
|
||||||
.bytes = 8,
|
.bytes = 8,
|
||||||
.isVarLen = 0,
|
.isVarLen = 0,
|
||||||
.startFn = tCompDoubleStart,
|
.startFn = tCompDoubleStart,
|
||||||
.cmprFn = tCompDouble,
|
.cmprFn = tCompDouble,
|
||||||
.endFn = tCompDoubleEnd},
|
.endFn = tCompDoubleEnd,
|
||||||
|
.getI64 = NULL},
|
||||||
{.type = TSDB_DATA_TYPE_VARCHAR,
|
{.type = TSDB_DATA_TYPE_VARCHAR,
|
||||||
.bytes = 1,
|
.bytes = 1,
|
||||||
.isVarLen = 1,
|
.isVarLen = 1,
|
||||||
.startFn = tCompBinaryStart,
|
.startFn = tCompBinaryStart,
|
||||||
.cmprFn = tCompBinary,
|
.cmprFn = tCompBinary,
|
||||||
.endFn = tCompBinaryEnd},
|
.endFn = tCompBinaryEnd,
|
||||||
|
.getI64 = NULL},
|
||||||
{.type = TSDB_DATA_TYPE_TIMESTAMP,
|
{.type = TSDB_DATA_TYPE_TIMESTAMP,
|
||||||
.bytes = 8,
|
.bytes = 8,
|
||||||
.isVarLen = 0,
|
.isVarLen = 0,
|
||||||
.startFn = tCompTimestampStart,
|
.startFn = tCompTimestampStart,
|
||||||
.cmprFn = tCompTimestamp,
|
.cmprFn = tCompTimestamp,
|
||||||
.endFn = tCompTimestampEnd},
|
.endFn = tCompTimestampEnd,
|
||||||
|
.getI64 = NULL},
|
||||||
{.type = TSDB_DATA_TYPE_NCHAR,
|
{.type = TSDB_DATA_TYPE_NCHAR,
|
||||||
.bytes = 1,
|
.bytes = 1,
|
||||||
.isVarLen = 1,
|
.isVarLen = 1,
|
||||||
.startFn = tCompBinaryStart,
|
.startFn = tCompBinaryStart,
|
||||||
.cmprFn = tCompBinary,
|
.cmprFn = tCompBinary,
|
||||||
.endFn = tCompBinaryEnd},
|
.endFn = tCompBinaryEnd,
|
||||||
|
.getI64 = NULL},
|
||||||
{.type = TSDB_DATA_TYPE_UTINYINT,
|
{.type = TSDB_DATA_TYPE_UTINYINT,
|
||||||
.bytes = 1,
|
.bytes = 1,
|
||||||
.isVarLen = 0,
|
.isVarLen = 0,
|
||||||
.startFn = tCompIntStart,
|
.startFn = tCompIntStart,
|
||||||
.cmprFn = tCompInt,
|
.cmprFn = tCompInt,
|
||||||
.endFn = tCompIntEnd},
|
.endFn = tCompIntEnd,
|
||||||
|
.getI64 = tI8ToI64},
|
||||||
{.type = TSDB_DATA_TYPE_USMALLINT,
|
{.type = TSDB_DATA_TYPE_USMALLINT,
|
||||||
.bytes = 2,
|
.bytes = 2,
|
||||||
.isVarLen = 0,
|
.isVarLen = 0,
|
||||||
.startFn = tCompIntStart,
|
.startFn = tCompIntStart,
|
||||||
.cmprFn = tCompInt,
|
.cmprFn = tCompInt,
|
||||||
.endFn = tCompIntEnd},
|
.endFn = tCompIntEnd,
|
||||||
|
.getI64 = tI16ToI64},
|
||||||
{.type = TSDB_DATA_TYPE_UINT,
|
{.type = TSDB_DATA_TYPE_UINT,
|
||||||
.bytes = 4,
|
.bytes = 4,
|
||||||
.isVarLen = 0,
|
.isVarLen = 0,
|
||||||
.startFn = tCompIntStart,
|
.startFn = tCompIntStart,
|
||||||
.cmprFn = tCompInt,
|
.cmprFn = tCompInt,
|
||||||
.endFn = tCompIntEnd},
|
.endFn = tCompIntEnd,
|
||||||
|
.getI64 = tI32ToI64},
|
||||||
{.type = TSDB_DATA_TYPE_UBIGINT,
|
{.type = TSDB_DATA_TYPE_UBIGINT,
|
||||||
.bytes = 8,
|
.bytes = 8,
|
||||||
.isVarLen = 0,
|
.isVarLen = 0,
|
||||||
.startFn = tCompIntStart,
|
.startFn = tCompIntStart,
|
||||||
.cmprFn = tCompInt,
|
.cmprFn = tCompInt,
|
||||||
.endFn = tCompIntEnd},
|
.endFn = tCompIntEnd,
|
||||||
|
.getI64 = tI64ToI64},
|
||||||
{.type = TSDB_DATA_TYPE_JSON,
|
{.type = TSDB_DATA_TYPE_JSON,
|
||||||
.bytes = 1,
|
.bytes = 1,
|
||||||
.isVarLen = 1,
|
.isVarLen = 1,
|
||||||
.startFn = tCompBinaryStart,
|
.startFn = tCompBinaryStart,
|
||||||
.cmprFn = tCompBinary,
|
.cmprFn = tCompBinary,
|
||||||
.endFn = tCompBinaryEnd},
|
.endFn = tCompBinaryEnd,
|
||||||
|
.getI64 = NULL},
|
||||||
{.type = TSDB_DATA_TYPE_VARBINARY,
|
{.type = TSDB_DATA_TYPE_VARBINARY,
|
||||||
.bytes = 1,
|
.bytes = 1,
|
||||||
.isVarLen = 1,
|
.isVarLen = 1,
|
||||||
.startFn = tCompBinaryStart,
|
.startFn = tCompBinaryStart,
|
||||||
.cmprFn = tCompBinary,
|
.cmprFn = tCompBinary,
|
||||||
.endFn = tCompBinaryEnd},
|
.endFn = tCompBinaryEnd,
|
||||||
|
.getI64 = NULL},
|
||||||
{.type = TSDB_DATA_TYPE_DECIMAL,
|
{.type = TSDB_DATA_TYPE_DECIMAL,
|
||||||
.bytes = 1,
|
.bytes = 1,
|
||||||
.isVarLen = 1,
|
.isVarLen = 1,
|
||||||
.startFn = tCompBinaryStart,
|
.startFn = tCompBinaryStart,
|
||||||
.cmprFn = tCompBinary,
|
.cmprFn = tCompBinary,
|
||||||
.endFn = tCompBinaryEnd},
|
.endFn = tCompBinaryEnd,
|
||||||
|
.getI64 = NULL},
|
||||||
{.type = TSDB_DATA_TYPE_BLOB,
|
{.type = TSDB_DATA_TYPE_BLOB,
|
||||||
.bytes = 1,
|
.bytes = 1,
|
||||||
.isVarLen = 1,
|
.isVarLen = 1,
|
||||||
.startFn = tCompBinaryStart,
|
.startFn = tCompBinaryStart,
|
||||||
.cmprFn = tCompBinary,
|
.cmprFn = tCompBinary,
|
||||||
.endFn = tCompBinaryEnd},
|
.endFn = tCompBinaryEnd,
|
||||||
|
.getI64 = NULL},
|
||||||
{.type = TSDB_DATA_TYPE_MEDIUMBLOB,
|
{.type = TSDB_DATA_TYPE_MEDIUMBLOB,
|
||||||
.bytes = 1,
|
.bytes = 1,
|
||||||
.isVarLen = 1,
|
.isVarLen = 1,
|
||||||
.startFn = tCompBinaryStart,
|
.startFn = tCompBinaryStart,
|
||||||
.cmprFn = tCompBinary,
|
.cmprFn = tCompBinary,
|
||||||
.endFn = tCompBinaryEnd},
|
.endFn = tCompBinaryEnd,
|
||||||
|
.getI64 = NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SCompressor {
|
struct SCompressor {
|
||||||
|
@ -1442,8 +1473,7 @@ static int32_t tCompInt(SCompressor *pCmprsor, const void *pData, int32_t nData)
|
||||||
ASSERT(nData == DATA_TYPE_INFO[pCmprsor->type].bytes);
|
ASSERT(nData == DATA_TYPE_INFO[pCmprsor->type].bytes);
|
||||||
|
|
||||||
if (pCmprsor->pBuf[0] == 0) {
|
if (pCmprsor->pBuf[0] == 0) {
|
||||||
int64_t val = 0;
|
int64_t val = DATA_TYPE_INFO[pCmprsor->type].getI64(pData);
|
||||||
memcpy(&val, pData, nData); // little-endian only
|
|
||||||
|
|
||||||
if (!I64_SAFE_ADD(val, -pCmprsor->i_prev)) {
|
if (!I64_SAFE_ADD(val, -pCmprsor->i_prev)) {
|
||||||
code = tCompIntSwitchToCopy(pCmprsor);
|
code = tCompIntSwitchToCopy(pCmprsor);
|
||||||
|
|
Loading…
Reference in New Issue