diff --git a/.github/workflows/unit-test-cpp.yml b/.github/workflows/unit-test-cpp.yml
index 08c138018..429e0b95a 100644
--- a/.github/workflows/unit-test-cpp.yml
+++ b/.github/workflows/unit-test-cpp.yml
@@ -104,10 +104,16 @@ jobs:
core.setOutput('platform_suffix', ``)
}
- - name: Install clang-format
+ - name: Install dependencies
shell: bash
run: |
if [[ "$RUNNER_OS" == "Linux" ]]; then
+ if command -v apt-get >/dev/null 2>&1; then
+ sudo apt-get update
+ sudo apt-get install -y uuid-dev
+ elif command -v yum >/dev/null 2>&1; then
+ sudo yum install -y libuuid-devel
+ fi
sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-17 100
sudo update-alternatives --set clang-format /usr/bin/clang-format-17
elif [[ "$RUNNER_OS" == "Windows" ]]; then
diff --git a/.github/workflows/unit-test-python.yml b/.github/workflows/unit-test-python.yml
index c99935976..dd16ae3ec 100644
--- a/.github/workflows/unit-test-python.yml
+++ b/.github/workflows/unit-test-python.yml
@@ -60,6 +60,17 @@ jobs:
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2-
+ - name: Install dependencies
+ shell: bash
+ run: |
+ if [[ "$RUNNER_OS" == "Linux" ]]; then
+ if command -v apt-get >/dev/null 2>&1; then
+ sudo apt-get update
+ sudo apt-get install -y uuid-dev
+ elif command -v yum >/dev/null 2>&1; then
+ sudo yum install -y libuuid-devel
+ fi
+ fi
# On Windows systems the 'mvnw' script needs an additional ".cmd" appended.
- name: Calculate platform suffix
id: platform_suffix
diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml
new file mode 100644
index 000000000..6e9dacec4
--- /dev/null
+++ b/.github/workflows/wheels.yml
@@ -0,0 +1,169 @@
+name: Build TsFile wheels(multi-platform)
+
+on:
+ push:
+ branches:
+ - "release_v*.*.*"
+ pull_request:
+ paths:
+ - "cpp/**"
+ - "python/**"
+ - ".github/**"
+ workflow_dispatch:
+
+jobs:
+ build:
+ name: Build wheels on ${{ matrix.name }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - name: linux-x86_64
+ os: ubuntu-22.04
+ platform: linux
+ cibw_archs_linux: "x86_64"
+
+ - name: linux-aarch64
+ os: ubuntu-22.04-arm
+ platform: linux
+ cibw_archs_linux: "aarch64"
+
+ - name: macos-x86_64
+ os: macos-13
+ platform: macos
+ cibw_archs_macos: "x86_64"
+
+ - name: macos-arm64
+ os: macos-14
+ platform: macos
+ cibw_archs_macos: "arm64"
+# currently, compile on windows is not supported for cibuildwheel
+# - name: windows-amd64
+# os: windows-2022
+# platform: windows
+# cibw_archs_windows: "AMD64"
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ submodules: false
+ fetch-depth: 0
+
+ - name: Set up Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.11"
+
+ - name: Set up Java 17
+ uses: actions/setup-java@v4
+ with:
+ distribution: temurin
+ java-version: "17"
+
+ - name: Install system deps (macOS)
+ if: matrix.platform == 'macos'
+ run: |
+ set -eux
+ brew update
+ brew install pkg-config || true
+
+ - name: Install build tools
+ run: |
+ python -m pip install -U pip wheel
+ python -m pip install cibuildwheel==2.21.3
+
+# - name: Build C++ core via Maven(win)
+# if: matrix.platform == 'windows'
+# shell: bash
+# run: |
+# set -euxo pipefail
+# chmod +x mvnw || true
+# ./mvnw -Pwith-cpp clean verify package \
+# -DskipTests -Dspotless.check.skip=true -Dspotless.apply.skip=true
+# test -d cpp/target/build/lib
+# test -d cpp/target/build/include
+
+ - name: Build C++ core via Maven (macOS)
+ if: matrix.platform == 'macos'
+ shell: bash
+ env:
+ MACOSX_DEPLOYMENT_TARGET: "12.0"
+ CFLAGS: "-mmacosx-version-min=12.0"
+ CXXFLAGS: "-mmacosx-version-min=12.0"
+ LDFLAGS: "-mmacosx-version-min=12.0"
+ run: |
+ set -euxo pipefail
+ chmod +x mvnw || true
+ ./mvnw -Pwith-cpp clean verify package \
+ -DskipTests -Dspotless.check.skip=true -Dspotless.apply.skip=true \
+ -Dcmake.args="-DCMAKE_OSX_DEPLOYMENT_TARGET=12.0"
+ otool -l cpp/target/build/lib/libtsfile*.dylib | grep -A2 LC_VERSION_MIN_MACOSX || true
+
+ - name: Build wheels via cibuildwheel
+ if: matrix.platform != 'macos'
+ env:
+ CIBW_ARCHS_LINUX: ${{ matrix.cibw_archs_linux }}
+# CIBW_ARCHS_WINDOWS: ${{ matrix.cibw_archs_windows }}
+
+ CIBW_BUILD: "cp39-* cp310-* cp311-* cp312-* cp313-* cp314-*"
+ CIBW_SKIP: "pp* *-musllinux*"
+
+ CIBW_MANYLINUX_X86_64_IMAGE: "manylinux2014"
+ CIBW_MANYLINUX_AARCH64_IMAGE: "manylinux2014"
+
+ MACOSX_DEPLOYMENT_TARGET: "12.0"
+
+ CIBW_BEFORE_ALL_LINUX: |
+ set -euxo pipefail
+ if command -v yum >/dev/null 2>&1; then
+ yum install -y wget tar gzip pkgconfig libuuid-devel libblkid-devel
+ else
+ echo "Not a yum-based image?" ; exit 1
+ fi
+ ARCH="$(uname -m)"
+ mkdir -p /opt/java
+ if [ "$ARCH" = "x86_64" ]; then
+ JDK_URL="https://download.oracle.com/java/17/archive/jdk-17.0.12_linux-x64_bin.tar.gz"
+ else
+ # aarch64
+ JDK_URL="https://download.oracle.com/java/17/archive/jdk-17.0.12_linux-aarch64_bin.tar.gz"
+ fi
+ curl -L -o /tmp/jdk17.tar.gz "$JDK_URL"
+ tar -xzf /tmp/jdk17.tar.gz -C /opt/java
+ export JAVA_HOME=$(echo /opt/java/jdk-17.0.12*)
+ export PATH="$JAVA_HOME/bin:$PATH"
+ java -version
+
+ chmod +x mvnw || true
+ ./mvnw -Pwith-cpp clean verify package \
+ -DskipTests -Dspotless.check.skip=true -Dspotless.apply.skip=true
+ test -d cpp/target/build/lib && test -d cpp/target/build/include
+
+ CIBW_TEST_COMMAND: >
+ python -c "import tsfile, tsfile.tsfile_reader as r; print('import-ok:')"
+ CIBW_BUILD_VERBOSITY: "1"
+ run: cibuildwheel --output-dir wheelhouse python
+
+ - name: Build wheels via cibuildwheel (macOS)
+ if: matrix.platform == 'macos'
+ env:
+ CIBW_ARCHS_MACOS: ${{ matrix.cibw_archs_macos }}
+ CIBW_BUILD: "cp39-* cp310-* cp311-* cp312-* cp313-* cp314-*"
+# CIBW_BUILD: "cp313-*"
+ CIBW_SKIP: "pp*"
+ CIBW_ENVIRONMENT_MACOS: "MACOSX_DEPLOYMENT_TARGET=12.0"
+ MACOSX_DEPLOYMENT_TARGET: "12.0"
+ CIBW_TEST_COMMAND: >
+ python -c "import tsfile, tsfile.tsfile_reader as r; print('import-ok:')"
+ CIBW_BUILD_VERBOSITY: "1"
+ run: cibuildwheel --output-dir wheelhouse python
+
+ - name: Upload wheels as artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: tsfile-wheels-${{ matrix.name }}
+ path: wheelhouse/*.whl
+
+
diff --git a/cpp/.clang-format b/cpp/.clang-format
index 26651a2cd..da6eee613 100644
--- a/cpp/.clang-format
+++ b/cpp/.clang-format
@@ -65,7 +65,6 @@ ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: true
-DerivePointerAlignment: true
DisableFormat: false
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: LogicalBlock
@@ -207,7 +206,7 @@ SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false
BitFieldColonSpacing: Both
-Standard: Auto
+Standard: Cpp11
StatementAttributeLikeMacros:
- Q_EMIT
StatementMacros:
diff --git a/cpp/pom.xml b/cpp/pom.xml
index fa6b00708..6dd8c9085 100644
--- a/cpp/pom.xml
+++ b/cpp/pom.xml
@@ -22,7 +22,7 @@
org.apache.tsfile
tsfile-parent
- 2.2.0-SNAPSHOT
+ 2.1.5
tsfile-cpp
pom
@@ -151,39 +151,6 @@
-
- linux-install-uuid-dev
-
-
- unix
- Linux
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
-
-
- install-uuid-dev
- validate
-
- exec
-
-
-
-
- bash
-
- -c
- sudo apt-get update && sudo apt-get install -y uuid-dev
-
-
-
-
-
-
jenkins-build
diff --git a/cpp/src/CMakeLists.txt b/cpp/src/CMakeLists.txt
index 86c67f2b4..3d2d292fa 100644
--- a/cpp/src/CMakeLists.txt
+++ b/cpp/src/CMakeLists.txt
@@ -36,6 +36,7 @@ set(ANTLR4_WITH_STATIC_CRT OFF)
set(PROJECT_INCLUDE_DIR
${CMAKE_SOURCE_DIR}/src
${THIRD_PARTY_INCLUDE}/google_snappy
+ ${THIRD_PARTY_INCLUDE}/zlib-1.2.13
${CMAKE_SOURCE_DIR}/third_party/lz4
${CMAKE_SOURCE_DIR}/third_party/lzokay
${CMAKE_SOURCE_DIR}/third_party/zlib-1.2.13
diff --git a/cpp/src/common/schema.h b/cpp/src/common/schema.h
index 06e7e7e42..499dd5bc7 100644
--- a/cpp/src/common/schema.h
+++ b/cpp/src/common/schema.h
@@ -46,8 +46,8 @@ struct MeasurementSchema {
common::TSDataType data_type_;
common::TSEncoding encoding_;
common::CompressionType compression_type_;
- storage::ChunkWriter *chunk_writer_;
- ValueChunkWriter *value_chunk_writer_;
+ storage::ChunkWriter* chunk_writer_;
+ ValueChunkWriter* value_chunk_writer_;
std::map props_;
MeasurementSchema()
@@ -58,7 +58,7 @@ struct MeasurementSchema {
chunk_writer_(nullptr),
value_chunk_writer_(nullptr) {}
- MeasurementSchema(const std::string &measurement_name,
+ MeasurementSchema(const std::string& measurement_name,
common::TSDataType data_type)
: measurement_name_(measurement_name),
data_type_(data_type),
@@ -67,7 +67,7 @@ struct MeasurementSchema {
chunk_writer_(nullptr),
value_chunk_writer_(nullptr) {}
- MeasurementSchema(const std::string &measurement_name,
+ MeasurementSchema(const std::string& measurement_name,
common::TSDataType data_type, common::TSEncoding encoding,
common::CompressionType compression_type)
: measurement_name_(measurement_name),
@@ -88,7 +88,7 @@ struct MeasurementSchema {
}
}
- int serialize_to(common::ByteStream &out) {
+ int serialize_to(common::ByteStream& out) {
int ret = common::E_OK;
if (RET_FAIL(
common::SerializationUtil::write_str(measurement_name_, out))) {
@@ -102,7 +102,7 @@ struct MeasurementSchema {
if (ret == common::E_OK) {
if (RET_FAIL(common::SerializationUtil::write_ui32(props_.size(),
out))) {
- for (const auto &prop : props_) {
+ for (const auto& prop : props_) {
if (RET_FAIL(common::SerializationUtil::write_str(
prop.first, out))) {
} else if (RET_FAIL(common::SerializationUtil::write_str(
@@ -115,7 +115,7 @@ struct MeasurementSchema {
return ret;
}
- int deserialize_from(common::ByteStream &in) {
+ int deserialize_from(common::ByteStream& in) {
int ret = common::E_OK;
uint8_t data_type = common::TSDataType::INVALID_DATATYPE,
encoding = common::TSEncoding::INVALID_ENCODING,
@@ -153,8 +153,8 @@ struct MeasurementSchema {
}
};
-typedef std::map MeasurementSchemaMap;
-typedef std::map::iterator
+typedef std::map MeasurementSchemaMap;
+typedef std::map::iterator
MeasurementSchemaMapIter;
typedef std::pair
MeasurementSchemaMapInsertResult;
@@ -164,7 +164,7 @@ struct MeasurementSchemaGroup {
// measurement_name -> MeasurementSchema
MeasurementSchemaMap measurement_schema_map_;
bool is_aligned_ = false;
- TimeChunkWriter *time_chunk_writer_ = nullptr;
+ TimeChunkWriter* time_chunk_writer_ = nullptr;
~MeasurementSchemaGroup() {
if (time_chunk_writer_ != nullptr) {
@@ -195,11 +195,11 @@ class TableSchema {
* Each ColumnSchema defines the schema for one column
* in the table.
*/
- TableSchema(const std::string &table_name,
- const std::vector &column_schemas)
+ TableSchema(const std::string& table_name,
+ const std::vector& column_schemas)
: table_name_(table_name) {
to_lowercase_inplace(table_name_);
- for (const common::ColumnSchema &column_schema : column_schemas) {
+ for (const common::ColumnSchema& column_schema : column_schemas) {
column_schemas_.emplace_back(std::make_shared(
column_schema.get_column_name(),
column_schema.get_data_type()));
@@ -207,16 +207,16 @@ class TableSchema {
column_schema.get_column_category());
}
int idx = 0;
- for (const auto &measurement_schema : column_schemas_) {
+ for (const auto& measurement_schema : column_schemas_) {
to_lowercase_inplace(measurement_schema->measurement_name_);
column_pos_index_.insert(
std::make_pair(measurement_schema->measurement_name_, idx++));
}
}
- TableSchema(const std::string &table_name,
- const std::vector &column_schemas,
- const std::vector &column_categories)
+ TableSchema(const std::string& table_name,
+ const std::vector& column_schemas,
+ const std::vector& column_categories)
: table_name_(table_name), column_categories_(column_categories) {
to_lowercase_inplace(table_name_);
for (const auto column_schema : column_schemas) {
@@ -226,34 +226,42 @@ class TableSchema {
}
}
int idx = 0;
- for (const auto &measurement_schema : column_schemas_) {
+ for (const auto& measurement_schema : column_schemas_) {
to_lowercase_inplace(measurement_schema->measurement_name_);
column_pos_index_.insert(
std::make_pair(measurement_schema->measurement_name_, idx++));
}
}
- TableSchema(TableSchema &&other) noexcept
+ TableSchema(TableSchema&& other) noexcept
: table_name_(std::move(other.table_name_)),
column_schemas_(std::move(other.column_schemas_)),
column_categories_(std::move(other.column_categories_)) {}
- TableSchema(const TableSchema &other) noexcept
+ TableSchema(const TableSchema& other) noexcept
: table_name_(other.table_name_),
column_categories_(other.column_categories_) {
- for (const auto &column_schema : other.column_schemas_) {
+ for (const auto& column_schema : other.column_schemas_) {
// Just call default construction
column_schemas_.emplace_back(
std::make_shared(*column_schema));
}
int idx = 0;
- for (const auto &measurement_schema : column_schemas_) {
+ for (const auto& measurement_schema : column_schemas_) {
column_pos_index_.insert(
std::make_pair(measurement_schema->measurement_name_, idx++));
}
}
- int serialize_to(common::ByteStream &out) {
+ // In cases where data is retrieved from a tree to form the table,
+ // there is no table name in the tree path, so adjustments are needed for
+ // this scenario. This flag is used specifically for such cases.
+ // TODO(Colin): remove this.
+ void set_virtual_table() { is_virtual_table_ = true; }
+
+ bool is_virtual_table() { return is_virtual_table_; }
+
+ int serialize_to(common::ByteStream& out) {
int ret = common::E_OK;
if (RET_FAIL(common::SerializationUtil::write_var_uint(
column_schemas_.size(), out))) {
@@ -271,7 +279,7 @@ class TableSchema {
return ret;
}
- int deserialize(common::ByteStream &in) {
+ int deserialize(common::ByteStream& in) {
int ret = common::E_OK;
uint32_t num_columns;
if (RET_FAIL(
@@ -294,9 +302,9 @@ class TableSchema {
~TableSchema() { column_schemas_.clear(); }
- const std::string &get_table_name() { return table_name_; }
+ const std::string& get_table_name() { return table_name_; }
- void set_table_name(const std::string &table_name) {
+ void set_table_name(const std::string& table_name) {
table_name_ = table_name;
}
@@ -310,7 +318,7 @@ class TableSchema {
int32_t get_columns_num() const { return column_schemas_.size(); }
- int find_column_index(const std::string &column_name) {
+ int find_column_index(const std::string& column_name) {
std::string lower_case_column_name = to_lower(column_name);
auto it = column_pos_index_.find(lower_case_column_name);
if (it != column_pos_index_.end()) {
@@ -333,10 +341,10 @@ class TableSchema {
size_t get_column_pos_index_num() const { return column_pos_index_.size(); }
- void update(ChunkGroupMeta *chunk_group_meta) {
+ void update(ChunkGroupMeta* chunk_group_meta) {
for (auto iter = chunk_group_meta->chunk_meta_list_.begin();
iter != chunk_group_meta->chunk_meta_list_.end(); iter++) {
- auto &chunk_meta = iter.get();
+ auto& chunk_meta = iter.get();
if (chunk_meta->data_type_ == common::VECTOR) {
continue;
}
@@ -365,7 +373,7 @@ class TableSchema {
std::vector get_data_types() const {
std::vector ret;
- for (const auto &measurement_schema : column_schemas_) {
+ for (const auto& measurement_schema : column_schemas_) {
ret.emplace_back(measurement_schema->data_type_);
}
return ret;
@@ -375,12 +383,12 @@ class TableSchema {
return column_categories_;
}
- std::vector > get_measurement_schemas()
+ std::vector> get_measurement_schemas()
const {
return column_schemas_;
}
- common::ColumnSchema get_column_schema(const std::string &column_name) {
+ common::ColumnSchema get_column_schema(const std::string& column_name) {
int column_idx = find_column_index(column_name);
if (column_idx == -1) {
return common::ColumnSchema();
@@ -394,7 +402,7 @@ class TableSchema {
}
}
- int32_t find_id_column_order(const std::string &column_name) {
+ int32_t find_id_column_order(const std::string& column_name) {
std::string lower_case_column_name = to_lower(column_name);
int column_order = 0;
@@ -412,17 +420,18 @@ class TableSchema {
private:
std::string table_name_;
- std::vector > column_schemas_;
+ std::vector> column_schemas_;
std::vector column_categories_;
std::map column_pos_index_;
+ bool is_virtual_table_ = false;
};
struct Schema {
- typedef std::unordered_map >
+ typedef std::unordered_map>
TableSchemasMap;
TableSchemasMap table_schema_map_;
- void update_table_schema(ChunkGroupMeta *chunk_group_meta) {
+ void update_table_schema(ChunkGroupMeta* chunk_group_meta) {
std::shared_ptr device_id = chunk_group_meta->device_id_;
auto table_name = device_id->get_table_name();
if (table_schema_map_.find(table_name) == table_schema_map_.end()) {
@@ -431,7 +440,7 @@ struct Schema {
table_schema_map_[table_name]->update(chunk_group_meta);
}
void register_table_schema(
- const std::shared_ptr &table_schema) {
+ const std::shared_ptr& table_schema) {
table_schema_map_[table_schema->get_table_name()] = table_schema;
}
};
diff --git a/cpp/src/common/tsblock/tsblock.h b/cpp/src/common/tsblock/tsblock.h
index a0e94391b..dce94f8ad 100644
--- a/cpp/src/common/tsblock/tsblock.h
+++ b/cpp/src/common/tsblock/tsblock.h
@@ -44,7 +44,7 @@ class TsBlock {
* information, such as insert scenarios, etc. Then we will use the given
* number of rows
*/
- explicit TsBlock(TupleDesc *tupledesc, uint32_t max_row_count = 0)
+ explicit TsBlock(TupleDesc* tupledesc, uint32_t max_row_count = 0)
: capacity_(g_config_value_.tsblock_max_memory_),
row_count_(0),
max_row_count_(max_row_count),
@@ -60,9 +60,9 @@ class TsBlock {
FORCE_INLINE uint32_t get_row_count() const { return row_count_; }
- FORCE_INLINE TupleDesc *get_tuple_desc() const { return tuple_desc_; }
+ FORCE_INLINE TupleDesc* get_tuple_desc() const { return tuple_desc_; }
- FORCE_INLINE Vector *get_vector(uint32_t index) { return vectors_[index]; }
+ FORCE_INLINE Vector* get_vector(uint32_t index) { return vectors_[index]; }
FORCE_INLINE uint32_t get_column_count() const {
return tuple_desc_->get_column_count();
@@ -104,8 +104,8 @@ class TsBlock {
row_count_ = 0;
}
- FORCE_INLINE static int create_tsblock(TupleDesc *tupledesc,
- TsBlock *&ret_tsblock,
+ FORCE_INLINE static int create_tsblock(TupleDesc* tupledesc,
+ TsBlock*& ret_tsblock,
uint32_t max_row_count = 0) {
int ret = common::E_OK;
if (ret_tsblock == nullptr) {
@@ -119,13 +119,13 @@ class TsBlock {
}
int init();
- void tsblock_to_json(ByteStream *byte_stream);
+ void tsblock_to_json(ByteStream* byte_stream);
std::string debug_string();
private:
int build_vector(common::TSDataType type, uint32_t row_count);
- void write_data(ByteStream *__restrict byte_stream, char *__restrict val,
+ void write_data(ByteStream* __restrict byte_stream, char* __restrict val,
uint32_t len, bool has_null, TSDataType type);
private:
@@ -134,13 +134,13 @@ class TsBlock {
uint32_t max_row_count_;
common::BitMap select_list_;
- TupleDesc *tuple_desc_;
- std::vector vectors_;
+ TupleDesc* tuple_desc_;
+ std::vector vectors_;
};
class RowAppender {
public:
- explicit RowAppender(TsBlock *tsblock) : tsblock_(tsblock) {}
+ explicit RowAppender(TsBlock* tsblock) : tsblock_(tsblock) {}
~RowAppender() {}
// todo:(yanghao) maybe need to consider select-list
@@ -157,25 +157,37 @@ class RowAppender {
tsblock_->row_count_--;
}
- FORCE_INLINE void append(uint32_t slot_index, const char *value,
+ FORCE_INLINE void append(uint32_t slot_index, const char* value,
uint32_t len) {
ASSERT(slot_index < tsblock_->tuple_desc_->get_column_count());
- Vector *vec = tsblock_->vectors_[slot_index];
- vec->append(value, len);
+ Vector* vec = tsblock_->vectors_[slot_index];
+ // TODO(Colin): Refine this.
+ TSDataType datatype = vec->get_vector_type();
+ if (len == 4 && datatype == INT64) {
+ int32_t int32_val = *reinterpret_cast(value);
+ int64_t int64_val = static_cast(int32_val);
+ vec->append(reinterpret_cast(&int64_val), 8);
+ } else if (len == 4 && datatype == DOUBLE) {
+ float float_val = *reinterpret_cast(value);
+ double double_val = static_cast(float_val);
+ vec->append(reinterpret_cast(&double_val), 8);
+ } else {
+ vec->append(value, len);
+ }
}
FORCE_INLINE void append_null(uint32_t slot_index) {
- Vector *vec = tsblock_->vectors_[slot_index];
+ Vector* vec = tsblock_->vectors_[slot_index];
vec->set_null(tsblock_->row_count_ - 1);
}
private:
- TsBlock *tsblock_;
+ TsBlock* tsblock_;
};
class ColAppender {
public:
- ColAppender(uint32_t column_index, TsBlock *tsblock)
+ ColAppender(uint32_t column_index, TsBlock* tsblock)
: column_index_(column_index), column_row_count_(0), tsblock_(tsblock) {
ASSERT(column_index < tsblock_->tuple_desc_->get_column_count());
vec_ = tsblock_->vectors_[column_index];
@@ -194,7 +206,7 @@ class ColAppender {
}
}
- FORCE_INLINE void append(const char *value, uint32_t len) {
+ FORCE_INLINE void append(const char* value, uint32_t len) {
vec_->append(value, len);
}
@@ -211,7 +223,7 @@ class ColAppender {
}
return E_OK;
}
- FORCE_INLINE int fill(const char *value, uint32_t len, uint32_t end_index) {
+ FORCE_INLINE int fill(const char* value, uint32_t len, uint32_t end_index) {
while (column_row_count_ < end_index) {
if (!add_row()) {
return E_INVALID_ARG;
@@ -225,14 +237,14 @@ class ColAppender {
private:
uint32_t column_index_;
uint32_t column_row_count_;
- TsBlock *tsblock_;
- Vector *vec_;
+ TsBlock* tsblock_;
+ Vector* vec_;
};
// todo:(yanghao) need to deal with select-list
class RowIterator {
public:
- explicit RowIterator(TsBlock *tsblock) : tsblock_(tsblock), row_id_(0) {
+ explicit RowIterator(TsBlock* tsblock) : tsblock_(tsblock), row_id_(0) {
column_count_ = tsblock_->tuple_desc_->get_column_count();
}
@@ -264,17 +276,17 @@ class RowIterator {
FORCE_INLINE void update_row_id() { row_id_++; }
- FORCE_INLINE char *read(uint32_t column_index, uint32_t *__restrict len,
- bool *__restrict null) {
+ FORCE_INLINE char* read(uint32_t column_index, uint32_t* __restrict len,
+ bool* __restrict null) {
ASSERT(column_index < column_count_);
- Vector *vec = tsblock_->vectors_[column_index];
+ Vector* vec = tsblock_->vectors_[column_index];
return vec->read(len, null, row_id_);
}
std::string debug_string(); // for debug
private:
- TsBlock *tsblock_;
+ TsBlock* tsblock_;
uint32_t row_id_; // The line number currently being reader
uint32_t column_count_;
};
@@ -282,7 +294,7 @@ class RowIterator {
// todo:(yanghao) need to deal with select-list
class ColIterator {
public:
- ColIterator(uint32_t column_index, const TsBlock *tsblock)
+ ColIterator(uint32_t column_index, const TsBlock* tsblock)
: column_index_(column_index), row_id_(0), tsblock_(tsblock) {
ASSERT(column_index < tsblock_->tuple_desc_->get_column_count());
vec_ = tsblock_->vectors_[column_index];
@@ -303,22 +315,22 @@ class ColIterator {
FORCE_INLINE TSDataType get_data_type() { return vec_->get_vector_type(); }
- FORCE_INLINE char *read(uint32_t *__restrict len, bool *__restrict null) {
+ FORCE_INLINE char* read(uint32_t* __restrict len, bool* __restrict null) {
return vec_->read(len, null, row_id_);
}
- FORCE_INLINE char *read(uint32_t *len) { return vec_->read(len); }
+ FORCE_INLINE char* read(uint32_t* len) { return vec_->read(len); }
FORCE_INLINE uint32_t get_column_index() { return column_index_; }
private:
uint32_t column_index_;
uint32_t row_id_;
- const TsBlock *tsblock_;
- Vector *vec_;
+ const TsBlock* tsblock_;
+ Vector* vec_;
};
-int merge_tsblock_by_row(TsBlock *sea, TsBlock *river);
+int merge_tsblock_by_row(TsBlock* sea, TsBlock* river);
} // end namespace common
#endif // COMMON_TSBLOCK_TSBLOCK_H
diff --git a/cpp/src/common/tsfile_common.h b/cpp/src/common/tsfile_common.h
index dd22ca401..39cd027ef 100644
--- a/cpp/src/common/tsfile_common.h
+++ b/cpp/src/common/tsfile_common.h
@@ -39,7 +39,7 @@
namespace storage {
-extern const char *MAGIC_STRING_TSFILE;
+extern const char* MAGIC_STRING_TSFILE;
constexpr int MAGIC_STRING_TSFILE_LEN = 6;
extern const char VERSION_NUM_BYTE;
extern const char CHUNK_GROUP_HEADER_MARKER;
@@ -60,7 +60,7 @@ typedef int64_t TsFileID;
struct PageHeader {
uint32_t uncompressed_size_;
uint32_t compressed_size_;
- Statistic *statistic_;
+ Statistic* statistic_;
PageHeader()
: uncompressed_size_(0), compressed_size_(0), statistic_(nullptr) {}
@@ -73,7 +73,7 @@ struct PageHeader {
uncompressed_size_ = 0;
compressed_size_ = 0;
}
- int deserialize_from(common::ByteStream &in, bool deserialize_stat,
+ int deserialize_from(common::ByteStream& in, bool deserialize_stat,
common::TSDataType data_type) {
int ret = common::E_OK;
if (RET_FAIL(common::SerializationUtil::read_var_uint(
@@ -99,7 +99,7 @@ struct PageHeader {
}
#ifndef NDEBUG
- friend std::ostream &operator<<(std::ostream &os, const PageHeader &h) {
+ friend std::ostream& operator<<(std::ostream& os, const PageHeader& h) {
os << "{uncompressed_size_=" << h.uncompressed_size_
<< ", compressed_size_=" << h.uncompressed_size_;
if (h.statistic_ == nullptr) {
@@ -132,7 +132,7 @@ struct ChunkHeader {
~ChunkHeader() = default;
- int serialize_to(common::ByteStream &out) {
+ int serialize_to(common::ByteStream& out) {
int ret = common::E_OK;
if (RET_FAIL(common::SerializationUtil::write_char(chunk_type_, out))) {
} else if (RET_FAIL(common::SerializationUtil::write_var_str(
@@ -148,7 +148,7 @@ struct ChunkHeader {
}
return ret;
}
- int deserialize_from(common::ByteStream &in) {
+ int deserialize_from(common::ByteStream& in) {
int ret = common::E_OK;
in.mark_read_pos();
if (RET_FAIL(common::SerializationUtil::read_char(chunk_type_, in))) {
@@ -157,18 +157,18 @@ struct ChunkHeader {
} else if (RET_FAIL(common::SerializationUtil::read_var_uint(data_size_,
in))) {
} else if (RET_FAIL(common::SerializationUtil::read_char(
- (char &)data_type_, in))) {
+ (char&)data_type_, in))) {
} else if (RET_FAIL(common::SerializationUtil::read_char(
- (char &)compression_type_, in))) {
+ (char&)compression_type_, in))) {
} else if (RET_FAIL(common::SerializationUtil::read_char(
- (char &)encoding_type_, in))) {
+ (char&)encoding_type_, in))) {
} else {
serialized_size_ = in.get_mark_len();
}
return ret;
}
#ifndef NDEBUG
- friend std::ostream &operator<<(std::ostream &os, const ChunkHeader &h) {
+ friend std::ostream& operator<<(std::ostream& os, const ChunkHeader& h) {
os << "{measurement_name=" << h.measurement_name_
<< ", data_size=" << h.data_size_ << ", data_type=" << h.data_type_
<< ", compression_type=" << h.compression_type_
@@ -197,7 +197,7 @@ struct ChunkMeta {
common::String measurement_name_;
common::TSDataType data_type_;
int64_t offset_of_chunk_header_;
- Statistic *statistic_;
+ Statistic* statistic_;
char mask_;
common::TSEncoding encoding_;
common::CompressionType compression_type_;
@@ -209,10 +209,10 @@ struct ChunkMeta {
statistic_(nullptr),
mask_(0) {}
- int init(const common::String &measurement_name,
+ int init(const common::String& measurement_name,
common::TSDataType data_type, int64_t offset_of_chunk_header,
- Statistic *stat, char mask, common::TSEncoding encoding,
- common::CompressionType compression_type, common::PageArena &pa) {
+ Statistic* stat, char mask, common::TSEncoding encoding,
+ common::CompressionType compression_type, common::PageArena& pa) {
// TODO check parameter valid
measurement_name_.dup_from(measurement_name, pa);
data_type_ = data_type;
@@ -223,10 +223,10 @@ struct ChunkMeta {
compression_type_ = compression_type;
return common::E_OK;
}
- FORCE_INLINE void clone_statistic_from(Statistic *stat) {
+ FORCE_INLINE void clone_statistic_from(Statistic* stat) {
clone_statistic(stat, statistic_, data_type_);
}
- FORCE_INLINE int clone_from(ChunkMeta &that, common::PageArena *pa) {
+ FORCE_INLINE int clone_from(ChunkMeta& that, common::PageArena* pa) {
int ret = common::E_OK;
if (RET_FAIL(measurement_name_.dup_from(that.measurement_name_, *pa))) {
return ret;
@@ -244,7 +244,7 @@ struct ChunkMeta {
mask_ = that.mask_;
return ret;
}
- int serialize_to(common::ByteStream &out, bool serialize_statistic) {
+ int serialize_to(common::ByteStream& out, bool serialize_statistic) {
int ret = common::E_OK;
if (RET_FAIL(common::SerializationUtil::write_i64(
offset_of_chunk_header_, out))) {
@@ -253,8 +253,8 @@ struct ChunkMeta {
}
return ret;
}
- int deserialize_from(common::ByteStream &in, bool deserialize_stat,
- common::PageArena *pa) {
+ int deserialize_from(common::ByteStream& in, bool deserialize_stat,
+ common::PageArena* pa) {
int ret = common::E_OK;
if (RET_FAIL(common::SerializationUtil::read_i64(
offset_of_chunk_header_, in))) {
@@ -270,7 +270,7 @@ struct ChunkMeta {
return ret;
}
#ifndef NDEBUG
- friend std::ostream &operator<<(std::ostream &os, const ChunkMeta &cm) {
+ friend std::ostream& operator<<(std::ostream& os, const ChunkMeta& cm) {
os << "{measurement_name=" << cm.measurement_name_
<< ", data_type=" << cm.data_type_
<< ", offset_of_chunk_header=" << cm.offset_of_chunk_header_
@@ -287,16 +287,16 @@ struct ChunkMeta {
struct ChunkGroupMeta {
std::shared_ptr device_id_;
- common::SimpleList chunk_meta_list_;
+ common::SimpleList chunk_meta_list_;
- explicit ChunkGroupMeta(common::PageArena *pa_ptr)
+ explicit ChunkGroupMeta(common::PageArena* pa_ptr)
: chunk_meta_list_(pa_ptr) {}
FORCE_INLINE int init(std::shared_ptr device_id) {
device_id_ = device_id;
return 0;
}
- FORCE_INLINE int push(ChunkMeta *cm) {
+ FORCE_INLINE int push(ChunkMeta* cm) {
return chunk_meta_list_.push_back(cm);
}
};
@@ -305,13 +305,13 @@ class ITimeseriesIndex {
public:
ITimeseriesIndex() {}
~ITimeseriesIndex() {}
- virtual common::SimpleList *get_chunk_meta_list() const {
+ virtual common::SimpleList* get_chunk_meta_list() const {
return nullptr;
}
- virtual common::SimpleList *get_time_chunk_meta_list() const {
+ virtual common::SimpleList* get_time_chunk_meta_list() const {
return nullptr;
}
- virtual common::SimpleList *get_value_chunk_meta_list() const {
+ virtual common::SimpleList* get_value_chunk_meta_list() const {
return nullptr;
}
@@ -321,7 +321,7 @@ class ITimeseriesIndex {
virtual common::TSDataType get_data_type() const {
return common::INVALID_DATATYPE;
}
- virtual Statistic *get_statistic() const { return nullptr; }
+ virtual Statistic* get_statistic() const { return nullptr; }
};
/*
@@ -368,19 +368,18 @@ class TimeseriesIndex : public ITimeseriesIndex {
}
}
- int add_chunk_meta(ChunkMeta *chunk_meta, bool serialize_statistic);
- FORCE_INLINE int set_measurement_name(common::String &measurement_name,
- common::PageArena &pa) {
+ int add_chunk_meta(ChunkMeta* chunk_meta, bool serialize_statistic);
+ FORCE_INLINE int set_measurement_name(common::String& measurement_name,
+ common::PageArena& pa) {
return measurement_name_.dup_from(measurement_name, pa);
}
- FORCE_INLINE void set_measurement_name(common::String &measurement_name) {
+ FORCE_INLINE void set_measurement_name(common::String& measurement_name) {
measurement_name_.shallow_copy_from(measurement_name);
}
FORCE_INLINE virtual common::String get_measurement_name() const {
return measurement_name_;
}
- virtual inline common::SimpleList *get_chunk_meta_list()
- const {
+ virtual inline common::SimpleList* get_chunk_meta_list() const {
return chunk_meta_list_;
}
FORCE_INLINE void set_ts_meta_type(char ts_meta_type) {
@@ -405,7 +404,7 @@ class TimeseriesIndex : public ITimeseriesIndex {
statistic_->reset();
return common::E_OK;
}
- virtual Statistic *get_statistic() const { return statistic_; }
+ virtual Statistic* get_statistic() const { return statistic_; }
common::TsID get_ts_id() const { return ts_id_; }
FORCE_INLINE void finish() {
@@ -413,7 +412,7 @@ class TimeseriesIndex : public ITimeseriesIndex {
chunk_meta_list_serialized_buf_.total_size();
}
- int serialize_to(common::ByteStream &out) {
+ int serialize_to(common::ByteStream& out) {
int ret = common::E_OK;
if (RET_FAIL(common::SerializationUtil::write_char(
timeseries_meta_type_, out))) {
@@ -430,14 +429,14 @@ class TimeseriesIndex : public ITimeseriesIndex {
return ret;
}
- int deserialize_from(common::ByteStream &in, common::PageArena *pa) {
+ int deserialize_from(common::ByteStream& in, common::PageArena* pa) {
int ret = common::E_OK;
if (RET_FAIL(common::SerializationUtil::read_char(timeseries_meta_type_,
in))) {
} else if (RET_FAIL(common::SerializationUtil::read_mystring(
measurement_name_, pa, in))) {
} else if (RET_FAIL(common::SerializationUtil::read_char(
- (char &)data_type_, in))) {
+ (char&)data_type_, in))) {
} else if (RET_FAIL(common::SerializationUtil::read_var_uint(
chunk_meta_list_data_size_, in))) {
} else if (nullptr ==
@@ -447,22 +446,22 @@ class TimeseriesIndex : public ITimeseriesIndex {
} else if (RET_FAIL(statistic_->deserialize_from(in))) {
} else {
statistic_from_pa_ = true;
- void *chunk_meta_list_buf = pa->alloc(sizeof(*chunk_meta_list_));
+ void* chunk_meta_list_buf = pa->alloc(sizeof(*chunk_meta_list_));
if (IS_NULL(chunk_meta_list_buf)) {
return common::E_OOM;
}
const bool deserialize_chunk_meta_statistic =
(timeseries_meta_type_ & 0x3F); // TODO
chunk_meta_list_ =
- new (chunk_meta_list_buf) common::SimpleList(pa);
+ new (chunk_meta_list_buf) common::SimpleList(pa);
uint32_t start_pos = in.read_pos();
while (IS_SUCC(ret) &&
in.read_pos() < start_pos + chunk_meta_list_data_size_) {
- void *cm_buf = pa->alloc(sizeof(ChunkMeta));
+ void* cm_buf = pa->alloc(sizeof(ChunkMeta));
if (IS_NULL(cm_buf)) {
ret = common::E_OOM;
} else {
- ChunkMeta *cm = new (cm_buf) ChunkMeta;
+ ChunkMeta* cm = new (cm_buf) ChunkMeta;
cm->measurement_name_.shallow_copy_from(
this->measurement_name_);
cm->data_type_ = this->data_type_;
@@ -477,7 +476,7 @@ class TimeseriesIndex : public ITimeseriesIndex {
return ret;
}
- int clone_from(const TimeseriesIndex &that, common::PageArena *pa) {
+ int clone_from(const TimeseriesIndex& that, common::PageArena* pa) {
int ret = common::E_OK;
timeseries_meta_type_ = that.timeseries_meta_type_;
chunk_meta_list_data_size_ = that.chunk_meta_list_data_size_;
@@ -496,20 +495,20 @@ class TimeseriesIndex : public ITimeseriesIndex {
}
if (that.chunk_meta_list_ != nullptr) {
- void *buf = pa->alloc(sizeof(*chunk_meta_list_));
+ void* buf = pa->alloc(sizeof(*chunk_meta_list_));
if (IS_NULL(buf)) {
return common::E_OOM;
}
- chunk_meta_list_ = new (buf) common::SimpleList(pa);
- common::SimpleList::Iterator it;
+ chunk_meta_list_ = new (buf) common::SimpleList(pa);
+ common::SimpleList::Iterator it;
for (it = that.chunk_meta_list_->begin();
IS_SUCC(ret) && it != that.chunk_meta_list_->end(); it++) {
- ChunkMeta *cm = it.get();
- void *cm_buf = pa->alloc(sizeof(ChunkMeta));
+ ChunkMeta* cm = it.get();
+ void* cm_buf = pa->alloc(sizeof(ChunkMeta));
if (IS_NULL(cm_buf)) {
return common::E_OOM;
} else {
- ChunkMeta *my_cm = new (cm_buf) ChunkMeta;
+ ChunkMeta* my_cm = new (cm_buf) ChunkMeta;
if (RET_FAIL(my_cm->clone_from(*cm, pa))) {
} else if (RET_FAIL(chunk_meta_list_->push_back(my_cm))) {
}
@@ -519,8 +518,8 @@ class TimeseriesIndex : public ITimeseriesIndex {
return ret;
}
#ifndef NDEBUG
- friend std::ostream &operator<<(std::ostream &os,
- const TimeseriesIndex &tsi) {
+ friend std::ostream& operator<<(std::ostream& os,
+ const TimeseriesIndex& tsi) {
os << "{meta_type=" << (int)tsi.timeseries_meta_type_
<< ", chunk_meta_list_data_size=" << tsi.chunk_meta_list_data_size_
<< ", measurement_name=" << tsi.measurement_name_
@@ -531,7 +530,7 @@ class TimeseriesIndex : public ITimeseriesIndex {
if (tsi.chunk_meta_list_) {
os << ", chunk_meta_list={";
int count = 0;
- common::SimpleList::Iterator it =
+ common::SimpleList::Iterator it =
tsi.chunk_meta_list_->begin();
for (; it != tsi.chunk_meta_list_->end(); it++, count++) {
if (count != 0) {
@@ -565,24 +564,24 @@ class TimeseriesIndex : public ITimeseriesIndex {
* TimeseriesIndex.statistic_ is duplicated with ChunkMeta.statistic_. In
* this case, we do not serialize ChunkMeta.statistic_.
*/
- Statistic *statistic_;
+ Statistic* statistic_;
bool statistic_from_pa_;
common::ByteStream chunk_meta_list_serialized_buf_;
// common::PageArena page_arena_;
- common::SimpleList *chunk_meta_list_; // for deserialize_from
+ common::SimpleList* chunk_meta_list_; // for deserialize_from
};
class AlignedTimeseriesIndex : public ITimeseriesIndex {
public:
- TimeseriesIndex *time_ts_idx_;
- TimeseriesIndex *value_ts_idx_;
+ TimeseriesIndex* time_ts_idx_;
+ TimeseriesIndex* value_ts_idx_;
AlignedTimeseriesIndex() {}
~AlignedTimeseriesIndex() {}
- virtual common::SimpleList *get_time_chunk_meta_list() const {
+ virtual common::SimpleList* get_time_chunk_meta_list() const {
return time_ts_idx_->get_chunk_meta_list();
}
- virtual common::SimpleList *get_value_chunk_meta_list() const {
+ virtual common::SimpleList* get_value_chunk_meta_list() const {
return value_ts_idx_->get_chunk_meta_list();
}
@@ -592,13 +591,13 @@ class AlignedTimeseriesIndex : public ITimeseriesIndex {
virtual common::TSDataType get_data_type() const {
return time_ts_idx_->get_data_type();
}
- virtual Statistic *get_statistic() const {
+ virtual Statistic* get_statistic() const {
return value_ts_idx_->get_statistic();
}
#ifndef NDEBUG
- friend std::ostream &operator<<(std::ostream &os,
- const AlignedTimeseriesIndex &tsi) {
+ friend std::ostream& operator<<(std::ostream& os,
+ const AlignedTimeseriesIndex& tsi) {
os << "time_ts_idx=" << *tsi.time_ts_idx_;
os << ", value_ts_idx=" << *tsi.value_ts_idx_;
return os;
@@ -609,7 +608,7 @@ class AlignedTimeseriesIndex : public ITimeseriesIndex {
class TSMIterator {
public:
explicit TSMIterator(
- common::SimpleList &chunk_group_meta_list)
+ common::SimpleList& chunk_group_meta_list)
: chunk_group_meta_list_(chunk_group_meta_list),
chunk_group_meta_iter_(),
chunk_meta_iter_() {}
@@ -617,38 +616,38 @@ class TSMIterator {
// sort => iterate
int init();
bool has_next() const;
- int get_next(std::shared_ptr &ret_device_id,
- common::String &ret_measurement_name,
- TimeseriesIndex &ret_ts_index);
+ int get_next(std::shared_ptr& ret_device_id,
+ common::String& ret_measurement_name,
+ TimeseriesIndex& ret_ts_index);
private:
- common::SimpleList &chunk_group_meta_list_;
- common::SimpleList::Iterator chunk_group_meta_iter_;
- common::SimpleList::Iterator chunk_meta_iter_;
+ common::SimpleList& chunk_group_meta_list_;
+ common::SimpleList::Iterator chunk_group_meta_iter_;
+ common::SimpleList::Iterator chunk_meta_iter_;
// timeseries measurenemnt chunk meta info
// map >>
std::map,
- std::map>>
+ std::map>>
tsm_chunk_meta_info_;
// device iterator
std::map,
- std::map>>::iterator
+ std::map>>::iterator
tsm_device_iter_;
// measurement iterator
- std::map>::iterator
+ std::map>::iterator
tsm_measurement_iter_;
};
/* =============== TsFile Index ================ */
struct IComparable {
virtual ~IComparable() = default;
- virtual bool operator<(const IComparable &other) const = 0;
- virtual bool operator>(const IComparable &other) const = 0;
- virtual bool operator==(const IComparable &other) const = 0;
- virtual int compare(const IComparable &other) {
+ virtual bool operator<(const IComparable& other) const = 0;
+ virtual bool operator>(const IComparable& other) const = 0;
+ virtual bool operator==(const IComparable& other) const = 0;
+ virtual int compare(const IComparable& other) {
if (this->operator<(other)) {
return -1;
} else if (this->operator==(other)) {
@@ -663,27 +662,27 @@ struct IComparable {
struct DeviceIDComparable : IComparable {
std::shared_ptr device_id_;
- explicit DeviceIDComparable(const std::shared_ptr &device_id)
+ explicit DeviceIDComparable(const std::shared_ptr& device_id)
: device_id_(device_id) {}
- bool operator<(const IComparable &other) const override {
- const auto *other_device =
- dynamic_cast(&other);
+ bool operator<(const IComparable& other) const override {
+ const auto* other_device =
+ dynamic_cast(&other);
if (!other_device) throw std::runtime_error("Incompatible comparison");
return *device_id_ < *other_device->device_id_;
}
- bool operator>(const IComparable &other) const override {
- const auto *other_device =
- dynamic_cast(&other);
+ bool operator>(const IComparable& other) const override {
+ const auto* other_device =
+ dynamic_cast(&other);
if (!other_device) throw std::runtime_error("Incompatible comparison");
return *device_id_ != *other_device->device_id_ &&
!(*device_id_ < *other_device->device_id_);
}
- bool operator==(const IComparable &other) const override {
- const auto *other_device =
- dynamic_cast(&other);
+ bool operator==(const IComparable& other) const override {
+ const auto* other_device =
+ dynamic_cast(&other);
if (!other_device) throw std::runtime_error("Incompatible comparison");
return *device_id_ == *other_device->device_id_;
}
@@ -696,25 +695,25 @@ struct DeviceIDComparable : IComparable {
struct StringComparable : IComparable {
std::string value_;
- explicit StringComparable(const std::string &value) : value_(value) {}
+ explicit StringComparable(const std::string& value) : value_(value) {}
- bool operator<(const IComparable &other) const override {
- const auto *other_string =
- dynamic_cast(&other);
+ bool operator<(const IComparable& other) const override {
+ const auto* other_string =
+ dynamic_cast(&other);
if (!other_string) throw std::runtime_error("Incompatible comparison");
return value_ < other_string->value_;
}
- bool operator>(const IComparable &other) const override {
- const auto *other_string =
- dynamic_cast(&other);
+ bool operator>(const IComparable& other) const override {
+ const auto* other_string =
+ dynamic_cast(&other);
if (!other_string) throw std::runtime_error("Incompatible comparison");
return value_ > other_string->value_;
}
- bool operator==(const IComparable &other) const override {
- const auto *other_string =
- dynamic_cast(&other);
+ bool operator==(const IComparable& other) const override {
+ const auto* other_string =
+ dynamic_cast(&other);
if (!other_string) throw std::runtime_error("Incompatible comparison");
return value_ == other_string->value_;
}
@@ -723,7 +722,7 @@ struct StringComparable : IComparable {
};
struct IMetaIndexEntry {
- static void self_destructor(IMetaIndexEntry *ptr) {
+ static void self_destructor(IMetaIndexEntry* ptr) {
if (ptr) {
ptr->~IMetaIndexEntry();
}
@@ -731,9 +730,9 @@ struct IMetaIndexEntry {
IMetaIndexEntry() = default;
virtual ~IMetaIndexEntry() = default;
- virtual int serialize_to(common::ByteStream &out) { return common::E_OK; }
- virtual int deserialize_from(common::ByteStream &out,
- common::PageArena *pa) {
+ virtual int serialize_to(common::ByteStream& out) { return common::E_OK; }
+ virtual int deserialize_from(common::ByteStream& out,
+ common::PageArena* pa) {
return common::E_NOT_SUPPORT;
}
virtual int64_t get_offset() const = 0;
@@ -743,11 +742,11 @@ struct IMetaIndexEntry {
}
virtual common::String get_name() const { return {}; }
virtual std::shared_ptr get_device_id() const { return nullptr; }
- virtual std::shared_ptr clone(common::PageArena *pa) = 0;
+ virtual std::shared_ptr clone(common::PageArena* pa) = 0;
#ifndef NDEBUG
- virtual void print(std::ostream &os) const {}
- friend std::ostream &operator<<(std::ostream &os,
- const IMetaIndexEntry &entry) {
+ virtual void print(std::ostream& os) const {}
+ friend std::ostream& operator<<(std::ostream& os,
+ const IMetaIndexEntry& entry) {
entry.print(os);
return os;
}
@@ -760,19 +759,19 @@ struct DeviceMetaIndexEntry : IMetaIndexEntry {
DeviceMetaIndexEntry() = default;
- DeviceMetaIndexEntry(const std::shared_ptr &device_id,
+ DeviceMetaIndexEntry(const std::shared_ptr& device_id,
const int64_t offset)
: device_id_(device_id), offset_(offset) {}
~DeviceMetaIndexEntry() override = default;
- static void self_deleter(DeviceMetaIndexEntry *ptr) {
+ static void self_deleter(DeviceMetaIndexEntry* ptr) {
if (ptr) {
ptr->~DeviceMetaIndexEntry();
}
}
- int serialize_to(common::ByteStream &out) override {
+ int serialize_to(common::ByteStream& out) override {
int ret = common::E_OK;
if (RET_FAIL(device_id_->serialize(out))) {
} else if (RET_FAIL(
@@ -781,10 +780,10 @@ struct DeviceMetaIndexEntry : IMetaIndexEntry {
return ret;
}
- std::shared_ptr &get_device_id() { return device_id_; }
+ std::shared_ptr& get_device_id() { return device_id_; }
- int deserialize_from(common::ByteStream &in,
- common::PageArena *pa) override {
+ int deserialize_from(common::ByteStream& in,
+ common::PageArena* pa) override {
int ret = common::E_OK;
device_id_ = std::make_shared("init");
if (RET_FAIL(device_id_->deserialize(in))) {
@@ -804,11 +803,11 @@ struct DeviceMetaIndexEntry : IMetaIndexEntry {
std::shared_ptr get_device_id() const override {
return device_id_;
}
- std::shared_ptr clone(common::PageArena *pa) override {
+ std::shared_ptr clone(common::PageArena* pa) override {
return std::make_shared(device_id_, offset_);
}
#ifndef NDEBUG
- void print(std::ostream &os) const override {
+ void print(std::ostream& os) const override {
os << "name=" << device_id_ << ", offset=" << offset_;
}
#endif
@@ -821,19 +820,19 @@ struct MeasurementMetaIndexEntry : IMetaIndexEntry {
~MeasurementMetaIndexEntry() override = default;
MeasurementMetaIndexEntry() = default;
- MeasurementMetaIndexEntry(const common::String &name, const int64_t offset,
- common::PageArena &pa) {
+ MeasurementMetaIndexEntry(const common::String& name, const int64_t offset,
+ common::PageArena& pa) {
offset_ = offset;
name_.dup_from(name, pa);
}
- FORCE_INLINE int init(const std::string &str, const int64_t offset,
- common::PageArena &pa) {
+ FORCE_INLINE int init(const std::string& str, const int64_t offset,
+ common::PageArena& pa) {
offset_ = offset;
return name_.dup_from(str, pa);
}
- int serialize_to(common::ByteStream &out) override {
+ int serialize_to(common::ByteStream& out) override {
int ret = common::E_OK;
if (RET_FAIL(common::SerializationUtil::write_mystring(name_, out))) {
} else if (RET_FAIL(
@@ -842,8 +841,8 @@ struct MeasurementMetaIndexEntry : IMetaIndexEntry {
return ret;
}
- int deserialize_from(common::ByteStream &in,
- common::PageArena *pa) override {
+ int deserialize_from(common::ByteStream& in,
+ common::PageArena* pa) override {
int ret = common::E_OK;
if (RET_FAIL(common::SerializationUtil::read_mystring(name_, pa, in))) {
} else if (RET_FAIL(common::SerializationUtil::read_i64(offset_, in))) {
@@ -863,11 +862,11 @@ struct MeasurementMetaIndexEntry : IMetaIndexEntry {
std::shared_ptr get_device_id() const override {
return nullptr;
}
- std::shared_ptr clone(common::PageArena *pa) override {
+ std::shared_ptr clone(common::PageArena* pa) override {
return std::make_shared(name_, offset_, *pa);
}
#ifndef NDEBUG
- void print(std::ostream &os) const override {
+ void print(std::ostream& os) const override {
os << "name=" << name_ << ", offset=" << offset_;
}
#endif
@@ -881,7 +880,7 @@ enum MetaIndexNodeType {
INVALID_META_NODE_TYPE = 4,
};
#ifndef NDEBUG
-static const char *meta_index_node_type_names[5] = {
+static const char* meta_index_node_type_names[5] = {
"INTERNAL_DEVICE", "LEAF_DEVICE", "INTERNAL_MEASUREMENT",
"LEAF_MEASUREMENT", "INVALID_META_NODE_TYPE"};
#endif
@@ -892,9 +891,9 @@ struct MetaIndexNode {
std::vector> children_;
int64_t end_offset_;
MetaIndexNodeType node_type_;
- common::PageArena *pa_;
+ common::PageArena* pa_;
- explicit MetaIndexNode(common::PageArena *pa)
+ explicit MetaIndexNode(common::PageArena* pa)
: children_(), end_offset_(0), node_type_(), pa_(pa) {}
std::shared_ptr peek() {
@@ -906,7 +905,7 @@ struct MetaIndexNode {
~MetaIndexNode() {}
- static void self_deleter(MetaIndexNode *ptr) {
+ static void self_deleter(MetaIndexNode* ptr) {
if (ptr) {
ptr->~MetaIndexNode();
}
@@ -914,10 +913,10 @@ struct MetaIndexNode {
int binary_search_children(
std::shared_ptr key, bool exact_search,
- std::shared_ptr &ret_index_entry,
- int64_t &ret_end_offset);
+ std::shared_ptr& ret_index_entry,
+ int64_t& ret_end_offset);
- int serialize_to(common::ByteStream &out) {
+ int serialize_to(common::ByteStream& out) {
int ret = common::E_OK;
#if DEBUG_SE
int64_t start_pos = out.total_size();
@@ -946,12 +945,12 @@ struct MetaIndexNode {
return ret;
}
- int deserialize_from(const char *buf, int len) {
+ int deserialize_from(const char* buf, int len) {
common::ByteStream bs;
bs.wrap_from(buf, len);
return deserialize_from(bs);
}
- int deserialize_from(common::ByteStream &in) {
+ int deserialize_from(common::ByteStream& in) {
int ret = common::E_OK;
uint32_t children_size = 0;
if (RET_FAIL(
@@ -959,7 +958,7 @@ struct MetaIndexNode {
return ret;
}
for (uint32_t i = 0; i < children_size && IS_SUCC(ret); i++) {
- void *entry_buf = pa_->alloc(sizeof(MeasurementMetaIndexEntry));
+ void* entry_buf = pa_->alloc(sizeof(MeasurementMetaIndexEntry));
if (IS_NULL(entry_buf)) {
return common::E_OOM;
}
@@ -987,12 +986,12 @@ struct MetaIndexNode {
#endif
return ret;
}
- int device_deserialize_from(const char *buf, int len) {
+ int device_deserialize_from(const char* buf, int len) {
common::ByteStream bs;
bs.wrap_from(buf, len);
return device_deserialize_from(bs);
}
- int device_deserialize_from(common::ByteStream &in) {
+ int device_deserialize_from(common::ByteStream& in) {
int ret = common::E_OK;
uint32_t children_size = 0;
if (RET_FAIL(
@@ -1000,11 +999,11 @@ struct MetaIndexNode {
return ret;
}
for (uint32_t i = 0; i < children_size && IS_SUCC(ret); i++) {
- void *entry_buf = pa_->alloc(sizeof(DeviceMetaIndexEntry));
+ void* entry_buf = pa_->alloc(sizeof(DeviceMetaIndexEntry));
if (IS_NULL(entry_buf)) {
return common::E_OOM;
}
- auto *entry_ptr = new (entry_buf) DeviceMetaIndexEntry();
+ auto* entry_ptr = new (entry_buf) DeviceMetaIndexEntry();
auto entry = std::shared_ptr(
entry_ptr, DeviceMetaIndexEntry::self_deleter);
if (RET_FAIL(entry->deserialize_from(in, pa_))) {
@@ -1030,8 +1029,8 @@ struct MetaIndexNode {
}
#ifndef NDEBUG
- friend std::ostream &operator<<(std::ostream &os,
- const MetaIndexNode &node) {
+ friend std::ostream& operator<<(std::ostream& os,
+ const MetaIndexNode& node) {
os << "end_offset=" << node.end_offset_
<< ", node_type=" << meta_index_node_type_names[node.node_type_];
@@ -1073,16 +1072,16 @@ struct TsFileMeta {
DeviceNodeMap;
std::map>
table_metadata_index_node_map_;
- std::unordered_map tsfile_properties_;
+ std::unordered_map tsfile_properties_;
typedef std::unordered_map>
TableSchemasMap;
TableSchemasMap table_schemas_;
int64_t meta_offset_;
- BloomFilter *bloom_filter_;
- common::PageArena *page_arena_;
+ BloomFilter* bloom_filter_;
+ common::PageArena* page_arena_;
- int get_table_metaindex_node(const std::string &table_name,
- MetaIndexNode *&ret_node) {
+ int get_table_metaindex_node(const std::string& table_name,
+ MetaIndexNode*& ret_node) {
std::map>::iterator it =
table_metadata_index_node_map_.find(table_name);
if (it == table_metadata_index_node_map_.end()) {
@@ -1092,8 +1091,8 @@ struct TsFileMeta {
return common::E_OK;
}
- int get_table_schema(const std::string &table_name,
- std::shared_ptr &ret_schema) {
+ int get_table_schema(const std::string& table_name,
+ std::shared_ptr& ret_schema) {
TableSchemasMap::iterator it = table_schemas_.find(table_name);
if (it == table_schemas_.end()) {
return common::E_TABLE_NOT_EXIST;
@@ -1105,7 +1104,7 @@ struct TsFileMeta {
TsFileMeta()
: meta_offset_(0), bloom_filter_(nullptr), page_arena_(nullptr) {}
- explicit TsFileMeta(common::PageArena *pa)
+ explicit TsFileMeta(common::PageArena* pa)
: meta_offset_(0), bloom_filter_(nullptr), page_arena_(pa) {}
~TsFileMeta() {
if (bloom_filter_ != nullptr) {
@@ -1114,19 +1113,21 @@ struct TsFileMeta {
for (auto properties : tsfile_properties_) {
if (properties.second != nullptr) {
delete properties.second;
+ properties.second = nullptr;
}
}
+ tsfile_properties_.clear();
table_metadata_index_node_map_.clear();
table_schemas_.clear();
}
- int serialize_to(common::ByteStream &out);
+ int serialize_to(common::ByteStream& out);
- int deserialize_from(common::ByteStream &in);
+ int deserialize_from(common::ByteStream& in);
#ifndef NDEBUG
- friend std::ostream &operator<<(std::ostream &os,
- const TsFileMeta &tsfile_meta) {
+ friend std::ostream& operator<<(std::ostream& os,
+ const TsFileMeta& tsfile_meta) {
os << "meta_offset=" << tsfile_meta.meta_offset_;
return os;
}
diff --git a/cpp/src/cwrapper/tsfile_cwrapper.cc b/cpp/src/cwrapper/tsfile_cwrapper.cc
index 1b09db49c..ebe8107ab 100644
--- a/cpp/src/cwrapper/tsfile_cwrapper.cc
+++ b/cpp/src/cwrapper/tsfile_cwrapper.cc
@@ -72,7 +72,7 @@ int set_global_compression(uint8_t compression) {
return common::set_global_compression(compression);
}
-WriteFile write_file_new(const char *pathname, ERRNO *err_code) {
+WriteFile write_file_new(const char* pathname, ERRNO* err_code) {
int ret;
init_tsfile_config();
@@ -86,14 +86,14 @@ WriteFile write_file_new(const char *pathname, ERRNO *err_code) {
flags |= O_BINARY;
#endif
mode_t mode = 0666;
- storage::WriteFile *file = new storage::WriteFile;
+ storage::WriteFile* file = new storage::WriteFile;
ret = file->create(pathname, flags, mode);
*err_code = ret;
return file;
}
-TsFileWriter tsfile_writer_new(WriteFile file, TableSchema *schema,
- ERRNO *err_code) {
+TsFileWriter tsfile_writer_new(WriteFile file, TableSchema* schema,
+ ERRNO* err_code) {
if (schema->column_num == 0) {
*err_code = common::E_INVALID_SCHEMA;
return nullptr;
@@ -121,19 +121,19 @@ TsFileWriter tsfile_writer_new(WriteFile file, TableSchema *schema,
static_cast(cur_schema.column_category));
}
- storage::TableSchema *table_schema =
+ storage::TableSchema* table_schema =
new storage::TableSchema(schema->table_name, column_schemas);
auto table_writer = new storage::TsFileTableWriter(
- static_cast(file), table_schema);
+ static_cast(file), table_schema);
delete table_schema;
*err_code = common::E_OK;
return table_writer;
}
TsFileWriter tsfile_writer_new_with_memory_threshold(WriteFile file,
- TableSchema *schema,
+ TableSchema* schema,
uint64_t memory_threshold,
- ERRNO *err_code) {
+ ERRNO* err_code) {
if (schema->column_num == 0) {
*err_code = common::E_INVALID_SCHEMA;
return nullptr;
@@ -154,17 +154,17 @@ TsFileWriter tsfile_writer_new_with_memory_threshold(WriteFile file,
static_cast(cur_schema.column_category));
}
- storage::TableSchema *table_schema =
+ storage::TableSchema* table_schema =
new storage::TableSchema(schema->table_name, column_schemas);
- auto table_writer =
- new storage::TsFileTableWriter(static_cast(file),
- table_schema, memory_threshold);
+ auto table_writer = new storage::TsFileTableWriter(
+ static_cast(file), table_schema, memory_threshold);
*err_code = common::E_OK;
delete table_schema;
return table_writer;
}
-TsFileReader tsfile_reader_new(const char *pathname, ERRNO *err_code) {
+
+TsFileReader tsfile_reader_new(const char* pathname, ERRNO* err_code) {
init_tsfile_config();
auto reader = new storage::TsFileReader();
int ret = reader->open(pathname);
@@ -180,7 +180,7 @@ ERRNO tsfile_writer_close(TsFileWriter writer) {
if (writer == nullptr) {
return common::E_OK;
}
- auto *w = static_cast(writer);
+ auto* w = static_cast(writer);
int ret = w->flush();
if (ret != common::E_OK) {
return ret;
@@ -194,12 +194,12 @@ ERRNO tsfile_writer_close(TsFileWriter writer) {
}
ERRNO tsfile_reader_close(TsFileReader reader) {
- auto *ts_reader = static_cast(reader);
+ auto* ts_reader = static_cast(reader);
delete ts_reader;
return common::E_OK;
}
-Tablet tablet_new(char **column_name_list, TSDataType *data_types,
+Tablet tablet_new(char** column_name_list, TSDataType* data_types,
uint32_t column_num, uint32_t max_rows) {
std::vector measurement_list;
std::vector data_type_list;
@@ -212,20 +212,20 @@ Tablet tablet_new(char **column_name_list, TSDataType *data_types,
}
uint32_t tablet_get_cur_row_size(Tablet tablet) {
- return static_cast(tablet)->get_cur_row_size();
+ return static_cast(tablet)->get_cur_row_size();
}
ERRNO tablet_add_timestamp(Tablet tablet, uint32_t row_index,
Timestamp timestamp) {
- return static_cast(tablet)->add_timestamp(row_index,
- timestamp);
+ return static_cast(tablet)->add_timestamp(row_index,
+ timestamp);
}
#define TABLET_ADD_VALUE_BY_NAME_DEF(type) \
ERRNO tablet_add_value_by_name_##type(Tablet tablet, uint32_t row_index, \
- const char *column_name, \
+ const char* column_name, \
const type value) { \
- return static_cast(tablet)->add_value( \
+ return static_cast(tablet)->add_value( \
row_index, storage::to_lower(column_name), value); \
}
TABLET_ADD_VALUE_BY_NAME_DEF(int32_t);
@@ -235,9 +235,9 @@ TABLET_ADD_VALUE_BY_NAME_DEF(double);
TABLET_ADD_VALUE_BY_NAME_DEF(bool);
ERRNO tablet_add_value_by_name_string(Tablet tablet, uint32_t row_index,
- const char *column_name,
- const char *value) {
- return static_cast(tablet)->add_value(
+ const char* column_name,
+ const char* value) {
+ return static_cast(tablet)->add_value(
row_index, storage::to_lower(column_name), common::String(value));
}
@@ -245,14 +245,14 @@ ERRNO tablet_add_value_by_name_string(Tablet tablet, uint32_t row_index,
ERRNO tablet_add_value_by_index_##type(Tablet tablet, uint32_t row_index, \
uint32_t column_index, \
const type value) { \
- return static_cast(tablet)->add_value( \
+ return static_cast(tablet)->add_value( \
row_index, column_index, value); \
}
ERRNO tablet_add_value_by_index_string(Tablet tablet, uint32_t row_index,
uint32_t column_index,
- const char *value) {
- return static_cast(tablet)->add_value(
+ const char* value) {
+ return static_cast(tablet)->add_value(
row_index, column_index, common::String(value));
}
@@ -263,16 +263,16 @@ TABLE_ADD_VALUE_BY_INDEX_DEF(double);
TABLE_ADD_VALUE_BY_INDEX_DEF(bool);
// TsRecord API
-TsRecord _ts_record_new(const char *device_id, Timestamp timestamp,
+TsRecord _ts_record_new(const char* device_id, Timestamp timestamp,
int timeseries_num) {
- auto *record = new storage::TsRecord(timestamp, device_id, timeseries_num);
+ auto* record = new storage::TsRecord(timestamp, device_id, timeseries_num);
return record;
}
#define INSERT_DATA_INTO_TS_RECORD_BY_NAME_DEF(type) \
ERRNO _insert_data_into_ts_record_by_name_##type( \
- TsRecord data, const char *measurement_name, type value) { \
- auto *record = (storage::TsRecord *)data; \
+ TsRecord data, const char* measurement_name, type value) { \
+ auto* record = (storage::TsRecord*)data; \
storage::DataPoint point(measurement_name, value); \
if (record->points_.size() + 1 > record->points_.capacity()) \
return common::E_BUF_NOT_ENOUGH; \
@@ -302,8 +302,8 @@ return writer;
*/
ERRNO tsfile_writer_write(TsFileWriter writer, Tablet tablet) {
- auto *w = static_cast(writer);
- auto *tbl = static_cast(tablet);
+ auto* w = static_cast(writer);
+ auto* tbl = static_cast(tablet);
return w->write_table(*tbl);
}
@@ -314,12 +314,12 @@ ERRNO tsfile_writer_write(TsFileWriter writer, Tablet tablet) {
// Query
-ResultSet tsfile_query_table(TsFileReader reader, const char *table_name,
- char **columns, uint32_t column_num,
+ResultSet tsfile_query_table(TsFileReader reader, const char* table_name,
+ char** columns, uint32_t column_num,
Timestamp start_time, Timestamp end_time,
- ERRNO *err_code) {
- auto *r = static_cast(reader);
- storage::ResultSet *table_result_set = nullptr;
+ ERRNO* err_code) {
+ auto* r = static_cast(reader);
+ storage::ResultSet* table_result_set = nullptr;
std::vector column_names;
for (uint32_t i = 0; i < column_num; i++) {
column_names.emplace_back(columns[i]);
@@ -329,8 +329,22 @@ ResultSet tsfile_query_table(TsFileReader reader, const char *table_name,
return table_result_set;
}
-bool tsfile_result_set_next(ResultSet result_set, ERRNO *err_code) {
- auto *r = static_cast(result_set);
+ResultSet tsfile_query_table_on_tree(TsFileReader reader, char** columns,
+ uint32_t column_num, Timestamp start_time,
+ Timestamp end_time, ERRNO* err_code) {
+ auto* r = static_cast(reader);
+ storage::ResultSet* table_result_set = nullptr;
+ std::vector column_names;
+ for (uint32_t i = 0; i < column_num; i++) {
+ column_names.emplace_back(columns[i]);
+ }
+ *err_code = r->query_table_on_tree(column_names, start_time, end_time,
+ table_result_set);
+ return table_result_set;
+}
+
+bool tsfile_result_set_next(ResultSet result_set, ERRNO* err_code) {
+ auto* r = static_cast(result_set);
bool has_next = true;
int ret = common::E_OK;
ret = r->next(has_next);
@@ -343,8 +357,8 @@ bool tsfile_result_set_next(ResultSet result_set, ERRNO *err_code) {
#define TSFILE_RESULT_SET_GET_VALUE_BY_NAME_DEF(type) \
type tsfile_result_set_get_value_by_name_##type(ResultSet result_set, \
- const char *column_name) { \
- auto *r = static_cast(result_set); \
+ const char* column_name) { \
+ auto* r = static_cast(result_set); \
std::string column_name_(column_name); \
return r->get_value(column_name_); \
}
@@ -354,13 +368,13 @@ TSFILE_RESULT_SET_GET_VALUE_BY_NAME_DEF(int32_t);
TSFILE_RESULT_SET_GET_VALUE_BY_NAME_DEF(int64_t);
TSFILE_RESULT_SET_GET_VALUE_BY_NAME_DEF(float);
TSFILE_RESULT_SET_GET_VALUE_BY_NAME_DEF(double);
-char *tsfile_result_set_get_value_by_name_string(ResultSet result_set,
- const char *column_name) {
- auto *r = static_cast(result_set);
+char* tsfile_result_set_get_value_by_name_string(ResultSet result_set,
+ const char* column_name) {
+ auto* r = static_cast(result_set);
std::string column_name_(column_name);
- common::String *ret = r->get_value(column_name_);
+ common::String* ret = r->get_value(column_name_);
// Caller should free return's char* 's space.
- char *dup = (char *)malloc(ret->len_ + 1);
+ char* dup = (char*)malloc(ret->len_ + 1);
if (dup) {
memcpy(dup, ret->buf_, ret->len_);
dup[ret->len_] = '\0';
@@ -371,7 +385,7 @@ char *tsfile_result_set_get_value_by_name_string(ResultSet result_set,
#define TSFILE_RESULT_SET_GET_VALUE_BY_INDEX_DEF(type) \
type tsfile_result_set_get_value_by_index_##type(ResultSet result_set, \
uint32_t column_index) { \
- auto *r = static_cast(result_set); \
+ auto* r = static_cast(result_set); \
return r->get_value(column_index); \
}
@@ -381,12 +395,12 @@ TSFILE_RESULT_SET_GET_VALUE_BY_INDEX_DEF(float);
TSFILE_RESULT_SET_GET_VALUE_BY_INDEX_DEF(double);
TSFILE_RESULT_SET_GET_VALUE_BY_INDEX_DEF(bool);
-char *tsfile_result_set_get_value_by_index_string(ResultSet result_set,
+char* tsfile_result_set_get_value_by_index_string(ResultSet result_set,
uint32_t column_index) {
- auto *r = static_cast(result_set);
- common::String *ret = r->get_value(column_index);
+ auto* r = static_cast(result_set);
+ common::String* ret = r->get_value(column_index);
// Caller should free return's char* 's space.
- char *dup = (char *)malloc(ret->len_ + 1);
+ char* dup = (char*)malloc(ret->len_ + 1);
if (dup) {
memcpy(dup, ret->buf_, ret->len_);
dup[ret->len_] = '\0';
@@ -395,19 +409,19 @@ char *tsfile_result_set_get_value_by_index_string(ResultSet result_set,
}
bool tsfile_result_set_is_null_by_name(ResultSet result_set,
- const char *column_name) {
- auto *r = static_cast(result_set);
+ const char* column_name) {
+ auto* r = static_cast(result_set);
return r->is_null(column_name);
}
bool tsfile_result_set_is_null_by_index(const ResultSet result_set,
const uint32_t column_index) {
- auto *r = static_cast(result_set);
+ auto* r = static_cast(result_set);
return r->is_null(column_index);
}
ResultSetMetaData tsfile_result_set_get_metadata(ResultSet result_set) {
- auto *r = static_cast(result_set);
+ auto* r = static_cast(result_set);
if (result_set == NULL) {
return ResultSetMetaData();
}
@@ -417,8 +431,8 @@ ResultSetMetaData tsfile_result_set_get_metadata(ResultSet result_set) {
r->get_metadata();
meta_data.column_num = result_set_metadata->get_column_count();
meta_data.column_names =
- static_cast(malloc(meta_data.column_num * sizeof(char *)));
- meta_data.data_types = static_cast(
+ static_cast(malloc(meta_data.column_num * sizeof(char*)));
+ meta_data.data_types = static_cast(
malloc(meta_data.column_num * sizeof(TSDataType)));
for (int i = 0; i < meta_data.column_num; i++) {
meta_data.column_names[i] =
@@ -429,7 +443,7 @@ ResultSetMetaData tsfile_result_set_get_metadata(ResultSet result_set) {
return meta_data;
}
-char *tsfile_result_set_metadata_get_column_name(ResultSetMetaData result_set,
+char* tsfile_result_set_metadata_get_column_name(ResultSetMetaData result_set,
uint32_t column_index) {
if (column_index > (uint32_t)result_set.column_num) {
return nullptr;
@@ -482,15 +496,15 @@ int tsfile_result_set_metadata_get_column_num(ResultSetMetaData result_set) {
// }
TableSchema tsfile_reader_get_table_schema(TsFileReader reader,
- const char *table_name) {
- auto *r = static_cast(reader);
+ const char* table_name) {
+ auto* r = static_cast(reader);
auto table_shcema = r->get_table_schema(table_name);
TableSchema ret_schema;
ret_schema.table_name = strdup(table_shcema->get_table_name().c_str());
int column_num = table_shcema->get_columns_num();
ret_schema.column_num = column_num;
ret_schema.column_schemas =
- static_cast(malloc(sizeof(ColumnSchema) * column_num));
+ static_cast(malloc(sizeof(ColumnSchema) * column_num));
for (int i = 0; i < column_num; i++) {
auto column_schema = table_shcema->get_measurement_schemas()[i];
ret_schema.column_schemas[i].column_name =
@@ -504,18 +518,18 @@ TableSchema tsfile_reader_get_table_schema(TsFileReader reader,
return ret_schema;
}
-TableSchema *tsfile_reader_get_all_table_schemas(TsFileReader reader,
- uint32_t *size) {
- auto *r = static_cast(reader);
+TableSchema* tsfile_reader_get_all_table_schemas(TsFileReader reader,
+ uint32_t* size) {
+ auto* r = static_cast(reader);
auto table_schemas = r->get_all_table_schemas();
size_t table_num = table_schemas.size();
- TableSchema *ret =
- static_cast(malloc(sizeof(TableSchema) * table_num));
+ TableSchema* ret =
+ static_cast(malloc(sizeof(TableSchema) * table_num));
for (size_t i = 0; i < table_schemas.size(); i++) {
ret[i].table_name = strdup(table_schemas[i]->get_table_name().c_str());
int column_num = table_schemas[i]->get_columns_num();
ret[i].column_num = column_num;
- ret[i].column_schemas = static_cast(
+ ret[i].column_schemas = static_cast(
malloc(column_num * sizeof(ColumnSchema)));
auto column_schemas = table_schemas[i]->get_measurement_schemas();
for (int j = 0; j < column_num; j++) {
@@ -533,23 +547,23 @@ TableSchema *tsfile_reader_get_all_table_schemas(TsFileReader reader,
}
// delete pointer
-void _free_tsfile_ts_record(TsRecord *record) {
+void _free_tsfile_ts_record(TsRecord* record) {
if (*record != nullptr) {
- delete static_cast(*record);
+ delete static_cast(*record);
}
*record = nullptr;
}
-void free_tablet(Tablet *tablet) {
+void free_tablet(Tablet* tablet) {
if (*tablet != nullptr) {
- delete static_cast(*tablet);
+ delete static_cast(*tablet);
}
*tablet = nullptr;
}
-void free_tsfile_result_set(ResultSet *result_set) {
+void free_tsfile_result_set(ResultSet* result_set) {
if (*result_set != nullptr) {
- delete static_cast(*result_set);
+ delete static_cast(*result_set);
}
*result_set = nullptr;
}
@@ -583,15 +597,15 @@ void free_table_schema(TableSchema schema) {
}
void free_column_schema(ColumnSchema schema) { free(schema.column_name); }
-void free_write_file(WriteFile *write_file) {
- auto f = static_cast(*write_file);
+void free_write_file(WriteFile* write_file) {
+ auto f = static_cast(*write_file);
delete f;
*write_file = nullptr;
}
// For Python API
-TsFileWriter _tsfile_writer_new(const char *pathname, uint64_t memory_threshold,
- ERRNO *err_code) {
+TsFileWriter _tsfile_writer_new(const char* pathname, uint64_t memory_threshold,
+ ERRNO* err_code) {
init_tsfile_config();
auto writer = new storage::TsFileWriter();
int flags = O_WRONLY | O_CREAT | O_TRUNC;
@@ -608,9 +622,9 @@ TsFileWriter _tsfile_writer_new(const char *pathname, uint64_t memory_threshold,
return writer;
}
-Tablet _tablet_new_with_target_name(const char *device_id,
- char **column_name_list,
- TSDataType *data_types, int column_num,
+Tablet _tablet_new_with_target_name(const char* device_id,
+ char** column_name_list,
+ TSDataType* data_types, int column_num,
int max_rows) {
std::vector measurement_list;
std::vector data_type_list;
@@ -627,27 +641,27 @@ Tablet _tablet_new_with_target_name(const char *device_id,
}
}
-ERRNO _tsfile_writer_register_table(TsFileWriter writer, TableSchema *schema) {
- std::vector measurement_schemas;
+ERRNO _tsfile_writer_register_table(TsFileWriter writer, TableSchema* schema) {
+ std::vector measurement_schemas;
std::vector column_categories;
measurement_schemas.resize(schema->column_num);
for (int i = 0; i < schema->column_num; i++) {
- ColumnSchema *cur_schema = schema->column_schemas + i;
+ ColumnSchema* cur_schema = schema->column_schemas + i;
measurement_schemas[i] = new storage::MeasurementSchema(
cur_schema->column_name,
static_cast(cur_schema->data_type));
column_categories.push_back(
static_cast(cur_schema->column_category));
}
- auto tsfile_writer = static_cast(writer);
+ auto tsfile_writer = static_cast(writer);
return tsfile_writer->register_table(std::make_shared(
schema->table_name, measurement_schemas, column_categories));
}
ERRNO _tsfile_writer_register_timeseries(TsFileWriter writer,
- const char *device_id,
- const TimeseriesSchema *schema) {
- auto *w = static_cast(writer);
+ const char* device_id,
+ const TimeseriesSchema* schema) {
+ auto* w = static_cast(writer);
int ret = w->register_timeseries(
device_id,
@@ -660,8 +674,8 @@ ERRNO _tsfile_writer_register_timeseries(TsFileWriter writer,
}
ERRNO _tsfile_writer_register_device(TsFileWriter writer,
- const device_schema *device_schema) {
- auto *w = static_cast(writer);
+ const device_schema* device_schema) {
+ auto* w = static_cast(writer);
for (int column_id = 0; column_id < device_schema->timeseries_num;
column_id++) {
TimeseriesSchema schema = device_schema->timeseries_schema[column_id];
@@ -680,26 +694,26 @@ ERRNO _tsfile_writer_register_device(TsFileWriter writer,
}
ERRNO _tsfile_writer_write_tablet(TsFileWriter writer, Tablet tablet) {
- auto *w = static_cast(writer);
- const auto *tbl = static_cast(tablet);
+ auto* w = static_cast(writer);
+ const auto* tbl = static_cast(tablet);
return w->write_tablet(*tbl);
}
ERRNO _tsfile_writer_write_table(TsFileWriter writer, Tablet tablet) {
- auto *w = static_cast(writer);
- auto *tbl = static_cast(tablet);
+ auto* w = static_cast(writer);
+ auto* tbl = static_cast(tablet);
return w->write_table(*tbl);
}
ERRNO _tsfile_writer_write_ts_record(TsFileWriter writer, TsRecord data) {
- auto *w = static_cast(writer);
- const storage::TsRecord *record = static_cast(data);
+ auto* w = static_cast(writer);
+ const storage::TsRecord* record = static_cast(data);
const int ret = w->write_record(*record);
return ret;
}
ERRNO _tsfile_writer_close(TsFileWriter writer) {
- auto *w = static_cast(writer);
+ auto* w = static_cast(writer);
int ret = w->flush();
if (ret != common::E_OK) {
return ret;
@@ -713,23 +727,23 @@ ERRNO _tsfile_writer_close(TsFileWriter writer) {
}
ERRNO _tsfile_writer_flush(TsFileWriter writer) {
- auto *w = static_cast(writer);
+ auto* w = static_cast(writer);
return w->flush();
}
ResultSet _tsfile_reader_query_device(TsFileReader reader,
- const char *device_name,
- char **sensor_name, uint32_t sensor_num,
+ const char* device_name,
+ char** sensor_name, uint32_t sensor_num,
Timestamp start_time, Timestamp end_time,
- ERRNO *err_code) {
- auto *r = static_cast(reader);
+ ERRNO* err_code) {
+ auto* r = static_cast(reader);
std::vector selected_paths;
selected_paths.reserve(sensor_num);
for (uint32_t i = 0; i < sensor_num; i++) {
selected_paths.push_back(std::string(device_name) + "." +
std::string(sensor_name[i]));
}
- storage::ResultSet *qds = nullptr;
+ storage::ResultSet* qds = nullptr;
*err_code = r->query(selected_paths, start_time, end_time, qds);
return qds;
}
diff --git a/cpp/src/cwrapper/tsfile_cwrapper.h b/cpp/src/cwrapper/tsfile_cwrapper.h
index 75dc03643..f94325aa4 100644
--- a/cpp/src/cwrapper/tsfile_cwrapper.h
+++ b/cpp/src/cwrapper/tsfile_cwrapper.h
@@ -428,6 +428,10 @@ ResultSet tsfile_query_table(TsFileReader reader, const char* table_name,
char** columns, uint32_t column_num,
Timestamp start_time, Timestamp end_time,
ERRNO* err_code);
+
+ResultSet tsfile_query_table_on_tree(TsFileReader reader, char** columns,
+ uint32_t column_num, Timestamp start_time,
+ Timestamp end_time, ERRNO* err_code);
// ResultSet tsfile_reader_query_device(TsFileReader reader,
// const char* device_name,
// char** sensor_name, uint32_t sensor_num,
diff --git a/cpp/src/file/tsfile_io_reader.cc b/cpp/src/file/tsfile_io_reader.cc
index 273f09a44..e16b6b4a2 100644
--- a/cpp/src/file/tsfile_io_reader.cc
+++ b/cpp/src/file/tsfile_io_reader.cc
@@ -24,7 +24,7 @@
using namespace common;
namespace storage {
-int TsFileIOReader::init(const std::string &file_path) {
+int TsFileIOReader::init(const std::string& file_path) {
int ret = E_OK;
read_file_ = new ReadFile;
read_file_created_ = true;
@@ -33,7 +33,7 @@ int TsFileIOReader::init(const std::string &file_path) {
return ret;
}
-int TsFileIOReader::init(ReadFile *read_file) {
+int TsFileIOReader::init(ReadFile* read_file) {
if (IS_NULL(read_file)) {
ASSERT(false);
return E_INVALID_ARG;
@@ -56,9 +56,9 @@ void TsFileIOReader::reset() {
}
int TsFileIOReader::alloc_ssi(std::shared_ptr device_id,
- const std::string &measurement_name,
- TsFileSeriesScanIterator *&ssi,
- common::PageArena &pa, Filter *time_filter) {
+ const std::string& measurement_name,
+ TsFileSeriesScanIterator*& ssi,
+ common::PageArena& pa, Filter* time_filter) {
int ret = E_OK;
if (RET_FAIL(load_tsfile_meta_if_necessary())) {
} else {
@@ -80,7 +80,7 @@ int TsFileIOReader::alloc_ssi(std::shared_ptr device_id,
return ret;
}
-void TsFileIOReader::revert_ssi(TsFileSeriesScanIterator *ssi) {
+void TsFileIOReader::revert_ssi(TsFileSeriesScanIterator* ssi) {
if (ssi != nullptr) {
ssi->destroy();
delete ssi;
@@ -89,12 +89,12 @@ void TsFileIOReader::revert_ssi(TsFileSeriesScanIterator *ssi) {
int TsFileIOReader::get_device_timeseries_meta_without_chunk_meta(
std::shared_ptr device_id,
- std::vector ×eries_indexs, PageArena &pa) {
+ std::vector& timeseries_indexs, PageArena& pa) {
int ret = E_OK;
load_tsfile_meta_if_necessary();
std::shared_ptr meta_index_entry;
int64_t end_offset;
- std::vector, int64_t> >
+ std::vector, int64_t>>
meta_index_entry_list;
if (RET_FAIL(load_device_index_entry(
std::make_shared(device_id), meta_index_entry,
@@ -108,8 +108,8 @@ int TsFileIOReader::get_device_timeseries_meta_without_chunk_meta(
return ret;
}
-bool TsFileIOReader::filter_stasify(ITimeseriesIndex *ts_index,
- Filter *time_filter) {
+bool TsFileIOReader::filter_stasify(ITimeseriesIndex* ts_index,
+ Filter* time_filter) {
ASSERT(ts_index->get_statistic() != nullptr);
return time_filter->satisfy(ts_index->get_statistic());
}
@@ -141,7 +141,7 @@ int TsFileIOReader::load_tsfile_meta() {
// Step 1: reader the tsfile_meta_size
// 1.1 prepare reader buffer
int32_t alloc_size = UTIL_MIN(TSFILE_READ_IO_SIZE, file_size());
- char *read_buf = (char *)mem_alloc(alloc_size, MOD_TSFILE_READER);
+ char* read_buf = (char*)mem_alloc(alloc_size, MOD_TSFILE_READER);
if (IS_NULL(read_buf)) {
return E_OOM;
}
@@ -159,7 +159,7 @@ int TsFileIOReader::load_tsfile_meta() {
// 1.3 deserialize tsfile_meta_size
if (IS_SUCC(ret)) {
// deserialize tsfile_meta_size
- char *size_buf = read_buf + alloc_size - TAIL_MAGIC_AND_META_SIZE_SIZE;
+ char* size_buf = read_buf + alloc_size - TAIL_MAGIC_AND_META_SIZE_SIZE;
tsfile_meta_size = SerializationUtil::read_ui32(size_buf);
ASSERT(tsfile_meta_size > 0 && tsfile_meta_size <= (1ll << 20));
}
@@ -167,12 +167,12 @@ int TsFileIOReader::load_tsfile_meta() {
// Step 2: reader TsFileMeta
if (IS_SUCC(ret)) {
// 2.1 prepare enough buffer (use the previous buffer if can).
- char *tsfile_meta_buf = nullptr;
+ char* tsfile_meta_buf = nullptr;
if (tsfile_meta_size + TAIL_MAGIC_AND_META_SIZE_SIZE >
(uint32_t)alloc_size) {
// prepare buffer to re-reader from start of tsfile_meta
- char *old_read_buf = read_buf;
- read_buf = (char *)mem_realloc(read_buf, tsfile_meta_size);
+ char* old_read_buf = read_buf;
+ read_buf = (char*)mem_realloc(read_buf, tsfile_meta_size);
if (IS_NULL(read_buf)) {
read_buf = old_read_buf;
ret = E_OOM;
@@ -211,8 +211,8 @@ int TsFileIOReader::load_tsfile_meta() {
}
int TsFileIOReader::load_timeseries_index_for_ssi(
- std::shared_ptr device_id, const std::string &measurement_name,
- TsFileSeriesScanIterator *&ssi) {
+ std::shared_ptr device_id, const std::string& measurement_name,
+ TsFileSeriesScanIterator*& ssi) {
int ret = E_OK;
std::shared_ptr device_index_entry;
int64_t device_ie_end_offset = 0;
@@ -224,19 +224,19 @@ int TsFileIOReader::load_timeseries_index_for_ssi(
device_ie_end_offset))) {
return ret;
}
- auto &pa = ssi->timeseries_index_pa_;
+ auto& pa = ssi->timeseries_index_pa_;
int start_offset = device_index_entry->get_offset(),
end_offset = device_ie_end_offset;
ASSERT(start_offset < end_offset);
const int32_t read_size = end_offset - start_offset;
int32_t ret_read_len = 0;
- char *data_buf = (char *)pa.alloc(read_size);
- void *m_idx_node_buf = pa.alloc(sizeof(MetaIndexNode));
+ char* data_buf = (char*)pa.alloc(read_size);
+ void* m_idx_node_buf = pa.alloc(sizeof(MetaIndexNode));
if (IS_NULL(data_buf) || IS_NULL(m_idx_node_buf)) {
return E_OOM;
}
- auto *top_node_ptr = new (m_idx_node_buf) MetaIndexNode(&pa);
+ auto* top_node_ptr = new (m_idx_node_buf) MetaIndexNode(&pa);
auto top_node = std::shared_ptr(top_node_ptr,
MetaIndexNode::self_deleter);
@@ -248,7 +248,7 @@ int TsFileIOReader::load_timeseries_index_for_ssi(
}
bool is_aligned = is_aligned_device(top_node);
- TimeseriesIndex *timeseries_index = nullptr;
+ TimeseriesIndex* timeseries_index = nullptr;
if (is_aligned) {
if (RET_FAIL(
get_time_column_metadata(top_node, timeseries_index, pa))) {
@@ -267,8 +267,8 @@ int TsFileIOReader::load_timeseries_index_for_ssi(
return ret;
}
if (is_aligned) {
- auto *aligned_timeseries_index =
- dynamic_cast(ssi->itimeseries_index_);
+ auto* aligned_timeseries_index =
+ dynamic_cast(ssi->itimeseries_index_);
if (aligned_timeseries_index) {
aligned_timeseries_index->time_ts_idx_ = timeseries_index;
}
@@ -277,10 +277,10 @@ int TsFileIOReader::load_timeseries_index_for_ssi(
#if DEBUG_SE
if (measurement_index_entry.name_.len_) {
std::cout << "load timeseries index: "
- << *((TimeseriesIndex *)ssi->itimeseries_index_) << std::endl;
+ << *((TimeseriesIndex*)ssi->itimeseries_index_) << std::endl;
} else {
std::cout << "load aligned timeseries index: "
- << *((AlignedTimeseriesIndex *)ssi->itimeseries_index_)
+ << *((AlignedTimeseriesIndex*)ssi->itimeseries_index_)
<< std::endl;
}
#endif
@@ -289,7 +289,7 @@ int TsFileIOReader::load_timeseries_index_for_ssi(
int TsFileIOReader::load_device_index_entry(
std::shared_ptr device_name,
- std::shared_ptr &device_index_entry, int64_t &end_offset) {
+ std::shared_ptr& device_index_entry, int64_t& end_offset) {
int ret = E_OK;
std::shared_ptr