diff --git a/base/base/unit.h b/base/base/unit.h index d5c8d5c90271..c6333e41a891 100644 --- a/base/base/unit.h +++ b/base/base/unit.h @@ -1,6 +1,10 @@ #pragma once #include +#ifdef HAS_RESERVED_IDENTIFIER +#pragma clang diagnostic ignored "-Wreserved-identifier" +#endif + constexpr size_t KiB = 1024; constexpr size_t MiB = 1024 * KiB; constexpr size_t GiB = 1024 * MiB; diff --git a/utils/local-engine/CMakeLists.txt b/utils/local-engine/CMakeLists.txt index 9e8ad9817456..0265fb7a19a2 100644 --- a/utils/local-engine/CMakeLists.txt +++ b/utils/local-engine/CMakeLists.txt @@ -45,7 +45,6 @@ target_link_libraries(${LOCALENGINE_SHARED_LIB} PUBLIC clickhouse_aggregate_functions clickhouse_common_config clickhouse_common_io - clickhouse_dictionaries clickhouse_functions clickhouse_parsers clickhouse_storages_system @@ -57,28 +56,28 @@ if (USE_LIBCXX) target_compile_options(cxxabi PRIVATE -fPIC) target_compile_options(cxx PRIVATE -fPIC) endif() -target_compile_options(ssl PRIVATE -fPIC) -target_compile_options(crypto PRIVATE -fPIC) -target_compile_options(libpq PRIVATE -fPIC) -target_compile_options(libpqxx PRIVATE -fPIC) -target_compile_options(lz4 PRIVATE -fPIC) -target_compile_options(snappy PRIVATE -fPIC) -target_compile_options(zstd PRIVATE -fPIC) -target_compile_options(s2 PRIVATE -fPIC) -target_compile_options(sqlite PRIVATE -fPIC) -target_compile_options(zlib PRIVATE -fPIC) -target_compile_options(krb5 PRIVATE -fPIC) -target_compile_options(libprotobuf PRIVATE -fPIC) +#target_compile_options(ssl PRIVATE -fPIC) +#target_compile_options(crypto PRIVATE -fPIC) +#target_compile_options(libpq PRIVATE -fPIC) +#target_compile_options(libpqxx PRIVATE -fPIC) +#target_compile_options(lz4 PRIVATE -fPIC) +#target_compile_options(snappy PRIVATE -fPIC) +#target_compile_options(zstd PRIVATE -fPIC) +#target_compile_options(s2 PRIVATE -fPIC) +#target_compile_options(sqlite PRIVATE -fPIC) +#target_compile_options(zlib PRIVATE -fPIC) +#target_compile_options(krb5 PRIVATE -fPIC) +#target_compile_options(libprotobuf PRIVATE -fPIC) target_compile_options(re2 PRIVATE -fPIC) -target_compile_options(ldap_r PRIVATE -fPIC) -target_compile_options(thrift_static PRIVATE -fPIC) -target_compile_options(double-conversion PRIVATE -fPIC) -target_compile_options(arrow_static PRIVATE -fPIC) -target_compile_options(parquet_static PRIVATE -fPIC) -target_compile_options(lber PRIVATE -fPIC) +#target_compile_options(ldap_r PRIVATE -fPIC) +#target_compile_options(thrift_static PRIVATE -fPIC) +#target_compile_options(double-conversion PRIVATE -fPIC) +#target_compile_options(arrow_static PRIVATE -fPIC) +#target_compile_options(parquet_static PRIVATE -fPIC) +#target_compile_options(lber PRIVATE -fPIC) target_compile_options(_poco_foundation PRIVATE -fPIC) -target_compile_options(fmt PRIVATE -fPIC) -target_compile_options(cctz PRIVATE -fPIC) +#target_compile_options(fmt PRIVATE -fPIC) +#target_compile_options(cctz PRIVATE -fPIC) target_compile_options(_poco_xml PRIVATE -fPIC) target_compile_options(_poco_util PRIVATE -fPIC) target_compile_options(_poco_json PRIVATE -fPIC) @@ -86,12 +85,12 @@ target_compile_options(_poco_net PRIVATE -fPIC) target_compile_options(_poco_net_ssl PRIVATE -fPIC) target_compile_options(common PRIVATE -fPIC) target_compile_options(mysqlxx PRIVATE -fPIC) -target_compile_options(nuraft PRIVATE -fPIC) +#target_compile_options(nuraft PRIVATE -fPIC) target_compile_options(glibc-compatibility PRIVATE -fPIC) target_compile_options(_poco_foundation_pcre PRIVATE -fPIC) target_compile_options(_poco_xml_expat PRIVATE -fPIC) target_compile_options(_poco_crypto PRIVATE -fPIC) -target_compile_options(rdkafka PRIVATE -fPIC) +#target_compile_options(rdkafka PRIVATE -fPIC) target_compile_options(LLVMDemangle PRIVATE -fPIC) target_compile_options(LLVMSupport PRIVATE -fPIC) target_compile_options(LLVMDebugInfoCodeView PRIVATE -fPIC) @@ -128,9 +127,9 @@ target_compile_options(LLVMAsmPrinter PRIVATE -fPIC) target_compile_options(LLVMX86Desc PRIVATE -fPIC) target_compile_options(LLVMX86CodeGen PRIVATE -fPIC) target_compile_options(LLVMRuntimeDyld PRIVATE -fPIC) -target_compile_options(icuuc PRIVATE -fPIC) -target_compile_options(icui18n PRIVATE -fPIC) -target_compile_options(cpuid PRIVATE -fPIC) +#target_compile_options(icuuc PRIVATE -fPIC) +#target_compile_options(icui18n PRIVATE -fPIC) +#target_compile_options(cpuid PRIVATE -fPIC) target_compile_options(re2_st PRIVATE -fPIC) target_compile_options(_boost_program_options PRIVATE -fPIC) target_compile_options(clickhouse_common_io PRIVATE -fPIC) @@ -148,37 +147,37 @@ target_compile_options(LLVMMCDisassembler PRIVATE -fPIC) target_compile_options(LLVMX86Info PRIVATE -fPIC) target_compile_options(LLVMCFGuard PRIVATE -fPIC) target_compile_options(LLVMExecutionEngine PRIVATE -fPIC) -target_compile_options(roaring PRIVATE -fPIC) -target_compile_options(yaml-cpp PRIVATE -fPIC) +#target_compile_options(roaring PRIVATE -fPIC) +#target_compile_options(yaml-cpp PRIVATE -fPIC) target_compile_options(dbms PRIVATE -fPIC) target_compile_options(clickhouse_functions_jsonpath PRIVATE -fPIC) -target_compile_options(dragonbox_to_chars PRIVATE -fPIC) +#target_compile_options(dragonbox_to_chars PRIVATE -fPIC) target_compile_options(clickhouse_functions_gatherutils PRIVATE -fPIC) target_compile_options(clickhouse_functions_array PRIVATE -fPIC) -target_compile_options(hyperscan PRIVATE -fPIC) -target_compile_options(simdjson PRIVATE -fPIC) +#target_compile_options(hyperscan PRIVATE -fPIC) +#target_compile_options(simdjson PRIVATE -fPIC) target_compile_options(divide_impl_avx2 PRIVATE -fPIC) target_compile_options(divide_impl PRIVATE -fPIC) -target_compile_options(murmurhash PRIVATE -fPIC) -target_compile_options(fastops PRIVATE -fPIC) -target_compile_options(base64 PRIVATE -fPIC) -target_compile_options(base64_avx PRIVATE -fPIC) -target_compile_options(base64_avx2 PRIVATE -fPIC) -target_compile_options(base64_ssse3 PRIVATE -fPIC) -target_compile_options(base64_scalar PRIVATE -fPIC) +#target_compile_options(murmurhash PRIVATE -fPIC) +#target_compile_options(fastops PRIVATE -fPIC) +#target_compile_options(base64 PRIVATE -fPIC) +#target_compile_options(base64_avx PRIVATE -fPIC) +#target_compile_options(base64_avx2 PRIVATE -fPIC) +#target_compile_options(base64_ssse3 PRIVATE -fPIC) +#target_compile_options(base64_scalar PRIVATE -fPIC) target_compile_options(clickhouse_functions_url PRIVATE -fPIC) target_compile_options(divide_impl_sse2 PRIVATE -fPIC) -target_compile_options(metrohash PRIVATE -fPIC) -target_compile_options(consistent-hashing PRIVATE -fPIC) -target_compile_options(h3 PRIVATE -fPIC) -target_compile_options(farmhash PRIVATE -fPIC) -target_compile_options(cityhash PRIVATE -fPIC) -target_compile_options(liblzma PRIVATE -fPIC) -target_compile_options(brotli PRIVATE -fPIC) -target_compile_options(bzip2 PRIVATE -fPIC) -target_compile_options(stemmer PRIVATE -fPIC) -target_compile_options(wnb PRIVATE -fPIC) -target_compile_options(lemmagen PRIVATE -fPIC) +#target_compile_options(metrohash PRIVATE -fPIC) +#target_compile_options(consistent-hashing PRIVATE -fPIC) +#target_compile_options(h3 PRIVATE -fPIC) +#target_compile_options(farmhash PRIVATE -fPIC) +#target_compile_options(cityhash PRIVATE -fPIC) +#target_compile_options(liblzma PRIVATE -fPIC) +#target_compile_options(brotli PRIVATE -fPIC) +#target_compile_options(bzip2 PRIVATE -fPIC) +#target_compile_options(stemmer PRIVATE -fPIC) +#target_compile_options(wnb PRIVATE -fPIC) +#target_compile_options(lemmagen PRIVATE -fPIC) #target_compile_options(zstd PRIVATE -fPIC) diff --git a/utils/local-engine/Parser/CHColumnToSparkRow.cpp b/utils/local-engine/Parser/CHColumnToSparkRow.cpp index 14b7f82e77ac..e8fcddc482a5 100644 --- a/utils/local-engine/Parser/CHColumnToSparkRow.cpp +++ b/utils/local-engine/Parser/CHColumnToSparkRow.cpp @@ -163,7 +163,7 @@ void writeValue( } else { - throw std::runtime_error("doesn't support type " + std::string(getTypeName(nested_col->getDataType()))); + throw std::runtime_error("doesn't support type " + String(magic_enum::enum_name(nested_col->getDataType()))); } } diff --git a/utils/local-engine/Parser/SerializedPlanParser.cpp b/utils/local-engine/Parser/SerializedPlanParser.cpp index fc518f533c72..81853fa64ede 100644 --- a/utils/local-engine/Parser/SerializedPlanParser.cpp +++ b/utils/local-engine/Parser/SerializedPlanParser.cpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include #include @@ -29,7 +29,7 @@ #include #include #include -#include +#include bool local_engine::SerializedPlanParser::isReadRelFromJava(const substrait::ReadRel& rel) { assert(rel.has_local_files()); @@ -99,6 +99,7 @@ DB::QueryPlanPtr local_engine::SerializedPlanParser::parseMergeTreeTable(const s custom_storage_merge_tree->loadDataParts(false); return custom_storage_merge_tree; }); + query_context.storage_snapshot = std::make_shared(*storage, metadata); auto t_storage = watch.elapsedMicroseconds() - t_metadata; query_context.custom_storage_merge_tree = storage; auto query_info = local_engine::buildQueryInfo(names_and_types_list); @@ -115,8 +116,7 @@ DB::QueryPlanPtr local_engine::SerializedPlanParser::parseMergeTreeTable(const s } auto query = query_context.custom_storage_merge_tree->reader.readFromParts(selected_parts, names_and_types_list.getNames(), - query_context.metadata, - query_context.metadata, + query_context.storage_snapshot, *query_info, this->context, 4096 * 2, @@ -567,10 +567,11 @@ DB::Chunk local_engine::BatchParquetFileSource::generate() read_buf = std::move(nested_buffer); ProcessorPtr format = std::make_shared(*read_buf, header); // auto format = DB::ParquetBlockInputFormat::getParquetFormat(*read_buf, header); - pipeline = std::make_unique(); - pipeline->init(Pipe(format)); + QueryPipelineBuilder builder; + builder.init(Pipe(format)); + pipeline = QueryPipelineBuilder::getPipeline(std::move(builder)); - reader = std::make_unique(*pipeline); + reader = std::make_unique(pipeline); } Chunk chunk; @@ -598,14 +599,15 @@ void local_engine::LocalExecutor::execute(DB::QueryPlanPtr query_plan) Stopwatch stopwatch; stopwatch.start(); QueryPlanOptimizationSettings optimization_settings{.optimize_plan = true}; - this->query_pipeline = query_plan->buildQueryPipeline(optimization_settings, BuildQueryPipelineSettings{ + auto pipeline_builder = query_plan->buildQueryPipeline(optimization_settings, BuildQueryPipelineSettings{ .actions_settings = ExpressionActionsSettings{ .can_compile_expressions = true, .min_count_to_compile_expression = 3, .compile_expressions = CompileExpressions::no }}); + this->query_pipeline = QueryPipelineBuilder::getPipeline(std::move(*pipeline_builder)); auto t_pipeline = stopwatch.elapsedMicroseconds(); - this->executor = std::make_unique(*query_pipeline); + this->executor = std::make_unique(query_pipeline); auto t_executor = stopwatch.elapsedMicroseconds() - t_pipeline; stopwatch.stop(); LOG_INFO(&Poco::Logger::get("SerializedPlanParser"), diff --git a/utils/local-engine/Parser/SerializedPlanParser.h b/utils/local-engine/Parser/SerializedPlanParser.h index 774d692ce6ec..33359d908149 100644 --- a/utils/local-engine/Parser/SerializedPlanParser.h +++ b/utils/local-engine/Parser/SerializedPlanParser.h @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include @@ -44,7 +44,7 @@ class BatchParquetFileSource : public DB::SourceWithProgress private: FilesInfoPtr files_info; std::unique_ptr read_buf; - std::unique_ptr pipeline; + QueryPipeline pipeline; std::unique_ptr reader; bool finished_generate = false; std::string current_path; @@ -78,6 +78,7 @@ static const std::map SCALAR_FUNCTIONS = { static const std::set FUNCTION_NEED_KEEP_ARGUMENTS = {"alias"}; struct QueryContext { + StorageSnapshotPtr storage_snapshot; std::shared_ptr metadata; std::shared_ptr custom_storage_merge_tree; }; @@ -186,7 +187,7 @@ class LocalExecutor private: QueryContext query_context; std::unique_ptr writeBlockToSparkRow(DB::Block & block); - QueryPipelinePtr query_pipeline; + QueryPipeline query_pipeline; std::unique_ptr executor; Block header; std::unique_ptr ch_column_to_spark_row; diff --git a/utils/local-engine/Parser/SparkColumnToCHColumn.cpp b/utils/local-engine/Parser/SparkColumnToCHColumn.cpp index afadbdf4afc4..25bfe914aad6 100644 --- a/utils/local-engine/Parser/SparkColumnToCHColumn.cpp +++ b/utils/local-engine/Parser/SparkColumnToCHColumn.cpp @@ -82,7 +82,7 @@ static void writeRowToColumns(std::vector & columns, SparkRowR } else { - throw std::runtime_error("doesn't support type " + std::string(getTypeName(columns[i]->getDataType()))); + throw std::runtime_error("doesn't support type " + String(magic_enum::enum_name(columns[i]->getDataType()))); } } } diff --git a/utils/local-engine/Parser/SparkColumnToCHColumn.h b/utils/local-engine/Parser/SparkColumnToCHColumn.h index 34fd17110df4..618a83520dbf 100644 --- a/utils/local-engine/Parser/SparkColumnToCHColumn.h +++ b/utils/local-engine/Parser/SparkColumnToCHColumn.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include namespace local_engine diff --git a/utils/local-engine/Shuffle/ShuffleReader.cpp b/utils/local-engine/Shuffle/ShuffleReader.cpp index b01f59bbada6..23ab289605ed 100644 --- a/utils/local-engine/Shuffle/ShuffleReader.cpp +++ b/utils/local-engine/Shuffle/ShuffleReader.cpp @@ -12,11 +12,11 @@ local_engine::ShuffleReader::ShuffleReader(std::unique_ptr in_, bool if (compressed) { compressed_in = std::make_unique(*in); - input_stream = std::make_unique(*compressed_in, 0); + input_stream = std::make_unique(*compressed_in, 0); } else { - input_stream = std::make_unique(*in, 0); + input_stream = std::make_unique(*in, 0); } } Block* local_engine::ShuffleReader::read() diff --git a/utils/local-engine/Shuffle/ShuffleReader.h b/utils/local-engine/Shuffle/ShuffleReader.h index 4b87c4896959..1b40d3e13d15 100644 --- a/utils/local-engine/Shuffle/ShuffleReader.h +++ b/utils/local-engine/Shuffle/ShuffleReader.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include #include #include @@ -23,7 +23,7 @@ class ShuffleReader private: std::unique_ptr compressed_in; - std::unique_ptr input_stream; + std::unique_ptr input_stream; Block header; }; diff --git a/utils/local-engine/Shuffle/ShuffleSplitter.cpp b/utils/local-engine/Shuffle/ShuffleSplitter.cpp index ac89877b5400..734e16ef45bc 100644 --- a/utils/local-engine/Shuffle/ShuffleSplitter.cpp +++ b/utils/local-engine/Shuffle/ShuffleSplitter.cpp @@ -8,6 +8,8 @@ #include #include #include +#include + namespace local_engine { @@ -108,7 +110,7 @@ void ShuffleSplitter::spillPartition(size_t partition_id) { partition_write_buffers[partition_id] = getPartitionWriteBuffer(partition_id); - partition_outputs[partition_id] = std::make_unique( + partition_outputs[partition_id] = std::make_unique( *partition_write_buffers[partition_id], 0, partition_buffer[partition_id].getHeader()); } DB::Block result = partition_buffer[partition_id].releaseColumns(); diff --git a/utils/local-engine/Shuffle/ShuffleSplitter.h b/utils/local-engine/Shuffle/ShuffleSplitter.h index 3ef5a038f90e..cc0f50658d4e 100644 --- a/utils/local-engine/Shuffle/ShuffleSplitter.h +++ b/utils/local-engine/Shuffle/ShuffleSplitter.h @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include @@ -82,7 +82,7 @@ class ShuffleSplitter bool stopped = false; std::vector partition_ids; std::vector partition_buffer; - std::vector> partition_outputs; + std::vector> partition_outputs; std::vector> partition_write_buffers; std::vector> partition_cached_write_buffers; SplitOptions options; diff --git a/utils/local-engine/Storages/CustomMergeTreeSink.cpp b/utils/local-engine/Storages/CustomMergeTreeSink.cpp index 514e7af2704d..1a73be5ca7c1 100644 --- a/utils/local-engine/Storages/CustomMergeTreeSink.cpp +++ b/utils/local-engine/Storages/CustomMergeTreeSink.cpp @@ -2,8 +2,8 @@ void local_engine::CustomMergeTreeSink::consume(Chunk chunk) { - auto block = getPort().getHeader().cloneWithColumns(chunk.detachColumns()); + auto block = getHeader().cloneWithColumns(chunk.detachColumns()); DB::BlockWithPartition block_with_partition(Block(block), DB::Row{}); - MergeTreeData::MutableDataPartPtr part = storage.writer.writeTempPart(block_with_partition, metadata_snapshot, context); - storage.renameTempPartAndAdd(part, &storage.increment, nullptr, nullptr); + auto part = storage.writer.writeTempPart(block_with_partition, metadata_snapshot, context); + storage.renameTempPartAndAdd(part.part, &storage.increment, nullptr, nullptr); } diff --git a/utils/local-engine/Storages/CustomStorageMergeTree.cpp b/utils/local-engine/Storages/CustomStorageMergeTree.cpp index 6ee093eda46c..da44ec899a55 100644 --- a/utils/local-engine/Storages/CustomStorageMergeTree.cpp +++ b/utils/local-engine/Storages/CustomStorageMergeTree.cpp @@ -64,7 +64,7 @@ std::vector local_engine::CustomStorageMergeTree::getMu { throw std::runtime_error("not implement"); } -bool local_engine::CustomStorageMergeTree::scheduleDataProcessingJob(IBackgroundJobExecutor & executor) +bool local_engine::CustomStorageMergeTree::scheduleDataProcessingJob(BackgroundJobsAssignee & executor) { throw std::runtime_error("not implement"); } diff --git a/utils/local-engine/Storages/CustomStorageMergeTree.h b/utils/local-engine/Storages/CustomStorageMergeTree.h index 5adb9fd6badc..c93bb6b9a7fe 100644 --- a/utils/local-engine/Storages/CustomStorageMergeTree.h +++ b/utils/local-engine/Storages/CustomStorageMergeTree.h @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include using namespace DB; @@ -29,7 +29,7 @@ class CustomStorageMergeTree final : public shared_ptr_helper getMutationsStatus() const override; - bool scheduleDataProcessingJob(IBackgroundJobExecutor & executor) override; + bool scheduleDataProcessingJob(BackgroundJobsAssignee & executor) override; MergeTreeDataWriter writer; MergeTreeDataSelectExecutor reader; diff --git a/utils/local-engine/Storages/ParquetRowInputFormat.cpp b/utils/local-engine/Storages/ParquetRowInputFormat.cpp index 8a36bafbe25f..22a30be5add4 100644 --- a/utils/local-engine/Storages/ParquetRowInputFormat.cpp +++ b/utils/local-engine/Storages/ParquetRowInputFormat.cpp @@ -2,7 +2,7 @@ #include -#include +#include local_engine::ParquetRowInputFormat::ParquetRowInputFormat(ReadBuffer & in_, Block header_) : IInputFormat(std::move(header_), in_) { @@ -11,7 +11,7 @@ std::unique_ptr local_engine::ParquetRowInp void local_engine::ParquetRowInputFormat::prepareReader() { if (!reader) - reader = std::make_unique(this->allocator, inputStreamFileSystem->openStream(in)); + reader = std::make_unique(this->allocator, inputStreamFileSystem->openStream(*in)); int index = 0; int cols = this->getPort().getHeader().columns(); column_indices.reserve(cols); diff --git a/utils/local-engine/proto/CMakeLists.txt b/utils/local-engine/proto/CMakeLists.txt index c03be2aa08f7..5724600aacdf 100644 --- a/utils/local-engine/proto/CMakeLists.txt +++ b/utils/local-engine/proto/CMakeLists.txt @@ -15,11 +15,15 @@ add_custom_target( DEPENDS protobuf::protoc COMMENT "Running cpp protocol buffer compiler" VERBATIM ) +set(Protobuf_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/protobuf/src") -include_directories(${Protobuf_INCLUDE_DIRS}) +include_directories(${Protobuf_INCLUDE_DIR}) set_source_files_properties(${SUBSTRAIT_SRCS} PROPERTIES GENERATED TRUE) add_library(substrait ${SUBSTRAIT_SRCS}) +target_compile_options(substrait PUBLIC + -Wno-error + ) add_dependencies(substrait generate_substrait) target_include_directories(substrait PRIVATE ${PROTOBUF_INCLUDE_DIR}) target_include_directories(substrait PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/) diff --git a/utils/local-engine/tests/CMakeLists.txt b/utils/local-engine/tests/CMakeLists.txt index 68745554fc3f..e796d56dba89 100644 --- a/utils/local-engine/tests/CMakeLists.txt +++ b/utils/local-engine/tests/CMakeLists.txt @@ -9,7 +9,6 @@ set(BENCHMARK_ENABLE_TESTING OFF) enable_testing() include(CTest) -include (${PROJECT_SOURCE_DIR}/cmake/find/gtest.cmake) include_directories(${GTEST_INCLUDE_DIRS}) set(TEST_DATA_DIR "${ClickHouse_SOURCE_DIR}/utils/local-engine/tests") @@ -50,5 +49,5 @@ target_include_directories(unit_tests_local_engine PRIVATE ) include_directories(benchmark_local_engine SYSTEM PUBLIC ${FETCH_CONTENT_SOURCE_DIR_GOOGLEBENCHMARK}/include) -target_link_libraries(unit_tests_local_engine PRIVATE ${LOCALENGINE_SHARED_LIB} ${GTEST_BOTH_LIBRARIES}) +target_link_libraries(unit_tests_local_engine PRIVATE ${LOCALENGINE_SHARED_LIB} _gtest_all) target_link_libraries(benchmark_local_engine PRIVATE ${LOCALENGINE_SHARED_LIB} benchmark::benchmark) diff --git a/utils/local-engine/tests/benchmark_local_engine.cpp b/utils/local-engine/tests/benchmark_local_engine.cpp index b6f2cf0e6da2..696e55c2ad80 100644 --- a/utils/local-engine/tests/benchmark_local_engine.cpp +++ b/utils/local-engine/tests/benchmark_local_engine.cpp @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include #include #include