blob: 564f30c66b69ebe178a5525877cc4332e4650c83 [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_GLOBAL_H
#define COMMON_GLOBAL_H
#include <string>
#include <vector>
#include "common/allocator/byte_stream.h"
#include "common/config/config.h"
namespace common {
extern ConfigValue g_config_value_;
extern ColumnSchema g_time_column_schema;
FORCE_INLINE int set_global_time_data_type(uint8_t data_type) {
ASSERT(data_type >= BOOLEAN && data_type <= STRING);
if (data_type != INT64) {
return E_NOT_SUPPORT;
}
g_config_value_.time_data_type_ = static_cast<TSDataType>(data_type);
return E_OK;
}
FORCE_INLINE int set_global_time_encoding(uint8_t encoding) {
ASSERT(encoding >= PLAIN && encoding <= FREQ);
if (encoding != TS_2DIFF && encoding != PLAIN && encoding != GORILLA &&
encoding != ZIGZAG && encoding != RLE && encoding != SPRINTZ) {
return E_NOT_SUPPORT;
}
g_config_value_.time_encoding_type_ = static_cast<TSEncoding>(encoding);
return E_OK;
}
FORCE_INLINE int set_global_time_compression(uint8_t compression) {
ASSERT(compression >= UNCOMPRESSED && compression <= LZ4);
if (compression != UNCOMPRESSED && compression != SNAPPY &&
compression != GZIP && compression != LZO && compression != LZ4) {
return E_NOT_SUPPORT;
}
g_config_value_.time_compress_type_ =
static_cast<CompressionType>(compression);
return E_OK;
}
FORCE_INLINE int set_datatype_encoding(uint8_t data_type, uint8_t encoding) {
const TSDataType dtype = static_cast<TSDataType>(data_type);
const TSEncoding encoding_type = static_cast<TSEncoding>(encoding);
// Validate input parameters
ASSERT(dtype >= BOOLEAN && dtype <= STRING);
ASSERT(encoding >= PLAIN && encoding <= SPRINTZ);
// Check encoding support for each data type
switch (dtype) {
case BOOLEAN:
if (encoding_type != PLAIN) return E_NOT_SUPPORT;
g_config_value_.boolean_encoding_type_ = encoding_type;
break;
case INT32:
case DATE:
case INT64:
if (encoding_type != PLAIN && encoding_type != TS_2DIFF &&
encoding_type != GORILLA && encoding_type != ZIGZAG &&
encoding_type != RLE && encoding_type != SPRINTZ) {
return E_NOT_SUPPORT;
}
dtype == INT32
? g_config_value_.int32_encoding_type_ = encoding_type
: g_config_value_.int64_encoding_type_ = encoding_type;
break;
case FLOAT:
case DOUBLE:
if (encoding_type != PLAIN && encoding_type != TS_2DIFF &&
encoding_type != GORILLA && encoding_type != SPRINTZ) {
return E_NOT_SUPPORT;
}
dtype == FLOAT
? g_config_value_.float_encoding_type_ = encoding_type
: g_config_value_.double_encoding_type_ = encoding_type;
break;
case STRING:
case TEXT:
if (encoding_type != PLAIN && encoding_type != DICTIONARY) {
return E_NOT_SUPPORT;
}
g_config_value_.string_encoding_type_ = encoding_type;
break;
default:
break;
}
return E_OK;
}
FORCE_INLINE int set_global_compression(uint8_t compression) {
ASSERT(compression >= UNCOMPRESSED && compression <= LZ4);
if (compression != UNCOMPRESSED && compression != SNAPPY &&
compression != GZIP && compression != LZO && compression != LZ4) {
return E_NOT_SUPPORT;
}
g_config_value_.default_compression_type_ =
static_cast<CompressionType>(compression);
return E_OK;
}
FORCE_INLINE uint8_t get_global_time_encoding() {
return static_cast<uint8_t>(g_config_value_.time_encoding_type_);
}
FORCE_INLINE uint8_t get_global_time_compression() {
return static_cast<uint8_t>(g_config_value_.time_compress_type_);
}
FORCE_INLINE uint8_t get_datatype_encoding(uint8_t data_type) {
const TSDataType dtype = static_cast<TSDataType>(data_type);
// Validate input parameter
ASSERT(dtype >= BOOLEAN && dtype <= STRING);
switch (dtype) {
case BOOLEAN:
return static_cast<uint8_t>(g_config_value_.boolean_encoding_type_);
case INT32:
return static_cast<uint8_t>(g_config_value_.int32_encoding_type_);
case INT64:
return static_cast<uint8_t>(g_config_value_.int64_encoding_type_);
case FLOAT:
return static_cast<uint8_t>(g_config_value_.float_encoding_type_);
case DOUBLE:
return static_cast<uint8_t>(g_config_value_.double_encoding_type_);
case STRING:
case TEXT:
return static_cast<uint8_t>(g_config_value_.string_encoding_type_);
case DATE:
return static_cast<uint8_t>(g_config_value_.int64_encoding_type_);
default:
return static_cast<uint8_t>(
PLAIN); // Return default encoding for unknown types
}
}
FORCE_INLINE uint8_t get_global_compression() {
return static_cast<uint8_t>(g_config_value_.default_compression_type_);
}
extern int init_common();
extern bool is_timestamp_column_name(const char *time_col_name);
extern void cols_to_json(ByteStream *byte_stream,
std::vector<common::ColumnSchema> &ret_ts_list);
extern void print_backtrace();
} // namespace common
#endif // COMMON_GLOBAL_H