blob: b06c8fe405ac1f7705c0f873ea0d1e5bc67b3fff [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* License); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#ifndef COMMON_DB_COMMON_H
#define COMMON_DB_COMMON_H
#include <iostream>
#include "utils/util_define.h"
#include "common/allocator/my_string.h"
namespace common {
/**
* @brief Represents the data type of a measurement.
*
* This enumeration defines the supported data types for measurements in the system.
*/
enum TSDataType : uint8_t {
BOOLEAN = 0,
INT32 = 1,
INT64 = 2,
FLOAT = 3,
DOUBLE = 4,
TEXT = 5,
VECTOR = 6,
STRING = 11,
NULL_TYPE = 254,
INVALID_DATATYPE = 255
};
/**
* @brief Represents the encoding method for a measurement.
*
* This enumeration defines the supported encoding methods that can be applied to measurements.
*/
enum TSEncoding : uint8_t {
PLAIN = 0,
DICTIONARY = 1,
RLE = 2,
DIFF = 3,
TS_2DIFF = 4,
BITMAP = 5,
GORILLA_V1 = 6,
REGULAR = 7,
GORILLA = 8,
ZIGZAG = 9,
FREQ = 10,
INVALID_ENCODING = 255
};
/**
* @brief Represents the compression type for a measurement.
*
* This enumeration defines the supported compression methods that can be applied to measurements.
*/
enum CompressionType : uint8_t {
UNCOMPRESSED = 0,
SNAPPY = 1,
GZIP = 2,
LZO = 3,
SDT = 4,
PAA = 5,
PLA = 6,
LZ4 = 7,
INVALID_COMPRESSION = 255
};
extern const char* s_data_type_names[8];
extern const char* s_encoding_names[12];
extern const char* s_compression_names[8];
FORCE_INLINE const char* get_data_type_name(TSDataType type) {
ASSERT(type >= BOOLEAN && type <= STRING);
return s_data_type_names[type];
}
FORCE_INLINE const char* get_encoding_name(TSEncoding encoding) {
ASSERT(encoding >= PLAIN && encoding <= FREQ);
return s_encoding_names[encoding];
}
FORCE_INLINE const char* get_compression_name(CompressionType type) {
return s_compression_names[type];
}
FORCE_INLINE TSEncoding get_default_encoding_for_type(TSDataType type) {
if (type == common::BOOLEAN) {
return PLAIN;
} else if (type == common::INT32) {
return PLAIN;
} else if (type == common::INT64) {
return PLAIN;
} else if (type == common::FLOAT) {
return PLAIN;
} else if (type == common::DOUBLE) {
return PLAIN;
} else if (type == common::TEXT) {
return PLAIN;
} else if (type == common::STRING) {
return PLAIN;
} else {
ASSERT(false);
}
return INVALID_ENCODING;
}
FORCE_INLINE CompressionType get_default_compression_for_type(TSDataType type) {
if (type == common::BOOLEAN) {
return UNCOMPRESSED;
} else if (type == common::INT32) {
return UNCOMPRESSED;
} else if (type == common::INT64) {
return UNCOMPRESSED;
} else if (type == common::FLOAT) {
return UNCOMPRESSED;
} else if (type == common::DOUBLE) {
return UNCOMPRESSED;
} else if (type == common::TEXT) {
return UNCOMPRESSED;
} else if (type == common::STRING) {
return UNCOMPRESSED;
} else {
ASSERT(false);
}
return INVALID_COMPRESSION;
}
enum Ordering { DESC, ASC };
template <typename T>
FORCE_INLINE common::TSDataType GetDataTypeFromTemplateType() {
return common::INVALID_DATATYPE;
}
template <>
FORCE_INLINE common::TSDataType GetDataTypeFromTemplateType<bool>() {
return common::BOOLEAN;
}
template <>
FORCE_INLINE common::TSDataType GetDataTypeFromTemplateType<int32_t>() {
return common::INT32;
}
template <>
FORCE_INLINE common::TSDataType GetDataTypeFromTemplateType<int64_t>() {
return common::INT64;
}
template <>
FORCE_INLINE common::TSDataType GetDataTypeFromTemplateType<float>() {
return common::FLOAT;
}
template <>
FORCE_INLINE common::TSDataType GetDataTypeFromTemplateType<double>() {
return common::DOUBLE;
}
template <>
FORCE_INLINE common::TSDataType GetDataTypeFromTemplateType<common::String>() {
return common::STRING;
}
FORCE_INLINE size_t get_data_type_size(TSDataType data_type) {
switch (data_type) {
case common::BOOLEAN:
return 1;
case common::INT32:
case common::FLOAT:
return 4;
case common::INT64:
case common::DOUBLE:
return 8;
default:
ASSERT(false);
return 8;
}
}
} // end namespace common
namespace storage {
struct TimeRange {
TimeRange() : start_time_(INT64_MAX), end_time_(INT64_MIN) {}
TimeRange(int64_t start_time, int64_t end_time)
: start_time_(start_time), end_time_(end_time) {}
int64_t start_time_;
int64_t end_time_;
};
} // namespace storage
#endif