mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-23 10:10:50 +00:00
Merge remote-tracking branch 'origin/master' into HEAD
This commit is contained in:
commit
83aaea7b0f
@ -1,57 +1,26 @@
|
||||
set(_PROTOBUF_PROTOC $<TARGET_FILE:protoc>)
|
||||
set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:grpc_cpp_plugin>)
|
||||
option (ENABLE_GRPC "Use gRPC" ${ENABLE_LIBRARIES})
|
||||
|
||||
function(PROTOBUF_GENERATE_GRPC_CPP SRCS HDRS)
|
||||
if(NOT ARGN)
|
||||
message(SEND_ERROR "Error: PROTOBUF_GENERATE_GRPC_CPP() called without any proto files")
|
||||
return()
|
||||
endif()
|
||||
if (ENABLE_GRPC)
|
||||
option (USE_INTERNAL_GRPC_LIBRARY "Set to FALSE to use system gRPC library instead of bundled" ${NOT_UNBUNDLED})
|
||||
|
||||
if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
||||
foreach(FIL ${ARGN})
|
||||
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
||||
get_filename_component(ABS_PATH ${ABS_FIL} PATH)
|
||||
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
||||
if(${_contains_already} EQUAL -1)
|
||||
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
||||
endif()
|
||||
endforeach()
|
||||
if (USE_INTERNAL_GRPC_LIBRARY)
|
||||
if (NOT EXISTS "${ClickHouse_SOURCE_DIR}/contrib/grpc/include/grpc++/grpc++.h")
|
||||
message(WARNING "submodule contrib/grpc is missing. To fix try run: \n git submodule update --init --recursive")
|
||||
set (USE_INTERNAL_GRPC_LIBRARY OFF)
|
||||
elif (NOT USE_PROTOBUF)
|
||||
message(WARNING "gRPC requires protobuf which is disabled")
|
||||
set (USE_INTERNAL_GRPC_LIBRARY OFF)
|
||||
else()
|
||||
set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
set (GRPC_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/grpc/include")
|
||||
set (GRPC_LIBRARY "libgrpc++")
|
||||
set (USE_GRPC ON)
|
||||
endif()
|
||||
else()
|
||||
find_package(grpc)
|
||||
if (GRPC_INCLUDE_DIR AND GRPC_LIBRARY)
|
||||
set (USE_GRPC ON)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(DEFINED PROTOBUF_IMPORT_DIRS)
|
||||
foreach(DIR ${Protobuf_IMPORT_DIRS})
|
||||
get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
|
||||
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
||||
if(${_contains_already} EQUAL -1)
|
||||
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
set(${SRCS})
|
||||
set(${HDRS})
|
||||
foreach(FIL ${ARGN})
|
||||
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
||||
get_filename_component(FIL_WE ${FIL} NAME_WE)
|
||||
|
||||
list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.grpc.pb.cc")
|
||||
list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.grpc.pb.h")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.grpc.pb.cc"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.grpc.pb.h"
|
||||
COMMAND ${_PROTOBUF_PROTOC}
|
||||
ARGS --grpc_out=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--plugin=protoc-gen-grpc=${_GRPC_CPP_PLUGIN_EXECUTABLE}
|
||||
${_protobuf_include_path} ${ABS_FIL}
|
||||
DEPENDS ${ABS_FIL}
|
||||
COMMENT "Running gRPC C++ protocol buffer compiler on ${FIL}"
|
||||
VERBATIM)
|
||||
endforeach()
|
||||
|
||||
set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
|
||||
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
|
||||
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
|
||||
endfunction()
|
||||
message(STATUS "Using gRPC=${USE_GRPC}: ${GRPC_INCLUDE_DIR} : ${GRPC_LIBRARY}")
|
||||
|
@ -28,68 +28,6 @@ elseif(NOT MISSING_INTERNAL_PROTOBUF_LIBRARY)
|
||||
set(Protobuf_LITE_LIBRARY libprotobuf-lite)
|
||||
|
||||
set(Protobuf_PROTOC_EXECUTABLE "$<TARGET_FILE:protoc>")
|
||||
|
||||
if(NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
||||
set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE)
|
||||
endif()
|
||||
|
||||
function(PROTOBUF_GENERATE_CPP SRCS HDRS)
|
||||
if(NOT ARGN)
|
||||
message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
||||
# Create an include path for each file specified
|
||||
foreach(FIL ${ARGN})
|
||||
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
||||
get_filename_component(ABS_PATH ${ABS_FIL} PATH)
|
||||
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
||||
if(${_contains_already} EQUAL -1)
|
||||
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
||||
endif()
|
||||
endforeach()
|
||||
else()
|
||||
set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
endif()
|
||||
|
||||
if(DEFINED PROTOBUF_IMPORT_DIRS AND NOT DEFINED Protobuf_IMPORT_DIRS)
|
||||
set(Protobuf_IMPORT_DIRS "${PROTOBUF_IMPORT_DIRS}")
|
||||
endif()
|
||||
|
||||
if(DEFINED Protobuf_IMPORT_DIRS)
|
||||
foreach(DIR ${Protobuf_IMPORT_DIRS})
|
||||
get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
|
||||
list(FIND _protobuf_include_path ${ABS_PATH} _contains_already)
|
||||
if(${_contains_already} EQUAL -1)
|
||||
list(APPEND _protobuf_include_path -I ${ABS_PATH})
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
set(${SRCS})
|
||||
set(${HDRS})
|
||||
foreach(FIL ${ARGN})
|
||||
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
||||
get_filename_component(FIL_WE ${FIL} NAME_WE)
|
||||
|
||||
list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc")
|
||||
list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h"
|
||||
COMMAND ${Protobuf_PROTOC_EXECUTABLE}
|
||||
ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL}
|
||||
DEPENDS ${ABS_FIL} ${Protobuf_PROTOC_EXECUTABLE}
|
||||
COMMENT "Running C++ protocol buffer compiler on ${FIL}"
|
||||
VERBATIM )
|
||||
endforeach()
|
||||
|
||||
set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE)
|
||||
set(${SRCS} ${${SRCS}} PARENT_SCOPE)
|
||||
set(${HDRS} ${${HDRS}} PARENT_SCOPE)
|
||||
endfunction()
|
||||
endif()
|
||||
|
||||
if(OS_FREEBSD AND SANITIZE STREQUAL "address")
|
||||
@ -102,6 +40,7 @@ if(OS_FREEBSD AND SANITIZE STREQUAL "address")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include (${ClickHouse_SOURCE_DIR}/cmake/protobuf_generate_cpp.cmake)
|
||||
endif()
|
||||
|
||||
message(STATUS "Using protobuf=${USE_PROTOBUF}: ${Protobuf_INCLUDE_DIR} : ${Protobuf_LIBRARY} : ${Protobuf_PROTOC_EXECUTABLE}")
|
||||
|
166
cmake/protobuf_generate_cpp.cmake
Normal file
166
cmake/protobuf_generate_cpp.cmake
Normal file
@ -0,0 +1,166 @@
|
||||
# This file declares functions adding custom commands for generating C++ files from *.proto files:
|
||||
# function (protobuf_generate_cpp SRCS HDRS)
|
||||
# function (protobuf_generate_grpc_cpp SRCS HDRS)
|
||||
|
||||
if (NOT USE_PROTOBUF)
|
||||
message (WARNING "Could not use protobuf_generate_cpp() without the protobuf library")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED PROTOBUF_PROTOC_EXECUTABLE)
|
||||
set (PROTOBUF_PROTOC_EXECUTABLE "$<TARGET_FILE:protoc>")
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED GRPC_CPP_PLUGIN_EXECUTABLE)
|
||||
set (GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:grpc_cpp_plugin>)
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
||||
set (PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE)
|
||||
endif()
|
||||
|
||||
|
||||
function(protobuf_generate_cpp_impl SRCS HDRS MODES OUTPUT_FILE_EXTS PLUGIN)
|
||||
if(NOT ARGN)
|
||||
message(SEND_ERROR "Error: protobuf_generate_cpp() called without any proto files")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(PROTOBUF_GENERATE_CPP_APPEND_PATH)
|
||||
# Create an include path for each file specified
|
||||
foreach(FIL ${ARGN})
|
||||
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
||||
get_filename_component(ABS_PATH ${ABS_FIL} PATH)
|
||||
list(FIND protobuf_include_path ${ABS_PATH} _contains_already)
|
||||
if(${_contains_already} EQUAL -1)
|
||||
list(APPEND protobuf_include_path -I ${ABS_PATH})
|
||||
endif()
|
||||
endforeach()
|
||||
else()
|
||||
set(protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
endif()
|
||||
|
||||
if(DEFINED PROTOBUF_IMPORT_DIRS AND NOT DEFINED Protobuf_IMPORT_DIRS)
|
||||
set(Protobuf_IMPORT_DIRS "${PROTOBUF_IMPORT_DIRS}")
|
||||
endif()
|
||||
|
||||
if(DEFINED Protobuf_IMPORT_DIRS)
|
||||
foreach(DIR ${Protobuf_IMPORT_DIRS})
|
||||
get_filename_component(ABS_PATH ${DIR} ABSOLUTE)
|
||||
list(FIND protobuf_include_path ${ABS_PATH} _contains_already)
|
||||
if(${_contains_already} EQUAL -1)
|
||||
list(APPEND protobuf_include_path -I ${ABS_PATH})
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
set (intermediate_dir ${CMAKE_CURRENT_BINARY_DIR}/intermediate)
|
||||
|
||||
set (protoc_args)
|
||||
foreach (mode ${MODES})
|
||||
list (APPEND protoc_args "--${mode}_out" ${intermediate_dir})
|
||||
endforeach()
|
||||
if (PLUGIN)
|
||||
list (APPEND protoc_args "--plugin=${PLUGIN}")
|
||||
endif()
|
||||
|
||||
set(srcs)
|
||||
set(hdrs)
|
||||
set(all_intermediate_outputs)
|
||||
|
||||
foreach(input_name ${ARGN})
|
||||
get_filename_component(abs_name ${input_name} ABSOLUTE)
|
||||
get_filename_component(name ${input_name} NAME_WE)
|
||||
|
||||
set (intermediate_outputs)
|
||||
foreach (ext ${OUTPUT_FILE_EXTS})
|
||||
set (filename "${name}${ext}")
|
||||
set (output "${CMAKE_CURRENT_BINARY_DIR}/${filename}")
|
||||
set (intermediate_output "${intermediate_dir}/${filename}")
|
||||
list (APPEND intermediate_outputs "${intermediate_output}")
|
||||
list (APPEND all_intermediate_outputs "${intermediate_output}")
|
||||
|
||||
if (${ext} MATCHES ".*\\.h")
|
||||
list(APPEND hdrs "${output}")
|
||||
else()
|
||||
list(APPEND srcs "${output}")
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${output}
|
||||
COMMAND ${CMAKE_COMMAND} -DPROTOBUF_GENERATE_CPP_SCRIPT_MODE=1 -DUSE_PROTOBUF=1 -DDIR=${CMAKE_CURRENT_BINARY_DIR} -DFILENAME=${filename} -DCOMPILER_ID=${CMAKE_CXX_COMPILER_ID} -P ${ClickHouse_SOURCE_DIR}/cmake/protobuf_generate_cpp.cmake
|
||||
DEPENDS ${intermediate_output})
|
||||
endforeach()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${intermediate_outputs}
|
||||
COMMAND ${Protobuf_PROTOC_EXECUTABLE}
|
||||
ARGS ${protobuf_include_path} ${protoc_args} ${abs_name}
|
||||
DEPENDS ${abs_name} ${Protobuf_PROTOC_EXECUTABLE} ${PLUGIN}
|
||||
COMMENT "Running C++ protocol buffer compiler on ${name}"
|
||||
VERBATIM )
|
||||
endforeach()
|
||||
|
||||
set_source_files_properties(${srcs} ${hdrs} ${all_intermediate_outputs} PROPERTIES GENERATED TRUE)
|
||||
set(${SRCS} ${srcs} PARENT_SCOPE)
|
||||
set(${HDRS} ${hdrs} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
if (PROTOBUF_GENERATE_CPP_SCRIPT_MODE)
|
||||
set (output "${DIR}/${FILENAME}")
|
||||
set (intermediate_dir ${DIR}/intermediate)
|
||||
set (intermediate_output "${intermediate_dir}/${FILENAME}")
|
||||
|
||||
if (COMPILER_ID STREQUAL "GNU")
|
||||
set (pragma_push "#pragma GCC diagnostic push\n")
|
||||
set (pragma_pop "#pragma GCC diagnostic pop\n")
|
||||
set (pragma_disable_warnings "#pragma GCC diagnostic ignored \"-Wall\"\n"
|
||||
"#pragma GCC diagnostic ignored \"-Wextra\"\n"
|
||||
"#pragma GCC diagnostic ignored \"-Warray-bounds\"\n")
|
||||
elseif (COMPILER_ID MATCHES "Clang")
|
||||
set (pragma_push "#pragma clang diagnostic push\n")
|
||||
set (pragma_pop "#pragma clang diagnostic pop\n")
|
||||
set (pragma_disable_warnings "#pragma clang diagnostic ignored \"-Weverything\"\n")
|
||||
endif()
|
||||
|
||||
if (${FILENAME} MATCHES ".*\\.h")
|
||||
file(WRITE "${output}"
|
||||
"#pragma once\n"
|
||||
${pragma_push}
|
||||
${pragma_disable_warnings}
|
||||
"#include \"${intermediate_output}\"\n"
|
||||
${pragma_pop}
|
||||
)
|
||||
else()
|
||||
file(WRITE "${output}"
|
||||
${pragma_disable_warnings}
|
||||
"#include \"${intermediate_output}\"\n"
|
||||
)
|
||||
endif()
|
||||
return()
|
||||
endif()
|
||||
|
||||
|
||||
function(protobuf_generate_cpp SRCS HDRS)
|
||||
set (modes cpp)
|
||||
set (output_file_exts ".pb.cc" ".pb.h")
|
||||
set (plugin)
|
||||
|
||||
protobuf_generate_cpp_impl(srcs hdrs "${modes}" "${output_file_exts}" "${plugin}" ${ARGN})
|
||||
|
||||
set(${SRCS} ${srcs} PARENT_SCOPE)
|
||||
set(${HDRS} ${hdrs} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
function(protobuf_generate_grpc_cpp SRCS HDRS)
|
||||
set (modes cpp grpc)
|
||||
set (output_file_exts ".pb.cc" ".pb.h" ".grpc.pb.cc" ".grpc.pb.h")
|
||||
set (plugin "protoc-gen-grpc=${GRPC_CPP_PLUGIN_EXECUTABLE}")
|
||||
|
||||
protobuf_generate_cpp_impl(srcs hdrs "${modes}" "${output_file_exts}" "${plugin}" ${ARGN})
|
||||
|
||||
set(${SRCS} ${srcs} PARENT_SCOPE)
|
||||
set(${HDRS} ${hdrs} PARENT_SCOPE)
|
||||
endfunction()
|
14
contrib/CMakeLists.txt
vendored
14
contrib/CMakeLists.txt
vendored
@ -21,7 +21,6 @@ add_subdirectory (consistent-hashing-sumbur)
|
||||
add_subdirectory (consistent-hashing)
|
||||
add_subdirectory (croaring)
|
||||
add_subdirectory (FastMemcpy)
|
||||
add_subdirectory (grpc-cmake)
|
||||
add_subdirectory (jemalloc-cmake)
|
||||
add_subdirectory (libcpuid-cmake)
|
||||
add_subdirectory (murmurhash)
|
||||
@ -260,20 +259,17 @@ if (USE_INTERNAL_BROTLI_LIBRARY)
|
||||
endif ()
|
||||
|
||||
if (USE_INTERNAL_PROTOBUF_LIBRARY)
|
||||
if (MAKE_STATIC_LIBRARIES)
|
||||
set(protobuf_BUILD_SHARED_LIBS OFF CACHE INTERNAL "" FORCE)
|
||||
else ()
|
||||
set(protobuf_BUILD_SHARED_LIBS ON CACHE INTERNAL "" FORCE)
|
||||
endif ()
|
||||
set(protobuf_WITH_ZLIB 0 CACHE INTERNAL "" FORCE) # actually will use zlib, but skip find
|
||||
set(protobuf_BUILD_TESTS OFF CACHE INTERNAL "" FORCE)
|
||||
add_subdirectory(protobuf/cmake)
|
||||
add_subdirectory(protobuf-cmake)
|
||||
endif ()
|
||||
|
||||
if (USE_INTERNAL_HDFS3_LIBRARY)
|
||||
add_subdirectory(libhdfs3-cmake)
|
||||
endif ()
|
||||
|
||||
if (USE_INTERNAL_GRPC_LIBRARY)
|
||||
add_subdirectory(grpc-cmake)
|
||||
endif ()
|
||||
|
||||
if (USE_INTERNAL_AWS_S3_LIBRARY)
|
||||
set (save_CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
|
||||
set (save_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
|
||||
|
2
contrib/grpc
vendored
2
contrib/grpc
vendored
@ -1 +1 @@
|
||||
Subproject commit c1d176528fd8da9dd4066d16554bcd216d29033f
|
||||
Subproject commit 8aea4e168e78f3eb9828080740fc8cb73d53bf79
|
@ -4,6 +4,8 @@ cmake_minimum_required(VERSION 3.5.1)
|
||||
set(GRPC_SOURCE_DIR ${ClickHouse_SOURCE_DIR}/contrib/grpc)
|
||||
set(GRPC_INCLUDE_DIR ${GRPC_SOURCE_DIR}/include/)
|
||||
set(GRPC_BINARY_DIR ${ClickHouse_BINARY_DIR}/contrib/grpc)
|
||||
|
||||
|
||||
if(UNIX)
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||
set(_gRPC_PLATFORM_LINUX ON)
|
||||
@ -14,72 +16,28 @@ if(UNIX)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_gRPC_C_CXX_FLAGS} -w")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_gRPC_C_CXX_FLAGS} -w")
|
||||
|
||||
set(_gRPC_PROTOBUF_LIBRARY_NAME "libprotobuf")
|
||||
|
||||
if(gRPC_BACKWARDS_COMPATIBILITY_MODE)
|
||||
add_definitions(-DGPR_BACKWARDS_COMPATIBILITY_MODE)
|
||||
if(_gRPC_PLATFORM_MAC)
|
||||
# some C++11 constructs not supported before OS X 10.9
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9)
|
||||
endif()
|
||||
set(_gRPC_ALLTARGETS_LIBRARIES ${CMAKE_DL_LIBS} m pthread)
|
||||
elseif(UNIX)
|
||||
set(_gRPC_ALLTARGETS_LIBRARIES ${CMAKE_DL_LIBS} rt m pthread)
|
||||
endif()
|
||||
|
||||
if (_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC)
|
||||
set(_gRPC_CORE_NOSTDCXX_FLAGS -fno-exceptions -fno-rtti)
|
||||
else()
|
||||
set(_gRPC_CORE_NOSTDCXX_FLAGS "")
|
||||
endif()
|
||||
|
||||
# address_sorting.cmake
|
||||
include(${GRPC_SOURCE_DIR}/cmake/address_sorting.cmake)
|
||||
set(_gRPC_ADDRESS_SORTING_INCLUDE_DIR "${GRPC_SOURCE_DIR}/third_party/address_sorting/include")
|
||||
set(_gRPC_ADDRESS_SORTING_LIBRARIES address_sorting)
|
||||
|
||||
# cares.cmake
|
||||
set(CARES_ROOT_DIR ${GRPC_SOURCE_DIR}/third_party/cares/cares)
|
||||
set(CARES_BINARY_DIR ${GRPC_BINARY_DIR}/third_party/cares/cares)
|
||||
set(CARES_SHARED OFF CACHE BOOL "disable shared library")
|
||||
set(CARES_STATIC ON CACHE BOOL "link cares statically")
|
||||
if(gRPC_BACKWARDS_COMPATIBILITY_MODE)
|
||||
# See https://github.com/grpc/grpc/issues/17255
|
||||
set(HAVE_LIBNSL OFF CACHE BOOL "avoid cares dependency on libnsl")
|
||||
set(CARES_SHARED ${BUILD_SHARED_LIBS} CACHE BOOL "" FORCE)
|
||||
if(BUILD_SHARED_LIBS)
|
||||
set(CARES_STATIC OFF CACHE BOOL "" FORCE)
|
||||
else()
|
||||
set(CARES_STATIC ON CACHE BOOL "" FORCE)
|
||||
endif()
|
||||
add_subdirectory(${CARES_ROOT_DIR} ${CARES_BINARY_DIR})
|
||||
if(TARGET c-ares)
|
||||
set(_gRPC_CARES_LIBRARIES c-ares)
|
||||
endif()
|
||||
|
||||
# protobuf.cmake
|
||||
set(PROTOBUF_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../protobuf)
|
||||
|
||||
set(protobuf_BUILD_TESTS OFF CACHE BOOL "Build protobuf tests")
|
||||
if(NOT protobuf_WITH_ZLIB)
|
||||
set(protobuf_WITH_ZLIB OFF CACHE BOOL "Build protobuf with zlib.")
|
||||
endif()
|
||||
set(protobuf_MSVC_STATIC_RUNTIME OFF CACHE BOOL "Link static runtime libraries")
|
||||
|
||||
set(_gRPC_PROTOBUF_LIBRARIES libprotobuf)
|
||||
set(_gRPC_PROTOBUF_PROTOC_LIBRARIES libprotoc)
|
||||
set(_gRPC_PROTOBUF_PROTOC protoc)
|
||||
set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE $<TARGET_FILE:protoc>)
|
||||
set(_gRPC_PROTOBUF_INCLUDE_DIR "${PROTOBUF_ROOT_DIR}/src")
|
||||
|
||||
if(gRPC_INSTALL)
|
||||
message(WARNING "gRPC_INSTALL will be forced to FALSE because gRPC_PROTOBUF_PROVIDER is \"module\"")
|
||||
set(gRPC_INSTALL FALSE)
|
||||
endif()
|
||||
|
||||
# ssl.cmake
|
||||
set(BORINGSSL_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../ssl)
|
||||
if(TARGET ssl)
|
||||
set(_gRPC_SSL_LIBRARIES ssl)
|
||||
set(_gRPC_SSL_INCLUDE_DIR ${BORINGSSL_ROOT_DIR}/include)
|
||||
endif()
|
||||
add_subdirectory(${CARES_ROOT_DIR} ${CARES_BINARY_DIR})
|
||||
|
||||
# upb.cmake
|
||||
set(UPB_ROOT_DIR ${GRPC_SOURCE_DIR}/third_party/upb)
|
||||
@ -87,23 +45,20 @@ set(_gRPC_UPB_INCLUDE_DIR "${UPB_ROOT_DIR}")
|
||||
set(_gRPC_UPB_GRPC_GENERATED_DIR "${GRPC_SOURCE_DIR}/src/core/ext/upb-generated")
|
||||
set(_gRPC_UPB_LIBRARIES upb)
|
||||
|
||||
# protobuf.cmake
|
||||
set(_gRPC_PROTOBUF_INCLUDE_DIR ${Protobuf_INCLUDE_DIR})
|
||||
set(_gRPC_PROTOBUF_LIBRARIES ${Protobuf_LIBRARY})
|
||||
set(_gRPC_PROTOBUF_PROTOC_LIBRARIES ${Protobuf_PROTOC_LIBRARY})
|
||||
set(_gRPC_PROTOBUF_PROTOC_EXECUTABLE ${Protobuf_PROTOC_EXECUTABLE})
|
||||
|
||||
# ssl.cmake
|
||||
set(_gRPC_SSL_INCLUDE_DIR ${OPENSSL_INCLUDE_DIR})
|
||||
set(_gRPC_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY})
|
||||
|
||||
# zlib.cmake
|
||||
set(ZLIB_ROOT_DIR ${GRPC_SOURCE_DIR}/../zlib-ng)
|
||||
include_directories("${ZLIB_ROOT_DIR}")
|
||||
## add_subdirectory(${ZLIB_ROOT_DIR} ${ZLIB_ROOT_DIR})
|
||||
if(TARGET zlibstatic)
|
||||
set(_gRPC_ZLIB_LIBRARIES zlibstatic)
|
||||
set(_gRPC_ZLIB_INCLUDE_DIR "${ZLIB_ROOT_DIR}" "${GRPC_SOURCE_DIR}/third_party/zlib")
|
||||
endif()
|
||||
set(_gRPC_ZLIB_INCLUDE_DIR ${ZLIB_INCLUDE_DIR})
|
||||
set(_gRPC_ZLIB_LIBRARIES ${ZLIB_LIBRARIES})
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||
|
||||
if(_gRPC_PLATFORM_MAC)
|
||||
set(_gRPC_ALLTARGETS_LIBRARIES ${CMAKE_DL_LIBS} m pthread)
|
||||
elseif(UNIX)
|
||||
set(_gRPC_ALLTARGETS_LIBRARIES ${CMAKE_DL_LIBS} rt m pthread)
|
||||
endif()
|
||||
|
||||
add_library(address_sorting
|
||||
${GRPC_SOURCE_DIR}/third_party/address_sorting/address_sorting.c
|
||||
@ -112,7 +67,6 @@ add_library(address_sorting
|
||||
)
|
||||
|
||||
target_include_directories(address_sorting
|
||||
PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${GRPC_SOURCE_DIR}/include>
|
||||
PRIVATE ${GRPC_SOURCE_DIR}
|
||||
PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
|
||||
@ -124,11 +78,11 @@ target_include_directories(address_sorting
|
||||
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
)
|
||||
target_link_libraries(address_sorting
|
||||
${_gRPC_BASELIB_LIBRARIES}
|
||||
${_gRPC_PROTOBUF_LIBRARIES}
|
||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||
)
|
||||
|
||||
|
||||
add_library(gpr
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/gpr/alloc.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/gpr/atm.cc
|
||||
@ -184,6 +138,7 @@ target_include_directories(gpr
|
||||
PRIVATE ${_gRPC_UPB_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(gpr
|
||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||
${_gRPC_PROTOBUF_LIBRARIES}
|
||||
@ -569,7 +524,6 @@ add_library(grpc
|
||||
${GRPC_SOURCE_DIR}/src/core/plugin_registry/grpc_plugin_registry.cc
|
||||
)
|
||||
|
||||
target_compile_options(grpc PUBLIC -fpermissive)
|
||||
|
||||
target_include_directories(grpc
|
||||
PUBLIC ${GRPC_INCLUDE_DIR}
|
||||
@ -583,8 +537,8 @@ target_include_directories(grpc
|
||||
PRIVATE ${_gRPC_UPB_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(grpc
|
||||
${_gRPC_BASELIB_LIBRARIES}
|
||||
${_gRPC_SSL_LIBRARIES}
|
||||
${_gRPC_ZLIB_LIBRARIES}
|
||||
${_gRPC_CARES_LIBRARIES}
|
||||
@ -597,352 +551,6 @@ if (_gRPC_PLATFORM_MAC)
|
||||
target_link_libraries(grpc "-framework CoreFoundation")
|
||||
endif()
|
||||
|
||||
add_library(grpc_cronet
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/cronet/plugin_registry/grpc_cronet_plugin_registry.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/init.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/avl/avl.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/backoff/backoff.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_args.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_stack.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_stack_builder.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/channel/channel_trace.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/channel/channelz.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/channel/channelz_registry.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/channel/connected_channel.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/channel/handshaker.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/channel/handshaker_registry.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/channel/status_util.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/compression/compression.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/compression/compression_args.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/compression/compression_internal.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/compression/message_compress.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/compression/stream_compression.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/compression/stream_compression_gzip.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/compression/stream_compression_identity.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/debug/stats.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/debug/stats_data.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/http/format_request.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/http/httpcli.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/http/parser.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/buffer_list.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/call_combiner.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/cfstream_handle.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/combiner.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_cfstream.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_pair_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_pair_uv.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/endpoint_pair_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/error.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/error_cfstream.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_epoll1_linux.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_epollex_linux.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_poll_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/ev_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/exec_ctx.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/executor.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/executor/mpmcqueue.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/executor/threadpool.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/fork_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/fork_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/gethostname_fallback.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/gethostname_host_name_max.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/gethostname_sysconf.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/internal_errqueue.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iocp_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_custom.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_internal.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_posix_cfstream.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_uv.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/iomgr_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/is_epollexclusive_available.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/load_file.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/lockfree_event.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/polling_entity.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_custom.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_set.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_set_custom.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_set_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_uv.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/pollset_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address_custom.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resolve_address_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/resource_quota.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/sockaddr_utils.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_factory_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_mutator.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_common_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_linux.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_uv.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_utils_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/socket_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_cfstream.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_custom.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_client_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_custom.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_custom.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_utils_posix_common.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_server_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_uv.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/tcp_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/time_averaged_stats.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_custom.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_generic.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_heap.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_manager.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/timer_uv.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/udp_server.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/unix_sockets_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/unix_sockets_posix_noop.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_eventfd.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_nospecial.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_pipe.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/iomgr/wakeup_fd_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/json/json.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/json/json_reader.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/json/json_string.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/json/json_writer.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/slice/b64.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/slice/percent_encoding.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/slice/slice.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/slice/slice_buffer.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/slice/slice_intern.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/slice/slice_string_helpers.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/api_trace.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/byte_buffer.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/byte_buffer_reader.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/call.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/call_details.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/call_log_batch.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/channel.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/channel_init.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/channel_ping.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/channel_stack_type.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/completion_queue.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/completion_queue_factory.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/event_string.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/lame_client.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/metadata_array.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/server.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/validate_metadata.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/version.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/transport/bdp_estimator.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/transport/byte_stream.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/transport/connectivity_state.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/transport/error_utils.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/transport/metadata.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/transport/metadata_batch.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/transport/pid_controller.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/transport/static_metadata.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/transport/status_conversion.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/transport/status_metadata.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/transport/timeout_encoding.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/transport/transport.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/transport/transport_op_string.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/uri/uri_parser.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/debug/trace.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/cronet/client/secure/cronet_channel_create.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/cronet/transport/cronet_api_dummy.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/cronet/transport/cronet_transport.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/bin_decoder.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/bin_encoder.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/chttp2_transport.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/context_list.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/flow_control.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_data.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_goaway.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_ping.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_settings.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/frame_window_update.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/hpack_encoder.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/hpack_parser.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/hpack_table.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/http2_settings.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/huffsyms.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/incoming_metadata.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/parsing.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/stream_lists.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/stream_map.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/varint.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/transport/writing.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/alpn/alpn.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/http/client/http_client_filter.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/http/http_filters_plugin.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/http/message_compress/message_compress_filter.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/http/server/http_server_filter.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/backend_metric.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/backup_poller.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/channel_connectivity.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel_channelz.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel_factory.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/client_channel_plugin.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/connector.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/global_subchannel_pool.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/health/health_check_client.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/http_connect_handshaker.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/http_proxy.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/lb_policy_registry.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/local_subchannel_pool.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/parse_address.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/proxy_mapper.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/proxy_mapper_registry.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver_registry.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolver_result_parsing.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/resolving_lb_policy.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/retry_throttle.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/server_address.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/service_config.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/subchannel.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/client_channel/subchannel_pool_interface.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/filters/deadline/deadline_filter.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c
|
||||
${GRPC_SOURCE_DIR}/third_party/upb/upb/decode.c
|
||||
${GRPC_SOURCE_DIR}/third_party/upb/upb/encode.c
|
||||
${GRPC_SOURCE_DIR}/third_party/upb/upb/msg.c
|
||||
${GRPC_SOURCE_DIR}/third_party/upb/upb/port.c
|
||||
${GRPC_SOURCE_DIR}/third_party/upb/upb/table.c
|
||||
${GRPC_SOURCE_DIR}/third_party/upb/upb/upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/gogoproto/gogo.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/validate/validate.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/api/annotations.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/api/http.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/any.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/duration.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/empty.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/struct.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/google/rpc/status.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/http/httpcli_security_connector.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/context/security_context.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/alts_credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/composite/composite_credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/credentials_metadata.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/fake/fake_credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/google_default/credentials_generic.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/google_default/google_default_credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/iam/iam_credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/jwt/json_token.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/jwt/jwt_credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/jwt/jwt_verifier.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/local/local_credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/plugin/plugin_credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/ssl/ssl_credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/tls/spiffe_credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/alts/alts_security_connector.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/fake/fake_security_connector.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/load_system_roots_fallback.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/load_system_roots_linux.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/local/local_security_connector.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/security_connector.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/ssl_utils.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/ssl_utils_config.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/transport/client_auth_filter.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/transport/secure_endpoint.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/transport/security_handshaker.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/transport/server_auth_filter.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/transport/target_authority_table.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/transport/tsi_error.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/util/json_util.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/init_secure.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/crypt/aes_gcm.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/crypt/gsec.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_counter.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_crypter.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_frame_protector.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/frame_protector/frame_handler.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/alts_handshaker_client.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/alts_shared_resource.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/check_gcp_environment.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/alts_tsi_utils.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/alts/handshaker/transport_security_common_api.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/transport_security.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/insecure/channel_create.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/authority.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/ext/transport/chttp2/client/chttp2_connector.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/fake_transport_security.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/local_transport_security.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/ssl/session_cache/ssl_session_cache.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/ssl_transport_security.cc
|
||||
${GRPC_SOURCE_DIR}/src/core/tsi/transport_security_grpc.cc
|
||||
)
|
||||
|
||||
target_include_directories(grpc_cronet
|
||||
PUBLIC ${GRPC_INCLUDE_DIR}
|
||||
PRIVATE ${GRPC_SOURCE_DIR}
|
||||
PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_UPB_GENERATED_DIR}
|
||||
PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR}
|
||||
PRIVATE ${_gRPC_UPB_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
)
|
||||
target_link_libraries(grpc_cronet
|
||||
${_gRPC_BASELIB_LIBRARIES}
|
||||
${_gRPC_SSL_LIBRARIES}
|
||||
${_gRPC_ZLIB_LIBRARIES}
|
||||
${_gRPC_CARES_LIBRARIES}
|
||||
${_gRPC_ADDRESS_SORTING_LIBRARIES}
|
||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||
${_gRPC_PROTOBUF_LIBRARIES}
|
||||
gpr
|
||||
)
|
||||
if (_gRPC_PLATFORM_MAC)
|
||||
target_link_libraries(grpc_cronet "-framework CoreFoundation")
|
||||
endif()
|
||||
|
||||
add_library(grpc_unsecure
|
||||
${GRPC_SOURCE_DIR}/src/core/lib/surface/init.cc
|
||||
@ -1249,19 +857,18 @@ add_library(grpc_unsecure
|
||||
${GRPC_SOURCE_DIR}/src/core/plugin_registry/grpc_unsecure_plugin_registry.cc
|
||||
)
|
||||
|
||||
|
||||
target_include_directories(grpc_unsecure
|
||||
PUBLIC ${GRPC_INCLUDE_DIR}
|
||||
PRIVATE ${GRPC_SOURCE_DIR}
|
||||
PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_UPB_GENERATED_DIR}
|
||||
PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR}
|
||||
PRIVATE ${_gRPC_UPB_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(grpc_unsecure
|
||||
${_gRPC_BASELIB_LIBRARIES}
|
||||
${_gRPC_ZLIB_LIBRARIES}
|
||||
@ -1271,10 +878,12 @@ target_link_libraries(grpc_unsecure
|
||||
${_gRPC_PROTOBUF_LIBRARIES}
|
||||
gpr
|
||||
)
|
||||
|
||||
if (_gRPC_PLATFORM_MAC)
|
||||
target_link_libraries(grpc_unsecure "-framework CoreFoundation")
|
||||
endif()
|
||||
|
||||
|
||||
add_library(grpc++
|
||||
${GRPC_SOURCE_DIR}/src/cpp/client/insecure_credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/cpp/client/secure_credentials.cc
|
||||
@ -1331,8 +940,6 @@ add_library(grpc++
|
||||
${GRPC_SOURCE_DIR}/src/cpp/codegen/codegen_init.cc
|
||||
)
|
||||
|
||||
target_compile_options(grpc++ PUBLIC -w)
|
||||
|
||||
target_include_directories(grpc++
|
||||
PUBLIC ${GRPC_INCLUDE_DIR}
|
||||
PRIVATE ${GRPC_SOURCE_DIR}
|
||||
@ -1344,10 +951,9 @@ target_include_directories(grpc++
|
||||
PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR}
|
||||
PRIVATE ${_gRPC_UPB_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_PROTO_GENS_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(grpc++
|
||||
${_gRPC_BASELIB_LIBRARIES}
|
||||
${_gRPC_SSL_LIBRARIES}
|
||||
${_gRPC_PROTOBUF_LIBRARIES}
|
||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||
@ -1355,6 +961,7 @@ target_link_libraries(grpc++
|
||||
gpr
|
||||
)
|
||||
|
||||
|
||||
add_library(grpc++_unsecure
|
||||
${GRPC_SOURCE_DIR}/src/cpp/client/insecure_credentials.cc
|
||||
${GRPC_SOURCE_DIR}/src/cpp/common/insecure_create_auth_context.cc
|
||||
@ -1404,21 +1011,19 @@ add_library(grpc++_unsecure
|
||||
${GRPC_SOURCE_DIR}/src/cpp/codegen/codegen_init.cc
|
||||
)
|
||||
|
||||
target_compile_options(grpc++_unsecure PUBLIC -w)
|
||||
|
||||
target_include_directories(grpc++_unsecure
|
||||
PUBLIC ${GRPC_INCLUDE_DIR}
|
||||
PRIVATE ${GRPC_SOURCE_DIR}
|
||||
PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_UPB_GENERATED_DIR}
|
||||
PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR}
|
||||
PRIVATE ${_gRPC_UPB_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_PROTO_GENS_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(grpc++_unsecure
|
||||
${_gRPC_BASELIB_LIBRARIES}
|
||||
${_gRPC_PROTOBUF_LIBRARIES}
|
||||
@ -1427,6 +1032,16 @@ target_link_libraries(grpc++_unsecure
|
||||
grpc_unsecure
|
||||
)
|
||||
|
||||
|
||||
if (_gRPC_SSL_INCLUDE_DIR AND _gRPC_SSL_LIBRARIES)
|
||||
add_library(libgrpc ALIAS grpc)
|
||||
add_library(libgrpc++ ALIAS grpc++)
|
||||
else()
|
||||
add_library(libgrpc ALIAS grpc_unsecure)
|
||||
add_library(libgrpc++ ALIAS grpc++_unsecure)
|
||||
endif()
|
||||
|
||||
|
||||
add_library(grpc_plugin_support
|
||||
${GRPC_SOURCE_DIR}/src/compiler/cpp_generator.cc
|
||||
)
|
||||
@ -1436,23 +1051,22 @@ target_include_directories(grpc_plugin_support
|
||||
PUBLIC ${GRPC_INCLUDE_DIR}
|
||||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_UPB_GENERATED_DIR}
|
||||
PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR}
|
||||
PRIVATE ${_gRPC_UPB_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_PROTO_GENS_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(grpc_plugin_support
|
||||
${_gRPC_PROTOBUF_PROTOC_LIBRARIES}
|
||||
${_gRPC_PROTOBUF_LIBRARIES}
|
||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||
)
|
||||
|
||||
|
||||
add_executable(grpc_cpp_plugin
|
||||
${GRPC_SOURCE_DIR}/src/compiler/cpp_plugin.cc
|
||||
)
|
||||
@ -1461,16 +1075,13 @@ target_include_directories(grpc_cpp_plugin
|
||||
PRIVATE ${GRPC_SOURCE_DIR}
|
||||
PUBLIC ${GRPC_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_BENCHMARK_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_CARES_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_GFLAGS_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_PROTOBUF_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_SSL_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_UPB_GENERATED_DIR}
|
||||
PRIVATE ${_gRPC_UPB_GRPC_GENERATED_DIR}
|
||||
PRIVATE ${_gRPC_UPB_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_ZLIB_INCLUDE_DIR}
|
||||
PRIVATE ${_gRPC_PROTO_GENS_DIR}
|
||||
)
|
||||
|
||||
target_link_libraries(grpc_cpp_plugin
|
||||
@ -1479,4 +1090,3 @@ target_link_libraries(grpc_cpp_plugin
|
||||
${_gRPC_ALLTARGETS_LIBRARIES}
|
||||
grpc_plugin_support
|
||||
)
|
||||
|
||||
|
13
contrib/protobuf-cmake/CMakeLists.txt
Normal file
13
contrib/protobuf-cmake/CMakeLists.txt
Normal file
@ -0,0 +1,13 @@
|
||||
set(protobuf_SOURCE_DIR ${ClickHouse_SOURCE_DIR}/contrib/protobuf)
|
||||
set(protobuf_BINARY_DIR ${ClickHouse_BINARY_DIR}/contrib/protobuf)
|
||||
|
||||
set(protobuf_WITH_ZLIB 0 CACHE INTERNAL "" FORCE) # actually will use zlib, but skip find
|
||||
set(protobuf_BUILD_TESTS OFF CACHE INTERNAL "" FORCE)
|
||||
|
||||
if (MAKE_STATIC_LIBRARIES)
|
||||
set(protobuf_BUILD_SHARED_LIBS OFF CACHE INTERNAL "" FORCE)
|
||||
else ()
|
||||
set(protobuf_BUILD_SHARED_LIBS ON CACHE INTERNAL "" FORCE)
|
||||
endif ()
|
||||
|
||||
add_subdirectory(${protobuf_SOURCE_DIR}/cmake ${protobuf_BINARY_DIR})
|
@ -163,6 +163,8 @@ for query_index, q in enumerate(test_queries):
|
||||
prewarm_id = f'{query_prefix}.prewarm0'
|
||||
res = c.execute(q, query_id = prewarm_id)
|
||||
print(f'prewarm\t{query_index}\t{prewarm_id}\t{conn_index}\t{c.last_query.elapsed}')
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except:
|
||||
# If prewarm fails for some query -- skip it, and try to test the others.
|
||||
# This might happen if the new test introduces some function that the
|
||||
|
@ -404,6 +404,36 @@ Possible values:
|
||||
|
||||
Default value: 0.
|
||||
|
||||
## any_join_distinct_right_table_keys {#any_join_distinct_right_table_keys}
|
||||
|
||||
Enables legacy ClickHouse server behavior in `ANY INNER|LEFT JOIN` operations.
|
||||
|
||||
!!! note "Warning"
|
||||
Use this setting only for the purpose of backward compatibility if your use cases depend on legacy `JOIN` behavior.
|
||||
|
||||
When the legacy behavior enabled:
|
||||
|
||||
- Results of `t1 ANY LEFT JOIN t2` and `t2 ANY RIGHT JOIN t1` operations are not equal because ClickHouse uses the logic with many-to-one left-to-right table keys mapping.
|
||||
- Results of `ANY INNER JOIN` operations contain all rows from the left table like the `SEMI LEFT JOIN` operations do.
|
||||
|
||||
When the legacy behavior disabled:
|
||||
|
||||
- Results of `t1 ANY LEFT JOIN t2` and `t2 ANY RIGHT JOIN t1` operations are equal because ClickHouse uses the logic which provides one-to-many keys mapping in `ANY RIGHT JOIN` operations.
|
||||
- Results of `ANY INNER JOIN` operations contain one row per key from both left and right tables.
|
||||
|
||||
Possible values:
|
||||
|
||||
- 0 — Legacy behavior is disabled.
|
||||
- 1 — Legacy behavior is enabled.
|
||||
|
||||
|
||||
Default value: 0.
|
||||
|
||||
See also:
|
||||
|
||||
- [JOIN strictness](../../sql-reference/statements/select/join.md#select-join-strictness)
|
||||
|
||||
|
||||
## max\_block\_size {#setting-max_block_size}
|
||||
|
||||
In ClickHouse, data is processed by blocks (sets of column parts). The internal processing cycles for a single block are efficient enough, but there are noticeable expenditures on each block. The `max_block_size` setting is a recommendation for what size of the block (in a count of rows) to load from tables. The block size shouldn’t be too small, so that the expenditures on each block are still noticeable, but not too large so that the query with LIMIT that is completed after the first block is processed quickly. The goal is to avoid consuming too much memory when extracting a large number of columns in multiple threads and to preserve at least some cache locality.
|
||||
|
@ -568,4 +568,90 @@ Result:
|
||||
└───────────────────────┘
|
||||
```
|
||||
|
||||
|
||||
## toUnixTimestamp64Milli
|
||||
## toUnixTimestamp64Micro
|
||||
## toUnixTimestamp64Nano
|
||||
|
||||
Converts a `DateTime64` to a `Int64` value with fixed sub-second precision. Input value is scaled up or down appropriately depending on it precision. Please note that output value is a timestamp in UTC, not in timezone of `DateTime64`.
|
||||
|
||||
**Syntax**
|
||||
|
||||
``` sql
|
||||
toUnixTimestamp64Milli(value)
|
||||
```
|
||||
|
||||
**Parameters**
|
||||
|
||||
- `value` — DateTime64 value with any precision.
|
||||
|
||||
**Returned value**
|
||||
|
||||
- `value` converted to the `Int64` data type.
|
||||
|
||||
**Examples**
|
||||
|
||||
Query:
|
||||
|
||||
``` sql
|
||||
WITH toDateTime64('2019-09-16 19:20:12.345678910', 6) AS dt64
|
||||
SELECT toUnixTimestamp64Milli(dt64)
|
||||
```
|
||||
|
||||
Result:
|
||||
|
||||
``` text
|
||||
┌─toUnixTimestamp64Milli(dt64)─┐
|
||||
│ 1568650812345 │
|
||||
└──────────────────────────────┘
|
||||
```
|
||||
|
||||
``` sql
|
||||
WITH toDateTime64('2019-09-16 19:20:12.345678910', 6) AS dt64
|
||||
SELECT toUnixTimestamp64Nano(dt64)
|
||||
```
|
||||
|
||||
Result:
|
||||
|
||||
``` text
|
||||
┌─toUnixTimestamp64Nano(dt64)─┐
|
||||
│ 1568650812345678000 │
|
||||
└─────────────────────────────┘
|
||||
```
|
||||
|
||||
## fromUnixTimestamp64Milli
|
||||
## fromUnixTimestamp64Micro
|
||||
## fromUnixTimestamp64Nano
|
||||
|
||||
Converts an `Int64` to a `DateTime64` value with fixed sub-second precision and optional timezone. Input value is scaled up or down appropriately depending on it's precision. Please note that input value is treated as UTC timestamp, not timestamp at given (or implicit) timezone.
|
||||
|
||||
**Syntax**
|
||||
|
||||
``` sql
|
||||
fromUnixTimestamp64Milli(value [, ti])
|
||||
```
|
||||
|
||||
**Parameters**
|
||||
|
||||
- `value` — `Int64` value with any precision.
|
||||
- `timezone` — `String` (optional) timezone name of the result.
|
||||
|
||||
**Returned value**
|
||||
|
||||
- `value` converted to the `DateTime64` data type.
|
||||
|
||||
**Examples**
|
||||
|
||||
``` sql
|
||||
WITH CAST(1234567891011, 'Int64') AS i64
|
||||
SELECT fromUnixTimestamp64Milli(i64, 'UTC')
|
||||
```
|
||||
|
||||
``` text
|
||||
┌─fromUnixTimestamp64Milli(i64, 'UTC')─┐
|
||||
│ 2009-02-13 23:31:31.011 │
|
||||
└──────────────────────────────────────┘
|
||||
```
|
||||
|
||||
|
||||
[Original article](https://clickhouse.tech/docs/en/query_language/functions/type_conversion_functions/) <!--hide-->
|
||||
|
@ -44,6 +44,8 @@ Modifies how matching by "join keys" is performed
|
||||
!!! note "Note"
|
||||
The default strictness value can be overriden using [join\_default\_strictness](../../../operations/settings/settings.md#settings-join_default_strictness) setting.
|
||||
|
||||
Also the behavior of ClickHouse server for `ANY JOIN` operations depends on the [any_join_distinct_right_table_keys](../../../operations/settings/settings.md#any_join_distinct_right_table_keys) setting.
|
||||
|
||||
|
||||
### ASOF JOIN Usage
|
||||
|
||||
|
@ -52,18 +52,20 @@ namespace
|
||||
|
||||
String user_config = "users." + user_name;
|
||||
|
||||
bool has_password = config.has(user_config + ".password");
|
||||
bool has_no_password = config.has(user_config + ".no_password");
|
||||
bool has_password_plaintext = config.has(user_config + ".password");
|
||||
bool has_password_sha256_hex = config.has(user_config + ".password_sha256_hex");
|
||||
bool has_password_double_sha1_hex = config.has(user_config + ".password_double_sha1_hex");
|
||||
|
||||
if (has_password + has_password_sha256_hex + has_password_double_sha1_hex > 1)
|
||||
throw Exception("More than one field of 'password', 'password_sha256_hex', 'password_double_sha1_hex' is used to specify password for user " + user_name + ". Must be only one of them.",
|
||||
size_t num_password_fields = has_no_password + has_password_plaintext + has_password_sha256_hex + has_password_double_sha1_hex;
|
||||
if (num_password_fields > 1)
|
||||
throw Exception("More than one field of 'password', 'password_sha256_hex', 'password_double_sha1_hex', 'no_password' are used to specify password for user " + user_name + ". Must be only one of them.",
|
||||
ErrorCodes::BAD_ARGUMENTS);
|
||||
|
||||
if (!has_password && !has_password_sha256_hex && !has_password_double_sha1_hex)
|
||||
throw Exception("Either 'password' or 'password_sha256_hex' or 'password_double_sha1_hex' must be specified for user " + user_name + ".", ErrorCodes::BAD_ARGUMENTS);
|
||||
if (num_password_fields < 1)
|
||||
throw Exception("Either 'password' or 'password_sha256_hex' or 'password_double_sha1_hex' or 'no_password' must be specified for user " + user_name + ".", ErrorCodes::BAD_ARGUMENTS);
|
||||
|
||||
if (has_password)
|
||||
if (has_password_plaintext)
|
||||
{
|
||||
user->authentication = Authentication{Authentication::PLAINTEXT_PASSWORD};
|
||||
user->authentication.setPassword(config.getString(user_config + ".password"));
|
||||
|
@ -153,6 +153,8 @@ public:
|
||||
const T & getElement(size_t n) const { return data[n]; }
|
||||
T & getElement(size_t n) { return data[n]; }
|
||||
|
||||
UInt32 getScale() const {return scale;}
|
||||
|
||||
protected:
|
||||
Container data;
|
||||
UInt32 scale;
|
||||
|
@ -229,13 +229,19 @@ public:
|
||||
}
|
||||
|
||||
template <typename ... TAllocatorParams>
|
||||
void push_back_raw(const char * ptr, TAllocatorParams &&... allocator_params)
|
||||
void push_back_raw(const void * ptr, TAllocatorParams &&... allocator_params)
|
||||
{
|
||||
push_back_raw_many(1, ptr, std::forward<TAllocatorParams>(allocator_params)...);
|
||||
}
|
||||
|
||||
template <typename ... TAllocatorParams>
|
||||
void push_back_raw_many(size_t number_of_items, const void * ptr, TAllocatorParams &&... allocator_params)
|
||||
{
|
||||
if (unlikely(c_end == c_end_of_storage))
|
||||
reserveForNextSize(std::forward<TAllocatorParams>(allocator_params)...);
|
||||
reserve(number_of_items, std::forward<TAllocatorParams>(allocator_params)...);
|
||||
|
||||
memcpy(c_end, ptr, ELEMENT_SIZE);
|
||||
c_end += byte_size(1);
|
||||
memcpy(c_end, ptr, ELEMENT_SIZE * number_of_items);
|
||||
c_end += byte_size(number_of_items);
|
||||
}
|
||||
|
||||
void protect()
|
||||
|
@ -72,7 +72,7 @@ template <typename T> bool inline operator<= (T a, const UInt128 b) { return UIn
|
||||
template <typename T> bool inline operator< (T a, const UInt128 b) { return UInt128(a) < b; }
|
||||
|
||||
template <> inline constexpr bool IsNumber<UInt128> = true;
|
||||
template <> struct TypeName<UInt128> { static const char * get() { return "UInt128"; } };
|
||||
template <> struct TypeName<UInt128> { static constexpr const char * get() { return "UInt128"; } };
|
||||
template <> struct TypeId<UInt128> { static constexpr const TypeIndex value = TypeIndex::UInt128; };
|
||||
|
||||
struct UInt128Hash
|
||||
|
@ -9,4 +9,5 @@
|
||||
#cmakedefine01 USE_BROTLI
|
||||
#cmakedefine01 USE_UNWIND
|
||||
#cmakedefine01 USE_OPENCL
|
||||
#cmakedefine01 USE_GRPC
|
||||
#cmakedefine01 CLICKHOUSE_SPLIT_BINARY
|
||||
|
@ -85,17 +85,17 @@ template <> inline constexpr bool IsNumber<Float64> = true;
|
||||
|
||||
template <typename T> struct TypeName;
|
||||
|
||||
template <> struct TypeName<UInt8> { static const char * get() { return "UInt8"; } };
|
||||
template <> struct TypeName<UInt16> { static const char * get() { return "UInt16"; } };
|
||||
template <> struct TypeName<UInt32> { static const char * get() { return "UInt32"; } };
|
||||
template <> struct TypeName<UInt64> { static const char * get() { return "UInt64"; } };
|
||||
template <> struct TypeName<Int8> { static const char * get() { return "Int8"; } };
|
||||
template <> struct TypeName<Int16> { static const char * get() { return "Int16"; } };
|
||||
template <> struct TypeName<Int32> { static const char * get() { return "Int32"; } };
|
||||
template <> struct TypeName<Int64> { static const char * get() { return "Int64"; } };
|
||||
template <> struct TypeName<Float32> { static const char * get() { return "Float32"; } };
|
||||
template <> struct TypeName<Float64> { static const char * get() { return "Float64"; } };
|
||||
template <> struct TypeName<String> { static const char * get() { return "String"; } };
|
||||
template <> struct TypeName<UInt8> { static constexpr const char * get() { return "UInt8"; } };
|
||||
template <> struct TypeName<UInt16> { static constexpr const char * get() { return "UInt16"; } };
|
||||
template <> struct TypeName<UInt32> { static constexpr const char * get() { return "UInt32"; } };
|
||||
template <> struct TypeName<UInt64> { static constexpr const char * get() { return "UInt64"; } };
|
||||
template <> struct TypeName<Int8> { static constexpr const char * get() { return "Int8"; } };
|
||||
template <> struct TypeName<Int16> { static constexpr const char * get() { return "Int16"; } };
|
||||
template <> struct TypeName<Int32> { static constexpr const char * get() { return "Int32"; } };
|
||||
template <> struct TypeName<Int64> { static constexpr const char * get() { return "Int64"; } };
|
||||
template <> struct TypeName<Float32> { static constexpr const char * get() { return "Float32"; } };
|
||||
template <> struct TypeName<Float64> { static constexpr const char * get() { return "Float64"; } };
|
||||
template <> struct TypeName<String> { static constexpr const char * get() { return "String"; } };
|
||||
|
||||
template <typename T> struct TypeId;
|
||||
template <> struct TypeId<UInt8> { static constexpr const TypeIndex value = TypeIndex::UInt8; };
|
||||
@ -115,7 +115,7 @@ using Strings = std::vector<String>;
|
||||
|
||||
using Int128 = __int128;
|
||||
template <> inline constexpr bool IsNumber<Int128> = true;
|
||||
template <> struct TypeName<Int128> { static const char * get() { return "Int128"; } };
|
||||
template <> struct TypeName<Int128> { static constexpr const char * get() { return "Int128"; } };
|
||||
template <> struct TypeId<Int128> { static constexpr const TypeIndex value = TypeIndex::Int128; };
|
||||
|
||||
/// Own FieldType for Decimal.
|
||||
@ -161,9 +161,9 @@ using Decimal128 = Decimal<Int128>;
|
||||
|
||||
using DateTime64 = Decimal64;
|
||||
|
||||
template <> struct TypeName<Decimal32> { static const char * get() { return "Decimal32"; } };
|
||||
template <> struct TypeName<Decimal64> { static const char * get() { return "Decimal64"; } };
|
||||
template <> struct TypeName<Decimal128> { static const char * get() { return "Decimal128"; } };
|
||||
template <> struct TypeName<Decimal32> { static constexpr const char * get() { return "Decimal32"; } };
|
||||
template <> struct TypeName<Decimal64> { static constexpr const char * get() { return "Decimal64"; } };
|
||||
template <> struct TypeName<Decimal128> { static constexpr const char * get() { return "Decimal128"; } };
|
||||
|
||||
template <> struct TypeId<Decimal32> { static constexpr const TypeIndex value = TypeIndex::Decimal32; };
|
||||
template <> struct TypeId<Decimal64> { static constexpr const TypeIndex value = TypeIndex::Decimal64; };
|
||||
@ -183,7 +183,7 @@ template <> inline Int32 Decimal32::getScaleMultiplier(UInt32 scale) { return co
|
||||
template <> inline Int64 Decimal64::getScaleMultiplier(UInt32 scale) { return common::exp10_i64(scale); }
|
||||
template <> inline Int128 Decimal128::getScaleMultiplier(UInt32 scale) { return common::exp10_i128(scale); }
|
||||
|
||||
inline const char * getTypeName(TypeIndex idx)
|
||||
inline constexpr const char * getTypeName(TypeIndex idx)
|
||||
{
|
||||
switch (idx)
|
||||
{
|
||||
|
@ -17,7 +17,9 @@ class DataTypeDateTime64 final : public DataTypeDecimalBase<DateTime64>, public
|
||||
{
|
||||
public:
|
||||
static constexpr UInt8 default_scale = 3;
|
||||
|
||||
static constexpr auto family_name = "DateTime64";
|
||||
static constexpr auto type_id = TypeIndex::DateTime64;
|
||||
|
||||
explicit DataTypeDateTime64(UInt32 scale_, const std::string & time_zone_name = "");
|
||||
|
||||
@ -26,7 +28,7 @@ public:
|
||||
|
||||
const char * getFamilyName() const override { return family_name; }
|
||||
std::string doGetName() const override;
|
||||
TypeIndex getTypeId() const override { return TypeIndex::DateTime64; }
|
||||
TypeIndex getTypeId() const override { return type_id; }
|
||||
|
||||
void serializeText(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings &) const override;
|
||||
void deserializeText(IColumn & column, ReadBuffer & istr, const FormatSettings &) const override;
|
||||
|
@ -19,12 +19,15 @@ class DataTypeNumberBase : public DataTypeWithSimpleSerialization
|
||||
|
||||
public:
|
||||
static constexpr bool is_parametric = false;
|
||||
|
||||
using FieldType = T;
|
||||
static constexpr auto type_id = TypeId<T>::value;
|
||||
static constexpr auto family_name = TypeName<T>::get();
|
||||
|
||||
using ColumnType = ColumnVector<T>;
|
||||
|
||||
const char * getFamilyName() const override { return TypeName<T>::get(); }
|
||||
TypeIndex getTypeId() const override { return TypeId<T>::value; }
|
||||
const char * getFamilyName() const override { return family_name; }
|
||||
TypeIndex getTypeId() const override { return type_id; }
|
||||
|
||||
void serializeText(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings &) const override;
|
||||
void deserializeText(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const override;
|
||||
|
@ -13,13 +13,14 @@ class DataTypeString final : public IDataType
|
||||
public:
|
||||
using FieldType = String;
|
||||
static constexpr bool is_parametric = false;
|
||||
static constexpr auto type_id = TypeIndex::String;
|
||||
|
||||
const char * getFamilyName() const override
|
||||
{
|
||||
return "String";
|
||||
}
|
||||
|
||||
TypeIndex getTypeId() const override { return TypeIndex::String; }
|
||||
TypeIndex getTypeId() const override { return type_id; }
|
||||
|
||||
void serializeBinary(const Field & field, WriteBuffer & ostr) const override;
|
||||
void deserializeBinary(Field & field, ReadBuffer & istr) const override;
|
||||
|
@ -529,10 +529,15 @@ struct WhichDataType
|
||||
|
||||
/// IDataType helpers (alternative for IDataType virtual methods with single point of truth)
|
||||
|
||||
inline bool isDate(const DataTypePtr & data_type) { return WhichDataType(data_type).isDate(); }
|
||||
inline bool isDateOrDateTime(const DataTypePtr & data_type) { return WhichDataType(data_type).isDateOrDateTime(); }
|
||||
inline bool isDateTime(const DataTypePtr & data_type) { return WhichDataType(data_type).isDateTime(); }
|
||||
inline bool isDateTime64(const DataTypePtr & data_type) { return WhichDataType(data_type).isDateTime64(); }
|
||||
template <typename T>
|
||||
inline bool isDate(const T & data_type) { return WhichDataType(data_type).isDate(); }
|
||||
template <typename T>
|
||||
inline bool isDateOrDateTime(const T & data_type) { return WhichDataType(data_type).isDateOrDateTime(); }
|
||||
template <typename T>
|
||||
inline bool isDateTime(const T & data_type) { return WhichDataType(data_type).isDateTime(); }
|
||||
template <typename T>
|
||||
inline bool isDateTime64(const T & data_type) { return WhichDataType(data_type).isDateTime64(); }
|
||||
|
||||
inline bool isEnum(const DataTypePtr & data_type) { return WhichDataType(data_type).isEnum(); }
|
||||
inline bool isDecimal(const DataTypePtr & data_type) { return WhichDataType(data_type).isDecimal(); }
|
||||
inline bool isTuple(const DataTypePtr & data_type) { return WhichDataType(data_type).isTuple(); }
|
||||
@ -636,6 +641,19 @@ inline bool isCompilableType(const DataTypePtr & data_type)
|
||||
return data_type->isValueRepresentedByNumber() && !isDecimal(data_type);
|
||||
}
|
||||
|
||||
template <TypeIndex TYPE_IDX, typename DataType>
|
||||
inline bool isDataType(const DataType & data_type)
|
||||
{
|
||||
WhichDataType which(data_type);
|
||||
return which.idx == TYPE_IDX;
|
||||
}
|
||||
|
||||
template <typename ExpectedDataType, typename DataType>
|
||||
inline bool isDataType(const DataType & data_type)
|
||||
{
|
||||
return isDataType<ExpectedDataType::type_id>(data_type);
|
||||
}
|
||||
|
||||
template <typename DataType> constexpr bool IsDataTypeDecimal = false;
|
||||
template <typename DataType> constexpr bool IsDataTypeNumber = false;
|
||||
template <typename DataType> constexpr bool IsDataTypeDateOrDateTime = false;
|
||||
|
148
src/Functions/FunctionUnixTimestamp64.h
Normal file
148
src/Functions/FunctionUnixTimestamp64.h
Normal file
@ -0,0 +1,148 @@
|
||||
#pragma once
|
||||
|
||||
#include <Functions/extractTimeZoneFromFunctionArguments.h>
|
||||
#include <Functions/IFunctionImpl.h>
|
||||
#include <Functions/FunctionHelpers.h>
|
||||
#include <DataTypes/DataTypeDateTime64.h>
|
||||
#include <DataTypes/DataTypesNumber.h>
|
||||
|
||||
#include <common/arithmeticOverflow.h>
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
namespace ErrorCodes
|
||||
{
|
||||
extern const int ILLEGAL_TYPE_OF_ARGUMENT;
|
||||
extern const int DECIMAL_OVERFLOW;
|
||||
}
|
||||
|
||||
/** Casts DateTim64 to or from Int64 representation narrowed down (or scaled up) to any scale value defined in Impl.
|
||||
*/
|
||||
template <typename Impl>
|
||||
class FunctionUnixTimestamp64 : public IFunction
|
||||
{
|
||||
public:
|
||||
static constexpr auto name = Impl::name;
|
||||
static constexpr auto target_scale = Impl::target_scale;
|
||||
|
||||
using SourceDataType = typename Impl::SourceDataType;
|
||||
using ResultDataType = typename Impl::ResultDataType;
|
||||
|
||||
static constexpr bool is_result_datetime64 = std::is_same_v<ResultDataType, DataTypeDateTime64>;
|
||||
|
||||
static_assert(std::is_same_v<SourceDataType, DataTypeDateTime64> || std::is_same_v<ResultDataType, DataTypeDateTime64>);
|
||||
|
||||
static auto create(const Context &)
|
||||
{
|
||||
return std::make_shared<FunctionUnixTimestamp64<Impl>>();
|
||||
}
|
||||
|
||||
String getName() const override { return name; }
|
||||
size_t getNumberOfArguments() const override { return is_result_datetime64 ? 2 : 1; }
|
||||
bool isVariadic() const override { return is_result_datetime64; }
|
||||
|
||||
DataTypePtr getReturnTypeImpl(const ColumnsWithTypeAndName & arguments) const override
|
||||
{
|
||||
if constexpr (is_result_datetime64)
|
||||
{
|
||||
validateFunctionArgumentTypes(*this, arguments,
|
||||
FunctionArgumentDescriptors{{"value", isDataType<SourceDataType>, nullptr, std::string(SourceDataType::family_name).c_str()}},
|
||||
// optional
|
||||
FunctionArgumentDescriptors{
|
||||
// {"precision", isDataType<DataTypeUInt8>, isColumnConst, ("Precision of the result, default is " + std::to_string(target_scale)).c_str()},
|
||||
{"timezone", isStringOrFixedString, isColumnConst, "Timezone of the result"},
|
||||
});
|
||||
const auto timezone = extractTimeZoneNameFromFunctionArguments(arguments, 1, 0);
|
||||
return std::make_shared<DataTypeDateTime64>(target_scale, timezone);
|
||||
}
|
||||
else
|
||||
{
|
||||
validateFunctionArgumentTypes(*this, arguments,
|
||||
FunctionArgumentDescriptors{{"value", isDataType<SourceDataType>, nullptr, std::string(SourceDataType::family_name).c_str()}});
|
||||
return std::make_shared<DataTypeInt64>();
|
||||
}
|
||||
}
|
||||
|
||||
void executeImpl(Block & block, const ColumnNumbers & arguments, size_t result, size_t input_rows_count) override
|
||||
{
|
||||
using SourceColumnType = typename SourceDataType::ColumnType;
|
||||
using ResultColumnType = typename ResultDataType::ColumnType;
|
||||
|
||||
const auto & src = block.getByPosition(arguments[0]);
|
||||
auto & res = block.getByPosition(result);
|
||||
const auto & col = *src.column;
|
||||
|
||||
const SourceColumnType * source_col_typed = checkAndGetColumn<SourceColumnType>(col);
|
||||
if (!source_col_typed && !(source_col_typed = checkAndGetColumnConstData<SourceColumnType>(&col)))
|
||||
throw Exception("Invalid column type" + col.getName() + " expected "
|
||||
+ std::string(SourceDataType::family_name),
|
||||
ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT);
|
||||
|
||||
res.column = res.type->createColumn();
|
||||
|
||||
if (input_rows_count == 0)
|
||||
return;
|
||||
|
||||
auto & result_data = assert_cast<ResultColumnType &>(res.column->assumeMutableRef()).getData();
|
||||
result_data.reserve(source_col_typed->size());
|
||||
const auto & source_data = source_col_typed->getData();
|
||||
|
||||
const auto scale_diff = getScaleDiff(*checkAndGetDataType<SourceDataType>(src.type.get()), *checkAndGetDataType<ResultDataType>(res.type.get()));
|
||||
if (scale_diff == 0)
|
||||
{
|
||||
static_assert(sizeof(typename SourceColumnType::Container::value_type) == sizeof(typename ResultColumnType::Container::value_type));
|
||||
// no conversion necessary
|
||||
result_data.push_back_raw_many(source_data.size(), source_data.data());
|
||||
}
|
||||
else if (scale_diff < 0)
|
||||
{
|
||||
const Int64 scale_multiplier = DecimalUtils::scaleMultiplier<Int64>(std::abs(scale_diff));
|
||||
for (const auto & v : source_data)
|
||||
{
|
||||
Int64 result_value = toDestValue(v);
|
||||
if (common::mulOverflow(result_value, scale_multiplier, result_value))
|
||||
throw Exception("Decimal overflow in " + getName(), ErrorCodes::DECIMAL_OVERFLOW);
|
||||
|
||||
result_data.push_back(result_value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const Int64 scale_multiplier = DecimalUtils::scaleMultiplier<Int64>(scale_diff);
|
||||
for (const auto & v : source_data)
|
||||
result_data.push_back(static_cast<Int64>(toDestValue(v) / scale_multiplier));
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
static Int64 getScaleDiff(const SourceDataType & src, const ResultDataType & dst)
|
||||
{
|
||||
Int64 src_scale = target_scale;
|
||||
if constexpr (std::is_same_v<SourceDataType, DataTypeDateTime64>)
|
||||
{
|
||||
src_scale = src.getScale();
|
||||
}
|
||||
|
||||
Int64 dst_scale = target_scale;
|
||||
if constexpr (std::is_same_v<ResultDataType, DataTypeDateTime64>)
|
||||
{
|
||||
dst_scale = dst.getScale();
|
||||
}
|
||||
|
||||
return src_scale - dst_scale;
|
||||
}
|
||||
|
||||
static auto toDestValue(const DateTime64 & v)
|
||||
{
|
||||
return Int64{v.value};
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static auto toDestValue(const T & v)
|
||||
{
|
||||
return Int64{v};
|
||||
}
|
||||
};
|
||||
|
||||
}
|
@ -115,6 +115,7 @@ public:
|
||||
String getName() const override { return "FunctionCapture"; }
|
||||
|
||||
bool useDefaultImplementationForNulls() const override { return false; }
|
||||
bool useDefaultImplementationForLowCardinalityColumns() const override { return false; }
|
||||
|
||||
void execute(Block & block, const ColumnNumbers & arguments, size_t result, size_t input_rows_count) override
|
||||
{
|
||||
@ -243,6 +244,7 @@ public:
|
||||
|
||||
String getName() const override { return name; }
|
||||
bool useDefaultImplementationForNulls() const override { return false; }
|
||||
bool useDefaultImplementationForLowCardinalityColumns() const override { return false; }
|
||||
DataTypePtr getReturnType(const ColumnsWithTypeAndName &) const override { return return_type; }
|
||||
size_t getNumberOfArguments() const override { return capture->captured_types.size(); }
|
||||
|
||||
|
20
src/Functions/fromUnixTimestamp64Micro.cpp
Normal file
20
src/Functions/fromUnixTimestamp64Micro.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <Functions/FunctionUnixTimestamp64.h>
|
||||
#include <Functions/FunctionFactory.h>
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
struct TransformFromMicro
|
||||
{
|
||||
static constexpr auto name = "fromUnixTimestamp64Micro";
|
||||
static constexpr auto target_scale = 6;
|
||||
using SourceDataType = DataTypeInt64;
|
||||
using ResultDataType = DataTypeDateTime64;
|
||||
};
|
||||
|
||||
void registerFromUnixTimestamp64Micro(FunctionFactory & factory)
|
||||
{
|
||||
factory.registerFunction<FunctionUnixTimestamp64<TransformFromMicro>>();
|
||||
}
|
||||
|
||||
}
|
20
src/Functions/fromUnixTimestamp64Milli.cpp
Normal file
20
src/Functions/fromUnixTimestamp64Milli.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <Functions/FunctionUnixTimestamp64.h>
|
||||
#include <Functions/FunctionFactory.h>
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
struct TransformFromMilli
|
||||
{
|
||||
static constexpr auto name = "fromUnixTimestamp64Milli";
|
||||
static constexpr auto target_scale = 3;
|
||||
using SourceDataType = DataTypeInt64;
|
||||
using ResultDataType = DataTypeDateTime64;
|
||||
};
|
||||
|
||||
void registerFromUnixTimestamp64Milli(FunctionFactory & factory)
|
||||
{
|
||||
factory.registerFunction<FunctionUnixTimestamp64<TransformFromMilli>>();
|
||||
}
|
||||
|
||||
}
|
20
src/Functions/fromUnixTimestamp64Nano.cpp
Normal file
20
src/Functions/fromUnixTimestamp64Nano.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <Functions/FunctionUnixTimestamp64.h>
|
||||
#include <Functions/FunctionFactory.h>
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
struct TransformFromNano
|
||||
{
|
||||
static constexpr auto name = "fromUnixTimestamp64Nano";
|
||||
static constexpr auto target_scale = 9;
|
||||
using SourceDataType = DataTypeInt64;
|
||||
using ResultDataType = DataTypeDateTime64;
|
||||
};
|
||||
|
||||
void registerFromUnixTimestamp64Nano(FunctionFactory & factory)
|
||||
{
|
||||
factory.registerFunction<FunctionUnixTimestamp64<TransformFromNano>>();
|
||||
}
|
||||
|
||||
}
|
@ -37,6 +37,7 @@ void registerFunctionsIntrospection(FunctionFactory &);
|
||||
void registerFunctionsNull(FunctionFactory &);
|
||||
void registerFunctionsJSON(FunctionFactory &);
|
||||
void registerFunctionsConsistentHashing(FunctionFactory & factory);
|
||||
void registerFunctionsUnixTimestamp64(FunctionFactory & factory);
|
||||
|
||||
|
||||
void registerFunctions()
|
||||
@ -78,6 +79,7 @@ void registerFunctions()
|
||||
registerFunctionsJSON(factory);
|
||||
registerFunctionsIntrospection(factory);
|
||||
registerFunctionsConsistentHashing(factory);
|
||||
registerFunctionsUnixTimestamp64(factory);
|
||||
}
|
||||
|
||||
}
|
||||
|
25
src/Functions/registerFunctionsUnixTimestamp64.cpp
Normal file
25
src/Functions/registerFunctionsUnixTimestamp64.cpp
Normal file
@ -0,0 +1,25 @@
|
||||
namespace DB
|
||||
{
|
||||
|
||||
class FunctionFactory;
|
||||
|
||||
void registerToUnixTimestamp64Milli(FunctionFactory &);
|
||||
void registerToUnixTimestamp64Micro(FunctionFactory &);
|
||||
void registerToUnixTimestamp64Nano(FunctionFactory &);
|
||||
|
||||
void registerFromUnixTimestamp64Milli(FunctionFactory &);
|
||||
void registerFromUnixTimestamp64Micro(FunctionFactory &);
|
||||
void registerFromUnixTimestamp64Nano(FunctionFactory &);
|
||||
|
||||
void registerFunctionsUnixTimestamp64(FunctionFactory & factory)
|
||||
{
|
||||
registerToUnixTimestamp64Milli(factory);
|
||||
registerToUnixTimestamp64Micro(factory);
|
||||
registerToUnixTimestamp64Nano(factory);
|
||||
|
||||
registerFromUnixTimestamp64Milli(factory);
|
||||
registerFromUnixTimestamp64Micro(factory);
|
||||
registerFromUnixTimestamp64Nano(factory);
|
||||
}
|
||||
|
||||
}
|
20
src/Functions/toUnixTimestamp64Micro.cpp
Normal file
20
src/Functions/toUnixTimestamp64Micro.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <Functions/FunctionUnixTimestamp64.h>
|
||||
#include <Functions/FunctionFactory.h>
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
struct TransformToMicro
|
||||
{
|
||||
static constexpr auto name = "toUnixTimestamp64Micro";
|
||||
static constexpr auto target_scale = 6;
|
||||
using SourceDataType = DataTypeDateTime64;
|
||||
using ResultDataType = DataTypeInt64;
|
||||
};
|
||||
|
||||
void registerToUnixTimestamp64Micro(FunctionFactory & factory)
|
||||
{
|
||||
factory.registerFunction<FunctionUnixTimestamp64<TransformToMicro>>();
|
||||
}
|
||||
|
||||
}
|
20
src/Functions/toUnixTimestamp64Milli.cpp
Normal file
20
src/Functions/toUnixTimestamp64Milli.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <Functions/FunctionUnixTimestamp64.h>
|
||||
#include <Functions/FunctionFactory.h>
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
struct TransformToMilli
|
||||
{
|
||||
static constexpr auto name = "toUnixTimestamp64Milli";
|
||||
static constexpr auto target_scale = 3;
|
||||
using SourceDataType = DataTypeDateTime64;
|
||||
using ResultDataType = DataTypeInt64;
|
||||
};
|
||||
|
||||
void registerToUnixTimestamp64Milli(FunctionFactory & factory)
|
||||
{
|
||||
factory.registerFunction<FunctionUnixTimestamp64<TransformToMilli>>();
|
||||
}
|
||||
|
||||
}
|
20
src/Functions/toUnixTimestamp64Nano.cpp
Normal file
20
src/Functions/toUnixTimestamp64Nano.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <Functions/FunctionUnixTimestamp64.h>
|
||||
#include <Functions/FunctionFactory.h>
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
struct TransformToNano
|
||||
{
|
||||
static constexpr auto name = "toUnixTimestamp64Nano";
|
||||
static constexpr auto target_scale = 9;
|
||||
using SourceDataType = DataTypeDateTime64;
|
||||
using ResultDataType = DataTypeInt64;
|
||||
};
|
||||
|
||||
void registerToUnixTimestamp64Nano(FunctionFactory & factory)
|
||||
{
|
||||
factory.registerFunction<FunctionUnixTimestamp64<TransformToNano>>();
|
||||
}
|
||||
|
||||
}
|
@ -151,6 +151,9 @@ SRCS(
|
||||
finalizeAggregation.cpp
|
||||
formatDateTime.cpp
|
||||
formatString.cpp
|
||||
fromUnixTimestamp64Micro.cpp
|
||||
fromUnixTimestamp64Milli.cpp
|
||||
fromUnixTimestamp64Nano.cpp
|
||||
FunctionFactory.cpp
|
||||
FunctionFQDN.cpp
|
||||
FunctionHelpers.cpp
|
||||
@ -168,6 +171,7 @@ SRCS(
|
||||
FunctionsRound.cpp
|
||||
FunctionsStringArray.cpp
|
||||
FunctionsStringSimilarity.cpp
|
||||
FunctionUnixTimestamp64.h
|
||||
GatherUtils/concat.cpp
|
||||
GatherUtils/createArraySink.cpp
|
||||
GatherUtils/createArraySource.cpp
|
||||
@ -305,6 +309,7 @@ SRCS(
|
||||
registerFunctionsStringSearch.cpp
|
||||
registerFunctionsTuple.cpp
|
||||
registerFunctionsVisitParam.cpp
|
||||
registerFunctionsUnixTimestamp64.cpp
|
||||
reinterpretAsFixedString.cpp
|
||||
reinterpretAsString.cpp
|
||||
reinterpretStringAs.cpp
|
||||
@ -386,6 +391,9 @@ SRCS(
|
||||
toTimeZone.cpp
|
||||
toTypeName.cpp
|
||||
toValidUTF8.cpp
|
||||
toUnixTimestamp64Micro.cpp
|
||||
toUnixTimestamp64Milli.cpp
|
||||
toUnixTimestamp64Nano.cpp
|
||||
toYear.cpp
|
||||
toYYYYMM.cpp
|
||||
toYYYYMMDD.cpp
|
||||
|
@ -239,6 +239,10 @@ bool getTables(ASTSelectQuery & select, std::vector<JoinedElement> & joined_tabl
|
||||
size_t num_array_join = 0;
|
||||
size_t num_using = 0;
|
||||
|
||||
// For diagnostic messages.
|
||||
std::vector<IAST *> tables_with_using;
|
||||
tables_with_using.reserve(num_tables);
|
||||
|
||||
for (const auto & child : tables->children)
|
||||
{
|
||||
auto * table_element = child->as<ASTTablesInSelectQueryElement>();
|
||||
@ -257,6 +261,7 @@ bool getTables(ASTSelectQuery & select, std::vector<JoinedElement> & joined_tabl
|
||||
if (t.hasUsing())
|
||||
{
|
||||
++num_using;
|
||||
tables_with_using.push_back(table_element);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -275,7 +280,11 @@ bool getTables(ASTSelectQuery & select, std::vector<JoinedElement> & joined_tabl
|
||||
}
|
||||
|
||||
if (num_using && (num_tables - num_array_join) > 2)
|
||||
throw Exception("Multiple CROSS/COMMA JOIN do not support USING", ErrorCodes::NOT_IMPLEMENTED);
|
||||
{
|
||||
throw Exception("Multiple CROSS/COMMA JOIN do not support USING (while "
|
||||
"processing '" + IAST::formatForErrorMessage(tables_with_using) + "')",
|
||||
ErrorCodes::NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
return !(num_array_join || num_using);
|
||||
}
|
||||
|
@ -61,19 +61,6 @@ void replaceJoinedTable(const ASTSelectQuery & select_query)
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void checkTablesWithColumns(const std::vector<T> & tables_with_columns, const Context & context)
|
||||
{
|
||||
const auto & settings = context.getSettingsRef();
|
||||
if (settings.joined_subquery_requires_alias && tables_with_columns.size() > 1)
|
||||
{
|
||||
for (auto & t : tables_with_columns)
|
||||
if (t.table.table.empty() && t.table.alias.empty())
|
||||
throw Exception("No alias for subquery or table function in JOIN (set joined_subquery_requires_alias=0 to disable restriction).",
|
||||
ErrorCodes::ALIAS_REQUIRED);
|
||||
}
|
||||
}
|
||||
|
||||
class RenameQualifiedIdentifiersMatcher
|
||||
{
|
||||
public:
|
||||
@ -200,7 +187,22 @@ StoragePtr JoinedTables::getLeftTableStorage()
|
||||
bool JoinedTables::resolveTables()
|
||||
{
|
||||
tables_with_columns = getDatabaseAndTablesWithColumns(table_expressions, context);
|
||||
checkTablesWithColumns(tables_with_columns, context);
|
||||
assert(tables_with_columns.size() == table_expressions.size());
|
||||
|
||||
const auto & settings = context.getSettingsRef();
|
||||
if (settings.joined_subquery_requires_alias && tables_with_columns.size() > 1)
|
||||
{
|
||||
for (size_t i = 0; i < tables_with_columns.size(); ++i)
|
||||
{
|
||||
const auto & t = tables_with_columns[i];
|
||||
if (t.table.table.empty() && t.table.alias.empty())
|
||||
{
|
||||
throw Exception("No alias for subquery or table function in JOIN (set joined_subquery_requires_alias=0 to disable restriction). While processing '"
|
||||
+ table_expressions[i]->formatForErrorMessage() + "'",
|
||||
ErrorCodes::ALIAS_REQUIRED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return !tables_with_columns.empty();
|
||||
}
|
||||
|
@ -87,6 +87,12 @@ size_t IAST::checkDepthImpl(size_t max_depth, size_t level) const
|
||||
return res;
|
||||
}
|
||||
|
||||
std::string IAST::formatForErrorMessage() const
|
||||
{
|
||||
std::stringstream ss;
|
||||
format(FormatSettings(ss, true /* one line */));
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
void IAST::cloneChildren()
|
||||
{
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <algorithm>
|
||||
#include <ostream>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
|
||||
|
||||
class SipHash;
|
||||
@ -215,6 +216,11 @@ public:
|
||||
throw Exception("Unknown element in AST: " + getID(), ErrorCodes::UNKNOWN_ELEMENT_IN_AST);
|
||||
}
|
||||
|
||||
// A simple way to add some user-readable context to an error message.
|
||||
std::string formatForErrorMessage() const;
|
||||
template <typename AstArray>
|
||||
static std::string formatForErrorMessage(const AstArray & array);
|
||||
|
||||
void cloneChildren();
|
||||
|
||||
public:
|
||||
@ -231,4 +237,19 @@ private:
|
||||
size_t checkDepthImpl(size_t max_depth, size_t level) const;
|
||||
};
|
||||
|
||||
template <typename AstArray>
|
||||
std::string IAST::formatForErrorMessage(const AstArray & array)
|
||||
{
|
||||
std::stringstream ss;
|
||||
for (size_t i = 0; i < array.size(); ++i)
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
ss << ", ";
|
||||
}
|
||||
array[i]->format(IAST::FormatSettings(ss, true /* one line */));
|
||||
}
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -565,7 +565,7 @@ void PipelineExecutor::executeStepImpl(size_t thread_num, size_t num_threads, st
|
||||
{
|
||||
/// First, find any processor to execute.
|
||||
/// Just travers graph and prepare any processor.
|
||||
while (!finished)
|
||||
while (!finished && state == nullptr)
|
||||
{
|
||||
{
|
||||
std::unique_lock lock(task_queue_mutex);
|
||||
|
@ -53,6 +53,7 @@ const char * auto_config_build[]
|
||||
"USE_SSL", "@USE_SSL@",
|
||||
"USE_HYPERSCAN", "@USE_HYPERSCAN@",
|
||||
"USE_SIMDJSON", "@USE_SIMDJSON@",
|
||||
"USE_GRPC", "@USE_GRPC@",
|
||||
|
||||
nullptr, nullptr
|
||||
};
|
||||
|
@ -23,6 +23,10 @@ def test_authentication_pass():
|
||||
assert instance.query("SELECT currentUser()", user='sasha') == 'sasha\n'
|
||||
assert instance.query("SELECT currentUser()", user='masha', password='qwerty') == 'masha\n'
|
||||
|
||||
# 'no_password' authentication type allows to login with any password.
|
||||
assert instance.query("SELECT currentUser()", user='sasha', password='something') == 'sasha\n'
|
||||
assert instance.query("SELECT currentUser()", user='sasha', password='something2') == 'sasha\n'
|
||||
|
||||
|
||||
def test_authentication_fail():
|
||||
# User doesn't exist.
|
||||
|
@ -8,3 +8,4 @@
|
||||
[0,2,4,6]
|
||||
[0,2,4,6]
|
||||
[0,2,4,6,8]
|
||||
[['a']]
|
||||
|
@ -4,3 +4,8 @@ insert into lc_lambda select range(number) from system.numbers limit 10;
|
||||
select arrayFilter(x -> x % 2 == 0, arr) from lc_lambda;
|
||||
drop table if exists lc_lambda;
|
||||
|
||||
drop table if exists test_array;
|
||||
CREATE TABLE test_array(resources_host Array(LowCardinality(String))) ENGINE = MergeTree() ORDER BY (resources_host);
|
||||
insert into test_array values (['a']);
|
||||
SELECT arrayMap(i -> [resources_host[i]], arrayEnumerate(resources_host)) FROM test_array;
|
||||
drop table if exists test_array;
|
||||
|
@ -0,0 +1,5 @@
|
||||
const column
|
||||
UTC 1234567891011 2009-02-13 23:31:31.011 1970-01-15 06:56:07.891011 1970-01-01 00:20:34.567891011 DateTime64(9, \'UTC\')
|
||||
Asia/Makassar 1234567891011 2009-02-14 07:31:31.011 1970-01-15 14:56:07.891011 1970-01-01 08:20:34.567891011 DateTime64(9, \'Asia/Makassar\')
|
||||
non-const column
|
||||
1234567891011 2009-02-13 23:31:31.011 1970-01-15 06:56:07.891011 1970-01-01 00:20:34.567891011
|
45
tests/queries/0_stateless/01277_fromUnixTimestamp64.sql
Normal file
45
tests/queries/0_stateless/01277_fromUnixTimestamp64.sql
Normal file
@ -0,0 +1,45 @@
|
||||
-- -- Error cases
|
||||
SELECT fromUnixTimestamp64Milli(); -- {serverError 42}
|
||||
SELECT fromUnixTimestamp64Micro(); -- {serverError 42}
|
||||
SELECT fromUnixTimestamp64Nano(); -- {serverError 42}
|
||||
|
||||
SELECT fromUnixTimestamp64Milli('abc'); -- {serverError 43}
|
||||
SELECT fromUnixTimestamp64Micro('abc'); -- {serverError 43}
|
||||
SELECT fromUnixTimestamp64Nano('abc'); -- {serverError 43}
|
||||
|
||||
SELECT fromUnixTimestamp64Milli('abc', 123); -- {serverError 43}
|
||||
SELECT fromUnixTimestamp64Micro('abc', 123); -- {serverError 43}
|
||||
SELECT fromUnixTimestamp64Nano('abc', 123); -- {serverError 43}
|
||||
|
||||
SELECT 'const column';
|
||||
WITH
|
||||
CAST(1234567891011 AS Int64) AS i64,
|
||||
'UTC' AS tz
|
||||
SELECT
|
||||
tz,
|
||||
i64,
|
||||
fromUnixTimestamp64Milli(i64, tz),
|
||||
fromUnixTimestamp64Micro(i64, tz),
|
||||
fromUnixTimestamp64Nano(i64, tz) as dt64,
|
||||
toTypeName(dt64);
|
||||
|
||||
WITH
|
||||
CAST(1234567891011 AS Int64) AS i64,
|
||||
'Asia/Makassar' AS tz
|
||||
SELECT
|
||||
tz,
|
||||
i64,
|
||||
fromUnixTimestamp64Milli(i64, tz),
|
||||
fromUnixTimestamp64Micro(i64, tz),
|
||||
fromUnixTimestamp64Nano(i64, tz) as dt64,
|
||||
toTypeName(dt64);
|
||||
|
||||
SELECT 'non-const column';
|
||||
WITH
|
||||
CAST(1234567891011 AS Int64) AS i64,
|
||||
'UTC' AS tz
|
||||
SELECT
|
||||
i64,
|
||||
fromUnixTimestamp64Milli(i64, tz),
|
||||
fromUnixTimestamp64Micro(i64, tz),
|
||||
fromUnixTimestamp64Nano(i64, tz) as dt64;
|
@ -0,0 +1,8 @@
|
||||
const column
|
||||
2019-09-16 19:20:12.345 1568650812345 1568650812345000 1568650812345000000
|
||||
2019-09-16 19:20:12.345678 1568650812345 1568650812345678 1568650812345678000
|
||||
2019-09-16 19:20:12.345678910 1568650812345 1568650812345678 1568650812345678910
|
||||
non-const column
|
||||
2019-09-16 19:20:12.345 1568650812345 1568650812345000 1568650812345000000
|
||||
2019-09-16 19:20:12.345678 1568650812345 1568650812345678 1568650812345678000
|
||||
2019-09-16 19:20:12.345678910 1568650812345 1568650812345678 1568650812345678910
|
33
tests/queries/0_stateless/01277_toUnixTimestamp64.sql
Normal file
33
tests/queries/0_stateless/01277_toUnixTimestamp64.sql
Normal file
@ -0,0 +1,33 @@
|
||||
-- Error cases
|
||||
SELECT toUnixTimestamp64Milli(); -- {serverError 42}
|
||||
SELECT toUnixTimestamp64Micro(); -- {serverError 42}
|
||||
SELECT toUnixTimestamp64Nano(); -- {serverError 42}
|
||||
|
||||
SELECT toUnixTimestamp64Milli('abc'); -- {serverError 43}
|
||||
SELECT toUnixTimestamp64Micro('abc'); -- {serverError 43}
|
||||
SELECT toUnixTimestamp64Nano('abc'); -- {serverError 43}
|
||||
|
||||
SELECT toUnixTimestamp64Milli('abc', 123); -- {serverError 42}
|
||||
SELECT toUnixTimestamp64Micro('abc', 123); -- {serverError 42}
|
||||
SELECT toUnixTimestamp64Nano('abc', 123); -- {serverError 42}
|
||||
|
||||
SELECT 'const column';
|
||||
WITH toDateTime64('2019-09-16 19:20:12.345678910', 3) AS dt64
|
||||
SELECT dt64, toUnixTimestamp64Milli(dt64), toUnixTimestamp64Micro(dt64), toUnixTimestamp64Nano(dt64);
|
||||
|
||||
WITH toDateTime64('2019-09-16 19:20:12.345678910', 6) AS dt64
|
||||
SELECT dt64, toUnixTimestamp64Milli(dt64), toUnixTimestamp64Micro(dt64), toUnixTimestamp64Nano(dt64);
|
||||
|
||||
WITH toDateTime64('2019-09-16 19:20:12.345678910', 9) AS dt64
|
||||
SELECT dt64, toUnixTimestamp64Milli(dt64), toUnixTimestamp64Micro(dt64), toUnixTimestamp64Nano(dt64);
|
||||
|
||||
SELECT 'non-const column';
|
||||
WITH toDateTime64('2019-09-16 19:20:12.345678910', 3) AS x
|
||||
SELECT materialize(x) as dt64, toUnixTimestamp64Milli(dt64), toUnixTimestamp64Micro(dt64), toUnixTimestamp64Nano(dt64);
|
||||
|
||||
WITH toDateTime64('2019-09-16 19:20:12.345678910', 6) AS x
|
||||
SELECT materialize(x) as dt64, toUnixTimestamp64Milli(dt64), toUnixTimestamp64Micro(dt64), toUnixTimestamp64Nano(dt64);
|
||||
|
||||
WITH toDateTime64('2019-09-16 19:20:12.345678910', 9) AS x
|
||||
SELECT materialize(x) as dt64, toUnixTimestamp64Milli(dt64), toUnixTimestamp64Micro(dt64), toUnixTimestamp64Nano(dt64);
|
||||
|
@ -0,0 +1,9 @@
|
||||
2019-09-16 19:20:12.345 2019-09-16 19:20:12.345 2019-09-16 19:20:12.345000 2019-09-16 19:20:12.345000000
|
||||
2019-09-16 19:20:12.345678 2019-09-16 19:20:12.345 2019-09-16 19:20:12.345678 2019-09-16 19:20:12.345678000
|
||||
2019-09-16 19:20:12.345678910 2019-09-16 19:20:12.345 2019-09-16 19:20:12.345678 2019-09-16 19:20:12.345678910
|
||||
with explicit timezone
|
||||
2019-09-16 19:20:12.345 2019-09-16 19:20:12.345 2019-09-16 19:20:12.345000 2019-09-16 19:20:12.345000000 DateTime64(9, \'UTC\')
|
||||
2019-09-16 19:20:12.345 2019-09-16 19:20:12.345 2019-09-16 19:20:12.345000 2019-09-16 19:20:12.345000000 DateTime64(9, \'Asia/Makassar\')
|
||||
1234567891011 1234567891011 1234567891011 1234567891011
|
||||
with explicit timezone
|
||||
1234567891011 1234567891011 1234567891011 1234567891011 Int64
|
@ -0,0 +1,64 @@
|
||||
WITH
|
||||
toDateTime64('2019-09-16 19:20:12.345678910', 3) AS dt64
|
||||
SELECT
|
||||
dt64,
|
||||
fromUnixTimestamp64Milli(toUnixTimestamp64Milli(dt64)),
|
||||
fromUnixTimestamp64Micro(toUnixTimestamp64Micro(dt64)),
|
||||
fromUnixTimestamp64Nano(toUnixTimestamp64Nano(dt64));
|
||||
|
||||
WITH
|
||||
toDateTime64('2019-09-16 19:20:12.345678910', 6) AS dt64
|
||||
SELECT
|
||||
dt64,
|
||||
fromUnixTimestamp64Milli(toUnixTimestamp64Milli(dt64)),
|
||||
fromUnixTimestamp64Micro(toUnixTimestamp64Micro(dt64)),
|
||||
fromUnixTimestamp64Nano(toUnixTimestamp64Nano(dt64));
|
||||
|
||||
WITH
|
||||
toDateTime64('2019-09-16 19:20:12.345678910', 9) AS dt64
|
||||
SELECT
|
||||
dt64,
|
||||
fromUnixTimestamp64Milli(toUnixTimestamp64Milli(dt64)),
|
||||
fromUnixTimestamp64Micro(toUnixTimestamp64Micro(dt64)),
|
||||
fromUnixTimestamp64Nano(toUnixTimestamp64Nano(dt64));
|
||||
|
||||
SELECT 'with explicit timezone';
|
||||
WITH
|
||||
'UTC' as timezone,
|
||||
toDateTime64('2019-09-16 19:20:12.345678910', 3, timezone) AS dt64
|
||||
SELECT
|
||||
dt64,
|
||||
fromUnixTimestamp64Milli(toUnixTimestamp64Milli(dt64), timezone),
|
||||
fromUnixTimestamp64Micro(toUnixTimestamp64Micro(dt64), timezone),
|
||||
fromUnixTimestamp64Nano(toUnixTimestamp64Nano(dt64), timezone) AS v,
|
||||
toTypeName(v);
|
||||
|
||||
WITH
|
||||
'Asia/Makassar' as timezone,
|
||||
toDateTime64('2019-09-16 19:20:12.345678910', 3, timezone) AS dt64
|
||||
SELECT
|
||||
dt64,
|
||||
fromUnixTimestamp64Milli(toUnixTimestamp64Milli(dt64), timezone),
|
||||
fromUnixTimestamp64Micro(toUnixTimestamp64Micro(dt64), timezone),
|
||||
fromUnixTimestamp64Nano(toUnixTimestamp64Nano(dt64), timezone) AS v,
|
||||
toTypeName(v);
|
||||
|
||||
|
||||
WITH
|
||||
CAST(1234567891011 AS Int64) AS val
|
||||
SELECT
|
||||
val,
|
||||
toUnixTimestamp64Milli(fromUnixTimestamp64Milli(val)),
|
||||
toUnixTimestamp64Micro(fromUnixTimestamp64Micro(val)),
|
||||
toUnixTimestamp64Nano(fromUnixTimestamp64Nano(val));
|
||||
|
||||
SELECT 'with explicit timezone';
|
||||
WITH
|
||||
'UTC' as timezone,
|
||||
CAST(1234567891011 AS Int64) AS val
|
||||
SELECT
|
||||
val,
|
||||
toUnixTimestamp64Milli(fromUnixTimestamp64Milli(val, timezone)),
|
||||
toUnixTimestamp64Micro(fromUnixTimestamp64Micro(val, timezone)),
|
||||
toUnixTimestamp64Nano(fromUnixTimestamp64Nano(val, timezone)) AS v,
|
||||
toTypeName(v);
|
@ -1,8 +1,6 @@
|
||||
# Disable clang-tidy for protobuf generated files
|
||||
set (CMAKE_CXX_CLANG_TIDY "")
|
||||
|
||||
add_compile_options(-Wno-zero-as-null-pointer-constant -Wno-array-bounds) # Protobuf generated files
|
||||
|
||||
if (USE_PROTOBUF)
|
||||
protobuf_generate_cpp(ProtobufDelimitedMessagesSerializer_Srcs ProtobufDelimitedMessagesSerializer_Hdrs ${CMAKE_CURRENT_SOURCE_DIR}/../../tests/queries/0_stateless/00825_protobuf_format.proto)
|
||||
protobuf_generate_cpp(ProtobufDelimitedMessagesSerializer_Srcs2 ProtobufDelimitedMessagesSerializer_Hdrs2 ${CMAKE_CURRENT_SOURCE_DIR}/../../tests/queries/0_stateless/00825_protobuf_format_syntax2.proto)
|
||||
|
Loading…
Reference in New Issue
Block a user