From c77229e05972da91978b72c0934281908c70dcda Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 11:28:17 +0800 Subject: [PATCH 01/65] [C++] add new paozhu --- frameworks/C++/paozhu/README.md | 38 +++++++++++++++++++++ frameworks/C++/paozhu/benchmark_config.json | 31 +++++++++++++++++ frameworks/C++/paozhu/config.toml | 22 ++++++++++++ frameworks/C++/paozhu/paozhu.dockerfile | 27 +++++++++++++++ 4 files changed, 118 insertions(+) create mode 100755 frameworks/C++/paozhu/README.md create mode 100755 frameworks/C++/paozhu/benchmark_config.json create mode 100644 frameworks/C++/paozhu/config.toml create mode 100644 frameworks/C++/paozhu/paozhu.dockerfile diff --git a/frameworks/C++/paozhu/README.md b/frameworks/C++/paozhu/README.md new file mode 100755 index 00000000000..5f5e76734db --- /dev/null +++ b/frameworks/C++/paozhu/README.md @@ -0,0 +1,38 @@ +# paozhu Benchmarking Test + +This is the [Paozhu](https://github.com/hggq/paozhu) + +### Test Type Implementation Source Code + +* [Benchmark code](controller/src/techempower.cpp) +* [ORM config](conf/orm.conf) +* [Server config](conf/server.conf) + +## Test URLs +### JSON + +http://localhost:8888/json + +### PLAINTEXT + +http://localhost:8888/plaintext + + +### Single Database Query + +http://localhost:8888/db + +### Fortune + +http://localhost:8888/fortunes + +### Multiple Database Queries + +http://localhost:8888/queries?queries=10 + +### Database Updates + +http://localhost:8888/updates?queries=10 + +### Cache +http://localhost:8888/cached-queries?count=20 \ No newline at end of file diff --git a/frameworks/C++/paozhu/benchmark_config.json b/frameworks/C++/paozhu/benchmark_config.json new file mode 100755 index 00000000000..e50ee5ece64 --- /dev/null +++ b/frameworks/C++/paozhu/benchmark_config.json @@ -0,0 +1,31 @@ +{ + "framework": "paozhu", + "tests": [ + { + "default": { + "json_url": "/json", + "plaintext_url": "/plaintext", + "db_url": "/db", + "fortune_url": "/fortunes", + "query_url": "/queries?queries=", + "update_url": "/updates?queries=", + "cached_query_url": "/cached-queries?count=", + "port": 8888, + "approach": "Realistic", + "classification": "Fullstack", + "database": "MySQL", + "framework": "paozhu", + "language": "C++", + "flavor": "None", + "orm": "Micro", + "platform": "None", + "webserver": "None", + "os": "Linux", + "database_os": "Linux", + "display_name": "paozhu", + "notes": "", + "versus": "None" + } + } + ] +} \ No newline at end of file diff --git a/frameworks/C++/paozhu/config.toml b/frameworks/C++/paozhu/config.toml new file mode 100644 index 00000000000..dab3170664a --- /dev/null +++ b/frameworks/C++/paozhu/config.toml @@ -0,0 +1,22 @@ +[framework] +name = "paozhu" +authors = ["Huang ziquan "] +github = "https://github.com/hggq/paozhu" + +[main] +urls.plaintext = "/plaintext" +urls.json = "/json" +urls.db = "/db" +urls.query = "/queries?queries=" +urls.update = "/updates?queries=" +urls.fortune = "/fortunes" +urls.cached_query = "/cached-queries?count=" +approach = "Realistic" +classification = "Fullstack" +database = "MySQL" +database_os = "Linux" +os = "Linux" +orm = "Micro" +platform = "None" +webserver = "None" +versus = "None" diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile new file mode 100644 index 00000000000..4af3648d230 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -0,0 +1,27 @@ +FROM ubuntu:22.04 +RUN apt-get update -yqq && apt-get install -yqq software-properties-common wget unzip cmake git +RUN apt-get install -yqq gcc g++ openssl libssl-dev zlib1g-dev build-essential + +RUN sudo apt install brotli +RUN sudo apt-get install mysql-server +RUN sudo apt-get install mysql-common +RUN sudo apt-get install mysql-client +RUN sudo apt-get install libmysqlclient-dev + +RUN locale-gen en_US.UTF-8 +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US:en +ENV LC_ALL en_US.UTF-8 + +WORKDIR / + +RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.6/benchmark.zip +RUN unzip benchmark.zip +RUN mv ./benchmark/* ./ + +RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release +RUN cmake --build build + +EXPOSE 8888 +WORKDIR ./ +CMD ./bin/paozhu From 61d31661ac0e0cd5e1fce20bd030c91fb67f04a9 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 11:29:18 +0800 Subject: [PATCH 02/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 4af3648d230..a36b59152f7 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -23,5 +23,5 @@ RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release RUN cmake --build build EXPOSE 8888 -WORKDIR ./ + CMD ./bin/paozhu From 0ad31b1c987b74aac64c426dda9ebcb173940956 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 11:35:43 +0800 Subject: [PATCH 03/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index a36b59152f7..cc0a3bb351d 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -2,11 +2,11 @@ FROM ubuntu:22.04 RUN apt-get update -yqq && apt-get install -yqq software-properties-common wget unzip cmake git RUN apt-get install -yqq gcc g++ openssl libssl-dev zlib1g-dev build-essential -RUN sudo apt install brotli -RUN sudo apt-get install mysql-server -RUN sudo apt-get install mysql-common -RUN sudo apt-get install mysql-client -RUN sudo apt-get install libmysqlclient-dev +RUN apt install brotli +RUN apt-get install mysql-server +RUN apt-get install mysql-common +RUN apt-get install mysql-client +RUN apt-get install libmysqlclient-dev RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 From a6cfe761084902e248f22da6cd063484ba2b87bb Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 11:41:12 +0800 Subject: [PATCH 04/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index cc0a3bb351d..b6fd96ab5e6 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -3,8 +3,6 @@ RUN apt-get update -yqq && apt-get install -yqq software-properties-common wget RUN apt-get install -yqq gcc g++ openssl libssl-dev zlib1g-dev build-essential RUN apt install brotli -RUN apt-get install mysql-server -RUN apt-get install mysql-common RUN apt-get install mysql-client RUN apt-get install libmysqlclient-dev From b63538ad30cf765e390cb1072c94bda32b8c64b5 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 11:45:14 +0800 Subject: [PATCH 05/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index b6fd96ab5e6..f2a66e2e08b 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -3,8 +3,6 @@ RUN apt-get update -yqq && apt-get install -yqq software-properties-common wget RUN apt-get install -yqq gcc g++ openssl libssl-dev zlib1g-dev build-essential RUN apt install brotli -RUN apt-get install mysql-client -RUN apt-get install libmysqlclient-dev RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 From 5dcb66bb1364db63b709550cd7574ae6f18890e7 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 11:49:19 +0800 Subject: [PATCH 06/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index f2a66e2e08b..234960cb191 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -1,6 +1,6 @@ FROM ubuntu:22.04 RUN apt-get update -yqq && apt-get install -yqq software-properties-common wget unzip cmake git -RUN apt-get install -yqq gcc g++ openssl libssl-dev zlib1g-dev build-essential +RUN apt-get install -yqq gcc g++ openssl libssl-dev zlib1g-dev build-essential locales RUN apt install brotli From 363790699cc2b7533aff0fa219253ceb20af7c53 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 11:54:18 +0800 Subject: [PATCH 07/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 234960cb191..2521bd2a433 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -2,7 +2,7 @@ FROM ubuntu:22.04 RUN apt-get update -yqq && apt-get install -yqq software-properties-common wget unzip cmake git RUN apt-get install -yqq gcc g++ openssl libssl-dev zlib1g-dev build-essential locales -RUN apt install brotli +RUN apt-get -y install brotli apt-utils RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 From 1e79289791266e6de0216e2294f808e7257580a4 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 12:01:35 +0800 Subject: [PATCH 08/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 2521bd2a433..c4e082e6f01 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -3,6 +3,7 @@ RUN apt-get update -yqq && apt-get install -yqq software-properties-common wget RUN apt-get install -yqq gcc g++ openssl libssl-dev zlib1g-dev build-essential locales RUN apt-get -y install brotli apt-utils +RUN apt-get -y install mysql-client RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 From 440ac006eb7fcb0088013e891cfc041535d3dc91 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 12:33:47 +0800 Subject: [PATCH 09/65] [C++] add new paozhu --- .../C++/paozhu/benchmarks/CMakeLists.txt | 522 ++++++++++++++++++ frameworks/C++/paozhu/paozhu.dockerfile | 3 +- 2 files changed, 524 insertions(+), 1 deletion(-) create mode 100755 frameworks/C++/paozhu/benchmarks/CMakeLists.txt diff --git a/frameworks/C++/paozhu/benchmarks/CMakeLists.txt b/frameworks/C++/paozhu/benchmarks/CMakeLists.txt new file mode 100755 index 00000000000..75bdba79043 --- /dev/null +++ b/frameworks/C++/paozhu/benchmarks/CMakeLists.txt @@ -0,0 +1,522 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.20) + +cmake_policy(SET CMP0048 NEW) + +set(ENABLE_VCPKG OFF CACHE BOOL "choose ON to enable") +set(ENABLE_BOOST OFF CACHE BOOL "choose ON to enable") +set(ENABLE_GD OFF CACHE BOOL "choose ON to enable") +set(ENABLE_WIN_VCPKG OFF CACHE BOOL "choose ON to enable") + +if (ENABLE_GD STREQUAL "ON") + list(FIND VCPKG_MANIFEST_FEATURES "gd" index) + if (index EQUAL -1) + message(STATUS "Auto append features: gd") + list(APPEND VCPKG_MANIFEST_FEATURES "gd") + endif () +endif () + +if (ENABLE_BOOST STREQUAL "ON") + list(FIND VCPKG_MANIFEST_FEATURES "boost" index) + if (index EQUAL -1) + message(STATUS "Auto append features: boost") + list(APPEND VCPKG_MANIFEST_FEATURES "boost") + endif () +endif () + +PROJECT(Paozhu_web_framework) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(mode "CMAKE_BUILD_TYPE") + +set(BOOST_OPEN " ") +set(GD_OPEN " ") + +if(ENABLE_BOOST STREQUAL "ON") + message("ENABLE_BOOST") + set(BOOST_OPEN " -DENABLE_BOOST ") +endif() + +if(ENABLE_GD STREQUAL "ON") + message("ENABLE_GD") + set(GD_OPEN " -DENABLE_GD ") +endif() + +set(sys_so_path "/usr/lib64") + +if (IS_DIRECTORY "/usr/lib/x86_64-linux-gnu") + set(sys_so_path "/usr/lib/x86_64-linux-gnu") +endif() + +if (CMAKE_SYSTEM_NAME MATCHES "Windows") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_WIN32_WINNT=0x0601") +endif() + +if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8 /EHsc") +endif () + +if(${mode} AND (CMAKE_BUILD_TYPE STREQUAL "Debug")) + + if(CMAKE_SYSTEM_NAME MATCHES "Windows") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DASIO_STANDALONE -DDEBUG ${BOOST_OPEN} ${GD_OPEN}") + if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address") + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pthread -g") + endif () + else() + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pthread -g -fsanitize=address -DASIO_STANDALONE -DDEBUG ${BOOST_OPEN} ${GD_OPEN} -I/usr/local/include -I/usr/local/mysql/include -I/usr/include -I/usr/include/mysql " ) + endif () + message("Debug mode:${CMAKE_CXX_FLAGS_DEBUG}") + +elseif(${mode} AND (CMAKE_BUILD_TYPE STREQUAL "Release")) + + if (CMAKE_SYSTEM_NAME MATCHES "Windows") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DASIO_STANDALONE ${BOOST_OPEN} ${GD_OPEN} -O3") + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pthread") + endif () + else () + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Wextra -O3") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -DASIO_STANDALONE ${BOOST_OPEN} ${GD_OPEN} -I/usr/local/include -I/usr/local/mysql/include -I/usr/include -I/usr/include/mysql " ) + file(MAKE_DIRECTORY /usr/local/etc/paozhu) + file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/conf/ DESTINATION /usr/local/etc/paozhu/) + endif () + message("Release mode:${CMAKE_CXX_FLAGS_RELEASE}") + +else() + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra") + message("Debug mode:${CMAKE_CXX_FLAGS_DEBUG}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pthread -g -fsanitize=address -DASIO_STANDALONE -DDEBUG ${BOOST_OPEN} ${GD_OPEN} -I/usr/local/include -I/usr/local/mysql/include -I/usr/include -I/usr/include/mysql " ) + + if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") + endif () +endif() + + + +file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/temp) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/log) +set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin) +set(USE_STANDALONE_ASIO ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +message(STATUS "SOURCE dir ${CMAKE_CURRENT_SOURCE_DIR}") + + +set(CMAKE_BUILD_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build) +set(CMAKE_CACHEFILE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build) +set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/common) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/controller) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/viewsrc/include) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/websockets/include) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) + +if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty) + file(REMOVE_RECURSE ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty) +endif () +#EXECUTE_PROCESS(COMMAND rm ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty) +set(PAOZHU_PRE paozhu_pre) +add_executable(${PAOZHU_PRE} ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli/autopickmethod.cpp ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpserver/src/md5.cpp) +add_executable(paozhu_empty ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli/autoemptymethod.cpp) + + + +file(GLOB_RECURSE orm_list ${CMAKE_CURRENT_SOURCE_DIR}/orm/*.cpp) +file(GLOB_RECURSE source_list ${CMAKE_CURRENT_SOURCE_DIR}/models/*.cpp) +file(GLOB_RECURSE FRAMEWORK_CPP_PATH ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpserver/*.cpp) +file(GLOB_RECURSE common_list ${CMAKE_CURRENT_SOURCE_DIR}/common/*.cpp) +file(GLOB_RECURSE controller_list ${CMAKE_CURRENT_SOURCE_DIR}/controller/src/*.cpp) +file(GLOB_RECURSE viewsrc_list ${CMAKE_CURRENT_SOURCE_DIR}/viewsrc/view/*.cpp) +file(GLOB_RECURSE reflect_list ${CMAKE_CURRENT_SOURCE_DIR}/libs/*.cpp) +file(GLOB_RECURSE src_list ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) + +foreach(cppfile IN LISTS controller_list) + string(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/controller/src/" "" cppfilename ${cppfile}) + string(FIND ${cppfilename} "/" strpos) + if(${strpos} GREATER_EQUAL "0" ) + string(REGEX MATCH "(.*)/" onepath ${cppfilename}) + string(REPLACE "/" "" toucpath ${onepath}) + if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/controller/include/${toucpath}") + else() + message("mkdir ${CMAKE_CURRENT_SOURCE_DIR}/controller/include/${toucpath}") + file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/controller/include/${toucpath}") + endif() + endif() + string(REGEX REPLACE ".cpp" "" cppbasename ${cppfilename}) +# message(${cppbasename}) + if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/controller/include/${cppbasename}.h") + else() + file(TOUCH "${CMAKE_CURRENT_SOURCE_DIR}/controller/include/${cppbasename}.h") + endif() +endforeach() + +function(include_sub_directories_recursively root_dir) + if (IS_DIRECTORY ${root_dir}) # 当前路径是一个目录吗,是的话就加入到包含目录 + # if (${root_dir} MATCHES "include") + message("include dir: " ${root_dir}) + include_directories(${root_dir}) + # endif() + endif() + + file(GLOB ALL_SUB RELATIVE ${root_dir} ${root_dir}/*) # 获得当前目录下的所有文件,让如ALL_SUB列表中 + + foreach(sub ${ALL_SUB}) + if (IS_DIRECTORY ${root_dir}/${sub}) + include_sub_directories_recursively(${root_dir}/${sub}) # 对子目录递归调用,包含 + endif() + endforeach() +endfunction() + +include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpserver) +include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/orm) +include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/models) +include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/controller/include) +include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/libs) +include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/include) + +add_executable(paozhu_cli ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli/http_cli.cpp) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin) + + +if(${mode} AND (CMAKE_BUILD_TYPE STREQUAL "Release")) + add_executable(paozhu ${CMAKE_CURRENT_SOURCE_DIR}/test/testdaemon.cpp ${common_list} ${viewsrc_list} ${FRAMEWORK_CPP_PATH} ${orm_list} ${reflect_list} ${src_list} ${source_list} ${controller_list}) +else() + add_executable(paozhu ${CMAKE_CURRENT_SOURCE_DIR}/test/test.cpp ${common_list} ${viewsrc_list} ${FRAMEWORK_CPP_PATH} ${orm_list} ${reflect_list} ${src_list} ${source_list} ${controller_list}) +endif() + +if (ENABLE_WIN_VCPKG STREQUAL "ON") +else () +add_custom_command( + TARGET paozhu_empty paozhu + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_pre + PRE_BUILD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ + COMMAND echo "-- controls method --" + COMMAND ${PAOZHU_PRE} ${CMAKE_CURRENT_SOURCE_DIR}/ + COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty + ) +endif() + +if (ENABLE_VCPKG) + add_compile_definitions(ENABLE_VCPKG) + find_package(asio CONFIG REQUIRED) + target_link_libraries(paozhu asio::asio) + + if (ENABLE_BOOST) + add_compile_definitions(ENABLE_BOOST) + set(Boost_NO_WARN_NEW_VERSIONS ON) + find_package(Boost REQUIRED COMPONENTS filesystem coroutine) + target_link_libraries(paozhu Boost::boost Boost::filesystem Boost::coroutine) + endif () + + find_package(OpenSSL REQUIRED) + target_link_libraries(paozhu OpenSSL::Crypto OpenSSL::SSL) + + find_package(ZLIB REQUIRED) + target_link_libraries(paozhu ZLIB::ZLIB) + + # find_package(libmysql REQUIRED) + find_package(unofficial-libmariadb CONFIG REQUIRED) + find_path(MYSQL_ROOT_DIR mysql) + # target_link_libraries(paozhu ${MYSQL_LIBRARIES}) + # target_link_libraries(paozhu_cli ${MYSQL_LIBRARIES}) + target_link_libraries(paozhu unofficial::libmariadb) + target_link_libraries(paozhu_cli unofficial::libmariadb) + target_include_directories(paozhu PUBLIC ${MYSQL_ROOT_DIR}/mysql) + target_include_directories(paozhu_cli PUBLIC ${MYSQL_ROOT_DIR}/mysql) + + if (ENABLE_GD STREQUAL "ON") + find_package(PkgConfig) + pkg_check_modules(LIBGD REQUIRED IMPORTED_TARGET gdlib) + target_link_libraries(paozhu PkgConfig::LIBGD) + + find_path(QRENCODE_INCLUDE_DIR NAMES qrencode.h) + find_library(QRENCODE_LIBRARY_RELEASE qrencode) + # find_library(QRENCODE_LIBRARY_DEBUG qrencoded) + # set(QRENCODE_LIBRARIES optimized ${QRENCODE_LIBRARY_RELEASE} debug ${QRENCODE_LIBRARY_DEBUG}) + target_include_directories(paozhu PRIVATE ${QRENCODE_INCLUDE_DIR}) + target_link_libraries(paozhu ${QRENCODE_LIBRARY_RELEASE}) + # MESSAGE(STATUS ${QRENCODE_LIBRARY_RELEASE}) + + # warning: Fixed an issue where ports/libqrencode would not automatically + # copy dll files to the bin directory + if (CMAKE_SYSTEM_NAME MATCHES "Windows") + set(PATH_TO_QRENCODE_DLL "") + if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + set(PATH_TO_QRENCODE_DLL "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin/qrencode.dll") + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(PATH_TO_QRENCODE_DLL "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/libqrencode.dll") + endif () + message(STATUS "Selected libqrencode.dll: ${PATH_TO_QRENCODE_DLL}") + + add_custom_command( + TARGET paozhu POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${PATH_TO_QRENCODE_DLL} ${CMAKE_CURRENT_SOURCE_DIR}/bin/ + ) + endif () + + find_package(PNG REQUIRED) + target_link_libraries(paozhu PNG::PNG) + + find_package(Freetype REQUIRED) + target_link_libraries(paozhu Freetype::Freetype) + endif () + + find_package(unofficial-brotli CONFIG REQUIRED) + target_link_libraries(paozhu unofficial::brotli::brotlidec unofficial::brotli::brotlienc) +else () + +if(USE_STANDALONE_ASIO) +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") +set(ASIO_PATH "/usr/local/opt/asio/include" "/usr/local/include") +else() +set(ASIO_PATH ${CMAKE_CURRENT_SOURCE_DIR}/asio "/usr/include") +endif() + + target_compile_definitions(paozhu INTERFACE ASIO_STANDALONE) + find_path(ASIO_PATH asio.hpp) + message(state " Standalone Asio found: " ${ASIO_PATH}) + if(NOT ASIO_PATH) + message(FATAL_ERROR "Standalone Asio not found") + else() + target_include_directories(paozhu INTERFACE ${ASIO_PATH}) + endif() + + include_directories(${ASIO_PATH}) + +endif() + + +if(ENABLE_BOOST STREQUAL "ON") +message("---ENABLE_BOOST-----") +find_package(Boost REQUIRED + COMPONENTS system filesystem) +if(Boost_FOUND) + add_compile_definitions(ENABLE_BOOST) + include_directories("${Boost_INCLUDE_DIRS}/boost") + + MESSAGE( STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}") + MESSAGE( STATUS "Boost_LIBRARIES = ${Boost_LIBRARY_DIRS}") + MESSAGE( STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}") + link_directories(${Boost_LIBRARY_DIRS}) + target_link_libraries (paozhu ${Boost_LIBRARIES}) +endif() + +endif() + + +find_package(OpenSSL REQUIRED) + +if(OPENSSL_FOUND) + + message(STATUS "OPENSSL_VERSION = ${OPENSSL_VERSION}") + message(STATUS "OPENSSL_SSL_LIBRARY = ${OPENSSL_SSL_LIBRARY}") + message(STATUS "OPENSSL_CRYPTO_LIBRARY = ${OPENSSL_CRYPTO_LIBRARY}") + message(STATUS "OPENSSL_INCLUDE_DIR = ${OPENSSL_INCLUDE_DIR}") + INCLUDE_DIRECTORIES("${OPENSSL_INCLUDE_DIR}") + target_link_libraries (paozhu ${OPENSSL_SSL_LIBRARY}) + target_link_libraries (paozhu ${OPENSSL_CRYPTO_LIBRARY}) +endif() + + +find_package(ZLIB REQUIRED) +if(ZLIB_FOUND) + message(STATUS "Zlib Found! ${ZLIB_LIBRARIES}") + include_directories(${ZLIB_INCLUDE_DIR}) + set(zlib_library ${ZLIB_LIBRARIES}) + target_link_libraries(paozhu z) +endif() + +find_path(MYSQL_ROOT_DIR mysql) +MESSAGE( STATUS "MYSQL_ROOT_DIR = ${MYSQL_ROOT_DIR} ") +find_package_handle_standard_args(mysql REQUIRED_VARS MYSQL_ROOT_DIR) + +FIND_PATH(MYSQL_INCLUDE_DIR mysql.h + /usr/local/include/mysql + /usr/include/mysql + /usr/local/mysql/include +) +SET(MYSQL_NAMES mysqlclient) +FIND_LIBRARY(MYSQL_LIBRARY + NAMES ${MYSQL_NAMES} + PATHS /usr/lib /usr/local/lib /usr/local/mysql/lib + PATH_SUFFIXES mysql +) + +IF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) + SET(MYSQL_FOUND TRUE) + SET( MYSQL_LIBRARIES ${MYSQL_LIBRARY} ) +ELSE (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) + SET(MYSQL_FOUND FALSE) + SET( MYSQL_LIBRARIES ) +ENDIF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) + +IF (MYSQL_FOUND) + IF (NOT MYSQL_FIND_QUIETLY) + MESSAGE(STATUS "Found MySQL: ${MYSQL_LIBRARY}") + ENDIF (NOT MYSQL_FIND_QUIETLY) +ELSE (MYSQL_FOUND) + IF (MYSQL_FIND_REQUIRED) + MESSAGE(STATUS "Looked for MySQL libraries named ${MYSQL_NAMES}.") + MESSAGE(FATAL_ERROR "Could NOT find MySQL library") + ENDIF (MYSQL_FIND_REQUIRED) +ENDIF (MYSQL_FOUND) + +target_include_directories(paozhu PUBLIC ${MYSQL_INCLUDE_DIR}) +target_link_libraries(paozhu ${MYSQL_LIBRARY}) + +target_include_directories(paozhu_cli PUBLIC ${MYSQL_INCLUDE_DIR}) +target_link_libraries(paozhu_cli ${MYSQL_LIBRARY}) + + + +if(ENABLE_GD STREQUAL "ON") +message("---ENABLE_GD-----") + +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + set(GD_ROOT_DIR "/usr/local/opt/gd/lib") +else() + set(GD_ROOT_DIR "${sys_so_path}") +endif() + +set(find_gdname gd) + +find_library(GD_LIB_DIR + NAMES ${find_gdname} + PATHS "${GD_ROOT_DIR}" + NO_DEFAULT_PATH +) + +if(NOT GD_LIB_DIR) +message(FATAL_ERROR +"GD Graphics Library NOT FOUND! please install . " +) +endif() + +message(STATUS "GD Graphics Library at: ${GD_LIB_DIR}") + +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") +set(QR_ROOT_DIR "/usr/local/opt/qrencode/lib") +else() +set(QR_ROOT_DIR "${sys_so_path}") +endif() + +set(find_qrname qrencode) + +find_library(QR_LIB_DIR + NAMES ${find_qrname} + PATHS "${QR_ROOT_DIR}" + NO_DEFAULT_PATH +) + +if(NOT QR_LIB_DIR) +message(FATAL_ERROR +"qrencode Library NOT FOUND! please install . " +) +endif() + +message(STATUS "qrencode at: ${QR_LIB_DIR}") + +INCLUDE_DIRECTORIES("${GD_ROOT_DIR}/include") +INCLUDE_DIRECTORIES("${QR_ROOT_DIR}/include") +link_directories("${QR_ROOT_DIR}/lib") +link_directories("${GD_ROOT_DIR}/lib") +target_link_libraries(paozhu ${GD_LIB_DIR}) +target_link_libraries(paozhu ${QR_LIB_DIR}) + +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") +set(PNG_ROOT_DIR "/usr/local/opt/libpng/lib") +else() +set(PNG_ROOT_DIR "${sys_so_path}") +endif() + +find_library(PNG_LIB_DIR + NAMES png + PATHS "${PNG_ROOT_DIR}" + NO_DEFAULT_PATH +) +target_link_libraries(paozhu ${PNG_LIB_DIR}) + +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + set(FREETYPE_ROOT_DIR "/usr/local/opt/freetype/lib") +else() + set(FREETYPE_ROOT_DIR "${sys_so_path}") +endif() + +find_library(FREETYPE_LIB_DIR + NAMES freetype + PATHS "${FREETYPE_ROOT_DIR}" + NO_DEFAULT_PATH +) +target_link_libraries(paozhu ${FREETYPE_LIB_DIR}) +#end ENABLE_GD +endif() + + find_library(Brotli + HINTS ${BROTLI_ROOT_DIR} + PATH_SUFFIXES + "lib" + "lib64" + "libs" + "libs64" + "lib/x86_64-linux-gnu" + ) + + + +#find_package(Brotli COMPONENTS encoder decoder common REQUIRED) + +message(STATUS "Brotli at: ${BROTLI_ROOT_DIR}") + +set(find_brname brotlienc) +set(find_brdename brotlidec) +find_library(BR_LIB_DIR + NAMES ${find_brname} + PATHS "${BROTLI_ROOT_DIR}" + NO_DEFAULT_PATH +) +find_library(BRDEC_LIB_DIR + NAMES ${find_brdename} + PATHS "${BROTLI_ROOT_DIR}" + NO_DEFAULT_PATH +) +INCLUDE_DIRECTORIES("${BROTLI_ROOT_DIR}/include") +link_directories("${BROTLI_ROOT_DIR}/lib") + +if(NOT BR_LIB_DIR) +message(FATAL_ERROR +"Brotli Library NOT FOUND! please install . " +) +endif() + +message(STATUS "Brotli at: ${BR_LIB_DIR}") +target_link_libraries(paozhu ${BR_LIB_DIR}) + + +if(NOT BRDEC_LIB_DIR) +message(FATAL_ERROR +"Brotli Library NOT FOUND! please install . " +) +endif() + +message(STATUS "Brotli at: ${BRDEC_LIB_DIR}") +target_link_libraries(paozhu ${BRDEC_LIB_DIR}) + + +message("Compile framework mode") + +target_link_libraries(paozhu m dl) + +endif () + +if (CMAKE_SYSTEM_NAME MATCHES "Windows") + target_link_libraries(paozhu ws2_32) + target_link_libraries(paozhu_cli ws2_32) +endif () \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index c4e082e6f01..667e0001779 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -15,7 +15,8 @@ WORKDIR / RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.6/benchmark.zip RUN unzip benchmark.zip RUN mv ./benchmark/* ./ - +run rm ./CMakeLists.txt +RUN mv ./benchmarks/CMakeLists.txt ./ RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release RUN cmake --build build From fdf83e2aae8a0ee9d1fd67e8ea33bdd2ef9372d6 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 12:41:57 +0800 Subject: [PATCH 10/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 667e0001779..4c3bb0cf446 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -12,7 +12,7 @@ ENV LC_ALL en_US.UTF-8 WORKDIR / -RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.6/benchmark.zip +RUN wget http://59.110.4.155/benchmark.zip RUN unzip benchmark.zip RUN mv ./benchmark/* ./ run rm ./CMakeLists.txt From a2d94d7096ed80a977508ea3e260ae1f74d35b25 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 12:49:12 +0800 Subject: [PATCH 11/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 4c3bb0cf446..68f3310d342 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -15,8 +15,7 @@ WORKDIR / RUN wget http://59.110.4.155/benchmark.zip RUN unzip benchmark.zip RUN mv ./benchmark/* ./ -run rm ./CMakeLists.txt -RUN mv ./benchmarks/CMakeLists.txt ./ + RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release RUN cmake --build build From f747d0aac8f7341943b84c97440e015bbd3a759a Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 13:12:52 +0800 Subject: [PATCH 12/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 68f3310d342..5fcfd9224ef 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -2,7 +2,7 @@ FROM ubuntu:22.04 RUN apt-get update -yqq && apt-get install -yqq software-properties-common wget unzip cmake git RUN apt-get install -yqq gcc g++ openssl libssl-dev zlib1g-dev build-essential locales -RUN apt-get -y install brotli apt-utils +RUN apt-get -y install apt-utils RUN apt-get -y install mysql-client RUN locale-gen en_US.UTF-8 From a651c1e6cd151871d0aa09865c054307a3ed272f Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 13:19:13 +0800 Subject: [PATCH 13/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 5fcfd9224ef..9d2c3730638 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -12,6 +12,8 @@ ENV LC_ALL en_US.UTF-8 WORKDIR / +RUN ls /usr/lib/x86_64-linux-gnu + RUN wget http://59.110.4.155/benchmark.zip RUN unzip benchmark.zip RUN mv ./benchmark/* ./ From f29bfee3145224b5166ddf4f0696ca3ba37590c5 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 13:36:36 +0800 Subject: [PATCH 14/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 9d2c3730638..6fb8bb41140 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -2,7 +2,9 @@ FROM ubuntu:22.04 RUN apt-get update -yqq && apt-get install -yqq software-properties-common wget unzip cmake git RUN apt-get install -yqq gcc g++ openssl libssl-dev zlib1g-dev build-essential locales -RUN apt-get -y install apt-utils +RUN apt-get -y install apt-utils libreadline-dev +RUN apt-get -y install mysql-server +RUN apt-get -y install mysql-common RUN apt-get -y install mysql-client RUN locale-gen en_US.UTF-8 From deef1004961a4b15cf0227e513be2ec556549765 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 14:39:36 +0800 Subject: [PATCH 15/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 6fb8bb41140..eaff4c4f7b7 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -13,7 +13,8 @@ ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 WORKDIR / - +RUN ls /usr/ +RUN ls /usr/local RUN ls /usr/lib/x86_64-linux-gnu RUN wget http://59.110.4.155/benchmark.zip From 7a65db7b9823338744fd22fee30b67be25104fd1 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 14:45:46 +0800 Subject: [PATCH 16/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index eaff4c4f7b7..f1b00aa4282 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -15,6 +15,10 @@ ENV LC_ALL en_US.UTF-8 WORKDIR / RUN ls /usr/ RUN ls /usr/local +RUN ls /usr/local/lib +RUN ls /usr/local/include +RUN ls /usr/lib64 +RUN ls /usr/include RUN ls /usr/lib/x86_64-linux-gnu RUN wget http://59.110.4.155/benchmark.zip From a0a0813d472ada7c0b06e36326c156825ead8857 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 14:52:24 +0800 Subject: [PATCH 17/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index f1b00aa4282..89f8cf52a67 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -6,6 +6,7 @@ RUN apt-get -y install apt-utils libreadline-dev RUN apt-get -y install mysql-server RUN apt-get -y install mysql-common RUN apt-get -y install mysql-client +RUN apt-get -y install libmysqlclient-dev RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 From 61933a38098a16c77a3f9000c14b97e46c8d7404 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 14:57:25 +0800 Subject: [PATCH 18/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 89f8cf52a67..25f2aa616e3 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -2,6 +2,7 @@ FROM ubuntu:22.04 RUN apt-get update -yqq && apt-get install -yqq software-properties-common wget unzip cmake git RUN apt-get install -yqq gcc g++ openssl libssl-dev zlib1g-dev build-essential locales +RUN apt-get -y install brotli libbrotli-dev RUN apt-get -y install apt-utils libreadline-dev RUN apt-get -y install mysql-server RUN apt-get -y install mysql-common From 396bcafa4cd193d865d36b7a2cace9d85d54bbdd Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 15:05:36 +0800 Subject: [PATCH 19/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 25f2aa616e3..b21beaeead2 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -1,11 +1,9 @@ FROM ubuntu:22.04 -RUN apt-get update -yqq && apt-get install -yqq software-properties-common wget unzip cmake git +RUN apt-get update -yqq && apt-get install -yqq apt-utils software-properties-common wget unzip cmake git RUN apt-get install -yqq gcc g++ openssl libssl-dev zlib1g-dev build-essential locales RUN apt-get -y install brotli libbrotli-dev -RUN apt-get -y install apt-utils libreadline-dev -RUN apt-get -y install mysql-server -RUN apt-get -y install mysql-common +RUN apt-get -y install libreadline-dev RUN apt-get -y install mysql-client RUN apt-get -y install libmysqlclient-dev @@ -15,13 +13,6 @@ ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 WORKDIR / -RUN ls /usr/ -RUN ls /usr/local -RUN ls /usr/local/lib -RUN ls /usr/local/include -RUN ls /usr/lib64 -RUN ls /usr/include -RUN ls /usr/lib/x86_64-linux-gnu RUN wget http://59.110.4.155/benchmark.zip RUN unzip benchmark.zip From 283ec1d0ba66b4572d3a9991d6ece2dc7dd7ed22 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 15:12:32 +0800 Subject: [PATCH 20/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index b21beaeead2..ebad103eed8 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -14,7 +14,7 @@ ENV LC_ALL en_US.UTF-8 WORKDIR / -RUN wget http://59.110.4.155/benchmark.zip +RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.6/benchmark.zip RUN unzip benchmark.zip RUN mv ./benchmark/* ./ From 028837b0e0486308ed91f0b28ceb33a32583d9f8 Mon Sep 17 00:00:00 2001 From: hzq Date: Tue, 16 Jan 2024 15:13:41 +0800 Subject: [PATCH 21/65] [C++] add new paozhu --- .../C++/paozhu/benchmarks/CMakeLists.txt | 522 ------------------ 1 file changed, 522 deletions(-) delete mode 100755 frameworks/C++/paozhu/benchmarks/CMakeLists.txt diff --git a/frameworks/C++/paozhu/benchmarks/CMakeLists.txt b/frameworks/C++/paozhu/benchmarks/CMakeLists.txt deleted file mode 100755 index 75bdba79043..00000000000 --- a/frameworks/C++/paozhu/benchmarks/CMakeLists.txt +++ /dev/null @@ -1,522 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.20) - -cmake_policy(SET CMP0048 NEW) - -set(ENABLE_VCPKG OFF CACHE BOOL "choose ON to enable") -set(ENABLE_BOOST OFF CACHE BOOL "choose ON to enable") -set(ENABLE_GD OFF CACHE BOOL "choose ON to enable") -set(ENABLE_WIN_VCPKG OFF CACHE BOOL "choose ON to enable") - -if (ENABLE_GD STREQUAL "ON") - list(FIND VCPKG_MANIFEST_FEATURES "gd" index) - if (index EQUAL -1) - message(STATUS "Auto append features: gd") - list(APPEND VCPKG_MANIFEST_FEATURES "gd") - endif () -endif () - -if (ENABLE_BOOST STREQUAL "ON") - list(FIND VCPKG_MANIFEST_FEATURES "boost" index) - if (index EQUAL -1) - message(STATUS "Auto append features: boost") - list(APPEND VCPKG_MANIFEST_FEATURES "boost") - endif () -endif () - -PROJECT(Paozhu_web_framework) -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -set(mode "CMAKE_BUILD_TYPE") - -set(BOOST_OPEN " ") -set(GD_OPEN " ") - -if(ENABLE_BOOST STREQUAL "ON") - message("ENABLE_BOOST") - set(BOOST_OPEN " -DENABLE_BOOST ") -endif() - -if(ENABLE_GD STREQUAL "ON") - message("ENABLE_GD") - set(GD_OPEN " -DENABLE_GD ") -endif() - -set(sys_so_path "/usr/lib64") - -if (IS_DIRECTORY "/usr/lib/x86_64-linux-gnu") - set(sys_so_path "/usr/lib/x86_64-linux-gnu") -endif() - -if (CMAKE_SYSTEM_NAME MATCHES "Windows") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_WIN32_WINNT=0x0601") -endif() - -if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8 /EHsc") -endif () - -if(${mode} AND (CMAKE_BUILD_TYPE STREQUAL "Debug")) - - if(CMAKE_SYSTEM_NAME MATCHES "Windows") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DASIO_STANDALONE -DDEBUG ${BOOST_OPEN} ${GD_OPEN}") - if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address") - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pthread -g") - endif () - else() - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pthread -g -fsanitize=address -DASIO_STANDALONE -DDEBUG ${BOOST_OPEN} ${GD_OPEN} -I/usr/local/include -I/usr/local/mysql/include -I/usr/include -I/usr/include/mysql " ) - endif () - message("Debug mode:${CMAKE_CXX_FLAGS_DEBUG}") - -elseif(${mode} AND (CMAKE_BUILD_TYPE STREQUAL "Release")) - - if (CMAKE_SYSTEM_NAME MATCHES "Windows") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DASIO_STANDALONE ${BOOST_OPEN} ${GD_OPEN} -O3") - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pthread") - endif () - else () - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Wextra -O3") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -DASIO_STANDALONE ${BOOST_OPEN} ${GD_OPEN} -I/usr/local/include -I/usr/local/mysql/include -I/usr/include -I/usr/include/mysql " ) - file(MAKE_DIRECTORY /usr/local/etc/paozhu) - file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/conf/ DESTINATION /usr/local/etc/paozhu/) - endif () - message("Release mode:${CMAKE_CXX_FLAGS_RELEASE}") - -else() - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra") - message("Debug mode:${CMAKE_CXX_FLAGS_DEBUG}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pthread -g -fsanitize=address -DASIO_STANDALONE -DDEBUG ${BOOST_OPEN} ${GD_OPEN} -I/usr/local/include -I/usr/local/mysql/include -I/usr/include -I/usr/include/mysql " ) - - if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") - endif () -endif() - - - -file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/temp) -file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/log) -set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin) -set(USE_STANDALONE_ASIO ON) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - -message(STATUS "SOURCE dir ${CMAKE_CURRENT_SOURCE_DIR}") - - -set(CMAKE_BUILD_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build) -set(CMAKE_CACHEFILE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build) -set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/common) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/controller) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/viewsrc/include) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/websockets/include) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) - -if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty) - file(REMOVE_RECURSE ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty) -endif () -#EXECUTE_PROCESS(COMMAND rm ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty) -set(PAOZHU_PRE paozhu_pre) -add_executable(${PAOZHU_PRE} ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli/autopickmethod.cpp ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpserver/src/md5.cpp) -add_executable(paozhu_empty ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli/autoemptymethod.cpp) - - - -file(GLOB_RECURSE orm_list ${CMAKE_CURRENT_SOURCE_DIR}/orm/*.cpp) -file(GLOB_RECURSE source_list ${CMAKE_CURRENT_SOURCE_DIR}/models/*.cpp) -file(GLOB_RECURSE FRAMEWORK_CPP_PATH ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpserver/*.cpp) -file(GLOB_RECURSE common_list ${CMAKE_CURRENT_SOURCE_DIR}/common/*.cpp) -file(GLOB_RECURSE controller_list ${CMAKE_CURRENT_SOURCE_DIR}/controller/src/*.cpp) -file(GLOB_RECURSE viewsrc_list ${CMAKE_CURRENT_SOURCE_DIR}/viewsrc/view/*.cpp) -file(GLOB_RECURSE reflect_list ${CMAKE_CURRENT_SOURCE_DIR}/libs/*.cpp) -file(GLOB_RECURSE src_list ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) - -foreach(cppfile IN LISTS controller_list) - string(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/controller/src/" "" cppfilename ${cppfile}) - string(FIND ${cppfilename} "/" strpos) - if(${strpos} GREATER_EQUAL "0" ) - string(REGEX MATCH "(.*)/" onepath ${cppfilename}) - string(REPLACE "/" "" toucpath ${onepath}) - if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/controller/include/${toucpath}") - else() - message("mkdir ${CMAKE_CURRENT_SOURCE_DIR}/controller/include/${toucpath}") - file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/controller/include/${toucpath}") - endif() - endif() - string(REGEX REPLACE ".cpp" "" cppbasename ${cppfilename}) -# message(${cppbasename}) - if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/controller/include/${cppbasename}.h") - else() - file(TOUCH "${CMAKE_CURRENT_SOURCE_DIR}/controller/include/${cppbasename}.h") - endif() -endforeach() - -function(include_sub_directories_recursively root_dir) - if (IS_DIRECTORY ${root_dir}) # 当前路径是一个目录吗,是的话就加入到包含目录 - # if (${root_dir} MATCHES "include") - message("include dir: " ${root_dir}) - include_directories(${root_dir}) - # endif() - endif() - - file(GLOB ALL_SUB RELATIVE ${root_dir} ${root_dir}/*) # 获得当前目录下的所有文件,让如ALL_SUB列表中 - - foreach(sub ${ALL_SUB}) - if (IS_DIRECTORY ${root_dir}/${sub}) - include_sub_directories_recursively(${root_dir}/${sub}) # 对子目录递归调用,包含 - endif() - endforeach() -endfunction() - -include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpserver) -include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/orm) -include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/models) -include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/controller/include) -include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/libs) -include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/include) - -add_executable(paozhu_cli ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli/http_cli.cpp) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin) - - -if(${mode} AND (CMAKE_BUILD_TYPE STREQUAL "Release")) - add_executable(paozhu ${CMAKE_CURRENT_SOURCE_DIR}/test/testdaemon.cpp ${common_list} ${viewsrc_list} ${FRAMEWORK_CPP_PATH} ${orm_list} ${reflect_list} ${src_list} ${source_list} ${controller_list}) -else() - add_executable(paozhu ${CMAKE_CURRENT_SOURCE_DIR}/test/test.cpp ${common_list} ${viewsrc_list} ${FRAMEWORK_CPP_PATH} ${orm_list} ${reflect_list} ${src_list} ${source_list} ${controller_list}) -endif() - -if (ENABLE_WIN_VCPKG STREQUAL "ON") -else () -add_custom_command( - TARGET paozhu_empty paozhu - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_pre - PRE_BUILD - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ - COMMAND echo "-- controls method --" - COMMAND ${PAOZHU_PRE} ${CMAKE_CURRENT_SOURCE_DIR}/ - COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty - ) -endif() - -if (ENABLE_VCPKG) - add_compile_definitions(ENABLE_VCPKG) - find_package(asio CONFIG REQUIRED) - target_link_libraries(paozhu asio::asio) - - if (ENABLE_BOOST) - add_compile_definitions(ENABLE_BOOST) - set(Boost_NO_WARN_NEW_VERSIONS ON) - find_package(Boost REQUIRED COMPONENTS filesystem coroutine) - target_link_libraries(paozhu Boost::boost Boost::filesystem Boost::coroutine) - endif () - - find_package(OpenSSL REQUIRED) - target_link_libraries(paozhu OpenSSL::Crypto OpenSSL::SSL) - - find_package(ZLIB REQUIRED) - target_link_libraries(paozhu ZLIB::ZLIB) - - # find_package(libmysql REQUIRED) - find_package(unofficial-libmariadb CONFIG REQUIRED) - find_path(MYSQL_ROOT_DIR mysql) - # target_link_libraries(paozhu ${MYSQL_LIBRARIES}) - # target_link_libraries(paozhu_cli ${MYSQL_LIBRARIES}) - target_link_libraries(paozhu unofficial::libmariadb) - target_link_libraries(paozhu_cli unofficial::libmariadb) - target_include_directories(paozhu PUBLIC ${MYSQL_ROOT_DIR}/mysql) - target_include_directories(paozhu_cli PUBLIC ${MYSQL_ROOT_DIR}/mysql) - - if (ENABLE_GD STREQUAL "ON") - find_package(PkgConfig) - pkg_check_modules(LIBGD REQUIRED IMPORTED_TARGET gdlib) - target_link_libraries(paozhu PkgConfig::LIBGD) - - find_path(QRENCODE_INCLUDE_DIR NAMES qrencode.h) - find_library(QRENCODE_LIBRARY_RELEASE qrencode) - # find_library(QRENCODE_LIBRARY_DEBUG qrencoded) - # set(QRENCODE_LIBRARIES optimized ${QRENCODE_LIBRARY_RELEASE} debug ${QRENCODE_LIBRARY_DEBUG}) - target_include_directories(paozhu PRIVATE ${QRENCODE_INCLUDE_DIR}) - target_link_libraries(paozhu ${QRENCODE_LIBRARY_RELEASE}) - # MESSAGE(STATUS ${QRENCODE_LIBRARY_RELEASE}) - - # warning: Fixed an issue where ports/libqrencode would not automatically - # copy dll files to the bin directory - if (CMAKE_SYSTEM_NAME MATCHES "Windows") - set(PATH_TO_QRENCODE_DLL "") - if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - set(PATH_TO_QRENCODE_DLL "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin/qrencode.dll") - elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(PATH_TO_QRENCODE_DLL "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/libqrencode.dll") - endif () - message(STATUS "Selected libqrencode.dll: ${PATH_TO_QRENCODE_DLL}") - - add_custom_command( - TARGET paozhu POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${PATH_TO_QRENCODE_DLL} ${CMAKE_CURRENT_SOURCE_DIR}/bin/ - ) - endif () - - find_package(PNG REQUIRED) - target_link_libraries(paozhu PNG::PNG) - - find_package(Freetype REQUIRED) - target_link_libraries(paozhu Freetype::Freetype) - endif () - - find_package(unofficial-brotli CONFIG REQUIRED) - target_link_libraries(paozhu unofficial::brotli::brotlidec unofficial::brotli::brotlienc) -else () - -if(USE_STANDALONE_ASIO) -if(CMAKE_SYSTEM_NAME MATCHES "Darwin") -set(ASIO_PATH "/usr/local/opt/asio/include" "/usr/local/include") -else() -set(ASIO_PATH ${CMAKE_CURRENT_SOURCE_DIR}/asio "/usr/include") -endif() - - target_compile_definitions(paozhu INTERFACE ASIO_STANDALONE) - find_path(ASIO_PATH asio.hpp) - message(state " Standalone Asio found: " ${ASIO_PATH}) - if(NOT ASIO_PATH) - message(FATAL_ERROR "Standalone Asio not found") - else() - target_include_directories(paozhu INTERFACE ${ASIO_PATH}) - endif() - - include_directories(${ASIO_PATH}) - -endif() - - -if(ENABLE_BOOST STREQUAL "ON") -message("---ENABLE_BOOST-----") -find_package(Boost REQUIRED - COMPONENTS system filesystem) -if(Boost_FOUND) - add_compile_definitions(ENABLE_BOOST) - include_directories("${Boost_INCLUDE_DIRS}/boost") - - MESSAGE( STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}") - MESSAGE( STATUS "Boost_LIBRARIES = ${Boost_LIBRARY_DIRS}") - MESSAGE( STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}") - link_directories(${Boost_LIBRARY_DIRS}) - target_link_libraries (paozhu ${Boost_LIBRARIES}) -endif() - -endif() - - -find_package(OpenSSL REQUIRED) - -if(OPENSSL_FOUND) - - message(STATUS "OPENSSL_VERSION = ${OPENSSL_VERSION}") - message(STATUS "OPENSSL_SSL_LIBRARY = ${OPENSSL_SSL_LIBRARY}") - message(STATUS "OPENSSL_CRYPTO_LIBRARY = ${OPENSSL_CRYPTO_LIBRARY}") - message(STATUS "OPENSSL_INCLUDE_DIR = ${OPENSSL_INCLUDE_DIR}") - INCLUDE_DIRECTORIES("${OPENSSL_INCLUDE_DIR}") - target_link_libraries (paozhu ${OPENSSL_SSL_LIBRARY}) - target_link_libraries (paozhu ${OPENSSL_CRYPTO_LIBRARY}) -endif() - - -find_package(ZLIB REQUIRED) -if(ZLIB_FOUND) - message(STATUS "Zlib Found! ${ZLIB_LIBRARIES}") - include_directories(${ZLIB_INCLUDE_DIR}) - set(zlib_library ${ZLIB_LIBRARIES}) - target_link_libraries(paozhu z) -endif() - -find_path(MYSQL_ROOT_DIR mysql) -MESSAGE( STATUS "MYSQL_ROOT_DIR = ${MYSQL_ROOT_DIR} ") -find_package_handle_standard_args(mysql REQUIRED_VARS MYSQL_ROOT_DIR) - -FIND_PATH(MYSQL_INCLUDE_DIR mysql.h - /usr/local/include/mysql - /usr/include/mysql - /usr/local/mysql/include -) -SET(MYSQL_NAMES mysqlclient) -FIND_LIBRARY(MYSQL_LIBRARY - NAMES ${MYSQL_NAMES} - PATHS /usr/lib /usr/local/lib /usr/local/mysql/lib - PATH_SUFFIXES mysql -) - -IF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) - SET(MYSQL_FOUND TRUE) - SET( MYSQL_LIBRARIES ${MYSQL_LIBRARY} ) -ELSE (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) - SET(MYSQL_FOUND FALSE) - SET( MYSQL_LIBRARIES ) -ENDIF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) - -IF (MYSQL_FOUND) - IF (NOT MYSQL_FIND_QUIETLY) - MESSAGE(STATUS "Found MySQL: ${MYSQL_LIBRARY}") - ENDIF (NOT MYSQL_FIND_QUIETLY) -ELSE (MYSQL_FOUND) - IF (MYSQL_FIND_REQUIRED) - MESSAGE(STATUS "Looked for MySQL libraries named ${MYSQL_NAMES}.") - MESSAGE(FATAL_ERROR "Could NOT find MySQL library") - ENDIF (MYSQL_FIND_REQUIRED) -ENDIF (MYSQL_FOUND) - -target_include_directories(paozhu PUBLIC ${MYSQL_INCLUDE_DIR}) -target_link_libraries(paozhu ${MYSQL_LIBRARY}) - -target_include_directories(paozhu_cli PUBLIC ${MYSQL_INCLUDE_DIR}) -target_link_libraries(paozhu_cli ${MYSQL_LIBRARY}) - - - -if(ENABLE_GD STREQUAL "ON") -message("---ENABLE_GD-----") - -if(CMAKE_SYSTEM_NAME MATCHES "Darwin") - set(GD_ROOT_DIR "/usr/local/opt/gd/lib") -else() - set(GD_ROOT_DIR "${sys_so_path}") -endif() - -set(find_gdname gd) - -find_library(GD_LIB_DIR - NAMES ${find_gdname} - PATHS "${GD_ROOT_DIR}" - NO_DEFAULT_PATH -) - -if(NOT GD_LIB_DIR) -message(FATAL_ERROR -"GD Graphics Library NOT FOUND! please install . " -) -endif() - -message(STATUS "GD Graphics Library at: ${GD_LIB_DIR}") - -if(CMAKE_SYSTEM_NAME MATCHES "Darwin") -set(QR_ROOT_DIR "/usr/local/opt/qrencode/lib") -else() -set(QR_ROOT_DIR "${sys_so_path}") -endif() - -set(find_qrname qrencode) - -find_library(QR_LIB_DIR - NAMES ${find_qrname} - PATHS "${QR_ROOT_DIR}" - NO_DEFAULT_PATH -) - -if(NOT QR_LIB_DIR) -message(FATAL_ERROR -"qrencode Library NOT FOUND! please install . " -) -endif() - -message(STATUS "qrencode at: ${QR_LIB_DIR}") - -INCLUDE_DIRECTORIES("${GD_ROOT_DIR}/include") -INCLUDE_DIRECTORIES("${QR_ROOT_DIR}/include") -link_directories("${QR_ROOT_DIR}/lib") -link_directories("${GD_ROOT_DIR}/lib") -target_link_libraries(paozhu ${GD_LIB_DIR}) -target_link_libraries(paozhu ${QR_LIB_DIR}) - -if(CMAKE_SYSTEM_NAME MATCHES "Darwin") -set(PNG_ROOT_DIR "/usr/local/opt/libpng/lib") -else() -set(PNG_ROOT_DIR "${sys_so_path}") -endif() - -find_library(PNG_LIB_DIR - NAMES png - PATHS "${PNG_ROOT_DIR}" - NO_DEFAULT_PATH -) -target_link_libraries(paozhu ${PNG_LIB_DIR}) - -if(CMAKE_SYSTEM_NAME MATCHES "Darwin") - set(FREETYPE_ROOT_DIR "/usr/local/opt/freetype/lib") -else() - set(FREETYPE_ROOT_DIR "${sys_so_path}") -endif() - -find_library(FREETYPE_LIB_DIR - NAMES freetype - PATHS "${FREETYPE_ROOT_DIR}" - NO_DEFAULT_PATH -) -target_link_libraries(paozhu ${FREETYPE_LIB_DIR}) -#end ENABLE_GD -endif() - - find_library(Brotli - HINTS ${BROTLI_ROOT_DIR} - PATH_SUFFIXES - "lib" - "lib64" - "libs" - "libs64" - "lib/x86_64-linux-gnu" - ) - - - -#find_package(Brotli COMPONENTS encoder decoder common REQUIRED) - -message(STATUS "Brotli at: ${BROTLI_ROOT_DIR}") - -set(find_brname brotlienc) -set(find_brdename brotlidec) -find_library(BR_LIB_DIR - NAMES ${find_brname} - PATHS "${BROTLI_ROOT_DIR}" - NO_DEFAULT_PATH -) -find_library(BRDEC_LIB_DIR - NAMES ${find_brdename} - PATHS "${BROTLI_ROOT_DIR}" - NO_DEFAULT_PATH -) -INCLUDE_DIRECTORIES("${BROTLI_ROOT_DIR}/include") -link_directories("${BROTLI_ROOT_DIR}/lib") - -if(NOT BR_LIB_DIR) -message(FATAL_ERROR -"Brotli Library NOT FOUND! please install . " -) -endif() - -message(STATUS "Brotli at: ${BR_LIB_DIR}") -target_link_libraries(paozhu ${BR_LIB_DIR}) - - -if(NOT BRDEC_LIB_DIR) -message(FATAL_ERROR -"Brotli Library NOT FOUND! please install . " -) -endif() - -message(STATUS "Brotli at: ${BRDEC_LIB_DIR}") -target_link_libraries(paozhu ${BRDEC_LIB_DIR}) - - -message("Compile framework mode") - -target_link_libraries(paozhu m dl) - -endif () - -if (CMAKE_SYSTEM_NAME MATCHES "Windows") - target_link_libraries(paozhu ws2_32) - target_link_libraries(paozhu_cli ws2_32) -endif () \ No newline at end of file From 49b1a4fa660c7fb6e58c56f53dc3cb7219495247 Mon Sep 17 00:00:00 2001 From: hzq Date: Sun, 21 Jan 2024 20:15:43 +0800 Subject: [PATCH 22/65] [C++] add new paozhu --- frameworks/C++/paozhu/paozhu.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index ebad103eed8..ce2013236c6 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -14,7 +14,7 @@ ENV LC_ALL en_US.UTF-8 WORKDIR / -RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.6/benchmark.zip +RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.7/benchmark.zip RUN unzip benchmark.zip RUN mv ./benchmark/* ./ From 9d6563ec394156f959162f6b647680a197dfdae8 Mon Sep 17 00:00:00 2001 From: hzq Date: Sun, 21 Jan 2024 20:58:08 +0800 Subject: [PATCH 23/65] [C++] add new paozhu --- frameworks/C++/paozhu/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frameworks/C++/paozhu/README.md b/frameworks/C++/paozhu/README.md index 5f5e76734db..a67f0db427f 100755 --- a/frameworks/C++/paozhu/README.md +++ b/frameworks/C++/paozhu/README.md @@ -2,6 +2,8 @@ This is the [Paozhu](https://github.com/hggq/paozhu) +This Benchmarking Test code from https://github.com/hggq/paozhu/releases/tag/v1.5.7 + ### Test Type Implementation Source Code * [Benchmark code](controller/src/techempower.cpp) From 3da7823721bc8740769b1af325d9d96bd7e7d80e Mon Sep 17 00:00:00 2001 From: hzq Date: Fri, 26 Jan 2024 12:17:48 +0800 Subject: [PATCH 24/65] update benchmark to v1.5.8 --- frameworks/C++/paozhu/paozhu.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index ce2013236c6..4054761398f 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -14,7 +14,7 @@ ENV LC_ALL en_US.UTF-8 WORKDIR / -RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.7/benchmark.zip +RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.8/benchmark.zip RUN unzip benchmark.zip RUN mv ./benchmark/* ./ From 4cb0e3db110a4e655ba53c780d3a67ab7fb2ba9e Mon Sep 17 00:00:00 2001 From: hzq Date: Fri, 26 Jan 2024 20:27:43 +0800 Subject: [PATCH 25/65] update benchmark to v1.5.8 --- frameworks/C++/paozhu/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/README.md b/frameworks/C++/paozhu/README.md index a67f0db427f..089e3030ca3 100755 --- a/frameworks/C++/paozhu/README.md +++ b/frameworks/C++/paozhu/README.md @@ -2,7 +2,7 @@ This is the [Paozhu](https://github.com/hggq/paozhu) -This Benchmarking Test code from https://github.com/hggq/paozhu/releases/tag/v1.5.7 +This Benchmarking Test code from https://github.com/hggq/paozhu/releases/tag/v1.5.8 ### Test Type Implementation Source Code From 950a0478e1bbbf05811268ec45d43d1f2743956e Mon Sep 17 00:00:00 2001 From: hzq Date: Mon, 26 Feb 2024 12:18:06 +0800 Subject: [PATCH 26/65] Add benchmark files --- .../paozhu/paozhu_benchmark/CMakeLists.txt | 508 ++++++++++++++++++ .../common/autocontrolmethod.hpp | 51 ++ .../common/autorestfulpaths.hpp | 28 + .../paozhu_benchmark/common/cost_define.h | 9 + .../paozhu_benchmark/common/httphook.cpp | 39 ++ .../common/json_reflect_headers.h | 32 ++ .../paozhu_benchmark/common/reghttpmethod.hpp | 16 + .../common/reghttpmethod_pre.hpp | 20 + .../common/websockets_method_reg.hpp | 19 + .../controller/include/techempower.h | 19 + .../controller/src/techempower.cpp | 241 +++++++++ .../libs/types/techempower_json.h | 15 + .../types/techempower_json_jsonreflect.cpp | 290 ++++++++++ .../paozhu_benchmark/test/testbenchmark.cpp | 126 +++++ 14 files changed, 1413 insertions(+) create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/autocontrolmethod.hpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/autorestfulpaths.hpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/cost_define.h create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/httphook.cpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/reghttpmethod.hpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/reghttpmethod_pre.hpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/websockets_method_reg.hpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/controller/include/techempower.h create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/controller/src/techempower.cpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/test/testbenchmark.cpp diff --git a/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt b/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt new file mode 100755 index 00000000000..b8bf972dbc2 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt @@ -0,0 +1,508 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.20) + +cmake_policy(SET CMP0048 NEW) + +set(ENABLE_VCPKG OFF CACHE BOOL "choose ON to enable") +set(ENABLE_BOOST OFF CACHE BOOL "choose ON to enable") +set(ENABLE_GD OFF CACHE BOOL "choose ON to enable") +set(ENABLE_WIN_VCPKG OFF CACHE BOOL "choose ON to enable") + +if (ENABLE_GD STREQUAL "ON") + list(FIND VCPKG_MANIFEST_FEATURES "gd" index) + if (index EQUAL -1) + message(STATUS "Auto append features: gd") + list(APPEND VCPKG_MANIFEST_FEATURES "gd") + endif () +endif () + +if (ENABLE_BOOST STREQUAL "ON") + list(FIND VCPKG_MANIFEST_FEATURES "boost" index) + if (index EQUAL -1) + message(STATUS "Auto append features: boost") + list(APPEND VCPKG_MANIFEST_FEATURES "boost") + endif () +endif () + +PROJECT(Paozhu_web_framework) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(mode "CMAKE_BUILD_TYPE") + +set(BOOST_OPEN " ") +set(GD_OPEN " ") + +if(ENABLE_BOOST STREQUAL "ON") + message("ENABLE_BOOST") + set(BOOST_OPEN " -DENABLE_BOOST ") +endif() + +if(ENABLE_GD STREQUAL "ON") + message("ENABLE_GD") + set(GD_OPEN " -DENABLE_GD ") +endif() + +set(sys_so_path "/usr/lib64") + +if (IS_DIRECTORY "/usr/lib/x86_64-linux-gnu") + set(sys_so_path "/usr/lib/x86_64-linux-gnu") +endif() + +if (CMAKE_SYSTEM_NAME MATCHES "Windows") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_WIN32_WINNT=0x0601") +endif() + +if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8 /EHsc") +endif () + +if(${mode} AND (CMAKE_BUILD_TYPE STREQUAL "Debug")) + + if(CMAKE_SYSTEM_NAME MATCHES "Windows") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DASIO_STANDALONE -DDEBUG ${BOOST_OPEN} ${GD_OPEN}") + if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address") + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pthread -g") + endif () + else() + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pthread -g -fsanitize=address -DASIO_STANDALONE -DDEBUG ${BOOST_OPEN} ${GD_OPEN} -I/usr/local/include -I/usr/local/mysql/include -I/usr/include -I/usr/include/mysql " ) + endif () + message("Debug mode:${CMAKE_CXX_FLAGS_DEBUG}") + +elseif(${mode} AND (CMAKE_BUILD_TYPE STREQUAL "Release")) + + if (CMAKE_SYSTEM_NAME MATCHES "Windows") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DASIO_STANDALONE ${BOOST_OPEN} ${GD_OPEN} -O3") + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pthread") + endif () + else () + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Wextra -O3") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -DASIO_STANDALONE ${BOOST_OPEN} ${GD_OPEN} -I/usr/local/include -I/usr/local/mysql/include -I/usr/include -I/usr/include/mysql " ) + file(MAKE_DIRECTORY /usr/local/etc/paozhu) + file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/conf/ DESTINATION /usr/local/etc/paozhu/) + endif () + message("Release mode:${CMAKE_CXX_FLAGS_RELEASE}") + +else() + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra") + message("Debug mode:${CMAKE_CXX_FLAGS_DEBUG}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pthread -g -fsanitize=address -DASIO_STANDALONE -DDEBUG ${BOOST_OPEN} ${GD_OPEN} -I/usr/local/include -I/usr/local/mysql/include -I/usr/include -I/usr/include/mysql " ) + + if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") + endif () +endif() + + + +file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/temp) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/log) +set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin) +set(USE_STANDALONE_ASIO ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +message(STATUS "SOURCE dir ${CMAKE_CURRENT_SOURCE_DIR}") + + +set(CMAKE_BUILD_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build) +set(CMAKE_CACHEFILE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build) +set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/build) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/common) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/controller) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/viewsrc/include) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/websockets/include) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) + +if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty) + file(REMOVE_RECURSE ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty) +endif () +#EXECUTE_PROCESS(COMMAND rm ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty) +set(PAOZHU_PRE paozhu_pre) +add_executable(${PAOZHU_PRE} ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli/autopickmethod.cpp ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpserver/src/md5.cpp) +add_executable(paozhu_empty ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli/autoemptymethod.cpp) + + + +file(GLOB_RECURSE orm_list ${CMAKE_CURRENT_SOURCE_DIR}/orm/*.cpp) +file(GLOB_RECURSE source_list ${CMAKE_CURRENT_SOURCE_DIR}/models/*.cpp) +file(GLOB_RECURSE FRAMEWORK_CPP_PATH ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpserver/*.cpp) +file(GLOB_RECURSE common_list ${CMAKE_CURRENT_SOURCE_DIR}/common/*.cpp) +file(GLOB_RECURSE controller_list ${CMAKE_CURRENT_SOURCE_DIR}/controller/src/*.cpp) +file(GLOB_RECURSE viewsrc_list ${CMAKE_CURRENT_SOURCE_DIR}/viewsrc/view/*.cpp) +file(GLOB_RECURSE reflect_list ${CMAKE_CURRENT_SOURCE_DIR}/libs/*.cpp) +file(GLOB_RECURSE src_list ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) + +foreach(cppfile IN LISTS controller_list) + string(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/controller/src/" "" cppfilename ${cppfile}) + string(REGEX REPLACE ".cpp" "" cppbasename ${cppfilename}) +# message(${cppbasename}) + if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/controller/include/${cppbasename}.h") + else() + file(TOUCH "${CMAKE_CURRENT_SOURCE_DIR}/controller/include/${cppbasename}.h") + endif() +endforeach() + +function(include_sub_directories_recursively root_dir) + if (IS_DIRECTORY ${root_dir}) # 当前路径是一个目录吗,是的话就加入到包含目录 + # if (${root_dir} MATCHES "include") + message("include dir: " ${root_dir}) + include_directories(${root_dir}) + # endif() + endif() + + file(GLOB ALL_SUB RELATIVE ${root_dir} ${root_dir}/*) # 获得当前目录下的所有文件,让如ALL_SUB列表中 + + foreach(sub ${ALL_SUB}) + if (IS_DIRECTORY ${root_dir}/${sub}) + include_sub_directories_recursively(${root_dir}/${sub}) # 对子目录递归调用,包含 + endif() + endforeach() +endfunction() + +include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpserver) +include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/orm) +include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/models) +include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/controller/include) +include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/libs) +include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/include) + +add_executable(paozhu_cli ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli/http_cli.cpp) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin) + + +if(${mode} AND (CMAKE_BUILD_TYPE STREQUAL "Release")) + add_executable(paozhu ${CMAKE_CURRENT_SOURCE_DIR}/test/testbenchmark.cpp ${common_list} ${viewsrc_list} ${FRAMEWORK_CPP_PATH} ${orm_list} ${reflect_list} ${src_list} ${source_list} ${controller_list}) +else() + add_executable(paozhu ${CMAKE_CURRENT_SOURCE_DIR}/test/test.cpp ${common_list} ${viewsrc_list} ${FRAMEWORK_CPP_PATH} ${orm_list} ${reflect_list} ${src_list} ${source_list} ${controller_list}) +endif() + +if (ENABLE_WIN_VCPKG STREQUAL "ON") +else () +add_custom_command( + TARGET paozhu_empty paozhu + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_pre + PRE_BUILD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ + COMMAND echo "-- controls method --" + COMMAND ${PAOZHU_PRE} ${CMAKE_CURRENT_SOURCE_DIR}/ + COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty + ) +endif() + +if (ENABLE_VCPKG) + add_compile_definitions(ENABLE_VCPKG) + find_package(asio CONFIG REQUIRED) + target_link_libraries(paozhu asio::asio) + + if (ENABLE_BOOST) + add_compile_definitions(ENABLE_BOOST) + set(Boost_NO_WARN_NEW_VERSIONS ON) + find_package(Boost REQUIRED COMPONENTS filesystem coroutine) + target_link_libraries(paozhu Boost::boost Boost::filesystem Boost::coroutine) + endif () + + find_package(OpenSSL REQUIRED) + target_link_libraries(paozhu OpenSSL::Crypto OpenSSL::SSL) + + find_package(ZLIB REQUIRED) + target_link_libraries(paozhu ZLIB::ZLIB) + + # find_package(libmysql REQUIRED) + find_package(unofficial-libmariadb CONFIG REQUIRED) + find_path(MYSQL_ROOT_DIR mysql) + # target_link_libraries(paozhu ${MYSQL_LIBRARIES}) + # target_link_libraries(paozhu_cli ${MYSQL_LIBRARIES}) + target_link_libraries(paozhu unofficial::libmariadb) + target_link_libraries(paozhu_cli unofficial::libmariadb) + target_include_directories(paozhu PUBLIC ${MYSQL_ROOT_DIR}/mysql) + target_include_directories(paozhu_cli PUBLIC ${MYSQL_ROOT_DIR}/mysql) + + if (ENABLE_GD STREQUAL "ON") + find_package(PkgConfig) + pkg_check_modules(LIBGD REQUIRED IMPORTED_TARGET gdlib) + target_link_libraries(paozhu PkgConfig::LIBGD) + + find_path(QRENCODE_INCLUDE_DIR NAMES qrencode.h) + find_library(QRENCODE_LIBRARY_RELEASE qrencode) + # find_library(QRENCODE_LIBRARY_DEBUG qrencoded) + # set(QRENCODE_LIBRARIES optimized ${QRENCODE_LIBRARY_RELEASE} debug ${QRENCODE_LIBRARY_DEBUG}) + target_include_directories(paozhu PRIVATE ${QRENCODE_INCLUDE_DIR}) + target_link_libraries(paozhu ${QRENCODE_LIBRARY_RELEASE}) + # MESSAGE(STATUS ${QRENCODE_LIBRARY_RELEASE}) + + # warning: Fixed an issue where ports/libqrencode would not automatically + # copy dll files to the bin directory + if (CMAKE_SYSTEM_NAME MATCHES "Windows") + set(PATH_TO_QRENCODE_DLL "") + if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + set(PATH_TO_QRENCODE_DLL "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin/qrencode.dll") + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(PATH_TO_QRENCODE_DLL "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/libqrencode.dll") + endif () + message(STATUS "Selected libqrencode.dll: ${PATH_TO_QRENCODE_DLL}") + + add_custom_command( + TARGET paozhu POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${PATH_TO_QRENCODE_DLL} ${CMAKE_CURRENT_SOURCE_DIR}/bin/ + ) + endif () + + find_package(PNG REQUIRED) + target_link_libraries(paozhu PNG::PNG) + + find_package(Freetype REQUIRED) + target_link_libraries(paozhu Freetype::Freetype) + endif () + + find_package(unofficial-brotli CONFIG REQUIRED) + target_link_libraries(paozhu unofficial::brotli::brotlidec unofficial::brotli::brotlienc) +else () + +if(USE_STANDALONE_ASIO) +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") +set(ASIO_PATH "/usr/local/opt/asio/include" "/usr/local/include") +else() +set(ASIO_PATH ${CMAKE_CURRENT_SOURCE_DIR}/asio "/usr/include") +endif() + + target_compile_definitions(paozhu INTERFACE ASIO_STANDALONE) + find_path(ASIO_PATH asio.hpp) + message(state " Standalone Asio found: " ${ASIO_PATH}) + if(NOT ASIO_PATH) + message(FATAL_ERROR "Standalone Asio not found") + else() + target_include_directories(paozhu INTERFACE ${ASIO_PATH}) + endif() + + include_directories(${ASIO_PATH}) + +endif() + + +if(ENABLE_BOOST STREQUAL "ON") +message("---ENABLE_BOOST-----") +find_package(Boost REQUIRED + COMPONENTS system filesystem) +if(Boost_FOUND) + add_compile_definitions(ENABLE_BOOST) + include_directories("${Boost_INCLUDE_DIRS}/boost") + + MESSAGE( STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}") + MESSAGE( STATUS "Boost_LIBRARIES = ${Boost_LIBRARY_DIRS}") + MESSAGE( STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}") + link_directories(${Boost_LIBRARY_DIRS}) + target_link_libraries (paozhu ${Boost_LIBRARIES}) +endif() + +endif() + + +find_package(OpenSSL REQUIRED) + +if(OPENSSL_FOUND) + + message(STATUS "OPENSSL_VERSION = ${OPENSSL_VERSION}") + message(STATUS "OPENSSL_SSL_LIBRARY = ${OPENSSL_SSL_LIBRARY}") + message(STATUS "OPENSSL_CRYPTO_LIBRARY = ${OPENSSL_CRYPTO_LIBRARY}") + message(STATUS "OPENSSL_INCLUDE_DIR = ${OPENSSL_INCLUDE_DIR}") + INCLUDE_DIRECTORIES("${OPENSSL_INCLUDE_DIR}") + target_link_libraries (paozhu ${OPENSSL_SSL_LIBRARY}) + target_link_libraries (paozhu ${OPENSSL_CRYPTO_LIBRARY}) +endif() + + +find_package(ZLIB REQUIRED) +if(ZLIB_FOUND) + message(STATUS "Zlib Found! ${ZLIB_LIBRARIES}") + include_directories(${ZLIB_INCLUDE_DIR}) + set(zlib_library ${ZLIB_LIBRARIES}) + target_link_libraries(paozhu z) +endif() + +find_path(MYSQL_ROOT_DIR mysql) +MESSAGE( STATUS "MYSQL_ROOT_DIR = ${MYSQL_ROOT_DIR} ") +find_package_handle_standard_args(mysql REQUIRED_VARS MYSQL_ROOT_DIR) + +FIND_PATH(MYSQL_INCLUDE_DIR mysql.h + /usr/local/include/mysql + /usr/include/mysql + /usr/local/mysql/include +) +SET(MYSQL_NAMES mysqlclient) +FIND_LIBRARY(MYSQL_LIBRARY + NAMES ${MYSQL_NAMES} + PATHS /usr/lib /usr/local/lib /usr/local/mysql/lib + PATH_SUFFIXES mysql +) + +IF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) + SET(MYSQL_FOUND TRUE) + SET( MYSQL_LIBRARIES ${MYSQL_LIBRARY} ) +ELSE (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) + SET(MYSQL_FOUND FALSE) + SET( MYSQL_LIBRARIES ) +ENDIF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY) + +IF (MYSQL_FOUND) + IF (NOT MYSQL_FIND_QUIETLY) + MESSAGE(STATUS "Found MySQL: ${MYSQL_LIBRARY}") + ENDIF (NOT MYSQL_FIND_QUIETLY) +ELSE (MYSQL_FOUND) + IF (MYSQL_FIND_REQUIRED) + MESSAGE(STATUS "Looked for MySQL libraries named ${MYSQL_NAMES}.") + MESSAGE(FATAL_ERROR "Could NOT find MySQL library") + ENDIF (MYSQL_FIND_REQUIRED) +ENDIF (MYSQL_FOUND) + +target_include_directories(paozhu PUBLIC ${MYSQL_INCLUDE_DIR}) +target_link_libraries(paozhu ${MYSQL_LIBRARY}) + +target_include_directories(paozhu_cli PUBLIC ${MYSQL_INCLUDE_DIR}) +target_link_libraries(paozhu_cli ${MYSQL_LIBRARY}) + + + +if(ENABLE_GD STREQUAL "ON") +message("---ENABLE_GD-----") + +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + set(GD_ROOT_DIR "/usr/local/opt/gd/lib") +else() + set(GD_ROOT_DIR "${sys_so_path}") +endif() + +set(find_gdname gd) + +find_library(GD_LIB_DIR + NAMES ${find_gdname} + PATHS "${GD_ROOT_DIR}" + NO_DEFAULT_PATH +) + +if(NOT GD_LIB_DIR) +message(FATAL_ERROR +"GD Graphics Library NOT FOUND! please install . " +) +endif() + +message(STATUS "GD Graphics Library at: ${GD_LIB_DIR}") + +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") +set(QR_ROOT_DIR "/usr/local/opt/qrencode/lib") +else() +set(QR_ROOT_DIR "${sys_so_path}") +endif() + +set(find_qrname qrencode) + +find_library(QR_LIB_DIR + NAMES ${find_qrname} + PATHS "${QR_ROOT_DIR}" + NO_DEFAULT_PATH +) + +if(NOT QR_LIB_DIR) +message(FATAL_ERROR +"qrencode Library NOT FOUND! please install . " +) +endif() + +message(STATUS "qrencode at: ${QR_LIB_DIR}") + +INCLUDE_DIRECTORIES("${GD_ROOT_DIR}/include") +INCLUDE_DIRECTORIES("${QR_ROOT_DIR}/include") +link_directories("${QR_ROOT_DIR}/lib") +link_directories("${GD_ROOT_DIR}/lib") +target_link_libraries(paozhu ${GD_LIB_DIR}) +target_link_libraries(paozhu ${QR_LIB_DIR}) + +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") +set(PNG_ROOT_DIR "/usr/local/opt/libpng/lib") +else() +set(PNG_ROOT_DIR "${sys_so_path}") +endif() + +find_library(PNG_LIB_DIR + NAMES png + PATHS "${PNG_ROOT_DIR}" + NO_DEFAULT_PATH +) +target_link_libraries(paozhu ${PNG_LIB_DIR}) + +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + set(FREETYPE_ROOT_DIR "/usr/local/opt/freetype/lib") +else() + set(FREETYPE_ROOT_DIR "${sys_so_path}") +endif() + +find_library(FREETYPE_LIB_DIR + NAMES freetype + PATHS "${FREETYPE_ROOT_DIR}" + NO_DEFAULT_PATH +) +target_link_libraries(paozhu ${FREETYPE_LIB_DIR}) +#end ENABLE_GD +endif() + +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + set(BROTLI_ROOT_DIR "/usr/local/opt/brotli/lib") +else() + set(BROTLI_ROOT_DIR "${sys_so_path}") +endif() + + + +#find_package(Brotli COMPONENTS encoder decoder common REQUIRED) + +message(STATUS "Brotli at: ${BROTLI_ROOT_DIR}") + +set(find_brname brotlienc) +set(find_brdename brotlidec) +find_library(BR_LIB_DIR + NAMES ${find_brname} + PATHS "${BROTLI_ROOT_DIR}" + NO_DEFAULT_PATH +) +find_library(BRDEC_LIB_DIR + NAMES ${find_brdename} + PATHS "${BROTLI_ROOT_DIR}" + NO_DEFAULT_PATH +) +INCLUDE_DIRECTORIES("${BROTLI_ROOT_DIR}/include") +link_directories("${BROTLI_ROOT_DIR}/lib") + +if(NOT BR_LIB_DIR) +message(FATAL_ERROR +"Brotli Library NOT FOUND! please install . " +) +endif() + +message(STATUS "Brotli at: ${BR_LIB_DIR}") +target_link_libraries(paozhu ${BR_LIB_DIR}) + + +if(NOT BRDEC_LIB_DIR) +message(FATAL_ERROR +"Brotli Library NOT FOUND! please install . " +) +endif() + +message(STATUS "Brotli at: ${BRDEC_LIB_DIR}") +target_link_libraries(paozhu ${BRDEC_LIB_DIR}) + + +message("Compile framework mode") + +target_link_libraries(paozhu m dl) + +endif () + +if (CMAKE_SYSTEM_NAME MATCHES "Windows") + target_link_libraries(paozhu ws2_32) + target_link_libraries(paozhu_cli ws2_32) +endif () \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/autocontrolmethod.hpp b/frameworks/C++/paozhu/paozhu_benchmark/common/autocontrolmethod.hpp new file mode 100755 index 00000000000..faddf242daa --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/autocontrolmethod.hpp @@ -0,0 +1,51 @@ + +#ifndef __HTTP_AUTO_REG_CONTROL_HTTPMETHOD_HPP +#define __HTTP_AUTO_REG_CONTROL_HTTPMETHOD_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include "httppeer.h" + +#include "techempower.h" + + +namespace http +{ + void _initauto_control_httpmethodregto(std::map &methodcallback) + { + struct regmethold_t temp; + + temp.pre = nullptr; + temp.regfun = techempowerplaintext; + methodcallback.emplace("plaintext",temp); + temp.pre = nullptr; + temp.regfun = techempowerjson; + methodcallback.emplace("json",temp); + temp.pre = nullptr; + temp.regfun = techempowerdb; + methodcallback.emplace("db",temp); + temp.pre = nullptr; + temp.regfun = techempowerqueries; + methodcallback.emplace("queries",temp); + temp.pre = nullptr; + temp.regfun = techempowerfortunes; + methodcallback.emplace("fortunes",temp); + temp.pre = nullptr; + temp.regfun = techempowerupdates; + methodcallback.emplace("updates",temp); + temp.pre = nullptr; + temp.regfun = techempowercached_queries; + methodcallback.emplace("cached-queries",temp); + temp.pre = nullptr; + temp.regfun = techempowercached_db; + methodcallback.emplace("cached-db",temp); + + + } +} + +#endif + + \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/autorestfulpaths.hpp b/frameworks/C++/paozhu/paozhu_benchmark/common/autorestfulpaths.hpp new file mode 100755 index 00000000000..d7a1d639822 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/autorestfulpaths.hpp @@ -0,0 +1,28 @@ + +#ifndef __HTTP_AUTO_REG_CONTROL_HTTPRESTFUL_HPP +#define __HTTP_AUTO_REG_CONTROL_HTTPRESTFUL_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include "httppeer.h" + + + +namespace http +{ + void _initauto_control_httprestful_paths(std::map> &restfulmethod) + { + + + if(restfulmethod.size()) + {} + + + } +} + +#endif + + \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/cost_define.h b/frameworks/C++/paozhu/paozhu_benchmark/common/cost_define.h new file mode 100755 index 00000000000..47fb182f0e0 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/cost_define.h @@ -0,0 +1,9 @@ +#pragma once +#ifndef _CONST_DEFINE_FUNC_H +#define _CONST_DEFINE_FUNC_H + +#define CONST_MONEY_PART 1000000 +#define CONST_HTTP_HEADER_BODY_SIZE 16384 +#define CONST_PHP_BODY_POST_SIZE 16777216 + +#endif \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/httphook.cpp b/frameworks/C++/paozhu/paozhu_benchmark/common/httphook.cpp new file mode 100755 index 00000000000..3440c23f84b --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/httphook.cpp @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "httppeer.h" +namespace http +{ +std::map _block_ip_tables; +std::map _block_host_tables; +bool check_blockip(const std::string &client_ip) +{ + if (client_ip.size() > 0) + { + return false; + } + return false; +} +bool hook_host_http1(std::shared_ptr peer) +{ + if (peer->host.size() > 0) + { + return false; + } + return false; +} +bool hook_host_http2(std::shared_ptr peer) +{ + if (peer->host.size() > 0) + { + return false; + } + return false; +} +}// namespace http diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h b/frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h new file mode 100755 index 00000000000..176500bf383 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h @@ -0,0 +1,32 @@ +#pragma once +#include +#include +#include +#include + +#include "types/techempower_json.h" +#include "unicode.h" + +template +std::string json_encode([[maybe_unused]] const JSON_REF_OBJ_TEMP &json_reflectobj) { return ""; } + +template +std::string json_encode([[maybe_unused]] const std::vector &json_reflectobj) { return ""; } + +template +unsigned int json_decode([[maybe_unused]] JSON_REF_OBJ_TEMP &json_reflectobj, [[maybe_unused]] const std::string &_json_data, [[maybe_unused]] unsigned int _offset) { return 0; } + +template +unsigned int json_decode([[maybe_unused]] std::vector &json_reflectobj, [[maybe_unused]] const std::string &_json_data, [[maybe_unused]] unsigned int _offset) { return 0; } + +namespace http +{ + +std::string json_encode(const techempower_outjson_t &json_reflectobj); + +std::string json_encode(const std::vector &json_reflectobj); + +unsigned int json_decode(techempower_outjson_t &json_reflectobj, const std::string &_json_data, unsigned int _offset = 0); + +unsigned int json_decode(std::vector &json_reflectobj, const std::string &_json_data, unsigned int _offset = 0); +}// namespace http diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/reghttpmethod.hpp b/frameworks/C++/paozhu/paozhu_benchmark/common/reghttpmethod.hpp new file mode 100755 index 00000000000..3333ed08bf0 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/reghttpmethod.hpp @@ -0,0 +1,16 @@ +#ifndef __HTTP_REGHTTPMETHOD_HPP +#define __HTTP_REGHTTPMETHOD_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif// defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include "httppeer.h" +namespace http +{ +void _inithttpmethodregto(std::map &methodcallback) +{ +} + +}// namespace http +#endif \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/reghttpmethod_pre.hpp b/frameworks/C++/paozhu/paozhu_benchmark/common/reghttpmethod_pre.hpp new file mode 100755 index 00000000000..bf2d5407381 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/reghttpmethod_pre.hpp @@ -0,0 +1,20 @@ +#ifndef __HTTP_REGHTTPMETHOD_PRE_HPP +#define __HTTP_REGHTTPMETHOD_PRE_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif// defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include "httppeer.h" +namespace http +{ +void _inithttpmethodregto_pre(std::map &methodcallback) +{ + struct regmethold_t temp; + //temp.pre = adminlogin; + //temp.regfun = adminmar; + //methodcallback.emplace("adminmar", temp); +} + +}// namespace http +#endif \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/websockets_method_reg.hpp b/frameworks/C++/paozhu/paozhu_benchmark/common/websockets_method_reg.hpp new file mode 100755 index 00000000000..b8e9c718ea9 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/websockets_method_reg.hpp @@ -0,0 +1,19 @@ +#pragma once +#include +#include "httppeer.h" +#include "websockets.h" +#include "mywebsockets.hpp" +#include "websockets_callback.h" +namespace http +{ +void _initwebsocketmethodregto(WEBSOCKET_REG &methodcallback) +{ + + methodcallback.emplace("wstest", [](std::weak_ptr p) -> std::shared_ptr + { return http::mywebsockets::create(p); }); + // methodcallback.emplace("looptest",[](std::weak_ptr p)->std::shared_ptr{ + // return http::loopwebsockets::create(p); + // }); +} + +}// namespace http \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/controller/include/techempower.h b/frameworks/C++/paozhu/paozhu_benchmark/controller/include/techempower.h new file mode 100755 index 00000000000..f1697f616b9 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/controller/include/techempower.h @@ -0,0 +1,19 @@ + +#pragma once +#include +#include +#include "httppeer.h" + +namespace http +{ + + + std::string techempowerplaintext(std::shared_ptr peer); + std::string techempowerjson(std::shared_ptr peer); + std::string techempowerdb(std::shared_ptr peer); + std::string techempowerqueries(std::shared_ptr peer); + std::string techempowerfortunes(std::shared_ptr peer); + std::string techempowerupdates(std::shared_ptr peer); + std::string techempowercached_queries(std::shared_ptr peer); + std::string techempowercached_db(std::shared_ptr peer); +} diff --git a/frameworks/C++/paozhu/paozhu_benchmark/controller/src/techempower.cpp b/frameworks/C++/paozhu/paozhu_benchmark/controller/src/techempower.cpp new file mode 100755 index 00000000000..43906f42156 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/controller/src/techempower.cpp @@ -0,0 +1,241 @@ +#include "orm.h" +#include +#include +#include +#include +#include +#include "httppeer.h" +#include "techempower.h" +#include "techempower_json.h" +#include "datetime.h" +#include "func.h" +#include "pzcache.h" +#include "json_reflect_headers.h" +namespace http +{ +//@urlpath(null,plaintext) +std::string techempowerplaintext(std::shared_ptr peer) +{ + peer->type("text/plain; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + peer->output = "Hello, World!"; + return ""; +} + +//@urlpath(null,json) +std::string techempowerjson(std::shared_ptr peer) +{ + peer->type("application/json; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + struct techempower_outjson_t a; + a.message = "Hello, World!"; + peer->output = json_encode(a); + return ""; +} + +//@urlpath(null,db) +std::string techempowerdb(std::shared_ptr peer) +{ + peer->type("application/json; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + auto myworld = orm::World(); + unsigned int rd_num = rand_range(1, 10000); + myworld.get_one(rd_num); + + peer->output = myworld.data_tojson(); + return ""; +} + +//@urlpath(null,queries) +std::string techempowerqueries(std::shared_ptr peer) +{ + peer->type("application/json; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + + unsigned int get_num = peer->get["queries"].to_int(); + if (get_num == 0) + { + get_num = 1; + } + else if (get_num > 500) + { + get_num = 500; + } + auto myworld = orm::World(); + myworld.record.reserve(get_num); + for (unsigned int i = 0; i < get_num; i++) + { + myworld.wheresql.clear(); + unsigned int rd_num = rand_range(1, 10000); + myworld.where("id", rd_num).fetch_append(); + } + + peer->output = myworld.to_json(); + return ""; +} + +//@urlpath(null,fortunes) +std::string techempowerfortunes(std::shared_ptr peer) +{ + peer->type("text/html; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + + auto myfortune = orm::Fortune(); + myfortune.fetch(); + myfortune.data.id = 0; + myfortune.data.message = "Additional fortune added at request time."; + myfortune.record.push_back(myfortune.data); + + std::sort(myfortune.record.begin(), myfortune.record.end(), [](const auto &lhs, const auto &rhs) + { return lhs.message < rhs.message; }); + peer->val["list"].set_array(); + OBJ_ARRAY item; + for (unsigned int i = 0; i < myfortune.record.size(); i++) + { + item["id"] = myfortune.record[i].id; + item["message"] = html_encode(myfortune.record[i].message); + peer->val["list"].push(item); + } + + peer->view("techempower/fortunes"); + return ""; +} + +//@urlpath(null,updates) +std::string techempowerupdates(std::shared_ptr peer) +{ + peer->type("application/json; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + unsigned int get_num = peer->get["queries"].to_int(); + + if (get_num == 0) + { + get_num = 1; + } + else if (get_num > 500) + { + get_num = 500; + } + auto myworld = orm::World(); + myworld.record.clear(); + myworld.record.reserve(get_num); + for (unsigned int i = 0; i < get_num; i++) + { + myworld.wheresql.clear(); + myworld.where("id", rand_range(1, 10000)).fetch_append(); + if (myworld.effect() > 0) + { + unsigned int j = myworld.record.size() - 1; + myworld.data.randomnumber = rand_range(1, 10000); + myworld.record[j].randomnumber = myworld.data.randomnumber; + myworld.update("randomnumber"); + } + } + peer->output = myworld.to_json(); + return ""; +} + +//@urlpath(null,cached-queries) +std::string techempowercached_queries(std::shared_ptr peer) +{ + peer->type("application/json; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + + unsigned int get_num = peer->get["count"].to_int(); + if (get_num == 0) + { + get_num = 1; + } + else if (get_num > 500) + { + get_num = 500; + } + auto myworld = orm::World(); + std::string mycacheid = "alldatacache"; + + pzcache> &temp_cache = pzcache>::conn(); + + std::vector allcachedata_array; + allcachedata_array.reserve(10000); + //create rand data to cache + if (temp_cache.check(mycacheid) > -1) + { + allcachedata_array = temp_cache.get(mycacheid); + } + else + { + allcachedata_array.resize(10000); + for (unsigned int i = 0; i < 10000; i++) + { + allcachedata_array[i].id = i + 1; + allcachedata_array[i].randomnumber = rand_range(1, 10000); + } + temp_cache.save(mycacheid, allcachedata_array, 120); + } + //get rand data from cache + mycacheid = "my" + std::to_string(get_num); + myworld.record.reserve(get_num); + if (temp_cache.check(mycacheid) > -1) + { + myworld.record = temp_cache.get(mycacheid); + } + else + { + if (allcachedata_array.size() == 10000) + { + for (unsigned int i = 0; i < get_num; i++) + { + unsigned int temp_rid = rand_range(0, 9999); + myworld.record.push_back(allcachedata_array[temp_rid]); + } + } + temp_cache.save(mycacheid, myworld.record, 120); + } + + peer->output = myworld.to_json(); + return ""; +} + +//@urlpath(null,cached-db) +std::string techempowercached_db(std::shared_ptr peer) +{ + peer->type("application/json; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + //this test from database to cache + unsigned int get_num = peer->get["count"].to_int(); + if (get_num == 0) + { + get_num = 1; + } + else if (get_num > 500) + { + get_num = 500; + } + auto myworld = orm::World(); + std::string mycacheid = "my" + std::to_string(get_num); + + pzcache> &temp_cache = pzcache>::conn(); + + myworld.record.reserve(get_num); + if (temp_cache.check(mycacheid) > -1) + { + myworld.record = temp_cache.get(mycacheid); + } + else + { + std::vector cacheid; + for (unsigned int i = 0; i < get_num; i++) + { + cacheid.push_back(rand_range(1, 10000)); + } + + std::string sqlstr = array_to_sql(cacheid); + myworld.whereIn("id", sqlstr).fetch(); + temp_cache.save(mycacheid, myworld.record, 120); + } + + peer->output = myworld.to_json(); + return ""; +} + +}// namespace http \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h b/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h new file mode 100755 index 00000000000..364c06bb2cf --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h @@ -0,0 +1,15 @@ +#ifndef LIBS_TYPES_TECHEMPOWER_TYPE_H +#define LIBS_TYPES_TECHEMPOWER_TYPE_H +#include +#include + +namespace http +{ +//@reflect json to_json from_json +struct techempower_outjson_t +{ + std::string message; +}; + +}// namespace http +#endif diff --git a/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp b/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp new file mode 100755 index 00000000000..b5088efcdf9 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp @@ -0,0 +1,290 @@ +#include +#include +#include +#include +#include "types/techempower_json.h" +#include "json_reflect_headers.h" +#include "unicode.h" +#include "func.h" + +namespace http +{ + + +std::string json_encode(const techempower_outjson_t &json_reflectobj) + { + + std::stringstream _stream; + _stream << "{"; + _stream << "\"message\":\"" << http::utf8_to_jsonstring(json_reflectobj.message)<< "\""; + + _stream << "}"; + + return _stream.str(); + + } + + +std::string json_encode(const std::vector &json_reflectobj) + { + std::stringstream _stream; + _stream << "["; + + for(unsigned int i=0;i0) + { + _stream <<","; + } + _stream < + //递归代码 + + _offset++; + for ( ; _offset < _json_data.size(); _offset++) + { + if (_json_data[_offset] == '}') + { + //offset++; + break; + } + if (_json_data[_offset] == '"') + { + _offset++; + for ( ; _offset < _json_data.size(); _offset++) + { + if (_json_data[_offset] == '"'&&_json_data[_offset-1]!=0x5C) + { + break; + } + } + } + } + + + if(_offset < _json_data.size() && (_json_data[_offset]==']'||_json_data[_offset]=='}')) + { + _offset-=1; + } + //直接下一个,不用处理键值 + continue; + } + else if(_json_data[_offset]=='[') + { //表示有数组 + ////////////////////////////////////////////////////////////////////// + //begin level1 [] + //vector vector> vector> + //如果是非内置类型 直接使用json_decode<> + + //递归代码 + + + _offset++; + for ( ; _offset < _json_data.size(); _offset++) + { + if (_json_data[_offset] == ']') + { + //offset++; + break; + } + if (_json_data[_offset] == '"') + { + _offset++; + for ( ; _offset < _json_data.size(); _offset++) + { + if (_json_data[_offset] == '"'&&_json_data[_offset-1]!=0x5C) + { + break; + } + } + } + } + + //直接下一个,不用处理键值 + if(_offset < _json_data.size() && (_json_data[_offset]==']'||_json_data[_offset]=='}')) + { + _offset-=1; + } + continue; + //end level1[] + //////////////////////////////////////////////////////////////////// + } + else if(_json_data[_offset]==0x22) + { + //如果键值也是字符串 + temp_offset=_offset; + _json_value_name=http::jsonstring_to_utf8(&_json_data[_offset],_json_data.size()-_offset,temp_offset); + _offset=temp_offset; + if(_json_data[_offset]==0x22) + { + if((_offset+1)<_json_data.size()) + { + if(_json_data[_offset+1]!=']'&&_json_data[_offset+1]!='}') + { + _offset+=1; + } + } + } + } + else + { + //表示是数字 bool NULL + for(;_offset<_json_data.size();_offset++) + { + //结束条件 + if(_json_data[_offset]==','||_json_data[_offset]==']'||_json_data[_offset]=='}'||_json_data[_offset]==0x20||_json_data[_offset]==0x0A||_json_data[_offset]==0x0D||_json_data[_offset]=='\t') + { + break; + } + _json_value_name.push_back(_json_data[_offset]); + } + //让前面循环退出或返回 + if(_offset < _json_data.size() && _json_data[_offset]=='}') + { + _offset-=1; + } + } + //////////////////////////////////////////////////////// + // level1 + //处理对象赋值 + if (http::str_casecmp(_json_key_name, "message")) + { + + json_reflectobj.message=_json_value_name; + } + + //////////////////////////////////////////////////////// + //继续循环下一个键值 + continue; + } + } + } + return _offset; + } + +unsigned int json_decode(std::vector &json_reflectobj,const std::string &_json_data,unsigned int _offset) + { + bool _isarray=false; + for(;_offset<_json_data.size();_offset++) + { + if(_json_data[_offset]=='{') + { + break; + } + if(_json_data[_offset]=='[') + { + _isarray=true; + break; + } + } + + if(_isarray) + { + if(_json_data[_offset]=='[') + { + _offset+=1; + } + for(;_offset<_json_data.size();_offset++) + { + _offset=http::json_string_trim(_json_data,_offset); + //直接返回,这样可以防插入空的对象 + if(_json_data[_offset]==0x5D) + { + return _offset; + }else if(_json_data[_offset]=='{') + { + techempower_outjson_t temp; + _offset=json_decode(temp,_json_data,_offset); + json_reflectobj.push_back(temp); + } + + } + + } + else + { + techempower_outjson_t temp; + _offset=json_decode(temp,_json_data,_offset); + json_reflectobj.push_back(temp); + + } + + return _offset; + } + +} diff --git a/frameworks/C++/paozhu/paozhu_benchmark/test/testbenchmark.cpp b/frameworks/C++/paozhu/paozhu_benchmark/test/testbenchmark.cpp new file mode 100755 index 00000000000..194c06e772a --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/test/testbenchmark.cpp @@ -0,0 +1,126 @@ +#include +#include +#include +#include +#include +#include "server.h" + +static sigjmp_buf env_startacs; +static void sig_child(int signo); +namespace fs = std::filesystem; +int main(int argc, char *argv[]) +{ + std::string argv_str; + if (argc > 1) + { + // server.conf filepath or confpath + argv_str.append(argv[1]); + fs::path conf_path = argv_str; + if (fs::is_regular_file(conf_path)) + { + } + else + { + if (argv_str.back() == '/') + { + argv_str = argv_str + "server.conf"; + } + else + { + argv_str = argv_str + "/server.conf"; + } + conf_path = argv_str; + if (fs::is_regular_file(conf_path)) + { + } + else + { + std::cout << "Not found server.conf file."; + return 0; + } + } + } + else + { + + fs::path conf_path = fs::current_path(); + argv_str = conf_path.string() + "/conf/server.conf"; + conf_path = argv_str; + if (fs::is_regular_file(conf_path)) + { + } + else + { + argv_str = "/usr/local/etc/paozhu/server.conf"; + conf_path = argv_str; + if (fs::is_regular_file(conf_path)) + { + } + else + { + std::cout << "Not found server.conf file. Please copy conf Directory rename to /usr/local/etc/paozhu\n"; + return 0; + } + } + } + + pid_t pid;//, subpid = 0; + signal(SIGCHLD, sig_child); + if (sigsetjmp(env_startacs, 1) == 0)// 设置记号 + { + printf("setjmp ok.....\n"); + } + else + { + printf("longjmp ok.....\n"); + } + + pid = fork(); + printf("fork id %d \n", pid); + if (pid < 0) + { + perror("fork error:"); + exit(1); + } + else if (pid == 0) + { + + try + { + http::httpserver &httpmy = http::get_server_app(); + httpmy.run(argv_str); + } + catch (std::exception &e) + { + std::printf("Exception: %s\n", e.what()); + } + exit(0); + } + else + { + + while (1) + { + std::this_thread::sleep_for(std::chrono::seconds(10)); + //Future features are added here + } + return 0; + } +} +static void sig_child(int signo) +{ + /*pid_t */ int pid; + int stat; + // 处理僵尸进程 + + switch (signo) + { + case SIGCHLD: + + pid = wait(&stat); + printf("SIGCHLD...farter id %d..%d\n", getpid(), pid); + siglongjmp(env_startacs, 1);// jump setjmp begin + break; + } + exit(0); +} From 641e936a3f6f9e1e4fad128e13e23eae269b4141 Mon Sep 17 00:00:00 2001 From: hzq Date: Mon, 26 Feb 2024 15:17:32 +0800 Subject: [PATCH 27/65] Add benchmark files --- .../orm/_rawsqlfile/default_Fortune.sql | 5 + .../orm/_rawsqlfile/default_World.sql | 5 + .../orm/include/fortunebase.h | 2556 +++++++++++++++++ .../paozhu_benchmark/orm/include/worldbase.h | 2370 +++++++++++++++ .../C++/paozhu/paozhu_benchmark/orm/orm.h | 4 + 5 files changed, 4940 insertions(+) create mode 100644 frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_Fortune.sql create mode 100644 frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_World.sql create mode 100644 frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortunebase.h create mode 100644 frameworks/C++/paozhu/paozhu_benchmark/orm/include/worldbase.h create mode 100644 frameworks/C++/paozhu/paozhu_benchmark/orm/orm.h diff --git a/frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_Fortune.sql b/frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_Fortune.sql new file mode 100644 index 00000000000..ea350640341 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_Fortune.sql @@ -0,0 +1,5 @@ +CREATE TABLE `fortune` ( + `id` int unsigned NOT NULL AUTO_INCREMENT, + `message` varchar(2048) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_World.sql b/frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_World.sql new file mode 100644 index 00000000000..d454446535d --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_World.sql @@ -0,0 +1,5 @@ +CREATE TABLE `world` ( + `id` int unsigned NOT NULL AUTO_INCREMENT, + `randomNumber` int NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortunebase.h b/frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortunebase.h new file mode 100644 index 00000000000..390c6cb8f46 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortunebase.h @@ -0,0 +1,2556 @@ +#ifndef ORM_DEFAULT_FORTUNEBASEMATA_H +#define ORM_DEFAULT_FORTUNEBASEMATA_H +/* +*This file is auto create from cli +*本文件为自动生成 Sun, 21 Jan 2024 08:50:49 GMT +***/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "mysql.h" +namespace orm { + + +struct fortunebase +{ + struct meta{ + unsigned int id= 0; // + std::string message=""; // + } data; + std::vector record; +std::string _rmstag="default";//this value must be default or tag value, tag in mysqlconnect config file . +std::vector _keypos{0x00}; +MYSQL_ROW _row; +std::vector::iterator begin(){ return record.begin(); } +std::vector::iterator end(){ return record.end(); } +std::vector::const_iterator begin() const{ return record.begin(); } +std::vector::const_iterator end() const{ return record.end(); } +const std::array colnames={"id","message"}; +const std::array colnamestype= {3,253}; +std::string tablename="fortune"; +std::string modelname="Fortune"; + + unsigned char findcolpos(const std::string &coln){ + if(coln.size()==0) + { + return 255; + } + unsigned char bi=coln[0]; + + + if(bi<91&&bi>64){ + bi+=32; + } + switch(coln[0]){ + + + case 'i': + return 0; +break; +case 'm': + return 1; +break; + + } + return 255; + } + + int size(){ return record.size(); } + + std::string getPKname(){ + return "id"; +} + + void record_reset() + { + record.clear(); + } + void data_reset(){ + fortunebase::meta metatemp; + data = metatemp; + } + + std::string soft_remove_sql([[maybe_unused]] const std::string &fieldsql){ + std::string temp; + + return temp; + } + void _setColnamevalue() + { + for(unsigned char i=0;i<_keypos.size();i++) + { + switch(_keypos[i]){ + case 0: + try{ + data.id=std::stoul(_row[i]); + }catch (...) { + data.id=0; + } + break; + case 1: + try{ + data.message.append((_row[i]==NULL?"":_row[i])); + }catch (...) { + data.message.clear(); + } + break; + default: + { } + + + } + + if(i>210){ + break; + } + } + } + void _addnewrowvalue(){ + fortunebase::meta metatemp; + + for(unsigned char i=0;i<_keypos.size();i++){ + + switch(_keypos[i]){ + + case 0: + try{ + metatemp.id=std::stoul(_row[i]); + }catch (...) { + metatemp.id=0; + } + break; + case 1: + try{ + metatemp.message.append((_row[i]==NULL?"":_row[i])); + }catch (...) { + metatemp.message.clear(); + } + break; + default: + { } + + + } + if(i>210){ + break; + } + } + record.emplace_back(std::move(metatemp)); + } + + inline std::string stringaddslash(std::string &content){ + std::string temp; + for(unsigned int i=0;i0){ + tempsql<<"`,`"; + }else{ + tempsql<<"`"; + } + tempsql<0){ + tempsql<<"`"; + } + tempsql<<") VALUES ("; + + if(data.id==0){ +tempsql<<"null"; + }else{ + tempsql<0){ + tempsql<<"`,`"; + }else{ + tempsql<<"`"; + } + tempsql<0){ + tempsql<<"`"; + } + tempsql<<") VALUES ("; + + if(insert_data.id==0){ +tempsql<<"null"; + }else{ + tempsql< &insert_data){ + unsigned int j=0; + std::ostringstream tempsql; + tempsql<<"INSERT INTO "; + tempsql<0){ + tempsql<<"`,`"; + }else{ + tempsql<<"`"; + } + tempsql<0){ + tempsql<<"`"; + } + tempsql<<") VALUES "; + + for(unsigned int i=0;i0) + { + tempsql<<","; + } + tempsql<<"("; + + + if(insert_data[i].id==0){ + tempsql<<"null"; + }else{ + tempsql< keypos; + for(;jj0){ + unsigned char bpos_i=findcolpos(keyname); + #ifdef DEBUG + if (bpos_i == 254) + { + std::cout << "\033[1m\033[31m-----------\n" + << keyname << " not in " << tablename << " table Field.\n-----------\033[0m" + << std::endl; + } +#endif + keypos.emplace_back(bpos_i); + keyname.clear(); + } + for(jj=0;jj0){ tempsql<<","; } +if(data.id==0){ + tempsql<<"`id`=0"; + }else{ + tempsql<<"`id`="<0){ tempsql<<","; } +tempsql<<"`message`='"< data_toarray(std::string fileld=""){ + std::vector temparray; + std::string keyname; + unsigned char jj=0; + std::vector keypos; + if(fileld.size()>1){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj data_tomap(std::string fileld=""){ + std::map tempsql; + std::string keyname; + unsigned char jj=0; + std::vector keypos; + if(fileld.size()>1){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj keypos; + if(fileld.size()>0){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj0){ tempsql<<","; } +if(data.id==0){ + tempsql<<"\"id\":0"; + }else{ + tempsql<<"\"id\":"<0){ tempsql<<","; } +tempsql<<"\"message\":\""< list_content; + for(;json_offset0) + { + data=metatemp; + } + if(json_offset>=json_content.size()) + { + break; + } + for(;json_offset=json_content.size()) + { + break; + } + json_value_name.clear(); + if(json_content[json_offset]==0x22) + { + + temp_offset=json_offset; + json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset); + json_offset=temp_offset; + if(json_content[json_offset]==0x22) + { + json_offset+=1; + } + } + else + { + if(json_content[json_offset]!='{'&&json_content[json_offset]!=']') + { + for(;json_offset1) + { + data=record[0]; + } + } + else + { + if(json_content[json_offset]=='{') + { + json_offset+=1; + std::string json_key_name,json_value_name; + + + for(;json_offset=json_content.size()) + { + break; + } + json_value_name.clear(); + if(json_content[json_offset]==0x22) + { + + temp_offset=json_offset; + json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset); + json_offset=temp_offset; + if(json_content[json_offset]==0x22) + { + json_offset+=1; + } + } + else + { + if(json_content[json_offset]!='{'&&json_content[json_offset]!=']') + { + for(;json_offset keypos; + if(fileld.size()>0){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj0){ + tempsql<<",{"; + }else{ + tempsql<<"{"; + } + + for(jj=0;jj0){ tempsql<<","; } +if(record[n].id==0){ + tempsql<<"\"id\":0"; + }else{ + tempsql<<"\"id\":"<0){ tempsql<<","; } +tempsql<<"\"message\":\""< func,std::string fileld=""){ + std::ostringstream tempsql; + std::string keyname; + unsigned char jj=0; + std::vector keypos; + if(fileld.size()>0){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj0){ + tempsql<<",{"; + }else{ + tempsql<<"{"; + } + tempsql<0){ tempsql<<","; } +if(record[n].id==0){ + tempsql<<"\"id\":0"; + }else{ + tempsql<<"\"id\":"<0){ tempsql<<","; } +tempsql<<"\"message\":\""< getRecord(){ + return record; +} + + + template::value,bool>::type = true> + T& ref_meta([[maybe_unused]] std::string key_name) + { + if(key_name=="message") + { + return data.message; + } + return nullptr; + } + + + template,bool>::type = true> + T& ref_meta([[maybe_unused]] std::string key_name) + { + if(key_name=="id") + { + return data.id; + } + return nullptr; + } + + + template,bool>::type = true > + T& ref_meta([[maybe_unused]] std::string key_name) + { + return nullptr; + } + + template,bool>::type = true > + std::vector getCol([[maybe_unused]] std::string keyname) + { + std::vector a; + + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + case 0: + a.emplace_back(iter.id); + break; + + } + } + + return a; + } + + template,bool>::type = true > + std::vector getCol([[maybe_unused]] std::string keyname) + { + std::vector a; + + + return a; + } + + template,bool>::type = true > + T getVal([[maybe_unused]] std::string keyname) + { + + unsigned char kpos; + kpos=findcolpos(keyname); + switch(kpos) + { + + case 0: + return data.id; + break; + } + return 0; + } + + template,bool>::type = true > + T getVal([[maybe_unused]] fortunebase::meta & iter,[[maybe_unused]] std::string keyname) + { + + + unsigned char kpos; + kpos=findcolpos(keyname); + switch(kpos) + { + case 0: + return iter.id; + break; + + } + + return 0; + } + + template,bool>::type = true > + T getVal(std::string keyname) + { + unsigned char kpos; + kpos=findcolpos(keyname); + + switch(kpos) + { + + + } + + + return 0.0; + } + + template,bool>::type = true > + T getVal([[maybe_unused]] fortunebase::meta & iter,std::string keyname) + { + unsigned char kpos; + kpos=findcolpos(keyname); + switch(kpos) + { + + } + + + + return 0.0; + } + + template::value,bool>::type = true > + std::string getVal(std::string keyname) + { + unsigned char kpos; + kpos=findcolpos(keyname); + + switch(kpos) + { + + case 1: + return data.message; + break; + + } + return ""; + } + + template::value,bool>::type = true > + std::string getVal([[maybe_unused]] fortunebase::meta & iter,std::string keyname) + { + + unsigned char kpos; + kpos=findcolpos(keyname); + + switch(kpos) + { + + case 1: + return iter.message; + break; + + } + + + + return ""; + } + + template::value,bool>::type = true > + std::vector getCol([[maybe_unused]] std::string keyname) + { + std::vector a; + + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + a.emplace_back(iter.message); + break; + } + } + + return a; + } + + std::string getstrCol(std::string keyname,[[maybe_unused]] bool isyinhao=false) + { + std::ostringstream a; + + unsigned char kpos; + kpos=findcolpos(keyname); + int j=0; + if(isyinhao&&record.size()>0) + { + a<<'"'; + } + for(auto &iter:record) + { + if(j>0) + { + if(isyinhao) + { + a<<"\",\""; + }else{ + a<<','; + } + } + switch(kpos) + { + + case 0: + a<0){ + a<<'"'; + } + + return a.str(); + } + + template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + std::string ktemp,vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + switch(vpos){ + case 1: + vtemp=iter.message; + break; + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + + return a; + } + + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + std::string ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + switch(vpos){ + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + switch(vpos){ + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + std::string vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + switch(vpos){ + case 1: + vtemp=iter.message; + break; + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + std::string ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template,bool>::type = true > + std::map getmapRows([[maybe_unused]] std::string keyname) + { + std::map a; + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + a.emplace(iter.id,iter); + break; + + } + } + + return a; + } + + template::value,bool>::type = true > + std::map getmapRows([[maybe_unused]] std::string keyname) + { + std::map a; + + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + a.emplace(iter.message,iter); + break; + + } + //a.emplace(ktemp,iter); + } + + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + std::string ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + switch(vpos){ + + } + + a.emplace_back(ktemp,vtemp); + } + + + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + switch(vpos){ + + } + + a.emplace_back(ktemp,vtemp); + } + + + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + switch(vpos){ + case 1: + vtemp=iter.message; + break; + + } + + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + + } + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + + } + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + switch(vpos){ +case 1: + vtemp=iter.message; + break; + + } + + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template,bool>::type = true > + std::vector> getvecRows([[maybe_unused]] std::string keyname) + { + std::vector> a; + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + a.emplace_back(iter.id,iter); + break; + + } + } + + return a; + } + template::value,bool>::type = true > + std::vector> getvecRows([[maybe_unused]] std::string keyname) + { + std::vector> a; + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + a.emplace_back(iter.message,iter); + break; + + } + } + + + return a; + } + template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + } + + switch(dpos){ + + } + } + + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + //D vtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + } + + switch(dpos){ + case 1: + a[ktemp][vtemp].emplace_back(iter.message); + break; + + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 1: + vtemp=iter.message; + break; + } + + switch(dpos){ + + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 1: + vtemp=iter.message; + break; + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + + } + } + + return a; + } + template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 1: + vtemp=iter.message; + break; + } + + switch(dpos){ + case 1: + a[ktemp][vtemp].emplace_back(iter.message); + break; + + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + //D vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + } + + switch(dpos){ + + } + } + + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + //D vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + } + + switch(dpos){ + case 1: + a[ktemp][vtemp].emplace_back(iter.message); + break; + + } + } + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 1: + vtemp=iter.message; + break; + } + + switch(dpos){ + + } + } + + + return a; + } + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 1: + vtemp=iter.message; + break; + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + + } + } + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 1: + vtemp=iter.message; + break; + } + + switch(dpos){ + case 1: + a[ktemp][vtemp].emplace_back(iter.message); + break; + + } + } + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 1: + a[ktemp].emplace_back(iter.message); + break; + + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + + } + } + + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 0: + a[ktemp].emplace_back(iter.id); + break; + + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 1: + a[ktemp].emplace_back(iter.message); + break; + + } + } + + + return a; + } + + template,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 0: + a[ktemp].emplace_back(iter.id); + break; + + } + } + + return a; + } + + template,bool>::type = true> + std::map> getgroupRows([[maybe_unused]] std::string keyname) + { + std::map> a; + + unsigned char kpos; + kpos=findcolpos(keyname); + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + a[iter.id].emplace_back(iter); + break; + + } + } + + return a; + } + + template::value,bool>::type = true> + std::map> getgroupRows([[maybe_unused]] std::string keyname) + { + std::map> a; + + unsigned char kpos; + kpos=findcolpos(keyname); + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + a[iter.message].emplace_back(iter); + break; + + } + } + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 1: + a[ktemp][iter.message].emplace_back(iter); + break; + + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 0: + a[ktemp][iter.id].emplace_back(iter); + break; + + } + } + + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 0: + a[ktemp][iter.id].emplace_back(iter); + break; + + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 1: + a[ktemp][iter.message].emplace_back(iter); + break; + + } + } + + return a; + } + + }; + + +} +#endif + \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/orm/include/worldbase.h b/frameworks/C++/paozhu/paozhu_benchmark/orm/include/worldbase.h new file mode 100644 index 00000000000..312571481d7 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/orm/include/worldbase.h @@ -0,0 +1,2370 @@ +#ifndef ORM_DEFAULT_WORLDBASEMATA_H +#define ORM_DEFAULT_WORLDBASEMATA_H +/* +*This file is auto create from cli +*本文件为自动生成 Sun, 21 Jan 2024 08:50:49 GMT +***/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "mysql.h" +namespace orm { + + +struct worldbase +{ + struct meta{ + unsigned int id= 0; // + int randomnumber= 0; // + } data; + std::vector record; +std::string _rmstag="default";//this value must be default or tag value, tag in mysqlconnect config file . +std::vector _keypos{0x00}; +MYSQL_ROW _row; +std::vector::iterator begin(){ return record.begin(); } +std::vector::iterator end(){ return record.end(); } +std::vector::const_iterator begin() const{ return record.begin(); } +std::vector::const_iterator end() const{ return record.end(); } +const std::array colnames={"id","randomnumber"}; +const std::array colnamestype= {3,3}; +std::string tablename="world"; +std::string modelname="World"; + + unsigned char findcolpos(const std::string &coln){ + if(coln.size()==0) + { + return 255; + } + unsigned char bi=coln[0]; + + + if(bi<91&&bi>64){ + bi+=32; + } + switch(coln[0]){ + + + case 'i': + return 0; +break; +case 'r': + return 1; +break; + + } + return 255; + } + + int size(){ return record.size(); } + + std::string getPKname(){ + return "id"; +} + + void record_reset() + { + record.clear(); + } + void data_reset(){ + worldbase::meta metatemp; + data = metatemp; + } + + std::string soft_remove_sql([[maybe_unused]] const std::string &fieldsql){ + std::string temp; + + return temp; + } + void _setColnamevalue() + { + for(unsigned char i=0;i<_keypos.size();i++) + { + switch(_keypos[i]){ + case 0: + try{ + data.id=std::stoul(_row[i]); + }catch (...) { + data.id=0; + } + break; + case 1: + try{ + data.randomnumber=std::stoi(_row[i]); + }catch (...) { + data.randomnumber=0; + } + break; + default: + { } + + + } + + if(i>210){ + break; + } + } + } + void _addnewrowvalue(){ + worldbase::meta metatemp; + + for(unsigned char i=0;i<_keypos.size();i++){ + + switch(_keypos[i]){ + + case 0: + try{ + metatemp.id=std::stoul(_row[i]); + }catch (...) { + metatemp.id=0; + } + break; + case 1: + try{ + metatemp.randomnumber=std::stoi(_row[i]); + }catch (...) { + metatemp.randomnumber=0; + } + break; + default: + { } + + + } + if(i>210){ + break; + } + } + record.emplace_back(std::move(metatemp)); + } + + inline std::string stringaddslash(std::string &content){ + std::string temp; + for(unsigned int i=0;i0){ + tempsql<<"`,`"; + }else{ + tempsql<<"`"; + } + tempsql<0){ + tempsql<<"`"; + } + tempsql<<") VALUES ("; + + if(data.id==0){ +tempsql<<"null"; + }else{ + tempsql<0){ + tempsql<<"`,`"; + }else{ + tempsql<<"`"; + } + tempsql<0){ + tempsql<<"`"; + } + tempsql<<") VALUES ("; + + if(insert_data.id==0){ +tempsql<<"null"; + }else{ + tempsql< &insert_data){ + unsigned int j=0; + std::ostringstream tempsql; + tempsql<<"INSERT INTO "; + tempsql<0){ + tempsql<<"`,`"; + }else{ + tempsql<<"`"; + } + tempsql<0){ + tempsql<<"`"; + } + tempsql<<") VALUES "; + + for(unsigned int i=0;i0) + { + tempsql<<","; + } + tempsql<<"("; + + + if(insert_data[i].id==0){ + tempsql<<"null"; + }else{ + tempsql<0){ + unsigned char bpos_i=findcolpos(keyname); + #ifdef DEBUG + if (bpos_i == 254) + { + std::cout << "\033[1m\033[31m-----------\n" + << keyname << " not in " << tablename << " table Field.\n-----------\033[0m" + << std::endl; + } +#endif + keypos.emplace_back(bpos_i); + keyname.clear(); + } + for(jj=0;jj0){ tempsql<<","; } +if(data.id==0){ + tempsql<<"`id`=0"; + }else{ + tempsql<<"`id`="<0){ tempsql<<","; } +if(data.randomnumber==0){ + tempsql<<"`randomnumber`=0"; + }else{ + tempsql<<"`randomnumber`="< data_toarray(std::string fileld=""){ + std::vector temparray; + std::string keyname; + unsigned char jj=0; + std::vector keypos; + if(fileld.size()>1){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj data_tomap(std::string fileld=""){ + std::map tempsql; + std::string keyname; + unsigned char jj=0; + std::vector keypos; + if(fileld.size()>1){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj keypos; + if(fileld.size()>0){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj0){ tempsql<<","; } +if(data.id==0){ + tempsql<<"\"id\":0"; + }else{ + tempsql<<"\"id\":"<0){ tempsql<<","; } +if(data.randomnumber==0){ + tempsql<<"\"randomnumber\":0"; + }else{ + tempsql<<"\"randomnumber\":"< list_content; + for(;json_offset0) + { + data=metatemp; + } + if(json_offset>=json_content.size()) + { + break; + } + for(;json_offset=json_content.size()) + { + break; + } + json_value_name.clear(); + if(json_content[json_offset]==0x22) + { + + temp_offset=json_offset; + json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset); + json_offset=temp_offset; + if(json_content[json_offset]==0x22) + { + json_offset+=1; + } + } + else + { + if(json_content[json_offset]!='{'&&json_content[json_offset]!=']') + { + for(;json_offset1) + { + data=record[0]; + } + } + else + { + if(json_content[json_offset]=='{') + { + json_offset+=1; + std::string json_key_name,json_value_name; + + + for(;json_offset=json_content.size()) + { + break; + } + json_value_name.clear(); + if(json_content[json_offset]==0x22) + { + + temp_offset=json_offset; + json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset); + json_offset=temp_offset; + if(json_content[json_offset]==0x22) + { + json_offset+=1; + } + } + else + { + if(json_content[json_offset]!='{'&&json_content[json_offset]!=']') + { + for(;json_offset keypos; + if(fileld.size()>0){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj0){ + tempsql<<",{"; + }else{ + tempsql<<"{"; + } + + for(jj=0;jj0){ tempsql<<","; } +if(record[n].id==0){ + tempsql<<"\"id\":0"; + }else{ + tempsql<<"\"id\":"<0){ tempsql<<","; } +if(record[n].randomnumber==0){ + tempsql<<"\"randomnumber\":0"; + }else{ + tempsql<<"\"randomnumber\":"< func,std::string fileld=""){ + std::ostringstream tempsql; + std::string keyname; + unsigned char jj=0; + std::vector keypos; + if(fileld.size()>0){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj0){ + tempsql<<",{"; + }else{ + tempsql<<"{"; + } + tempsql<0){ tempsql<<","; } +if(record[n].id==0){ + tempsql<<"\"id\":0"; + }else{ + tempsql<<"\"id\":"<0){ tempsql<<","; } +if(record[n].randomnumber==0){ + tempsql<<"\"randomnumber\":0"; + }else{ + tempsql<<"\"randomnumber\":"< getRecord(){ + return record; +} + + + template::value,bool>::type = true> + T& ref_meta([[maybe_unused]] std::string key_name) + { + return nullptr; + } + + + template,bool>::type = true> + T& ref_meta([[maybe_unused]] std::string key_name) + { + if(key_name=="id") + { + return data.id; + } + if(key_name=="randomnumber") + { + return data.randomnumber; + } + return nullptr; + } + + + template,bool>::type = true > + T& ref_meta([[maybe_unused]] std::string key_name) + { + return nullptr; + } + + template,bool>::type = true > + std::vector getCol([[maybe_unused]] std::string keyname) + { + std::vector a; + + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + case 0: + a.emplace_back(iter.id); + break; + case 1: + a.emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + + template,bool>::type = true > + std::vector getCol([[maybe_unused]] std::string keyname) + { + std::vector a; + + + return a; + } + + template,bool>::type = true > + T getVal([[maybe_unused]] std::string keyname) + { + + unsigned char kpos; + kpos=findcolpos(keyname); + switch(kpos) + { + + case 0: + return data.id; + break; + case 1: + return data.randomnumber; + break; + } + return 0; + } + + template,bool>::type = true > + T getVal([[maybe_unused]] worldbase::meta & iter,[[maybe_unused]] std::string keyname) + { + + + unsigned char kpos; + kpos=findcolpos(keyname); + switch(kpos) + { + case 0: + return iter.id; + break; + case 1: + return iter.randomnumber; + break; + + } + + return 0; + } + + template,bool>::type = true > + T getVal(std::string keyname) + { + unsigned char kpos; + kpos=findcolpos(keyname); + + switch(kpos) + { + + + } + + + return 0.0; + } + + template,bool>::type = true > + T getVal([[maybe_unused]] worldbase::meta & iter,std::string keyname) + { + unsigned char kpos; + kpos=findcolpos(keyname); + switch(kpos) + { + + } + + + + return 0.0; + } + + template::value,bool>::type = true > + std::string getVal(std::string keyname) + { + unsigned char kpos; + kpos=findcolpos(keyname); + + switch(kpos) + { + + + } + return ""; + } + + template::value,bool>::type = true > + std::string getVal([[maybe_unused]] worldbase::meta & iter,std::string keyname) + { + + unsigned char kpos; + kpos=findcolpos(keyname); + + switch(kpos) + { + + + } + + + + return ""; + } + + template::value,bool>::type = true > + std::vector getCol([[maybe_unused]] std::string keyname) + { + std::vector a; + + + + return a; + } + + std::string getstrCol(std::string keyname,[[maybe_unused]] bool isyinhao=false) + { + std::ostringstream a; + + unsigned char kpos; + kpos=findcolpos(keyname); + int j=0; + if(isyinhao&&record.size()>0) + { + a<<'"'; + } + for(auto &iter:record) + { + if(j>0) + { + if(isyinhao) + { + a<<"\",\""; + }else{ + a<<','; + } + } + switch(kpos) + { + + case 0: + a<0){ + a<<'"'; + } + + return a.str(); + } + + template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + return a; + } + + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; +case 1: + ktemp=iter.randomnumber; + break; + } + switch(vpos){ + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + std::string vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + switch(vpos){ + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + std::string ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template,bool>::type = true > + std::map getmapRows([[maybe_unused]] std::string keyname) + { + std::map a; + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + a.emplace(iter.id,iter); + break; + case 1: + a.emplace(iter.randomnumber,iter); + break; + + } + } + + return a; + } + + template::value,bool>::type = true > + std::map getmapRows([[maybe_unused]] std::string keyname) + { + std::map a; + + + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + switch(vpos){ + + } + + a.emplace_back(ktemp,vtemp); + } + + + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + switch(vpos){ + + } + + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + + switch(kpos) + { + + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + + } + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + + } + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + return a; + } + + template,bool>::type = true > + std::vector> getvecRows([[maybe_unused]] std::string keyname) + { + std::vector> a; + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + a.emplace_back(iter.id,iter); + break; +case 1: + a.emplace_back(iter.randomnumber,iter); + break; + + } + } + + return a; + } + template::value,bool>::type = true > + std::vector> getvecRows([[maybe_unused]] std::string keyname) + { + std::vector> a; + + + return a; + } + template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + } + + switch(dpos){ + + } + } + + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + //D vtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + case 1: + a[ktemp][vtemp].emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + } + + switch(dpos){ + + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + } + + switch(dpos){ + + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + case 1: + a[ktemp][vtemp].emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + } + + switch(dpos){ + + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + //D vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + } + + switch(dpos){ + + } + } + + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + //D vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + case 1: + a[ktemp][vtemp].emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + } + + switch(dpos){ + + } + } + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + return a; + } + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + } + + switch(vpos){ + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + case 1: + a[ktemp][vtemp].emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + + return a; + } + + template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + } + + switch(vpos){ + case 0: + a[ktemp].emplace_back(iter.id); + break; + case 1: + a[ktemp].emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + + } + } + + + return a; + } + + template,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + case 0: + a[ktemp].emplace_back(iter.id); + break; + case 1: + a[ktemp].emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + + template,bool>::type = true> + std::map> getgroupRows([[maybe_unused]] std::string keyname) + { + std::map> a; + + unsigned char kpos; + kpos=findcolpos(keyname); + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + a[iter.id].emplace_back(iter); + break; + case 1: + a[iter.randomnumber].emplace_back(iter); + break; + + } + } + + return a; + } + + template::value,bool>::type = true> + std::map> getgroupRows([[maybe_unused]] std::string keyname) + { + std::map> a; + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + } + + switch(vpos){ + case 0: + a[ktemp][iter.id].emplace_back(iter); + break; + case 1: + a[ktemp][iter.randomnumber].emplace_back(iter); + break; + + } + } + + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + case 0: + a[ktemp][iter.id].emplace_back(iter); + break; + case 1: + a[ktemp][iter.randomnumber].emplace_back(iter); + break; + + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + + } + } + + return a; + } + + }; + + +} +#endif + \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/orm/orm.h b/frameworks/C++/paozhu/paozhu_benchmark/orm/orm.h new file mode 100644 index 00000000000..816b9ae4dc9 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/orm/orm.h @@ -0,0 +1,4 @@ +/*build this file time Tue, 20 Dec 2022 11:40:56 GMT*/ + +#include "Fortune.h" +#include "World.h" From 43eb23eb2e26a22e11376aee3747601196128bc9 Mon Sep 17 00:00:00 2001 From: hzq Date: Fri, 12 Apr 2024 21:22:13 +0800 Subject: [PATCH 28/65] use local file --- frameworks/C++/paozhu/paozhu.dockerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 4054761398f..2ddd94248a7 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -16,7 +16,10 @@ WORKDIR / RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.8/benchmark.zip RUN unzip benchmark.zip -RUN mv ./benchmark/* ./ +# RUN mv ./benchmark/* ./ + +WORKDIR /benchmark +COPY ./ ./ RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release RUN cmake --build build From 27e69a20642e04d4a1af2f83d35a25d496ffe091 Mon Sep 17 00:00:00 2001 From: hzq Date: Fri, 12 Apr 2024 21:31:52 +0800 Subject: [PATCH 29/65] use git clone --- frameworks/C++/paozhu/paozhu.dockerfile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 2ddd94248a7..8453a6c8f0c 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -14,11 +14,12 @@ ENV LC_ALL en_US.UTF-8 WORKDIR / -RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.8/benchmark.zip -RUN unzip benchmark.zip +# RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.8/benchmark.zip +RUN git clone https://github.com/hggq/paozhu +# RUN unzip benchmark.zip +WORKDIR /paozhu +RUN unzip asio.zip # RUN mv ./benchmark/* ./ - -WORKDIR /benchmark COPY ./ ./ RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release From 4d11acc270371336fef2db827398d64a27dda7f9 Mon Sep 17 00:00:00 2001 From: hzq Date: Fri, 12 Apr 2024 21:43:39 +0800 Subject: [PATCH 30/65] add conf --- .../C++/paozhu/paozhu_benchmark/conf/orm.conf | 20 +++++++ .../paozhu/paozhu_benchmark/conf/server.conf | 55 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 frameworks/C++/paozhu/paozhu_benchmark/conf/orm.conf create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf diff --git a/frameworks/C++/paozhu/paozhu_benchmark/conf/orm.conf b/frameworks/C++/paozhu/paozhu_benchmark/conf/orm.conf new file mode 100644 index 00000000000..1700d25a66e --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/conf/orm.conf @@ -0,0 +1,20 @@ +[default] +type=main +host=tfb-database +port=3306 +dbname=hello_world +user=benchmarkdbuser +password=benchmarkdbpass +pretable= +maxpool=5 +dbtype=mysql + +type=second +host=tfb-database +port=3306 +dbname=hello_world +user=benchmarkdbuser +password=benchmarkdbpass +pretable= +maxpool=20 +dbtype=mysql diff --git a/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf b/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf new file mode 100755 index 00000000000..0433beac921 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf @@ -0,0 +1,55 @@ +[default] +threadmax=1024 +threadmin=5 +httpport=8888 +httpsport=4430 +cothreadnum=8 ;Coroutines run on thread num + +http2_enable=0 +debug_enable=1 +deamon_enable=0 +mainhost=www.869869.com +certificate_chain_file=www.869869.com.pem +private_key_file=www.869869.com.key +tmp_dh_file=dh4096.pem +reboot_password=e10adc3949ba59abbe56e057f20f883e ;md5(md5("123456")+"rand_char"+md5("123456")) +session_type=1 ;session save type 0.file 1.memory 2.redis 3.memcache 4.reserve +static_file_compress_cache=1 ;1 enable, Cache static file compress(gzip,br) content to cache directory +modelspath=/root/benchmark/models +serverpath=/root/benchmark +viewpath=/root/benchmark/view +viewsopath=/root/benchmark/module/view + +controlpath=/root/benchmark/controller +controlsopath=/root/benchmark/module/controller + +temppath=/root/benchmark/temp +logpath=/root/benchmark/log +wwwpath=/root/benchmark/www/default +pluginspath=/root/benchmark/plugins +libspath=/root/benchmark/libs +directorylist=1 +index=index.html +;usehtmlcache=1 +;usehtmlcachetime=3600 +rewrite_404=0 ;1 file 2 action url path +rewrite_404_action=index.html +method_pre= +method_after= +show_visitinfo=0 +upload_max_size=16777216 +[www.869869.com] +wwwpath=/root/benchmark/www/default +http2_enable=1 +;rewrite_404=1 +;rewrite_404_action=index.html|psy/index.html|exam/index.html +;controlsopath=/root/benchmark/docs/controller +static_pre=downloadfileauth|upload +method_pre= ;api/dev/hostcors +method_after= +isuse_php=0 +rewrite_php=/root/benchmark/www/thinkphp/public|index.php +fastcgi_host=127.0.0.1 +fastcgi_port=9000 +upload_max_size=16777216 + From c31468f05c4ed710864e1ff07965ce77124c8bfa Mon Sep 17 00:00:00 2001 From: hzq Date: Fri, 12 Apr 2024 21:58:45 +0800 Subject: [PATCH 31/65] add conf --- frameworks/C++/paozhu/paozhu.dockerfile | 2 ++ frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 8453a6c8f0c..1408772fbdf 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -21,6 +21,8 @@ WORKDIR /paozhu RUN unzip asio.zip # RUN mv ./benchmark/* ./ COPY ./ ./ +run cat ./conf/server.conf +run cat ./conf/orm.conf RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release RUN cmake --build build diff --git a/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf b/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf index 0433beac921..d15847751ef 100755 --- a/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf +++ b/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf @@ -28,7 +28,7 @@ logpath=/root/benchmark/log wwwpath=/root/benchmark/www/default pluginspath=/root/benchmark/plugins libspath=/root/benchmark/libs -directorylist=1 +directorylist=0 index=index.html ;usehtmlcache=1 ;usehtmlcachetime=3600 From cf136c2562c84180f65d3ae485cd236929c73829 Mon Sep 17 00:00:00 2001 From: hzq Date: Fri, 12 Apr 2024 22:07:16 +0800 Subject: [PATCH 32/65] add conf --- frameworks/C++/paozhu/paozhu.dockerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 1408772fbdf..9680a1eb6ef 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -20,13 +20,16 @@ RUN git clone https://github.com/hggq/paozhu WORKDIR /paozhu RUN unzip asio.zip # RUN mv ./benchmark/* ./ -COPY ./ ./ +COPY ./ / run cat ./conf/server.conf run cat ./conf/orm.conf RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release RUN cmake --build build +RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release +RUN cmake --build build + EXPOSE 8888 CMD ./bin/paozhu From 34cb558924a934a014b5e2a2b3f7c4f6ab3fb32d Mon Sep 17 00:00:00 2001 From: hzq Date: Fri, 12 Apr 2024 22:16:39 +0800 Subject: [PATCH 33/65] add conf --- frameworks/C++/paozhu/paozhu.dockerfile | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 9680a1eb6ef..583a21a2d87 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -12,15 +12,21 @@ ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 +COPY ./ ./ +RUN ls -l WORKDIR / # RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.8/benchmark.zip RUN git clone https://github.com/hggq/paozhu # RUN unzip benchmark.zip +RUN ls -l +# RUN mv ./benchmark/* ./ +COPY ./conf/server.conf ./paozhu/conf/server.conf +COPY ./conf/orm.conf ./paozhu/conf/orm.conf + + WORKDIR /paozhu RUN unzip asio.zip -# RUN mv ./benchmark/* ./ -COPY ./ / run cat ./conf/server.conf run cat ./conf/orm.conf From 826dcf9c8d1545068a4d74f0b4a6874ee43f6a4f Mon Sep 17 00:00:00 2001 From: hzq Date: Fri, 12 Apr 2024 22:25:41 +0800 Subject: [PATCH 34/65] add conf --- frameworks/C++/paozhu/paozhu.dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 583a21a2d87..918313ee1fb 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -21,9 +21,9 @@ RUN git clone https://github.com/hggq/paozhu # RUN unzip benchmark.zip RUN ls -l # RUN mv ./benchmark/* ./ -COPY ./conf/server.conf ./paozhu/conf/server.conf -COPY ./conf/orm.conf ./paozhu/conf/orm.conf - +COPY ./paozhu_benchmark/conf/server.conf ./paozhu/conf/server.conf +COPY ./paozhu_benchmark/conf/orm.conf ./paozhu/conf/orm.conf +COPY ./paozhu_benchmark/CMakeLists.txt ./paozhu/CMakeLists.txt WORKDIR /paozhu RUN unzip asio.zip From b7b6f2989ab58d1f9bb7757a123f78aecb76b025 Mon Sep 17 00:00:00 2001 From: hzq Date: Fri, 12 Apr 2024 22:41:24 +0800 Subject: [PATCH 35/65] use local files --- frameworks/C++/paozhu/paozhu.dockerfile | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 918313ee1fb..5bbe379a33a 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -13,28 +13,25 @@ ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 COPY ./ ./ -RUN ls -l WORKDIR / # RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.8/benchmark.zip RUN git clone https://github.com/hggq/paozhu # RUN unzip benchmark.zip -RUN ls -l -# RUN mv ./benchmark/* ./ +RUN rm -Rf ./paozhu/controller +RUN copy ./paozhu_benchmark/controller ./paozhu/ +RUN copy ./paozhu_benchmark/common ./paozhu/ + COPY ./paozhu_benchmark/conf/server.conf ./paozhu/conf/server.conf COPY ./paozhu_benchmark/conf/orm.conf ./paozhu/conf/orm.conf COPY ./paozhu_benchmark/CMakeLists.txt ./paozhu/CMakeLists.txt WORKDIR /paozhu RUN unzip asio.zip -run cat ./conf/server.conf -run cat ./conf/orm.conf RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release RUN cmake --build build -RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release -RUN cmake --build build EXPOSE 8888 From 0779d8919e077b0f15305f4cceca83f7bb00fa34 Mon Sep 17 00:00:00 2001 From: hzq Date: Fri, 12 Apr 2024 22:46:01 +0800 Subject: [PATCH 36/65] use local files --- frameworks/C++/paozhu/paozhu.dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 5bbe379a33a..e4a06f4a500 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -19,8 +19,8 @@ WORKDIR / RUN git clone https://github.com/hggq/paozhu # RUN unzip benchmark.zip RUN rm -Rf ./paozhu/controller -RUN copy ./paozhu_benchmark/controller ./paozhu/ -RUN copy ./paozhu_benchmark/common ./paozhu/ +COPY ./paozhu_benchmark/controller ./paozhu/ +COPY ./paozhu_benchmark/common ./paozhu/ COPY ./paozhu_benchmark/conf/server.conf ./paozhu/conf/server.conf COPY ./paozhu_benchmark/conf/orm.conf ./paozhu/conf/orm.conf From 2c98ff2b7677ca378499c787e7dba5e9bc2019f0 Mon Sep 17 00:00:00 2001 From: hzq Date: Fri, 12 Apr 2024 22:53:48 +0800 Subject: [PATCH 37/65] use local files --- frameworks/C++/paozhu/paozhu.dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index e4a06f4a500..8902739a00d 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -19,6 +19,7 @@ WORKDIR / RUN git clone https://github.com/hggq/paozhu # RUN unzip benchmark.zip RUN rm -Rf ./paozhu/controller +RUN rm -Rf ./paozhu/common COPY ./paozhu_benchmark/controller ./paozhu/ COPY ./paozhu_benchmark/common ./paozhu/ From 6fa9da635c02a8fb232f49b66c55fd0ad3830ab2 Mon Sep 17 00:00:00 2001 From: hzq Date: Fri, 12 Apr 2024 23:04:43 +0800 Subject: [PATCH 38/65] use local files --- frameworks/C++/paozhu/paozhu.dockerfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 8902739a00d..2b3329b664c 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -19,9 +19,11 @@ WORKDIR / RUN git clone https://github.com/hggq/paozhu # RUN unzip benchmark.zip RUN rm -Rf ./paozhu/controller -RUN rm -Rf ./paozhu/common + COPY ./paozhu_benchmark/controller ./paozhu/ -COPY ./paozhu_benchmark/common ./paozhu/ +COPY ./paozhu_benchmark/common/autocontrolmethod.hpp ./paozhu/common/ +COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ +COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ COPY ./paozhu_benchmark/conf/server.conf ./paozhu/conf/server.conf COPY ./paozhu_benchmark/conf/orm.conf ./paozhu/conf/orm.conf From 8678e0b9af767e03c6a893ff5c7bfcd1a283a363 Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 17 Apr 2024 23:45:19 +0800 Subject: [PATCH 39/65] Remove files --- .../common/autorestfulpaths.hpp | 28 - .../paozhu_benchmark/common/cost_define.h | 9 - .../paozhu_benchmark/common/httphook.cpp | 39 - .../common/json_reflect_headers.h | 32 - .../common/websockets_method_reg.hpp | 19 - .../libs/types/techempower_json.h | 15 - .../types/techempower_json_jsonreflect.cpp | 290 -- .../orm/_rawsqlfile/default_Fortune.sql | 5 - .../orm/_rawsqlfile/default_World.sql | 5 - .../orm/include/fortunebase.h | 2556 ----------------- .../paozhu_benchmark/orm/include/worldbase.h | 2370 --------------- .../C++/paozhu/paozhu_benchmark/orm/orm.h | 4 - .../paozhu_benchmark/test/testbenchmark.cpp | 126 - 13 files changed, 5498 deletions(-) delete mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/autorestfulpaths.hpp delete mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/cost_define.h delete mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/httphook.cpp delete mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h delete mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/websockets_method_reg.hpp delete mode 100755 frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h delete mode 100755 frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp delete mode 100644 frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_Fortune.sql delete mode 100644 frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_World.sql delete mode 100644 frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortunebase.h delete mode 100644 frameworks/C++/paozhu/paozhu_benchmark/orm/include/worldbase.h delete mode 100644 frameworks/C++/paozhu/paozhu_benchmark/orm/orm.h delete mode 100755 frameworks/C++/paozhu/paozhu_benchmark/test/testbenchmark.cpp diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/autorestfulpaths.hpp b/frameworks/C++/paozhu/paozhu_benchmark/common/autorestfulpaths.hpp deleted file mode 100755 index d7a1d639822..00000000000 --- a/frameworks/C++/paozhu/paozhu_benchmark/common/autorestfulpaths.hpp +++ /dev/null @@ -1,28 +0,0 @@ - -#ifndef __HTTP_AUTO_REG_CONTROL_HTTPRESTFUL_HPP -#define __HTTP_AUTO_REG_CONTROL_HTTPRESTFUL_HPP - -#if defined(_MSC_VER) && (_MSC_VER >= 1200) -#pragma once -#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) - -#include "httppeer.h" - - - -namespace http -{ - void _initauto_control_httprestful_paths(std::map> &restfulmethod) - { - - - if(restfulmethod.size()) - {} - - - } -} - -#endif - - \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/cost_define.h b/frameworks/C++/paozhu/paozhu_benchmark/common/cost_define.h deleted file mode 100755 index 47fb182f0e0..00000000000 --- a/frameworks/C++/paozhu/paozhu_benchmark/common/cost_define.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once -#ifndef _CONST_DEFINE_FUNC_H -#define _CONST_DEFINE_FUNC_H - -#define CONST_MONEY_PART 1000000 -#define CONST_HTTP_HEADER_BODY_SIZE 16384 -#define CONST_PHP_BODY_POST_SIZE 16777216 - -#endif \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/httphook.cpp b/frameworks/C++/paozhu/paozhu_benchmark/common/httphook.cpp deleted file mode 100755 index 3440c23f84b..00000000000 --- a/frameworks/C++/paozhu/paozhu_benchmark/common/httphook.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "httppeer.h" -namespace http -{ -std::map _block_ip_tables; -std::map _block_host_tables; -bool check_blockip(const std::string &client_ip) -{ - if (client_ip.size() > 0) - { - return false; - } - return false; -} -bool hook_host_http1(std::shared_ptr peer) -{ - if (peer->host.size() > 0) - { - return false; - } - return false; -} -bool hook_host_http2(std::shared_ptr peer) -{ - if (peer->host.size() > 0) - { - return false; - } - return false; -} -}// namespace http diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h b/frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h deleted file mode 100755 index 176500bf383..00000000000 --- a/frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once -#include -#include -#include -#include - -#include "types/techempower_json.h" -#include "unicode.h" - -template -std::string json_encode([[maybe_unused]] const JSON_REF_OBJ_TEMP &json_reflectobj) { return ""; } - -template -std::string json_encode([[maybe_unused]] const std::vector &json_reflectobj) { return ""; } - -template -unsigned int json_decode([[maybe_unused]] JSON_REF_OBJ_TEMP &json_reflectobj, [[maybe_unused]] const std::string &_json_data, [[maybe_unused]] unsigned int _offset) { return 0; } - -template -unsigned int json_decode([[maybe_unused]] std::vector &json_reflectobj, [[maybe_unused]] const std::string &_json_data, [[maybe_unused]] unsigned int _offset) { return 0; } - -namespace http -{ - -std::string json_encode(const techempower_outjson_t &json_reflectobj); - -std::string json_encode(const std::vector &json_reflectobj); - -unsigned int json_decode(techempower_outjson_t &json_reflectobj, const std::string &_json_data, unsigned int _offset = 0); - -unsigned int json_decode(std::vector &json_reflectobj, const std::string &_json_data, unsigned int _offset = 0); -}// namespace http diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/websockets_method_reg.hpp b/frameworks/C++/paozhu/paozhu_benchmark/common/websockets_method_reg.hpp deleted file mode 100755 index b8e9c718ea9..00000000000 --- a/frameworks/C++/paozhu/paozhu_benchmark/common/websockets_method_reg.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once -#include -#include "httppeer.h" -#include "websockets.h" -#include "mywebsockets.hpp" -#include "websockets_callback.h" -namespace http -{ -void _initwebsocketmethodregto(WEBSOCKET_REG &methodcallback) -{ - - methodcallback.emplace("wstest", [](std::weak_ptr p) -> std::shared_ptr - { return http::mywebsockets::create(p); }); - // methodcallback.emplace("looptest",[](std::weak_ptr p)->std::shared_ptr{ - // return http::loopwebsockets::create(p); - // }); -} - -}// namespace http \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h b/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h deleted file mode 100755 index 364c06bb2cf..00000000000 --- a/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef LIBS_TYPES_TECHEMPOWER_TYPE_H -#define LIBS_TYPES_TECHEMPOWER_TYPE_H -#include -#include - -namespace http -{ -//@reflect json to_json from_json -struct techempower_outjson_t -{ - std::string message; -}; - -}// namespace http -#endif diff --git a/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp b/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp deleted file mode 100755 index b5088efcdf9..00000000000 --- a/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp +++ /dev/null @@ -1,290 +0,0 @@ -#include -#include -#include -#include -#include "types/techempower_json.h" -#include "json_reflect_headers.h" -#include "unicode.h" -#include "func.h" - -namespace http -{ - - -std::string json_encode(const techempower_outjson_t &json_reflectobj) - { - - std::stringstream _stream; - _stream << "{"; - _stream << "\"message\":\"" << http::utf8_to_jsonstring(json_reflectobj.message)<< "\""; - - _stream << "}"; - - return _stream.str(); - - } - - -std::string json_encode(const std::vector &json_reflectobj) - { - std::stringstream _stream; - _stream << "["; - - for(unsigned int i=0;i0) - { - _stream <<","; - } - _stream < - //递归代码 - - _offset++; - for ( ; _offset < _json_data.size(); _offset++) - { - if (_json_data[_offset] == '}') - { - //offset++; - break; - } - if (_json_data[_offset] == '"') - { - _offset++; - for ( ; _offset < _json_data.size(); _offset++) - { - if (_json_data[_offset] == '"'&&_json_data[_offset-1]!=0x5C) - { - break; - } - } - } - } - - - if(_offset < _json_data.size() && (_json_data[_offset]==']'||_json_data[_offset]=='}')) - { - _offset-=1; - } - //直接下一个,不用处理键值 - continue; - } - else if(_json_data[_offset]=='[') - { //表示有数组 - ////////////////////////////////////////////////////////////////////// - //begin level1 [] - //vector vector> vector> - //如果是非内置类型 直接使用json_decode<> - - //递归代码 - - - _offset++; - for ( ; _offset < _json_data.size(); _offset++) - { - if (_json_data[_offset] == ']') - { - //offset++; - break; - } - if (_json_data[_offset] == '"') - { - _offset++; - for ( ; _offset < _json_data.size(); _offset++) - { - if (_json_data[_offset] == '"'&&_json_data[_offset-1]!=0x5C) - { - break; - } - } - } - } - - //直接下一个,不用处理键值 - if(_offset < _json_data.size() && (_json_data[_offset]==']'||_json_data[_offset]=='}')) - { - _offset-=1; - } - continue; - //end level1[] - //////////////////////////////////////////////////////////////////// - } - else if(_json_data[_offset]==0x22) - { - //如果键值也是字符串 - temp_offset=_offset; - _json_value_name=http::jsonstring_to_utf8(&_json_data[_offset],_json_data.size()-_offset,temp_offset); - _offset=temp_offset; - if(_json_data[_offset]==0x22) - { - if((_offset+1)<_json_data.size()) - { - if(_json_data[_offset+1]!=']'&&_json_data[_offset+1]!='}') - { - _offset+=1; - } - } - } - } - else - { - //表示是数字 bool NULL - for(;_offset<_json_data.size();_offset++) - { - //结束条件 - if(_json_data[_offset]==','||_json_data[_offset]==']'||_json_data[_offset]=='}'||_json_data[_offset]==0x20||_json_data[_offset]==0x0A||_json_data[_offset]==0x0D||_json_data[_offset]=='\t') - { - break; - } - _json_value_name.push_back(_json_data[_offset]); - } - //让前面循环退出或返回 - if(_offset < _json_data.size() && _json_data[_offset]=='}') - { - _offset-=1; - } - } - //////////////////////////////////////////////////////// - // level1 - //处理对象赋值 - if (http::str_casecmp(_json_key_name, "message")) - { - - json_reflectobj.message=_json_value_name; - } - - //////////////////////////////////////////////////////// - //继续循环下一个键值 - continue; - } - } - } - return _offset; - } - -unsigned int json_decode(std::vector &json_reflectobj,const std::string &_json_data,unsigned int _offset) - { - bool _isarray=false; - for(;_offset<_json_data.size();_offset++) - { - if(_json_data[_offset]=='{') - { - break; - } - if(_json_data[_offset]=='[') - { - _isarray=true; - break; - } - } - - if(_isarray) - { - if(_json_data[_offset]=='[') - { - _offset+=1; - } - for(;_offset<_json_data.size();_offset++) - { - _offset=http::json_string_trim(_json_data,_offset); - //直接返回,这样可以防插入空的对象 - if(_json_data[_offset]==0x5D) - { - return _offset; - }else if(_json_data[_offset]=='{') - { - techempower_outjson_t temp; - _offset=json_decode(temp,_json_data,_offset); - json_reflectobj.push_back(temp); - } - - } - - } - else - { - techempower_outjson_t temp; - _offset=json_decode(temp,_json_data,_offset); - json_reflectobj.push_back(temp); - - } - - return _offset; - } - -} diff --git a/frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_Fortune.sql b/frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_Fortune.sql deleted file mode 100644 index ea350640341..00000000000 --- a/frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_Fortune.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE TABLE `fortune` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `message` varchar(2048) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_World.sql b/frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_World.sql deleted file mode 100644 index d454446535d..00000000000 --- a/frameworks/C++/paozhu/paozhu_benchmark/orm/_rawsqlfile/default_World.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE TABLE `world` ( - `id` int unsigned NOT NULL AUTO_INCREMENT, - `randomNumber` int NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortunebase.h b/frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortunebase.h deleted file mode 100644 index 390c6cb8f46..00000000000 --- a/frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortunebase.h +++ /dev/null @@ -1,2556 +0,0 @@ -#ifndef ORM_DEFAULT_FORTUNEBASEMATA_H -#define ORM_DEFAULT_FORTUNEBASEMATA_H -/* -*This file is auto create from cli -*本文件为自动生成 Sun, 21 Jan 2024 08:50:49 GMT -***/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "mysql.h" -namespace orm { - - -struct fortunebase -{ - struct meta{ - unsigned int id= 0; // - std::string message=""; // - } data; - std::vector record; -std::string _rmstag="default";//this value must be default or tag value, tag in mysqlconnect config file . -std::vector _keypos{0x00}; -MYSQL_ROW _row; -std::vector::iterator begin(){ return record.begin(); } -std::vector::iterator end(){ return record.end(); } -std::vector::const_iterator begin() const{ return record.begin(); } -std::vector::const_iterator end() const{ return record.end(); } -const std::array colnames={"id","message"}; -const std::array colnamestype= {3,253}; -std::string tablename="fortune"; -std::string modelname="Fortune"; - - unsigned char findcolpos(const std::string &coln){ - if(coln.size()==0) - { - return 255; - } - unsigned char bi=coln[0]; - - - if(bi<91&&bi>64){ - bi+=32; - } - switch(coln[0]){ - - - case 'i': - return 0; -break; -case 'm': - return 1; -break; - - } - return 255; - } - - int size(){ return record.size(); } - - std::string getPKname(){ - return "id"; -} - - void record_reset() - { - record.clear(); - } - void data_reset(){ - fortunebase::meta metatemp; - data = metatemp; - } - - std::string soft_remove_sql([[maybe_unused]] const std::string &fieldsql){ - std::string temp; - - return temp; - } - void _setColnamevalue() - { - for(unsigned char i=0;i<_keypos.size();i++) - { - switch(_keypos[i]){ - case 0: - try{ - data.id=std::stoul(_row[i]); - }catch (...) { - data.id=0; - } - break; - case 1: - try{ - data.message.append((_row[i]==NULL?"":_row[i])); - }catch (...) { - data.message.clear(); - } - break; - default: - { } - - - } - - if(i>210){ - break; - } - } - } - void _addnewrowvalue(){ - fortunebase::meta metatemp; - - for(unsigned char i=0;i<_keypos.size();i++){ - - switch(_keypos[i]){ - - case 0: - try{ - metatemp.id=std::stoul(_row[i]); - }catch (...) { - metatemp.id=0; - } - break; - case 1: - try{ - metatemp.message.append((_row[i]==NULL?"":_row[i])); - }catch (...) { - metatemp.message.clear(); - } - break; - default: - { } - - - } - if(i>210){ - break; - } - } - record.emplace_back(std::move(metatemp)); - } - - inline std::string stringaddslash(std::string &content){ - std::string temp; - for(unsigned int i=0;i0){ - tempsql<<"`,`"; - }else{ - tempsql<<"`"; - } - tempsql<0){ - tempsql<<"`"; - } - tempsql<<") VALUES ("; - - if(data.id==0){ -tempsql<<"null"; - }else{ - tempsql<0){ - tempsql<<"`,`"; - }else{ - tempsql<<"`"; - } - tempsql<0){ - tempsql<<"`"; - } - tempsql<<") VALUES ("; - - if(insert_data.id==0){ -tempsql<<"null"; - }else{ - tempsql< &insert_data){ - unsigned int j=0; - std::ostringstream tempsql; - tempsql<<"INSERT INTO "; - tempsql<0){ - tempsql<<"`,`"; - }else{ - tempsql<<"`"; - } - tempsql<0){ - tempsql<<"`"; - } - tempsql<<") VALUES "; - - for(unsigned int i=0;i0) - { - tempsql<<","; - } - tempsql<<"("; - - - if(insert_data[i].id==0){ - tempsql<<"null"; - }else{ - tempsql< keypos; - for(;jj0){ - unsigned char bpos_i=findcolpos(keyname); - #ifdef DEBUG - if (bpos_i == 254) - { - std::cout << "\033[1m\033[31m-----------\n" - << keyname << " not in " << tablename << " table Field.\n-----------\033[0m" - << std::endl; - } -#endif - keypos.emplace_back(bpos_i); - keyname.clear(); - } - for(jj=0;jj0){ tempsql<<","; } -if(data.id==0){ - tempsql<<"`id`=0"; - }else{ - tempsql<<"`id`="<0){ tempsql<<","; } -tempsql<<"`message`='"< data_toarray(std::string fileld=""){ - std::vector temparray; - std::string keyname; - unsigned char jj=0; - std::vector keypos; - if(fileld.size()>1){ - for(;jj0){ - keypos.emplace_back(findcolpos(keyname)); - keyname.clear(); - } - }else{ - for(jj=0;jj data_tomap(std::string fileld=""){ - std::map tempsql; - std::string keyname; - unsigned char jj=0; - std::vector keypos; - if(fileld.size()>1){ - for(;jj0){ - keypos.emplace_back(findcolpos(keyname)); - keyname.clear(); - } - }else{ - for(jj=0;jj keypos; - if(fileld.size()>0){ - for(;jj0){ - keypos.emplace_back(findcolpos(keyname)); - keyname.clear(); - } - }else{ - for(jj=0;jj0){ tempsql<<","; } -if(data.id==0){ - tempsql<<"\"id\":0"; - }else{ - tempsql<<"\"id\":"<0){ tempsql<<","; } -tempsql<<"\"message\":\""< list_content; - for(;json_offset0) - { - data=metatemp; - } - if(json_offset>=json_content.size()) - { - break; - } - for(;json_offset=json_content.size()) - { - break; - } - json_value_name.clear(); - if(json_content[json_offset]==0x22) - { - - temp_offset=json_offset; - json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset); - json_offset=temp_offset; - if(json_content[json_offset]==0x22) - { - json_offset+=1; - } - } - else - { - if(json_content[json_offset]!='{'&&json_content[json_offset]!=']') - { - for(;json_offset1) - { - data=record[0]; - } - } - else - { - if(json_content[json_offset]=='{') - { - json_offset+=1; - std::string json_key_name,json_value_name; - - - for(;json_offset=json_content.size()) - { - break; - } - json_value_name.clear(); - if(json_content[json_offset]==0x22) - { - - temp_offset=json_offset; - json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset); - json_offset=temp_offset; - if(json_content[json_offset]==0x22) - { - json_offset+=1; - } - } - else - { - if(json_content[json_offset]!='{'&&json_content[json_offset]!=']') - { - for(;json_offset keypos; - if(fileld.size()>0){ - for(;jj0){ - keypos.emplace_back(findcolpos(keyname)); - keyname.clear(); - } - }else{ - for(jj=0;jj0){ - tempsql<<",{"; - }else{ - tempsql<<"{"; - } - - for(jj=0;jj0){ tempsql<<","; } -if(record[n].id==0){ - tempsql<<"\"id\":0"; - }else{ - tempsql<<"\"id\":"<0){ tempsql<<","; } -tempsql<<"\"message\":\""< func,std::string fileld=""){ - std::ostringstream tempsql; - std::string keyname; - unsigned char jj=0; - std::vector keypos; - if(fileld.size()>0){ - for(;jj0){ - keypos.emplace_back(findcolpos(keyname)); - keyname.clear(); - } - }else{ - for(jj=0;jj0){ - tempsql<<",{"; - }else{ - tempsql<<"{"; - } - tempsql<0){ tempsql<<","; } -if(record[n].id==0){ - tempsql<<"\"id\":0"; - }else{ - tempsql<<"\"id\":"<0){ tempsql<<","; } -tempsql<<"\"message\":\""< getRecord(){ - return record; -} - - - template::value,bool>::type = true> - T& ref_meta([[maybe_unused]] std::string key_name) - { - if(key_name=="message") - { - return data.message; - } - return nullptr; - } - - - template,bool>::type = true> - T& ref_meta([[maybe_unused]] std::string key_name) - { - if(key_name=="id") - { - return data.id; - } - return nullptr; - } - - - template,bool>::type = true > - T& ref_meta([[maybe_unused]] std::string key_name) - { - return nullptr; - } - - template,bool>::type = true > - std::vector getCol([[maybe_unused]] std::string keyname) - { - std::vector a; - - - unsigned char kpos; - kpos=findcolpos(keyname); - for(auto &iter:record) - { - switch(kpos) - { - case 0: - a.emplace_back(iter.id); - break; - - } - } - - return a; - } - - template,bool>::type = true > - std::vector getCol([[maybe_unused]] std::string keyname) - { - std::vector a; - - - return a; - } - - template,bool>::type = true > - T getVal([[maybe_unused]] std::string keyname) - { - - unsigned char kpos; - kpos=findcolpos(keyname); - switch(kpos) - { - - case 0: - return data.id; - break; - } - return 0; - } - - template,bool>::type = true > - T getVal([[maybe_unused]] fortunebase::meta & iter,[[maybe_unused]] std::string keyname) - { - - - unsigned char kpos; - kpos=findcolpos(keyname); - switch(kpos) - { - case 0: - return iter.id; - break; - - } - - return 0; - } - - template,bool>::type = true > - T getVal(std::string keyname) - { - unsigned char kpos; - kpos=findcolpos(keyname); - - switch(kpos) - { - - - } - - - return 0.0; - } - - template,bool>::type = true > - T getVal([[maybe_unused]] fortunebase::meta & iter,std::string keyname) - { - unsigned char kpos; - kpos=findcolpos(keyname); - switch(kpos) - { - - } - - - - return 0.0; - } - - template::value,bool>::type = true > - std::string getVal(std::string keyname) - { - unsigned char kpos; - kpos=findcolpos(keyname); - - switch(kpos) - { - - case 1: - return data.message; - break; - - } - return ""; - } - - template::value,bool>::type = true > - std::string getVal([[maybe_unused]] fortunebase::meta & iter,std::string keyname) - { - - unsigned char kpos; - kpos=findcolpos(keyname); - - switch(kpos) - { - - case 1: - return iter.message; - break; - - } - - - - return ""; - } - - template::value,bool>::type = true > - std::vector getCol([[maybe_unused]] std::string keyname) - { - std::vector a; - - - unsigned char kpos; - kpos=findcolpos(keyname); - for(auto &iter:record) - { - switch(kpos) - { - - case 1: - a.emplace_back(iter.message); - break; - } - } - - return a; - } - - std::string getstrCol(std::string keyname,[[maybe_unused]] bool isyinhao=false) - { - std::ostringstream a; - - unsigned char kpos; - kpos=findcolpos(keyname); - int j=0; - if(isyinhao&&record.size()>0) - { - a<<'"'; - } - for(auto &iter:record) - { - if(j>0) - { - if(isyinhao) - { - a<<"\",\""; - }else{ - a<<','; - } - } - switch(kpos) - { - - case 0: - a<0){ - a<<'"'; - } - - return a.str(); - } - - template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> - std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - std::string ktemp,vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - switch(vpos){ - case 1: - vtemp=iter.message; - break; - - } - if(ktemp.size()>0) - { - a.emplace(ktemp,vtemp); - } - } - - - return a; - } - - - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - std::string ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - switch(vpos){ - - } - if(ktemp.size()>0) - { - a.emplace(ktemp,vtemp); - } - } - - return a; - } - - template,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - switch(vpos){ - - } - if(ktemp.size()>0) - { - a.emplace(ktemp,vtemp); - } - } - - return a; - } - template,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - std::string vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - switch(vpos){ - case 1: - vtemp=iter.message; - break; - - } - if(ktemp.size()>0) - { - a.emplace(ktemp,vtemp); - } - } - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true> - std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - std::string ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - switch(vpos){ - case 0: - vtemp=iter.id; - break; - - } - if(ktemp.size()>0) - { - a.emplace(ktemp,vtemp); - } - } - - return a; - } - - template,bool>::type = true,typename std::enable_if,bool>::type = true> - std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - switch(vpos){ - case 0: - vtemp=iter.id; - break; - - } - if(ktemp.size()>0) - { - a.emplace(ktemp,vtemp); - } - } - - return a; - } - - template,bool>::type = true > - std::map getmapRows([[maybe_unused]] std::string keyname) - { - std::map a; - - unsigned char kpos; - kpos=findcolpos(keyname); - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - a.emplace(iter.id,iter); - break; - - } - } - - return a; - } - - template::value,bool>::type = true > - std::map getmapRows([[maybe_unused]] std::string keyname) - { - std::map a; - - - unsigned char kpos; - kpos=findcolpos(keyname); - for(auto &iter:record) - { - switch(kpos) - { - - case 1: - a.emplace(iter.message,iter); - break; - - } - //a.emplace(ktemp,iter); - } - - - return a; - } - - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::vector> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - std::string ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - switch(vpos){ - - } - - a.emplace_back(ktemp,vtemp); - } - - - - return a; - } - - template,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::vector> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - switch(vpos){ - - } - - a.emplace_back(ktemp,vtemp); - } - - - - return a; - } - - template,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::vector> a; - - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - switch(vpos){ - case 1: - vtemp=iter.message; - break; - - } - - a.emplace_back(ktemp,vtemp); - } - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true> - std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::vector> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - switch(vpos){ - case 0: - vtemp=iter.id; - break; - - } - a.emplace_back(ktemp,vtemp); - } - - return a; - } - - template,bool>::type = true,typename std::enable_if,bool>::type = true> - std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::vector> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - switch(vpos){ - case 0: - vtemp=iter.id; - break; - - } - a.emplace_back(ktemp,vtemp); - } - - return a; - } - - template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> - std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::vector> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - switch(vpos){ -case 1: - vtemp=iter.message; - break; - - } - - a.emplace_back(ktemp,vtemp); - } - - return a; - } - - template,bool>::type = true > - std::vector> getvecRows([[maybe_unused]] std::string keyname) - { - std::vector> a; - - unsigned char kpos; - kpos=findcolpos(keyname); - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - a.emplace_back(iter.id,iter); - break; - - } - } - - return a; - } - template::value,bool>::type = true > - std::vector> getvecRows([[maybe_unused]] std::string keyname) - { - std::vector> a; - - unsigned char kpos; - kpos=findcolpos(keyname); - for(auto &iter:record) - { - switch(kpos) - { - - case 1: - a.emplace_back(iter.message,iter); - break; - - } - } - - - return a; - } - template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - - switch(vpos){ - case 0: - vtemp=iter.id; - break; - } - - switch(dpos){ - - } - } - - - return a; - } - - template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - //D vtemp; - - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - - switch(vpos){ - case 0: - vtemp=iter.id; - break; - } - - switch(dpos){ - case 0: - a[ktemp][vtemp].emplace_back(iter.id); - break; - - } - } - - return a; - } - - template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - - switch(vpos){ - case 0: - vtemp=iter.id; - break; - } - - switch(dpos){ - case 1: - a[ktemp][vtemp].emplace_back(iter.message); - break; - - } - } - - return a; - } - - template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - - switch(vpos){ - case 1: - vtemp=iter.message; - break; - } - - switch(dpos){ - - } - } - - return a; - } - - template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - - switch(vpos){ - case 1: - vtemp=iter.message; - break; - } - - switch(dpos){ - case 0: - a[ktemp][vtemp].emplace_back(iter.id); - break; - - } - } - - return a; - } - template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - - switch(vpos){ - case 1: - vtemp=iter.message; - break; - } - - switch(dpos){ - case 1: - a[ktemp][vtemp].emplace_back(iter.message); - break; - - } - } - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - //D vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - - switch(vpos){ - case 0: - vtemp=iter.id; - break; - } - - switch(dpos){ - - } - } - - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - //D vtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - - switch(vpos){ - case 0: - vtemp=iter.id; - break; - } - - switch(dpos){ - case 0: - a[ktemp][vtemp].emplace_back(iter.id); - break; - - } - } - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - - switch(vpos){ - case 0: - vtemp=iter.id; - break; - } - - switch(dpos){ - case 1: - a[ktemp][vtemp].emplace_back(iter.message); - break; - - } - } - - return a; - } - - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - - switch(vpos){ - case 1: - vtemp=iter.message; - break; - } - - switch(dpos){ - - } - } - - - return a; - } - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - - switch(vpos){ - case 1: - vtemp=iter.message; - break; - } - - switch(dpos){ - case 0: - a[ktemp][vtemp].emplace_back(iter.id); - break; - - } - } - - return a; - } - - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - - switch(vpos){ - case 1: - vtemp=iter.message; - break; - } - - switch(dpos){ - case 1: - a[ktemp][vtemp].emplace_back(iter.message); - break; - - } - } - - return a; - } - - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map> a; - - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - //U vtemp; - - for(auto &iter:record) - { - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - - switch(vpos){ - case 1: - a[ktemp].emplace_back(iter.message); - break; - - } - } - - return a; - } - - template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> - std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - //U vtemp; - - for(auto &iter:record) - { - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - - switch(vpos){ - - } - } - - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true> - std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - //U vtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - - switch(vpos){ - case 0: - a[ktemp].emplace_back(iter.id); - break; - - } - } - - return a; - } - - template,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - //U vtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - - switch(vpos){ - case 1: - a[ktemp].emplace_back(iter.message); - break; - - } - } - - - return a; - } - - template,bool>::type = true,typename std::enable_if::value,bool>::type = true> - std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - //U vtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - - switch(vpos){ - - } - } - - return a; - } - - template,bool>::type = true,typename std::enable_if,bool>::type = true> - std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - //U vtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - - switch(vpos){ - case 0: - a[ktemp].emplace_back(iter.id); - break; - - } - } - - return a; - } - - template,bool>::type = true> - std::map> getgroupRows([[maybe_unused]] std::string keyname) - { - std::map> a; - - unsigned char kpos; - kpos=findcolpos(keyname); - - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - a[iter.id].emplace_back(iter); - break; - - } - } - - return a; - } - - template::value,bool>::type = true> - std::map> getgroupRows([[maybe_unused]] std::string keyname) - { - std::map> a; - - unsigned char kpos; - kpos=findcolpos(keyname); - - for(auto &iter:record) - { - - switch(kpos) - { - - case 1: - a[iter.message].emplace_back(iter); - break; - - } - } - - return a; - } - - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map>> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - - switch(vpos){ - case 1: - a[ktemp][iter.message].emplace_back(iter); - break; - - } - } - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true> - std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map>> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 1: - ktemp=iter.message; - break; - } - - switch(vpos){ - case 0: - a[ktemp][iter.id].emplace_back(iter); - break; - - } - } - - - return a; - } - - template,bool>::type = true,typename std::enable_if,bool>::type = true> - std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map>> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - - switch(vpos){ - case 0: - a[ktemp][iter.id].emplace_back(iter); - break; - - } - } - - return a; - } - - template,bool>::type = true,typename std::enable_if::value,bool>::type = true> - std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map>> a; - - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - } - - switch(vpos){ - case 1: - a[ktemp][iter.message].emplace_back(iter); - break; - - } - } - - return a; - } - - }; - - -} -#endif - \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/orm/include/worldbase.h b/frameworks/C++/paozhu/paozhu_benchmark/orm/include/worldbase.h deleted file mode 100644 index 312571481d7..00000000000 --- a/frameworks/C++/paozhu/paozhu_benchmark/orm/include/worldbase.h +++ /dev/null @@ -1,2370 +0,0 @@ -#ifndef ORM_DEFAULT_WORLDBASEMATA_H -#define ORM_DEFAULT_WORLDBASEMATA_H -/* -*This file is auto create from cli -*本文件为自动生成 Sun, 21 Jan 2024 08:50:49 GMT -***/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "mysql.h" -namespace orm { - - -struct worldbase -{ - struct meta{ - unsigned int id= 0; // - int randomnumber= 0; // - } data; - std::vector record; -std::string _rmstag="default";//this value must be default or tag value, tag in mysqlconnect config file . -std::vector _keypos{0x00}; -MYSQL_ROW _row; -std::vector::iterator begin(){ return record.begin(); } -std::vector::iterator end(){ return record.end(); } -std::vector::const_iterator begin() const{ return record.begin(); } -std::vector::const_iterator end() const{ return record.end(); } -const std::array colnames={"id","randomnumber"}; -const std::array colnamestype= {3,3}; -std::string tablename="world"; -std::string modelname="World"; - - unsigned char findcolpos(const std::string &coln){ - if(coln.size()==0) - { - return 255; - } - unsigned char bi=coln[0]; - - - if(bi<91&&bi>64){ - bi+=32; - } - switch(coln[0]){ - - - case 'i': - return 0; -break; -case 'r': - return 1; -break; - - } - return 255; - } - - int size(){ return record.size(); } - - std::string getPKname(){ - return "id"; -} - - void record_reset() - { - record.clear(); - } - void data_reset(){ - worldbase::meta metatemp; - data = metatemp; - } - - std::string soft_remove_sql([[maybe_unused]] const std::string &fieldsql){ - std::string temp; - - return temp; - } - void _setColnamevalue() - { - for(unsigned char i=0;i<_keypos.size();i++) - { - switch(_keypos[i]){ - case 0: - try{ - data.id=std::stoul(_row[i]); - }catch (...) { - data.id=0; - } - break; - case 1: - try{ - data.randomnumber=std::stoi(_row[i]); - }catch (...) { - data.randomnumber=0; - } - break; - default: - { } - - - } - - if(i>210){ - break; - } - } - } - void _addnewrowvalue(){ - worldbase::meta metatemp; - - for(unsigned char i=0;i<_keypos.size();i++){ - - switch(_keypos[i]){ - - case 0: - try{ - metatemp.id=std::stoul(_row[i]); - }catch (...) { - metatemp.id=0; - } - break; - case 1: - try{ - metatemp.randomnumber=std::stoi(_row[i]); - }catch (...) { - metatemp.randomnumber=0; - } - break; - default: - { } - - - } - if(i>210){ - break; - } - } - record.emplace_back(std::move(metatemp)); - } - - inline std::string stringaddslash(std::string &content){ - std::string temp; - for(unsigned int i=0;i0){ - tempsql<<"`,`"; - }else{ - tempsql<<"`"; - } - tempsql<0){ - tempsql<<"`"; - } - tempsql<<") VALUES ("; - - if(data.id==0){ -tempsql<<"null"; - }else{ - tempsql<0){ - tempsql<<"`,`"; - }else{ - tempsql<<"`"; - } - tempsql<0){ - tempsql<<"`"; - } - tempsql<<") VALUES ("; - - if(insert_data.id==0){ -tempsql<<"null"; - }else{ - tempsql< &insert_data){ - unsigned int j=0; - std::ostringstream tempsql; - tempsql<<"INSERT INTO "; - tempsql<0){ - tempsql<<"`,`"; - }else{ - tempsql<<"`"; - } - tempsql<0){ - tempsql<<"`"; - } - tempsql<<") VALUES "; - - for(unsigned int i=0;i0) - { - tempsql<<","; - } - tempsql<<"("; - - - if(insert_data[i].id==0){ - tempsql<<"null"; - }else{ - tempsql<0){ - unsigned char bpos_i=findcolpos(keyname); - #ifdef DEBUG - if (bpos_i == 254) - { - std::cout << "\033[1m\033[31m-----------\n" - << keyname << " not in " << tablename << " table Field.\n-----------\033[0m" - << std::endl; - } -#endif - keypos.emplace_back(bpos_i); - keyname.clear(); - } - for(jj=0;jj0){ tempsql<<","; } -if(data.id==0){ - tempsql<<"`id`=0"; - }else{ - tempsql<<"`id`="<0){ tempsql<<","; } -if(data.randomnumber==0){ - tempsql<<"`randomnumber`=0"; - }else{ - tempsql<<"`randomnumber`="< data_toarray(std::string fileld=""){ - std::vector temparray; - std::string keyname; - unsigned char jj=0; - std::vector keypos; - if(fileld.size()>1){ - for(;jj0){ - keypos.emplace_back(findcolpos(keyname)); - keyname.clear(); - } - }else{ - for(jj=0;jj data_tomap(std::string fileld=""){ - std::map tempsql; - std::string keyname; - unsigned char jj=0; - std::vector keypos; - if(fileld.size()>1){ - for(;jj0){ - keypos.emplace_back(findcolpos(keyname)); - keyname.clear(); - } - }else{ - for(jj=0;jj keypos; - if(fileld.size()>0){ - for(;jj0){ - keypos.emplace_back(findcolpos(keyname)); - keyname.clear(); - } - }else{ - for(jj=0;jj0){ tempsql<<","; } -if(data.id==0){ - tempsql<<"\"id\":0"; - }else{ - tempsql<<"\"id\":"<0){ tempsql<<","; } -if(data.randomnumber==0){ - tempsql<<"\"randomnumber\":0"; - }else{ - tempsql<<"\"randomnumber\":"< list_content; - for(;json_offset0) - { - data=metatemp; - } - if(json_offset>=json_content.size()) - { - break; - } - for(;json_offset=json_content.size()) - { - break; - } - json_value_name.clear(); - if(json_content[json_offset]==0x22) - { - - temp_offset=json_offset; - json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset); - json_offset=temp_offset; - if(json_content[json_offset]==0x22) - { - json_offset+=1; - } - } - else - { - if(json_content[json_offset]!='{'&&json_content[json_offset]!=']') - { - for(;json_offset1) - { - data=record[0]; - } - } - else - { - if(json_content[json_offset]=='{') - { - json_offset+=1; - std::string json_key_name,json_value_name; - - - for(;json_offset=json_content.size()) - { - break; - } - json_value_name.clear(); - if(json_content[json_offset]==0x22) - { - - temp_offset=json_offset; - json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset); - json_offset=temp_offset; - if(json_content[json_offset]==0x22) - { - json_offset+=1; - } - } - else - { - if(json_content[json_offset]!='{'&&json_content[json_offset]!=']') - { - for(;json_offset keypos; - if(fileld.size()>0){ - for(;jj0){ - keypos.emplace_back(findcolpos(keyname)); - keyname.clear(); - } - }else{ - for(jj=0;jj0){ - tempsql<<",{"; - }else{ - tempsql<<"{"; - } - - for(jj=0;jj0){ tempsql<<","; } -if(record[n].id==0){ - tempsql<<"\"id\":0"; - }else{ - tempsql<<"\"id\":"<0){ tempsql<<","; } -if(record[n].randomnumber==0){ - tempsql<<"\"randomnumber\":0"; - }else{ - tempsql<<"\"randomnumber\":"< func,std::string fileld=""){ - std::ostringstream tempsql; - std::string keyname; - unsigned char jj=0; - std::vector keypos; - if(fileld.size()>0){ - for(;jj0){ - keypos.emplace_back(findcolpos(keyname)); - keyname.clear(); - } - }else{ - for(jj=0;jj0){ - tempsql<<",{"; - }else{ - tempsql<<"{"; - } - tempsql<0){ tempsql<<","; } -if(record[n].id==0){ - tempsql<<"\"id\":0"; - }else{ - tempsql<<"\"id\":"<0){ tempsql<<","; } -if(record[n].randomnumber==0){ - tempsql<<"\"randomnumber\":0"; - }else{ - tempsql<<"\"randomnumber\":"< getRecord(){ - return record; -} - - - template::value,bool>::type = true> - T& ref_meta([[maybe_unused]] std::string key_name) - { - return nullptr; - } - - - template,bool>::type = true> - T& ref_meta([[maybe_unused]] std::string key_name) - { - if(key_name=="id") - { - return data.id; - } - if(key_name=="randomnumber") - { - return data.randomnumber; - } - return nullptr; - } - - - template,bool>::type = true > - T& ref_meta([[maybe_unused]] std::string key_name) - { - return nullptr; - } - - template,bool>::type = true > - std::vector getCol([[maybe_unused]] std::string keyname) - { - std::vector a; - - - unsigned char kpos; - kpos=findcolpos(keyname); - for(auto &iter:record) - { - switch(kpos) - { - case 0: - a.emplace_back(iter.id); - break; - case 1: - a.emplace_back(iter.randomnumber); - break; - - } - } - - return a; - } - - template,bool>::type = true > - std::vector getCol([[maybe_unused]] std::string keyname) - { - std::vector a; - - - return a; - } - - template,bool>::type = true > - T getVal([[maybe_unused]] std::string keyname) - { - - unsigned char kpos; - kpos=findcolpos(keyname); - switch(kpos) - { - - case 0: - return data.id; - break; - case 1: - return data.randomnumber; - break; - } - return 0; - } - - template,bool>::type = true > - T getVal([[maybe_unused]] worldbase::meta & iter,[[maybe_unused]] std::string keyname) - { - - - unsigned char kpos; - kpos=findcolpos(keyname); - switch(kpos) - { - case 0: - return iter.id; - break; - case 1: - return iter.randomnumber; - break; - - } - - return 0; - } - - template,bool>::type = true > - T getVal(std::string keyname) - { - unsigned char kpos; - kpos=findcolpos(keyname); - - switch(kpos) - { - - - } - - - return 0.0; - } - - template,bool>::type = true > - T getVal([[maybe_unused]] worldbase::meta & iter,std::string keyname) - { - unsigned char kpos; - kpos=findcolpos(keyname); - switch(kpos) - { - - } - - - - return 0.0; - } - - template::value,bool>::type = true > - std::string getVal(std::string keyname) - { - unsigned char kpos; - kpos=findcolpos(keyname); - - switch(kpos) - { - - - } - return ""; - } - - template::value,bool>::type = true > - std::string getVal([[maybe_unused]] worldbase::meta & iter,std::string keyname) - { - - unsigned char kpos; - kpos=findcolpos(keyname); - - switch(kpos) - { - - - } - - - - return ""; - } - - template::value,bool>::type = true > - std::vector getCol([[maybe_unused]] std::string keyname) - { - std::vector a; - - - - return a; - } - - std::string getstrCol(std::string keyname,[[maybe_unused]] bool isyinhao=false) - { - std::ostringstream a; - - unsigned char kpos; - kpos=findcolpos(keyname); - int j=0; - if(isyinhao&&record.size()>0) - { - a<<'"'; - } - for(auto &iter:record) - { - if(j>0) - { - if(isyinhao) - { - a<<"\",\""; - }else{ - a<<','; - } - } - switch(kpos) - { - - case 0: - a<0){ - a<<'"'; - } - - return a.str(); - } - - template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> - std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map a; - - return a; - } - - - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map a; - - return a; - } - - template,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; -case 1: - ktemp=iter.randomnumber; - break; - } - switch(vpos){ - - } - if(ktemp.size()>0) - { - a.emplace(ktemp,vtemp); - } - } - - return a; - } - template,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - std::string vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - switch(vpos){ - - } - if(ktemp.size()>0) - { - a.emplace(ktemp,vtemp); - } - } - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true> - std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - std::string ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - } - switch(vpos){ - case 0: - vtemp=iter.id; - break; - case 1: - vtemp=iter.randomnumber; - break; - - } - if(ktemp.size()>0) - { - a.emplace(ktemp,vtemp); - } - } - - return a; - } - - template,bool>::type = true,typename std::enable_if,bool>::type = true> - std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - switch(vpos){ - case 0: - vtemp=iter.id; - break; - case 1: - vtemp=iter.randomnumber; - break; - - } - if(ktemp.size()>0) - { - a.emplace(ktemp,vtemp); - } - } - - return a; - } - - template,bool>::type = true > - std::map getmapRows([[maybe_unused]] std::string keyname) - { - std::map a; - - unsigned char kpos; - kpos=findcolpos(keyname); - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - a.emplace(iter.id,iter); - break; - case 1: - a.emplace(iter.randomnumber,iter); - break; - - } - } - - return a; - } - - template::value,bool>::type = true > - std::map getmapRows([[maybe_unused]] std::string keyname) - { - std::map a; - - - - return a; - } - - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::vector> a; - - - return a; - } - - template,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::vector> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - switch(vpos){ - - } - - a.emplace_back(ktemp,vtemp); - } - - - - return a; - } - - template,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::vector> a; - - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - switch(vpos){ - - } - - a.emplace_back(ktemp,vtemp); - } - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true> - std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::vector> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - - switch(kpos) - { - - } - switch(vpos){ - case 0: - vtemp=iter.id; - break; - case 1: - vtemp=iter.randomnumber; - break; - - } - a.emplace_back(ktemp,vtemp); - } - - return a; - } - - template,bool>::type = true,typename std::enable_if,bool>::type = true> - std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::vector> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - switch(vpos){ - case 0: - vtemp=iter.id; - break; - case 1: - vtemp=iter.randomnumber; - break; - - } - a.emplace_back(ktemp,vtemp); - } - - return a; - } - - template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> - std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::vector> a; - - return a; - } - - template,bool>::type = true > - std::vector> getvecRows([[maybe_unused]] std::string keyname) - { - std::vector> a; - - unsigned char kpos; - kpos=findcolpos(keyname); - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - a.emplace_back(iter.id,iter); - break; -case 1: - a.emplace_back(iter.randomnumber,iter); - break; - - } - } - - return a; - } - template::value,bool>::type = true > - std::vector> getvecRows([[maybe_unused]] std::string keyname) - { - std::vector> a; - - - return a; - } - template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - - switch(vpos){ - case 0: - vtemp=iter.id; - break; - case 1: - vtemp=iter.randomnumber; - break; - } - - switch(dpos){ - - } - } - - - return a; - } - - template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - //D vtemp; - - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - - switch(vpos){ - case 0: - vtemp=iter.id; - break; - case 1: - vtemp=iter.randomnumber; - break; - } - - switch(dpos){ - case 0: - a[ktemp][vtemp].emplace_back(iter.id); - break; - case 1: - a[ktemp][vtemp].emplace_back(iter.randomnumber); - break; - - } - } - - return a; - } - - template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - - switch(vpos){ - case 0: - vtemp=iter.id; - break; - case 1: - vtemp=iter.randomnumber; - break; - } - - switch(dpos){ - - } - } - - return a; - } - - template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - - switch(vpos){ - } - - switch(dpos){ - - } - } - - return a; - } - - template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - - switch(vpos){ - } - - switch(dpos){ - case 0: - a[ktemp][vtemp].emplace_back(iter.id); - break; - case 1: - a[ktemp][vtemp].emplace_back(iter.randomnumber); - break; - - } - } - - return a; - } - template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - - switch(vpos){ - } - - switch(dpos){ - - } - } - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - //D vtemp; - for(auto &iter:record) - { - switch(kpos) - { - - } - - switch(vpos){ - case 0: - vtemp=iter.id; - break; - case 1: - vtemp=iter.randomnumber; - break; - } - - switch(dpos){ - - } - } - - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - //D vtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - } - - switch(vpos){ - case 0: - vtemp=iter.id; - break; - case 1: - vtemp=iter.randomnumber; - break; - } - - switch(dpos){ - case 0: - a[ktemp][vtemp].emplace_back(iter.id); - break; - case 1: - a[ktemp][vtemp].emplace_back(iter.randomnumber); - break; - - } - } - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - } - - switch(vpos){ - case 0: - vtemp=iter.id; - break; - case 1: - vtemp=iter.randomnumber; - break; - } - - switch(dpos){ - - } - } - - return a; - } - - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - return a; - } - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - unsigned char kpos,vpos,dpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - dpos=findcolpos(dataname); - T ktemp; - U vtemp; - // D dtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - } - - switch(vpos){ - } - - switch(dpos){ - case 0: - a[ktemp][vtemp].emplace_back(iter.id); - break; - case 1: - a[ktemp][vtemp].emplace_back(iter.randomnumber); - break; - - } - } - - return a; - } - - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) - { - std::map>> a; - - return a; - } - - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map> a; - - - return a; - } - - template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> - std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map> a; - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true> - std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - //U vtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - } - - switch(vpos){ - case 0: - a[ktemp].emplace_back(iter.id); - break; - case 1: - a[ktemp].emplace_back(iter.randomnumber); - break; - - } - } - - return a; - } - - template,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - //U vtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - - switch(vpos){ - - } - } - - - return a; - } - - template,bool>::type = true,typename std::enable_if::value,bool>::type = true> - std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - //U vtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - - switch(vpos){ - - } - } - - return a; - } - - template,bool>::type = true,typename std::enable_if,bool>::type = true> - std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - //U vtemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - - switch(vpos){ - case 0: - a[ktemp].emplace_back(iter.id); - break; - case 1: - a[ktemp].emplace_back(iter.randomnumber); - break; - - } - } - - return a; - } - - template,bool>::type = true> - std::map> getgroupRows([[maybe_unused]] std::string keyname) - { - std::map> a; - - unsigned char kpos; - kpos=findcolpos(keyname); - - for(auto &iter:record) - { - switch(kpos) - { - - case 0: - a[iter.id].emplace_back(iter); - break; - case 1: - a[iter.randomnumber].emplace_back(iter); - break; - - } - } - - return a; - } - - template::value,bool>::type = true> - std::map> getgroupRows([[maybe_unused]] std::string keyname) - { - std::map> a; - - return a; - } - - template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> - std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map>> a; - - return a; - } - - template::value,bool>::type = true,typename std::enable_if,bool>::type = true> - std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map>> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - } - - switch(vpos){ - case 0: - a[ktemp][iter.id].emplace_back(iter); - break; - case 1: - a[ktemp][iter.randomnumber].emplace_back(iter); - break; - - } - } - - - return a; - } - - template,bool>::type = true,typename std::enable_if,bool>::type = true> - std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map>> a; - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - - switch(vpos){ - case 0: - a[ktemp][iter.id].emplace_back(iter); - break; - case 1: - a[ktemp][iter.randomnumber].emplace_back(iter); - break; - - } - } - - return a; - } - - template,bool>::type = true,typename std::enable_if::value,bool>::type = true> - std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) - { - std::map>> a; - - - unsigned char kpos,vpos; - kpos=findcolpos(keyname); - vpos=findcolpos(valname); - T ktemp; - - for(auto &iter:record) - { - - switch(kpos) - { - - case 0: - ktemp=iter.id; - break; - case 1: - ktemp=iter.randomnumber; - break; - } - - switch(vpos){ - - } - } - - return a; - } - - }; - - -} -#endif - \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/orm/orm.h b/frameworks/C++/paozhu/paozhu_benchmark/orm/orm.h deleted file mode 100644 index 816b9ae4dc9..00000000000 --- a/frameworks/C++/paozhu/paozhu_benchmark/orm/orm.h +++ /dev/null @@ -1,4 +0,0 @@ -/*build this file time Tue, 20 Dec 2022 11:40:56 GMT*/ - -#include "Fortune.h" -#include "World.h" diff --git a/frameworks/C++/paozhu/paozhu_benchmark/test/testbenchmark.cpp b/frameworks/C++/paozhu/paozhu_benchmark/test/testbenchmark.cpp deleted file mode 100755 index 194c06e772a..00000000000 --- a/frameworks/C++/paozhu/paozhu_benchmark/test/testbenchmark.cpp +++ /dev/null @@ -1,126 +0,0 @@ -#include -#include -#include -#include -#include -#include "server.h" - -static sigjmp_buf env_startacs; -static void sig_child(int signo); -namespace fs = std::filesystem; -int main(int argc, char *argv[]) -{ - std::string argv_str; - if (argc > 1) - { - // server.conf filepath or confpath - argv_str.append(argv[1]); - fs::path conf_path = argv_str; - if (fs::is_regular_file(conf_path)) - { - } - else - { - if (argv_str.back() == '/') - { - argv_str = argv_str + "server.conf"; - } - else - { - argv_str = argv_str + "/server.conf"; - } - conf_path = argv_str; - if (fs::is_regular_file(conf_path)) - { - } - else - { - std::cout << "Not found server.conf file."; - return 0; - } - } - } - else - { - - fs::path conf_path = fs::current_path(); - argv_str = conf_path.string() + "/conf/server.conf"; - conf_path = argv_str; - if (fs::is_regular_file(conf_path)) - { - } - else - { - argv_str = "/usr/local/etc/paozhu/server.conf"; - conf_path = argv_str; - if (fs::is_regular_file(conf_path)) - { - } - else - { - std::cout << "Not found server.conf file. Please copy conf Directory rename to /usr/local/etc/paozhu\n"; - return 0; - } - } - } - - pid_t pid;//, subpid = 0; - signal(SIGCHLD, sig_child); - if (sigsetjmp(env_startacs, 1) == 0)// 设置记号 - { - printf("setjmp ok.....\n"); - } - else - { - printf("longjmp ok.....\n"); - } - - pid = fork(); - printf("fork id %d \n", pid); - if (pid < 0) - { - perror("fork error:"); - exit(1); - } - else if (pid == 0) - { - - try - { - http::httpserver &httpmy = http::get_server_app(); - httpmy.run(argv_str); - } - catch (std::exception &e) - { - std::printf("Exception: %s\n", e.what()); - } - exit(0); - } - else - { - - while (1) - { - std::this_thread::sleep_for(std::chrono::seconds(10)); - //Future features are added here - } - return 0; - } -} -static void sig_child(int signo) -{ - /*pid_t */ int pid; - int stat; - // 处理僵尸进程 - - switch (signo) - { - case SIGCHLD: - - pid = wait(&stat); - printf("SIGCHLD...farter id %d..%d\n", getpid(), pid); - siglongjmp(env_startacs, 1);// jump setjmp begin - break; - } - exit(0); -} From 0cf80494265f15ee90eaa87aa122e755eaeca27b Mon Sep 17 00:00:00 2001 From: hzq Date: Thu, 18 Apr 2024 14:17:05 +0800 Subject: [PATCH 40/65] Fix files --- .../common/json_reflect_headers.h | 32 ++ .../paozhu/paozhu_benchmark/conf/server.conf | 21 +- .../libs/types/techempower_json.h | 15 + .../types/techempower_json_jsonreflect.cpp | 290 ++++++++++++++++++ 4 files changed, 341 insertions(+), 17 deletions(-) create mode 100644 frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h create mode 100644 frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h create mode 100644 frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h b/frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h new file mode 100644 index 00000000000..176500bf383 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h @@ -0,0 +1,32 @@ +#pragma once +#include +#include +#include +#include + +#include "types/techempower_json.h" +#include "unicode.h" + +template +std::string json_encode([[maybe_unused]] const JSON_REF_OBJ_TEMP &json_reflectobj) { return ""; } + +template +std::string json_encode([[maybe_unused]] const std::vector &json_reflectobj) { return ""; } + +template +unsigned int json_decode([[maybe_unused]] JSON_REF_OBJ_TEMP &json_reflectobj, [[maybe_unused]] const std::string &_json_data, [[maybe_unused]] unsigned int _offset) { return 0; } + +template +unsigned int json_decode([[maybe_unused]] std::vector &json_reflectobj, [[maybe_unused]] const std::string &_json_data, [[maybe_unused]] unsigned int _offset) { return 0; } + +namespace http +{ + +std::string json_encode(const techempower_outjson_t &json_reflectobj); + +std::string json_encode(const std::vector &json_reflectobj); + +unsigned int json_decode(techempower_outjson_t &json_reflectobj, const std::string &_json_data, unsigned int _offset = 0); + +unsigned int json_decode(std::vector &json_reflectobj, const std::string &_json_data, unsigned int _offset = 0); +}// namespace http diff --git a/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf b/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf index d15847751ef..e76a18093e9 100755 --- a/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf +++ b/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf @@ -8,9 +8,9 @@ cothreadnum=8 ;Coroutines run on thread num http2_enable=0 debug_enable=1 deamon_enable=0 -mainhost=www.869869.com -certificate_chain_file=www.869869.com.pem -private_key_file=www.869869.com.key +mainhost=localhost +certificate_chain_file=localhost.pem +private_key_file=localhost.key tmp_dh_file=dh4096.pem reboot_password=e10adc3949ba59abbe56e057f20f883e ;md5(md5("123456")+"rand_char"+md5("123456")) session_type=1 ;session save type 0.file 1.memory 2.redis 3.memcache 4.reserve @@ -38,18 +38,5 @@ method_pre= method_after= show_visitinfo=0 upload_max_size=16777216 -[www.869869.com] -wwwpath=/root/benchmark/www/default -http2_enable=1 -;rewrite_404=1 -;rewrite_404_action=index.html|psy/index.html|exam/index.html -;controlsopath=/root/benchmark/docs/controller -static_pre=downloadfileauth|upload -method_pre= ;api/dev/hostcors -method_after= -isuse_php=0 -rewrite_php=/root/benchmark/www/thinkphp/public|index.php -fastcgi_host=127.0.0.1 -fastcgi_port=9000 -upload_max_size=16777216 + diff --git a/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h b/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h new file mode 100644 index 00000000000..364c06bb2cf --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h @@ -0,0 +1,15 @@ +#ifndef LIBS_TYPES_TECHEMPOWER_TYPE_H +#define LIBS_TYPES_TECHEMPOWER_TYPE_H +#include +#include + +namespace http +{ +//@reflect json to_json from_json +struct techempower_outjson_t +{ + std::string message; +}; + +}// namespace http +#endif diff --git a/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp b/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp new file mode 100644 index 00000000000..b5088efcdf9 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp @@ -0,0 +1,290 @@ +#include +#include +#include +#include +#include "types/techempower_json.h" +#include "json_reflect_headers.h" +#include "unicode.h" +#include "func.h" + +namespace http +{ + + +std::string json_encode(const techempower_outjson_t &json_reflectobj) + { + + std::stringstream _stream; + _stream << "{"; + _stream << "\"message\":\"" << http::utf8_to_jsonstring(json_reflectobj.message)<< "\""; + + _stream << "}"; + + return _stream.str(); + + } + + +std::string json_encode(const std::vector &json_reflectobj) + { + std::stringstream _stream; + _stream << "["; + + for(unsigned int i=0;i0) + { + _stream <<","; + } + _stream < + //递归代码 + + _offset++; + for ( ; _offset < _json_data.size(); _offset++) + { + if (_json_data[_offset] == '}') + { + //offset++; + break; + } + if (_json_data[_offset] == '"') + { + _offset++; + for ( ; _offset < _json_data.size(); _offset++) + { + if (_json_data[_offset] == '"'&&_json_data[_offset-1]!=0x5C) + { + break; + } + } + } + } + + + if(_offset < _json_data.size() && (_json_data[_offset]==']'||_json_data[_offset]=='}')) + { + _offset-=1; + } + //直接下一个,不用处理键值 + continue; + } + else if(_json_data[_offset]=='[') + { //表示有数组 + ////////////////////////////////////////////////////////////////////// + //begin level1 [] + //vector vector> vector> + //如果是非内置类型 直接使用json_decode<> + + //递归代码 + + + _offset++; + for ( ; _offset < _json_data.size(); _offset++) + { + if (_json_data[_offset] == ']') + { + //offset++; + break; + } + if (_json_data[_offset] == '"') + { + _offset++; + for ( ; _offset < _json_data.size(); _offset++) + { + if (_json_data[_offset] == '"'&&_json_data[_offset-1]!=0x5C) + { + break; + } + } + } + } + + //直接下一个,不用处理键值 + if(_offset < _json_data.size() && (_json_data[_offset]==']'||_json_data[_offset]=='}')) + { + _offset-=1; + } + continue; + //end level1[] + //////////////////////////////////////////////////////////////////// + } + else if(_json_data[_offset]==0x22) + { + //如果键值也是字符串 + temp_offset=_offset; + _json_value_name=http::jsonstring_to_utf8(&_json_data[_offset],_json_data.size()-_offset,temp_offset); + _offset=temp_offset; + if(_json_data[_offset]==0x22) + { + if((_offset+1)<_json_data.size()) + { + if(_json_data[_offset+1]!=']'&&_json_data[_offset+1]!='}') + { + _offset+=1; + } + } + } + } + else + { + //表示是数字 bool NULL + for(;_offset<_json_data.size();_offset++) + { + //结束条件 + if(_json_data[_offset]==','||_json_data[_offset]==']'||_json_data[_offset]=='}'||_json_data[_offset]==0x20||_json_data[_offset]==0x0A||_json_data[_offset]==0x0D||_json_data[_offset]=='\t') + { + break; + } + _json_value_name.push_back(_json_data[_offset]); + } + //让前面循环退出或返回 + if(_offset < _json_data.size() && _json_data[_offset]=='}') + { + _offset-=1; + } + } + //////////////////////////////////////////////////////// + // level1 + //处理对象赋值 + if (http::str_casecmp(_json_key_name, "message")) + { + + json_reflectobj.message=_json_value_name; + } + + //////////////////////////////////////////////////////// + //继续循环下一个键值 + continue; + } + } + } + return _offset; + } + +unsigned int json_decode(std::vector &json_reflectobj,const std::string &_json_data,unsigned int _offset) + { + bool _isarray=false; + for(;_offset<_json_data.size();_offset++) + { + if(_json_data[_offset]=='{') + { + break; + } + if(_json_data[_offset]=='[') + { + _isarray=true; + break; + } + } + + if(_isarray) + { + if(_json_data[_offset]=='[') + { + _offset+=1; + } + for(;_offset<_json_data.size();_offset++) + { + _offset=http::json_string_trim(_json_data,_offset); + //直接返回,这样可以防插入空的对象 + if(_json_data[_offset]==0x5D) + { + return _offset; + }else if(_json_data[_offset]=='{') + { + techempower_outjson_t temp; + _offset=json_decode(temp,_json_data,_offset); + json_reflectobj.push_back(temp); + } + + } + + } + else + { + techempower_outjson_t temp; + _offset=json_decode(temp,_json_data,_offset); + json_reflectobj.push_back(temp); + + } + + return _offset; + } + +} From 648f3968c829d8455847df54309cc725a07cb974 Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 15 May 2024 10:26:48 +0800 Subject: [PATCH 41/65] Clear libs directory --- frameworks/C++/paozhu/paozhu.dockerfile | 5 ++++- .../paozhu/paozhu_benchmark/libs/types/techempower_json.h | 0 .../libs/types/techempower_json_jsonreflect.cpp | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) mode change 100644 => 100755 frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h mode change 100644 => 100755 frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 2b3329b664c..fe486d1995e 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -19,11 +19,14 @@ WORKDIR / RUN git clone https://github.com/hggq/paozhu # RUN unzip benchmark.zip RUN rm -Rf ./paozhu/controller - +RUN rm -Rf ./paozhu/libs + COPY ./paozhu_benchmark/controller ./paozhu/ +COPY ./paozhu_benchmark/libs ./paozhu/ COPY ./paozhu_benchmark/common/autocontrolmethod.hpp ./paozhu/common/ COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ +COPY ./paozhu_benchmark/common/json_reflect_headers.h ./paozhu/common/ COPY ./paozhu_benchmark/conf/server.conf ./paozhu/conf/server.conf COPY ./paozhu_benchmark/conf/orm.conf ./paozhu/conf/orm.conf diff --git a/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h b/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json.h old mode 100644 new mode 100755 diff --git a/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp b/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp old mode 100644 new mode 100755 index b5088efcdf9..8ff68cdbae2 --- a/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp +++ b/frameworks/C++/paozhu/paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp @@ -6,6 +6,7 @@ #include "json_reflect_headers.h" #include "unicode.h" #include "func.h" +//This file is automatically created, do not edit it namespace http { From 572b7f9c9560e8cece6c9fa132b38060b82fef0b Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 15 May 2024 11:07:35 +0800 Subject: [PATCH 42/65] Clear libs directory --- frameworks/C++/paozhu/paozhu.dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index fe486d1995e..2eac4d14319 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -23,6 +23,7 @@ RUN rm -Rf ./paozhu/libs COPY ./paozhu_benchmark/controller ./paozhu/ COPY ./paozhu_benchmark/libs ./paozhu/ +RUN ls -l ./paozhu/libs COPY ./paozhu_benchmark/common/autocontrolmethod.hpp ./paozhu/common/ COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ From 057bcc7605fd570e469209ee62b033c747a28cea Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 15 May 2024 11:11:46 +0800 Subject: [PATCH 43/65] Clear libs directory --- frameworks/C++/paozhu/paozhu.dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 2eac4d14319..fa8f873263d 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -22,8 +22,7 @@ RUN rm -Rf ./paozhu/controller RUN rm -Rf ./paozhu/libs COPY ./paozhu_benchmark/controller ./paozhu/ -COPY ./paozhu_benchmark/libs ./paozhu/ -RUN ls -l ./paozhu/libs + COPY ./paozhu_benchmark/common/autocontrolmethod.hpp ./paozhu/common/ COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ From 9e7aea588bf7abb4c97fabc886e0a84ae1c21194 Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 15 May 2024 11:24:27 +0800 Subject: [PATCH 44/65] Clear libs directory --- frameworks/C++/paozhu/paozhu.dockerfile | 6 +- .../controller/src/techempower.cpp | 378 +++++++++--------- 2 files changed, 194 insertions(+), 190 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index fa8f873263d..f7b19d96614 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -20,9 +20,13 @@ RUN git clone https://github.com/hggq/paozhu # RUN unzip benchmark.zip RUN rm -Rf ./paozhu/controller RUN rm -Rf ./paozhu/libs +RUN mkdir ./paozhu/libs +RUN mkdir ./paozhu/libs/types COPY ./paozhu_benchmark/controller ./paozhu/ - +COPY ./paozhu_benchmark/libs/types/techempower_json.h ./paozhu/libs/types/ +COPY ./paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ + COPY ./paozhu_benchmark/common/autocontrolmethod.hpp ./paozhu/common/ COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ diff --git a/frameworks/C++/paozhu/paozhu_benchmark/controller/src/techempower.cpp b/frameworks/C++/paozhu/paozhu_benchmark/controller/src/techempower.cpp index 43906f42156..f8dfe230acd 100755 --- a/frameworks/C++/paozhu/paozhu_benchmark/controller/src/techempower.cpp +++ b/frameworks/C++/paozhu/paozhu_benchmark/controller/src/techempower.cpp @@ -6,236 +6,236 @@ #include #include "httppeer.h" #include "techempower.h" -#include "techempower_json.h" #include "datetime.h" #include "func.h" #include "pzcache.h" #include "json_reflect_headers.h" +#include "techempower_json.h" namespace http { -//@urlpath(null,plaintext) -std::string techempowerplaintext(std::shared_ptr peer) -{ - peer->type("text/plain; charset=UTF-8"); - peer->set_header("Date", get_gmttime()); - peer->output = "Hello, World!"; - return ""; -} - -//@urlpath(null,json) -std::string techempowerjson(std::shared_ptr peer) -{ - peer->type("application/json; charset=UTF-8"); - peer->set_header("Date", get_gmttime()); - struct techempower_outjson_t a; - a.message = "Hello, World!"; - peer->output = json_encode(a); - return ""; -} - -//@urlpath(null,db) -std::string techempowerdb(std::shared_ptr peer) -{ - peer->type("application/json; charset=UTF-8"); - peer->set_header("Date", get_gmttime()); - auto myworld = orm::World(); - unsigned int rd_num = rand_range(1, 10000); - myworld.get_one(rd_num); - - peer->output = myworld.data_tojson(); - return ""; -} - -//@urlpath(null,queries) -std::string techempowerqueries(std::shared_ptr peer) -{ - peer->type("application/json; charset=UTF-8"); - peer->set_header("Date", get_gmttime()); - - unsigned int get_num = peer->get["queries"].to_int(); - if (get_num == 0) + //@urlpath(null,plaintext) + std::string techempowerplaintext(std::shared_ptr peer) { - get_num = 1; + peer->type("text/plain; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + peer->output = "Hello, World!"; + return ""; } - else if (get_num > 500) + + //@urlpath(null,json) + std::string techempowerjson(std::shared_ptr peer) { - get_num = 500; + peer->type("application/json; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + struct techempower_outjson_t a; + a.message = "Hello, World!"; + peer->output = json_encode(a); + return ""; } - auto myworld = orm::World(); - myworld.record.reserve(get_num); - for (unsigned int i = 0; i < get_num; i++) + + //@urlpath(null,db) + std::string techempowerdb(std::shared_ptr peer) { - myworld.wheresql.clear(); + peer->type("application/json; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + auto myworld = orm::World(); unsigned int rd_num = rand_range(1, 10000); - myworld.where("id", rd_num).fetch_append(); - } - - peer->output = myworld.to_json(); - return ""; -} + myworld.get_one(rd_num); -//@urlpath(null,fortunes) -std::string techempowerfortunes(std::shared_ptr peer) -{ - peer->type("text/html; charset=UTF-8"); - peer->set_header("Date", get_gmttime()); - - auto myfortune = orm::Fortune(); - myfortune.fetch(); - myfortune.data.id = 0; - myfortune.data.message = "Additional fortune added at request time."; - myfortune.record.push_back(myfortune.data); - - std::sort(myfortune.record.begin(), myfortune.record.end(), [](const auto &lhs, const auto &rhs) - { return lhs.message < rhs.message; }); - peer->val["list"].set_array(); - OBJ_ARRAY item; - for (unsigned int i = 0; i < myfortune.record.size(); i++) - { - item["id"] = myfortune.record[i].id; - item["message"] = html_encode(myfortune.record[i].message); - peer->val["list"].push(item); + peer->output = myworld.data_tojson(); + return ""; } - peer->view("techempower/fortunes"); - return ""; -} + //@urlpath(null,queries) + std::string techempowerqueries(std::shared_ptr peer) + { + peer->type("application/json; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); -//@urlpath(null,updates) -std::string techempowerupdates(std::shared_ptr peer) -{ - peer->type("application/json; charset=UTF-8"); - peer->set_header("Date", get_gmttime()); - unsigned int get_num = peer->get["queries"].to_int(); + unsigned int get_num = peer->get["queries"].to_int(); + if (get_num == 0) + { + get_num = 1; + } + else if (get_num > 500) + { + get_num = 500; + } + auto myworld = orm::World(); + myworld.record.reserve(get_num); + for (unsigned int i = 0; i < get_num; i++) + { + myworld.wheresql.clear(); + unsigned int rd_num = rand_range(1, 10000); + myworld.where("id", rd_num).fetch_append(); + } - if (get_num == 0) - { - get_num = 1; - } - else if (get_num > 500) - { - get_num = 500; + peer->output = myworld.to_json(); + return ""; } - auto myworld = orm::World(); - myworld.record.clear(); - myworld.record.reserve(get_num); - for (unsigned int i = 0; i < get_num; i++) + + //@urlpath(null,fortunes) + std::string techempowerfortunes(std::shared_ptr peer) { - myworld.wheresql.clear(); - myworld.where("id", rand_range(1, 10000)).fetch_append(); - if (myworld.effect() > 0) + peer->type("text/html; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + + auto myfortune = orm::Fortune(); + myfortune.fetch(); + myfortune.data.id = 0; + myfortune.data.message = "Additional fortune added at request time."; + myfortune.record.push_back(myfortune.data); + + std::sort(myfortune.record.begin(), myfortune.record.end(), [](const auto &lhs, const auto &rhs) + { return lhs.message < rhs.message; }); + peer->val["list"].set_array(); + OBJ_ARRAY item; + for (unsigned int i = 0; i < myfortune.record.size(); i++) { - unsigned int j = myworld.record.size() - 1; - myworld.data.randomnumber = rand_range(1, 10000); - myworld.record[j].randomnumber = myworld.data.randomnumber; - myworld.update("randomnumber"); + item["id"] = myfortune.record[i].id; + item["message"] = html_encode(myfortune.record[i].message); + peer->val["list"].push(item); } - } - peer->output = myworld.to_json(); - return ""; -} -//@urlpath(null,cached-queries) -std::string techempowercached_queries(std::shared_ptr peer) -{ - peer->type("application/json; charset=UTF-8"); - peer->set_header("Date", get_gmttime()); + peer->view("techempower/fortunes"); + return ""; + } - unsigned int get_num = peer->get["count"].to_int(); - if (get_num == 0) + //@urlpath(null,updates) + std::string techempowerupdates(std::shared_ptr peer) { - get_num = 1; + peer->type("application/json; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + unsigned int get_num = peer->get["queries"].to_int(); + + if (get_num == 0) + { + get_num = 1; + } + else if (get_num > 500) + { + get_num = 500; + } + auto myworld = orm::World(); + myworld.record.clear(); + myworld.record.reserve(get_num); + for (unsigned int i = 0; i < get_num; i++) + { + myworld.wheresql.clear(); + myworld.where("id", rand_range(1, 10000)).fetch_append(); + if (myworld.effect() > 0) + { + unsigned int j = myworld.record.size() - 1; + myworld.data.randomnumber = rand_range(1, 10000); + myworld.record[j].randomnumber = myworld.data.randomnumber; + myworld.update("randomnumber"); + } + } + peer->output = myworld.to_json(); + return ""; } - else if (get_num > 500) + + //@urlpath(null,cached-queries) + std::string techempowercached_queries(std::shared_ptr peer) { - get_num = 500; - } - auto myworld = orm::World(); - std::string mycacheid = "alldatacache"; + peer->type("application/json; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); - pzcache> &temp_cache = pzcache>::conn(); + unsigned int get_num = peer->get["count"].to_int(); + if (get_num == 0) + { + get_num = 1; + } + else if (get_num > 500) + { + get_num = 500; + } + auto myworld = orm::World(); + std::string mycacheid = "alldatacache"; - std::vector allcachedata_array; - allcachedata_array.reserve(10000); - //create rand data to cache - if (temp_cache.check(mycacheid) > -1) - { - allcachedata_array = temp_cache.get(mycacheid); - } - else - { - allcachedata_array.resize(10000); - for (unsigned int i = 0; i < 10000; i++) + pzcache> &temp_cache = pzcache>::conn(); + + std::vector allcachedata_array; + allcachedata_array.reserve(10000); + // create rand data to cache + if (temp_cache.check(mycacheid) > -1) { - allcachedata_array[i].id = i + 1; - allcachedata_array[i].randomnumber = rand_range(1, 10000); + allcachedata_array = temp_cache.get(mycacheid); } - temp_cache.save(mycacheid, allcachedata_array, 120); - } - //get rand data from cache - mycacheid = "my" + std::to_string(get_num); - myworld.record.reserve(get_num); - if (temp_cache.check(mycacheid) > -1) - { - myworld.record = temp_cache.get(mycacheid); - } - else - { - if (allcachedata_array.size() == 10000) + else { - for (unsigned int i = 0; i < get_num; i++) + allcachedata_array.resize(10000); + for (unsigned int i = 0; i < 10000; i++) { - unsigned int temp_rid = rand_range(0, 9999); - myworld.record.push_back(allcachedata_array[temp_rid]); + allcachedata_array[i].id = i + 1; + allcachedata_array[i].randomnumber = rand_range(1, 10000); } + temp_cache.save(mycacheid, allcachedata_array, 120); + } + // get rand data from cache + mycacheid = "my" + std::to_string(get_num); + myworld.record.reserve(get_num); + if (temp_cache.check(mycacheid) > -1) + { + myworld.record = temp_cache.get(mycacheid); + } + else + { + if (allcachedata_array.size() == 10000) + { + for (unsigned int i = 0; i < get_num; i++) + { + unsigned int temp_rid = rand_range(0, 9999); + myworld.record.push_back(allcachedata_array[temp_rid]); + } + } + temp_cache.save(mycacheid, myworld.record, 120); } - temp_cache.save(mycacheid, myworld.record, 120); - } - - peer->output = myworld.to_json(); - return ""; -} -//@urlpath(null,cached-db) -std::string techempowercached_db(std::shared_ptr peer) -{ - peer->type("application/json; charset=UTF-8"); - peer->set_header("Date", get_gmttime()); - //this test from database to cache - unsigned int get_num = peer->get["count"].to_int(); - if (get_num == 0) - { - get_num = 1; + peer->output = myworld.to_json(); + return ""; } - else if (get_num > 500) + + //@urlpath(null,cached-db) + std::string techempowercached_db(std::shared_ptr peer) { - get_num = 500; - } - auto myworld = orm::World(); - std::string mycacheid = "my" + std::to_string(get_num); + peer->type("application/json; charset=UTF-8"); + peer->set_header("Date", get_gmttime()); + // this test from database to cache + unsigned int get_num = peer->get["count"].to_int(); + if (get_num == 0) + { + get_num = 1; + } + else if (get_num > 500) + { + get_num = 500; + } + auto myworld = orm::World(); + std::string mycacheid = "my" + std::to_string(get_num); - pzcache> &temp_cache = pzcache>::conn(); + pzcache> &temp_cache = pzcache>::conn(); - myworld.record.reserve(get_num); - if (temp_cache.check(mycacheid) > -1) - { - myworld.record = temp_cache.get(mycacheid); - } - else - { - std::vector cacheid; - for (unsigned int i = 0; i < get_num; i++) + myworld.record.reserve(get_num); + if (temp_cache.check(mycacheid) > -1) + { + myworld.record = temp_cache.get(mycacheid); + } + else { - cacheid.push_back(rand_range(1, 10000)); + std::vector cacheid; + for (unsigned int i = 0; i < get_num; i++) + { + cacheid.push_back(rand_range(1, 10000)); + } + + std::string sqlstr = array_to_sql(cacheid); + myworld.whereIn("id", sqlstr).fetch(); + temp_cache.save(mycacheid, myworld.record, 120); } - std::string sqlstr = array_to_sql(cacheid); - myworld.whereIn("id", sqlstr).fetch(); - temp_cache.save(mycacheid, myworld.record, 120); + peer->output = myworld.to_json(); + return ""; } - peer->output = myworld.to_json(); - return ""; -} - -}// namespace http \ No newline at end of file +} // namespace http \ No newline at end of file From ecc850119b59835dfd8e05267f1c5402d714d909 Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 15 May 2024 11:34:58 +0800 Subject: [PATCH 45/65] Clear libs and controller directory --- frameworks/C++/paozhu/paozhu.dockerfile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index f7b19d96614..8086f6eafe6 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -23,7 +23,13 @@ RUN rm -Rf ./paozhu/libs RUN mkdir ./paozhu/libs RUN mkdir ./paozhu/libs/types -COPY ./paozhu_benchmark/controller ./paozhu/ +RUN mkdir ./paozhu/controller +RUN mkdir ./paozhu/controller/include +RUN mkdir ./paozhu/controller/src + +COPY ./paozhu_benchmark/controller/include/techempower.h ./paozhu/controller/include/ +COPY ./paozhu_benchmark/controller/src/techempower.cpp ./paozhu/controller/src/ + COPY ./paozhu_benchmark/libs/types/techempower_json.h ./paozhu/libs/types/ COPY ./paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ From 2f9419d12fe54169493efe2be541dff991f6dc03 Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 15 May 2024 21:57:47 +0800 Subject: [PATCH 46/65] Fix copy file --- frameworks/C++/paozhu/paozhu.dockerfile | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 8086f6eafe6..fa8379b0797 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -27,20 +27,20 @@ RUN mkdir ./paozhu/controller RUN mkdir ./paozhu/controller/include RUN mkdir ./paozhu/controller/src -COPY ./paozhu_benchmark/controller/include/techempower.h ./paozhu/controller/include/ -COPY ./paozhu_benchmark/controller/src/techempower.cpp ./paozhu/controller/src/ +COPY /controller/include/techempower.h ./paozhu/controller/include/ +COPY /controller/src/techempower.cpp ./paozhu/controller/src/ -COPY ./paozhu_benchmark/libs/types/techempower_json.h ./paozhu/libs/types/ -COPY ./paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ +COPY /libs/types/techempower_json.h ./paozhu/libs/types/ +COPY /libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ -COPY ./paozhu_benchmark/common/autocontrolmethod.hpp ./paozhu/common/ -COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ -COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ -COPY ./paozhu_benchmark/common/json_reflect_headers.h ./paozhu/common/ +COPY /common/autocontrolmethod.hpp ./paozhu/common/ +COPY /common/reghttpmethod_pre.hpp ./paozhu/common/ +COPY /common/reghttpmethod.hpp ./paozhu/common/ +COPY /common/json_reflect_headers.h ./paozhu/common/ -COPY ./paozhu_benchmark/conf/server.conf ./paozhu/conf/server.conf -COPY ./paozhu_benchmark/conf/orm.conf ./paozhu/conf/orm.conf -COPY ./paozhu_benchmark/CMakeLists.txt ./paozhu/CMakeLists.txt +COPY /conf/server.conf ./paozhu/conf/server.conf +COPY /conf/orm.conf ./paozhu/conf/orm.conf +COPY /CMakeLists.txt ./paozhu/CMakeLists.txt WORKDIR /paozhu RUN unzip asio.zip From 308fd19bb4e2831a8f81ce3c844f529b5a8a736b Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 15 May 2024 22:01:47 +0800 Subject: [PATCH 47/65] Fix copy file --- frameworks/C++/paozhu/paozhu.dockerfile | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index fa8379b0797..3b9bf07e693 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -27,20 +27,20 @@ RUN mkdir ./paozhu/controller RUN mkdir ./paozhu/controller/include RUN mkdir ./paozhu/controller/src -COPY /controller/include/techempower.h ./paozhu/controller/include/ -COPY /controller/src/techempower.cpp ./paozhu/controller/src/ +COPY ./controller/include/techempower.h ./paozhu/controller/include/ +COPY ./controller/src/techempower.cpp ./paozhu/controller/src/ -COPY /libs/types/techempower_json.h ./paozhu/libs/types/ -COPY /libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ +COPY ./libs/types/techempower_json.h ./paozhu/libs/types/ +COPY ./libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ -COPY /common/autocontrolmethod.hpp ./paozhu/common/ -COPY /common/reghttpmethod_pre.hpp ./paozhu/common/ -COPY /common/reghttpmethod.hpp ./paozhu/common/ -COPY /common/json_reflect_headers.h ./paozhu/common/ +COPY ./common/autocontrolmethod.hpp ./paozhu/common/ +COPY ./common/reghttpmethod_pre.hpp ./paozhu/common/ +COPY ./common/reghttpmethod.hpp ./paozhu/common/ +COPY ./common/json_reflect_headers.h ./paozhu/common/ -COPY /conf/server.conf ./paozhu/conf/server.conf -COPY /conf/orm.conf ./paozhu/conf/orm.conf -COPY /CMakeLists.txt ./paozhu/CMakeLists.txt +COPY ./conf/server.conf ./paozhu/conf/server.conf +COPY ./conf/orm.conf ./paozhu/conf/orm.conf +COPY ./CMakeLists.txt ./paozhu/CMakeLists.txt WORKDIR /paozhu RUN unzip asio.zip From 39183691431a421fcb79ea2a9344798a2cd40efb Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 15 May 2024 22:06:20 +0800 Subject: [PATCH 48/65] Fix copy file --- frameworks/C++/paozhu/paozhu.dockerfile | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 3b9bf07e693..c23a13161cc 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -26,21 +26,22 @@ RUN mkdir ./paozhu/libs/types RUN mkdir ./paozhu/controller RUN mkdir ./paozhu/controller/include RUN mkdir ./paozhu/controller/src +RUN ls -l -COPY ./controller/include/techempower.h ./paozhu/controller/include/ -COPY ./controller/src/techempower.cpp ./paozhu/controller/src/ +COPY ./paozhu_benchmark/controller/include/techempower.h ./paozhu/controller/include/ +COPY ./paozhu_benchmark/controller/src/techempower.cpp ./paozhu/controller/src/ -COPY ./libs/types/techempower_json.h ./paozhu/libs/types/ -COPY ./libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ +COPY ./paozhu_benchmark/libs/types/techempower_json.h ./paozhu/libs/types/ +COPY ./paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ -COPY ./common/autocontrolmethod.hpp ./paozhu/common/ -COPY ./common/reghttpmethod_pre.hpp ./paozhu/common/ -COPY ./common/reghttpmethod.hpp ./paozhu/common/ -COPY ./common/json_reflect_headers.h ./paozhu/common/ +COPY ./paozhu_benchmark/common/autocontrolmethod.hpp ./paozhu/common/ +COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ +COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ +COPY ./paozhu_benchmark/common/json_reflect_headers.h ./paozhu/common/ -COPY ./conf/server.conf ./paozhu/conf/server.conf -COPY ./conf/orm.conf ./paozhu/conf/orm.conf -COPY ./CMakeLists.txt ./paozhu/CMakeLists.txt +COPY ./paozhu_benchmark/conf/server.conf ./paozhu/conf/server.conf +COPY ./paozhu_benchmark/conf/orm.conf ./paozhu/conf/orm.conf +COPY ./paozhu_benchmark/CMakeLists.txt ./paozhu/CMakeLists.txt WORKDIR /paozhu RUN unzip asio.zip From 591a08da4ac1fa259852073d1eee7b58651efb6a Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 15 May 2024 22:19:48 +0800 Subject: [PATCH 49/65] Fix copy file --- frameworks/C++/paozhu/paozhu.dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index c23a13161cc..8086f6eafe6 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -26,7 +26,6 @@ RUN mkdir ./paozhu/libs/types RUN mkdir ./paozhu/controller RUN mkdir ./paozhu/controller/include RUN mkdir ./paozhu/controller/src -RUN ls -l COPY ./paozhu_benchmark/controller/include/techempower.h ./paozhu/controller/include/ COPY ./paozhu_benchmark/controller/src/techempower.cpp ./paozhu/controller/src/ From 57dfce007e44a9bc55202a8265115f11c4c226ab Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 1 Jan 2025 13:07:08 +0800 Subject: [PATCH 50/65] paozhu update --- frameworks/C++/paozhu/paozhu.dockerfile | 43 +- .../paozhu/paozhu_benchmark/CMakeLists.txt | 145 +- .../common/autocontrolmethod.hpp | 10 + .../common/autorestfulpaths.hpp | 40 + .../paozhu_benchmark/common/cost_define.h | 9 + .../paozhu_benchmark/common/httphook.cpp | 39 + .../common/json_reflect_headers.h | 0 .../common/websockets_method_reg.hpp | 19 + .../paozhu/paozhu_benchmark/conf/server.conf | 10 +- .../paozhu_benchmark/models/Fortune.cpp | 16 + .../paozhu/paozhu_benchmark/models/World.cpp | 16 + .../paozhu_benchmark/models/include/Fortune.h | 16 + .../paozhu_benchmark/models/include/World.h | 16 + .../orm/include/fortunebase.h | 2687 +++++++++++++++++ .../paozhu_benchmark/orm/include/worldbase.h | 2509 +++++++++++++++ .../C++/paozhu/paozhu_benchmark/orm/orm.h | 4 + .../view/techempower/fortunes.html | 5 + .../viewsrc/include/regviewmethod.hpp | 26 + .../viewsrc/include/viewsrc.h | 26 + .../viewsrc/view/techempower/fortunes.cpp | 50 + .../websockets/include/loopwebsockets.hpp | 66 + .../websockets/include/mywebsockets.hpp | 83 + 22 files changed, 5796 insertions(+), 39 deletions(-) create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/autorestfulpaths.hpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/cost_define.h create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/httphook.cpp mode change 100644 => 100755 frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/common/websockets_method_reg.hpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/models/Fortune.cpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/models/World.cpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/models/include/Fortune.h create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/models/include/World.h create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortunebase.h create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/orm/include/worldbase.h create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/orm/orm.h create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/view/techempower/fortunes.html create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/viewsrc/include/regviewmethod.hpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/viewsrc/include/viewsrc.h create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/viewsrc/view/techempower/fortunes.cpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/websockets/include/loopwebsockets.hpp create mode 100755 frameworks/C++/paozhu/paozhu_benchmark/websockets/include/mywebsockets.hpp diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 8086f6eafe6..480d726d314 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -20,23 +20,40 @@ RUN git clone https://github.com/hggq/paozhu # RUN unzip benchmark.zip RUN rm -Rf ./paozhu/controller RUN rm -Rf ./paozhu/libs -RUN mkdir ./paozhu/libs -RUN mkdir ./paozhu/libs/types +RUN rm -Rf ./paozhu/view +RUN rm -Rf ./paozhu/viewsrc +RUN rm -Rf ./paozhu/orm +RUN rm -Rf ./paozhu/models +RUN rm -Rf ./paozhu/common -RUN mkdir ./paozhu/controller -RUN mkdir ./paozhu/controller/include -RUN mkdir ./paozhu/controller/src -COPY ./paozhu_benchmark/controller/include/techempower.h ./paozhu/controller/include/ -COPY ./paozhu_benchmark/controller/src/techempower.cpp ./paozhu/controller/src/ +COPY ./paozhu_benchmark/controller ./paozhu/ +COPY ./paozhu_benchmark/libs ./paozhu/ +COPY ./paozhu_benchmark/view ./paozhu/ +COPY ./paozhu_benchmark/viewsrc ./paozhu/ -COPY ./paozhu_benchmark/libs/types/techempower_json.h ./paozhu/libs/types/ -COPY ./paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ +COPY ./paozhu_benchmark/orm ./paozhu/ +COPY ./paozhu_benchmark/models ./paozhu/ +COPY ./paozhu_benchmark/common ./paozhu/ -COPY ./paozhu_benchmark/common/autocontrolmethod.hpp ./paozhu/common/ -COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ -COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ -COPY ./paozhu_benchmark/common/json_reflect_headers.h ./paozhu/common/ + +# RUN mkdir ./paozhu/libs +# RUN mkdir ./paozhu/libs/types + +# RUN mkdir ./paozhu/controller +# RUN mkdir ./paozhu/controller/include +# RUN mkdir ./paozhu/controller/src + +# COPY ./paozhu_benchmark/controller/include/techempower.h ./paozhu/controller/include/ +# COPY ./paozhu_benchmark/controller/src/techempower.cpp ./paozhu/controller/src/ + +# COPY ./paozhu_benchmark/libs/types/techempower_json.h ./paozhu/libs/types/ +# COPY ./paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ + +# COPY ./paozhu_benchmark/common/autocontrolmethod.hpp ./paozhu/common/ +# COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ +# COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ +# COPY ./paozhu_benchmark/common/json_reflect_headers.h ./paozhu/common/ COPY ./paozhu_benchmark/conf/server.conf ./paozhu/conf/server.conf COPY ./paozhu_benchmark/conf/orm.conf ./paozhu/conf/orm.conf diff --git a/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt b/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt index b8bf972dbc2..a4fabfb1ae6 100755 --- a/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt +++ b/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt @@ -117,13 +117,11 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/viewsrc/include) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/websockets/include) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) -if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty) - file(REMOVE_RECURSE ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty) -endif () -#EXECUTE_PROCESS(COMMAND rm ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty) +if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_pre) + file(REMOVE_RECURSE ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_pre) +endif() set(PAOZHU_PRE paozhu_pre) add_executable(${PAOZHU_PRE} ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli/autopickmethod.cpp ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpserver/src/md5.cpp) -add_executable(paozhu_empty ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli/autoemptymethod.cpp) @@ -138,6 +136,22 @@ file(GLOB_RECURSE src_list ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) foreach(cppfile IN LISTS controller_list) string(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/controller/src/" "" cppfilename ${cppfile}) + string(FIND ${cppfilename} "/" strpos) + if(${strpos} GREATER_EQUAL "0" ) + string(REGEX MATCHALL "([A-Za-z0-9._-]+)/" npaths ${cppfilename} ) + set(fullpaths "") + string(APPEND fullpaths "${CMAKE_CURRENT_SOURCE_DIR}/controller/include/") + foreach(onepathname ${npaths}) + string(REPLACE "/" "" toucpath ${onepathname}) + string(APPEND fullpaths ${toucpath}) + if (IS_DIRECTORY "${fullpaths}") + else() + message("mkdir ${fullpaths}") + file(MAKE_DIRECTORY "${fullpaths}") + endif() + string(APPEND fullpaths "/") + endforeach() + endif() string(REGEX REPLACE ".cpp" "" cppbasename ${cppfilename}) # message(${cppbasename}) if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/controller/include/${cppbasename}.h") @@ -175,21 +189,18 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin) if(${mode} AND (CMAKE_BUILD_TYPE STREQUAL "Release")) - add_executable(paozhu ${CMAKE_CURRENT_SOURCE_DIR}/test/testbenchmark.cpp ${common_list} ${viewsrc_list} ${FRAMEWORK_CPP_PATH} ${orm_list} ${reflect_list} ${src_list} ${source_list} ${controller_list}) + add_executable(paozhu ${CMAKE_CURRENT_SOURCE_DIR}/test/testdaemon.cpp ${common_list} ${viewsrc_list} ${FRAMEWORK_CPP_PATH} ${orm_list} ${reflect_list} ${src_list} ${source_list} ${controller_list}) else() add_executable(paozhu ${CMAKE_CURRENT_SOURCE_DIR}/test/test.cpp ${common_list} ${viewsrc_list} ${FRAMEWORK_CPP_PATH} ${orm_list} ${reflect_list} ${src_list} ${source_list} ${controller_list}) endif() if (ENABLE_WIN_VCPKG STREQUAL "ON") -else () +else() add_custom_command( - TARGET paozhu_empty paozhu - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_pre - PRE_BUILD + TARGET paozhu_pre POST_BUILD WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ COMMAND echo "-- controls method --" COMMAND ${PAOZHU_PRE} ${CMAKE_CURRENT_SOURCE_DIR}/ - COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_SOURCE_DIR}/bin/paozhu_empty ) endif() @@ -265,7 +276,7 @@ else () if(USE_STANDALONE_ASIO) if(CMAKE_SYSTEM_NAME MATCHES "Darwin") -set(ASIO_PATH "/usr/local/opt/asio/include" "/usr/local/include") +set(ASIO_PATH "/usr/local/opt/asio/include" "/usr/local/include" "/opt/homebrew/opt/asio" ${CMAKE_CURRENT_SOURCE_DIR}/asio) else() set(ASIO_PATH ${CMAKE_CURRENT_SOURCE_DIR}/asio "/usr/include") endif() @@ -324,19 +335,54 @@ if(ZLIB_FOUND) target_link_libraries(paozhu z) endif() -find_path(MYSQL_ROOT_DIR mysql) + +if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + if (IS_DIRECTORY "/usr/local/mysql/include") + MESSAGE( STATUS "/usr/local/mysql") + set(MYSQL_INCLUDE_DIR "/usr/local/mysql/include") + include_sub_directories_recursively(/usr/local/mysql/include) + endif() + + if (IS_DIRECTORY "/usr/local/opt/mysql-client") + MESSAGE( STATUS "/usr/local/opt/mysql-client") + set(MYSQL_INCLUDE_DIR "/usr/local/opt/mysql-client/include") + include_sub_directories_recursively(/usr/local/opt/mysql-client/include) + endif() + + if (IS_DIRECTORY "/opt/homebrew/opt/mysql") + MESSAGE( STATUS "/opt/homebrew/opt/mysql") + set(MYSQL_INCLUDE_DIR "/opt/homebrew/opt/mysql/include") + include_sub_directories_recursively(/opt/homebrew/opt/mysql/include) + endif() + + + if (IS_DIRECTORY "/opt/homebrew/opt/mysql-client") + MESSAGE( STATUS "/opt/homebrew/opt/mysql-client") + set(MYSQL_INCLUDE_DIR "/opt/homebrew/opt/mysql-client/include") + include_sub_directories_recursively(/opt/homebrew/opt/mysql-client/include) + endif() + MESSAGE( STATUS "MYSQL_ROOT_DIR = ${MYSQL_ROOT_DIR} ") +else() + find_path(MYSQL_ROOT_DIR mysql) +endif() + + +FIND_PATH(MYSQL_INCLUDE_DIR NAMES mysql.h + PATHS /usr/local/include/mysql /usr/include/mysql /opt/homebrew/opt/mysql/include /usr/local/opt/mysql-client/include /opt/homebrew/opt/mysql-client/include +) + MESSAGE( STATUS "MYSQL_ROOT_DIR = ${MYSQL_ROOT_DIR} ") find_package_handle_standard_args(mysql REQUIRED_VARS MYSQL_ROOT_DIR) -FIND_PATH(MYSQL_INCLUDE_DIR mysql.h - /usr/local/include/mysql - /usr/include/mysql - /usr/local/mysql/include -) + +if(NOT MYSQL_INCLUDE_DIR) + message(STATUS "Could not find \"mysql.h\" from searching ") +endif() + SET(MYSQL_NAMES mysqlclient) FIND_LIBRARY(MYSQL_LIBRARY NAMES ${MYSQL_NAMES} - PATHS /usr/lib /usr/local/lib /usr/local/mysql/lib + PATHS /usr/lib /usr/local/lib /usr/local/mysql/lib /usr/local/opt/mysql/lib /opt/homebrew/opt/mysql/lib /opt/homebrew/opt/mysql-client/lib PATH_SUFFIXES mysql ) @@ -371,7 +417,17 @@ if(ENABLE_GD STREQUAL "ON") message("---ENABLE_GD-----") if(CMAKE_SYSTEM_NAME MATCHES "Darwin") - set(GD_ROOT_DIR "/usr/local/opt/gd/lib") + + if (IS_DIRECTORY "/usr/local/opt/gd/lib") + MESSAGE( STATUS "/usr/local/opt/gd/lib") + set(GD_ROOT_DIR "/usr/local/opt/gd/lib") + include_sub_directories_recursively(/usr/local/opt/gd/include) + endif() + if (IS_DIRECTORY "/opt/homebrew/opt/gd/lib") + MESSAGE( STATUS "/opt/homebrew/opt/gd/lib") + set(GD_ROOT_DIR "/opt/homebrew/opt/gd/lib") + include_sub_directories_recursively(/opt/homebrew/opt/gd/include) + endif() else() set(GD_ROOT_DIR "${sys_so_path}") endif() @@ -393,7 +449,18 @@ endif() message(STATUS "GD Graphics Library at: ${GD_LIB_DIR}") if(CMAKE_SYSTEM_NAME MATCHES "Darwin") -set(QR_ROOT_DIR "/usr/local/opt/qrencode/lib") + + if (IS_DIRECTORY "/usr/local/opt/qrencode/lib") + MESSAGE( STATUS "/usr/local/opt/qrencode/lib") + set(QR_ROOT_DIR "/usr/local/opt/qrencode/lib") + include_sub_directories_recursively(/usr/local/opt/qrencode/include) + endif() + if (IS_DIRECTORY "/opt/homebrew/opt/qrencode/lib") + MESSAGE( STATUS "/opt/homebrew/opt/qrencode/lib") + set(QR_ROOT_DIR "/opt/homebrew/opt/qrencode/lib") + include_sub_directories_recursively(/opt/homebrew/opt/qrencode/include) + endif() + else() set(QR_ROOT_DIR "${sys_so_path}") endif() @@ -422,7 +489,18 @@ target_link_libraries(paozhu ${GD_LIB_DIR}) target_link_libraries(paozhu ${QR_LIB_DIR}) if(CMAKE_SYSTEM_NAME MATCHES "Darwin") -set(PNG_ROOT_DIR "/usr/local/opt/libpng/lib") + + if (IS_DIRECTORY "/usr/local/opt/libpng/lib") + MESSAGE( STATUS "/usr/local/opt/libpng/lib") + set(PNG_ROOT_DIR "/usr/local/opt/libpng/lib") + include_sub_directories_recursively(/usr/local/opt/libpng/include) + endif() + if (IS_DIRECTORY "/opt/homebrew/opt/libpng/lib") + MESSAGE( STATUS "/opt/homebrew/opt/libpng/lib") + set(PNG_ROOT_DIR "/opt/homebrew/opt/libpng/lib") + include_sub_directories_recursively(/opt/homebrew/opt/libpng/include) + endif() + else() set(PNG_ROOT_DIR "${sys_so_path}") endif() @@ -435,7 +513,18 @@ find_library(PNG_LIB_DIR target_link_libraries(paozhu ${PNG_LIB_DIR}) if(CMAKE_SYSTEM_NAME MATCHES "Darwin") - set(FREETYPE_ROOT_DIR "/usr/local/opt/freetype/lib") + + if (IS_DIRECTORY "/usr/local/opt/freetype/lib") + MESSAGE( STATUS "/usr/local/opt/freetype/lib") + set(FREETYPE_ROOT_DIR "/usr/local/opt/freetype/lib") + include_sub_directories_recursively(/usr/local/opt/freetype/include) + endif() + if (IS_DIRECTORY "/opt/homebrew/opt/freetype/lib") + MESSAGE( STATUS "/opt/homebrew/opt/freetype/lib") + set(FREETYPE_ROOT_DIR "/opt/homebrew/opt/freetype/lib") + include_sub_directories_recursively(/opt/homebrew/opt/freetype/include) + endif() + else() set(FREETYPE_ROOT_DIR "${sys_so_path}") endif() @@ -450,7 +539,15 @@ target_link_libraries(paozhu ${FREETYPE_LIB_DIR}) endif() if(CMAKE_SYSTEM_NAME MATCHES "Darwin") - set(BROTLI_ROOT_DIR "/usr/local/opt/brotli/lib") + if (IS_DIRECTORY "/usr/local/opt/brotli/lib") + set(BROTLI_ROOT_DIR "/usr/local/opt/brotli/lib") + INCLUDE_DIRECTORIES("/usr/local/opt/brotli/include") + endif() +# set(BROTLI_ROOT_DIR "/usr/local/opt/brotli/lib") + if (IS_DIRECTORY "/opt/homebrew/opt/brotli/lib") + set(BROTLI_ROOT_DIR "/opt/homebrew/opt/brotli/lib") + INCLUDE_DIRECTORIES("/opt/homebrew/opt/brotli/include") + endif() else() set(BROTLI_ROOT_DIR "${sys_so_path}") endif() diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/autocontrolmethod.hpp b/frameworks/C++/paozhu/paozhu_benchmark/common/autocontrolmethod.hpp index faddf242daa..46d8979692a 100755 --- a/frameworks/C++/paozhu/paozhu_benchmark/common/autocontrolmethod.hpp +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/autocontrolmethod.hpp @@ -44,6 +44,16 @@ namespace http } + + void _initauto_domain_httpmethodregto(std::map> &domain_methodcallback) + { + struct regmethold_t temp; + std::map methodcallback; + std::map>::iterator domain_iterator; + + + } + } #endif diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/autorestfulpaths.hpp b/frameworks/C++/paozhu/paozhu_benchmark/common/autorestfulpaths.hpp new file mode 100755 index 00000000000..dabbdbda827 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/autorestfulpaths.hpp @@ -0,0 +1,40 @@ + +#ifndef __HTTP_AUTO_REG_CONTROL_HTTPRESTFUL_HPP +#define __HTTP_AUTO_REG_CONTROL_HTTPRESTFUL_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include "httppeer.h" + + + +namespace http +{ + void _initauto_control_httprestful_paths(std::map> &restfulmethod) + { + + + if(restfulmethod.size()) + {} + + + } + + void _initauto_domain_httprestful_paths(std::map>> &restfulmethod) + { + std::map> temp_path; + std::map>>::iterator domain_iterator; + + domain_iterator=restfulmethod.begin(); + temp_path.clear(); + + + } + +} + +#endif + + \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/cost_define.h b/frameworks/C++/paozhu/paozhu_benchmark/common/cost_define.h new file mode 100755 index 00000000000..47fb182f0e0 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/cost_define.h @@ -0,0 +1,9 @@ +#pragma once +#ifndef _CONST_DEFINE_FUNC_H +#define _CONST_DEFINE_FUNC_H + +#define CONST_MONEY_PART 1000000 +#define CONST_HTTP_HEADER_BODY_SIZE 16384 +#define CONST_PHP_BODY_POST_SIZE 16777216 + +#endif \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/httphook.cpp b/frameworks/C++/paozhu/paozhu_benchmark/common/httphook.cpp new file mode 100755 index 00000000000..3440c23f84b --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/httphook.cpp @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "httppeer.h" +namespace http +{ +std::map _block_ip_tables; +std::map _block_host_tables; +bool check_blockip(const std::string &client_ip) +{ + if (client_ip.size() > 0) + { + return false; + } + return false; +} +bool hook_host_http1(std::shared_ptr peer) +{ + if (peer->host.size() > 0) + { + return false; + } + return false; +} +bool hook_host_http2(std::shared_ptr peer) +{ + if (peer->host.size() > 0) + { + return false; + } + return false; +} +}// namespace http diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h b/frameworks/C++/paozhu/paozhu_benchmark/common/json_reflect_headers.h old mode 100644 new mode 100755 diff --git a/frameworks/C++/paozhu/paozhu_benchmark/common/websockets_method_reg.hpp b/frameworks/C++/paozhu/paozhu_benchmark/common/websockets_method_reg.hpp new file mode 100755 index 00000000000..b8e9c718ea9 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/common/websockets_method_reg.hpp @@ -0,0 +1,19 @@ +#pragma once +#include +#include "httppeer.h" +#include "websockets.h" +#include "mywebsockets.hpp" +#include "websockets_callback.h" +namespace http +{ +void _initwebsocketmethodregto(WEBSOCKET_REG &methodcallback) +{ + + methodcallback.emplace("wstest", [](std::weak_ptr p) -> std::shared_ptr + { return http::mywebsockets::create(p); }); + // methodcallback.emplace("looptest",[](std::weak_ptr p)->std::shared_ptr{ + // return http::loopwebsockets::create(p); + // }); +} + +}// namespace http \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf b/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf index e76a18093e9..9013265e678 100755 --- a/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf +++ b/frameworks/C++/paozhu/paozhu_benchmark/conf/server.conf @@ -3,7 +3,7 @@ threadmax=1024 threadmin=5 httpport=8888 httpsport=4430 -cothreadnum=8 ;Coroutines run on thread num +cothreadnum=16 ;Coroutines run on thread num http2_enable=0 debug_enable=1 @@ -13,6 +13,9 @@ certificate_chain_file=localhost.pem private_key_file=localhost.key tmp_dh_file=dh4096.pem reboot_password=e10adc3949ba59abbe56e057f20f883e ;md5(md5("123456")+"rand_char"+md5("123456")) +reboot_cron =w1h5 ;MDSW+Hhours reboot process M month D day S season (1 4 7 10) W week +clean_cron =m5t600 ;5-minute interval clean 600 seconds ago inactive connection +links_restart_process =n9998877ts1te5 ;More than 15000 connections, restart the process from 1:00 am to 5:00 am session_type=1 ;session save type 0.file 1.memory 2.redis 3.memcache 4.reserve static_file_compress_cache=1 ;1 enable, Cache static file compress(gzip,br) content to cache directory modelspath=/root/benchmark/models @@ -39,4 +42,7 @@ method_after= show_visitinfo=0 upload_max_size=16777216 - +siteid=0 +groupid=0 +alias_domain= +init_func= \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/models/Fortune.cpp b/frameworks/C++/paozhu/paozhu_benchmark/models/Fortune.cpp new file mode 100755 index 00000000000..160924992af --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/models/Fortune.cpp @@ -0,0 +1,16 @@ +#include "mysqlmodel.hpp" +#include "fortunebase.h" +#include "Fortune.h" + +/* 如果此文件存在不会自动覆盖,没有则会自动生成。 +*If this file exists, it will not be overwritten automatically. If not, it will be generated automatically. */ + + + namespace orm{ + + + Fortune::Fortune(std::string dbtag):mysqlclientDB(dbtag){} + Fortune::Fortune():mysqlclientDB(){} + + + } diff --git a/frameworks/C++/paozhu/paozhu_benchmark/models/World.cpp b/frameworks/C++/paozhu/paozhu_benchmark/models/World.cpp new file mode 100755 index 00000000000..aa18f46cab6 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/models/World.cpp @@ -0,0 +1,16 @@ +#include "mysqlmodel.hpp" +#include "worldbase.h" +#include "World.h" + +/* 如果此文件存在不会自动覆盖,没有则会自动生成。 +*If this file exists, it will not be overwritten automatically. If not, it will be generated automatically. */ + + + namespace orm{ + + + World::World(std::string dbtag):mysqlclientDB(dbtag){} + World::World():mysqlclientDB(){} + + + } diff --git a/frameworks/C++/paozhu/paozhu_benchmark/models/include/Fortune.h b/frameworks/C++/paozhu/paozhu_benchmark/models/include/Fortune.h new file mode 100755 index 00000000000..27865161b32 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/models/include/Fortune.h @@ -0,0 +1,16 @@ +#ifndef ORM_DEFAULT_FORTUNE_H +#define ORM_DEFAULT_FORTUNE_H +#include "mysqlmodel.hpp" +#include "fortunebase.h" + +/* 如果此文件存在不会自动覆盖,没有则会自动生成。 +*If this file exists, it will not be overwritten automatically. If not, it will be generated automatically. */ + + namespace orm { + class Fortune : public mysqlclientDB{ + public: + Fortune(std::string dbtag); + Fortune(); + }; +}; +#endif diff --git a/frameworks/C++/paozhu/paozhu_benchmark/models/include/World.h b/frameworks/C++/paozhu/paozhu_benchmark/models/include/World.h new file mode 100755 index 00000000000..ba44dee7888 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/models/include/World.h @@ -0,0 +1,16 @@ +#ifndef ORM_DEFAULT_WORLD_H +#define ORM_DEFAULT_WORLD_H +#include "mysqlmodel.hpp" +#include "worldbase.h" + +/* 如果此文件存在不会自动覆盖,没有则会自动生成。 +*If this file exists, it will not be overwritten automatically. If not, it will be generated automatically. */ + + namespace orm { + class World : public mysqlclientDB{ + public: + World(std::string dbtag); + World(); + }; +}; +#endif diff --git a/frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortunebase.h b/frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortunebase.h new file mode 100755 index 00000000000..8a09ecc4564 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/orm/include/fortunebase.h @@ -0,0 +1,2687 @@ +#ifndef ORM_DEFAULT_FORTUNEBASEMATA_H +#define ORM_DEFAULT_FORTUNEBASEMATA_H +/* +*This file is auto create from cli +*本文件为自动生成 Fri, 26 Jan 2024 02:59:30 GMT +***/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "mysql.h" +namespace orm { + + +struct fortunebase +{ + struct meta{ + unsigned int id= 0; // + std::string message=""; // + } data; + std::vector record; +std::string _rmstag="default";//this value must be default or tag value, tag in mysqlconnect config file . +std::vector _keypos{0x00}; +MYSQL_ROW _row; +std::vector::iterator begin(){ return record.begin(); } +std::vector::iterator end(){ return record.end(); } +std::vector::const_iterator begin() const{ return record.begin(); } +std::vector::const_iterator end() const{ return record.end(); } +const std::array colnames={"id","message"}; +const std::array colnamestype= {3,253}; +std::string tablename="fortune"; +std::string modelname="Fortune"; + + unsigned char findcolpos(const std::string &coln){ + if(coln.size()==0) + { + return 255; + } + unsigned char bi=coln[0]; + + + if(bi<91&&bi>64){ + bi+=32; + } + switch(coln[0]){ + + + case 'i': + return 0; +break; +case 'm': + return 1; +break; + + } + return 255; + } + + int size(){ return record.size(); } + + std::string getPKname(){ + return "id"; +} + + void record_reset() + { + record.clear(); + } + void data_reset(){ + fortunebase::meta metatemp; + data = metatemp; + } + + std::string soft_remove_sql([[maybe_unused]] const std::string &fieldsql){ + std::string temp; + + return temp; + } + void _setColnamevalue() + { + for(unsigned char i=0;i<_keypos.size();i++) + { + switch(_keypos[i]){ + case 0: + try{ + data.id=std::stoul(_row[i]); + }catch (...) { + data.id=0; + } + break; + case 1: + try{ + data.message.append((_row[i]==NULL?"":_row[i])); + }catch (...) { + data.message.clear(); + } + break; + default: + { } + + + } + + if(i>210){ + break; + } + } + } + void _addnewrowvalue(){ + fortunebase::meta metatemp; + + for(unsigned char i=0;i<_keypos.size();i++){ + + switch(_keypos[i]){ + + case 0: + try{ + metatemp.id=std::stoul(_row[i]); + }catch (...) { + metatemp.id=0; + } + break; + case 1: + try{ + metatemp.message.append((_row[i]==NULL?"":_row[i])); + }catch (...) { + metatemp.message.clear(); + } + break; + default: + { } + + + } + if(i>210){ + break; + } + } + record.emplace_back(std::move(metatemp)); + } + + inline std::string stringaddslash(std::string &content){ + std::string temp; + for(unsigned int i=0;i0){ + tempsql<<"`,`"; + }else{ + tempsql<<"`"; + } + tempsql<0){ + tempsql<<"`"; + } + tempsql<<") VALUES ("; + + if(data.id==0){ +tempsql<<"null"; + }else{ + tempsql<0){ + tempsql<<"`,`"; + }else{ + tempsql<<"`"; + } + tempsql<0){ + tempsql<<"`"; + } + tempsql<<") VALUES ("; + + if(insert_data.id==0){ +tempsql<<"null"; + }else{ + tempsql< &insert_data){ + unsigned int j=0; + std::ostringstream tempsql; + tempsql<<"INSERT INTO "; + tempsql<0){ + tempsql<<"`,`"; + }else{ + tempsql<<"`"; + } + tempsql<0){ + tempsql<<"`"; + } + tempsql<<") VALUES "; + + for(unsigned int i=0;i0) + { + tempsql<<","; + } + tempsql<<"("; + + + if(insert_data[i].id==0){ + tempsql<<"null"; + }else{ + tempsql< keypos; + for(;jj0){ + unsigned char bpos_i=findcolpos(keyname); + #ifdef DEBUG + if (bpos_i == 254) + { + std::cout << "\033[1m\033[31m-----------\n" + << keyname << " not in " << tablename << " table Field.\n-----------\033[0m" + << std::endl; + } +#endif + keypos.emplace_back(bpos_i); + keyname.clear(); + } + for(jj=0;jj0){ tempsql<<","; } +if(data.id==0){ + tempsql<<"`id`=0"; + }else{ + tempsql<<"`id`="<0){ tempsql<<","; } +tempsql<<"`message`='"< 0) + { + tempsql << "`,`"; + } + else + { + tempsql << "`"; + } + tempsql << colnames[j]; + } + if (j > 0) + { + tempsql << "`"; + } + tempsql << ") VALUES "; + + for (unsigned int i = 0; i < record.size(); i++) + { + if (i > 0) + { + tempsql << ",\n"; + } + tempsql << "("; + if(record[i].id==0){ + tempsql<<"null"; + }else{ + tempsql< 0) + { + tempsql << "`,`"; + } + else + { + tempsql << "`"; + } + tempsql << colnames[j]; + } + if (j > 0) + { + tempsql << "`"; + } + tempsql << ") VALUES "; + + for (unsigned int i = 0; i < record.size(); i++) + { + if (i > 0) + { + tempsql << ",\n"; + } + tempsql << "("; + if(record[i].id==0){ + tempsql<<"null"; + }else{ + tempsql<0){ + for(;jj0) + { + tempsql<<","; + } + tempsql<0){ + if(findcolpos(keyname)<255) + { + if(j>0) + { + tempsql<<","; + } + tempsql< data_toarray(std::string fileld=""){ + std::vector temparray; + std::string keyname; + unsigned char jj=0; + std::vector keypos; + if(fileld.size()>1){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj data_tomap(std::string fileld=""){ + std::map tempsql; + std::string keyname; + unsigned char jj=0; + std::vector keypos; + if(fileld.size()>1){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj keypos; + if(fileld.size()>0){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj0){ tempsql<<","; } +if(data.id==0){ + tempsql<<"\"id\":0"; + }else{ + tempsql<<"\"id\":"<0){ tempsql<<","; } +tempsql<<"\"message\":\""< list_content; + for(;json_offset0) + { + data=metatemp; + } + if(json_offset>=json_content.size()) + { + break; + } + for(;json_offset=json_content.size()) + { + break; + } + json_value_name.clear(); + if(json_content[json_offset]==0x22) + { + + temp_offset=json_offset; + json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset); + json_offset=temp_offset; + if(json_content[json_offset]==0x22) + { + json_offset+=1; + } + } + else + { + if(json_content[json_offset]!='{'&&json_content[json_offset]!=']') + { + for(;json_offset1) + { + data=record[0]; + } + } + else + { + if(json_content[json_offset]=='{') + { + json_offset+=1; + std::string json_key_name,json_value_name; + + + for(;json_offset=json_content.size()) + { + break; + } + json_value_name.clear(); + if(json_content[json_offset]==0x22) + { + + temp_offset=json_offset; + json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset); + json_offset=temp_offset; + if(json_content[json_offset]==0x22) + { + json_offset+=1; + } + } + else + { + if(json_content[json_offset]!='{'&&json_content[json_offset]!=']') + { + for(;json_offset keypos; + if(fileld.size()>0){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj0){ + tempsql<<",{"; + }else{ + tempsql<<"{"; + } + + for(jj=0;jj0){ tempsql<<","; } +if(record[n].id==0){ + tempsql<<"\"id\":0"; + }else{ + tempsql<<"\"id\":"<0){ tempsql<<","; } +tempsql<<"\"message\":\""< func,std::string fileld=""){ + std::ostringstream tempsql; + std::string keyname; + unsigned char jj=0; + std::vector keypos; + if(fileld.size()>0){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj0){ + tempsql<<",{"; + }else{ + tempsql<<"{"; + } + tempsql<0){ tempsql<<","; } +if(record[n].id==0){ + tempsql<<"\"id\":0"; + }else{ + tempsql<<"\"id\":"<0){ tempsql<<","; } +tempsql<<"\"message\":\""< getRecord(){ + return record; +} + + + template::value,bool>::type = true> + T& ref_meta([[maybe_unused]] std::string key_name) + { + if(key_name=="message") + { + return data.message; + } + return nullptr; + } + + + template,bool>::type = true> + T& ref_meta([[maybe_unused]] std::string key_name) + { + if(key_name=="id") + { + return data.id; + } + return nullptr; + } + + + template,bool>::type = true > + T& ref_meta([[maybe_unused]] std::string key_name) + { + return nullptr; + } + + template,bool>::type = true > + std::vector getCol([[maybe_unused]] std::string keyname) + { + std::vector a; + + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + case 0: + a.emplace_back(iter.id); + break; + + } + } + + return a; + } + + template,bool>::type = true > + std::vector getCol([[maybe_unused]] std::string keyname) + { + std::vector a; + + + return a; + } + + template,bool>::type = true > + T getVal([[maybe_unused]] std::string keyname) + { + + unsigned char kpos; + kpos=findcolpos(keyname); + switch(kpos) + { + + case 0: + return data.id; + break; + } + return 0; + } + + template,bool>::type = true > + T getVal([[maybe_unused]] fortunebase::meta & iter,[[maybe_unused]] std::string keyname) + { + + + unsigned char kpos; + kpos=findcolpos(keyname); + switch(kpos) + { + case 0: + return iter.id; + break; + + } + + return 0; + } + + template,bool>::type = true > + T getVal(std::string keyname) + { + unsigned char kpos; + kpos=findcolpos(keyname); + + switch(kpos) + { + + + } + + + return 0.0; + } + + template,bool>::type = true > + T getVal([[maybe_unused]] fortunebase::meta & iter,std::string keyname) + { + unsigned char kpos; + kpos=findcolpos(keyname); + switch(kpos) + { + + } + + + + return 0.0; + } + + template::value,bool>::type = true > + std::string getVal(std::string keyname) + { + unsigned char kpos; + kpos=findcolpos(keyname); + + switch(kpos) + { + + case 1: + return data.message; + break; + + } + return ""; + } + + template::value,bool>::type = true > + std::string getVal([[maybe_unused]] fortunebase::meta & iter,std::string keyname) + { + + unsigned char kpos; + kpos=findcolpos(keyname); + + switch(kpos) + { + + case 1: + return iter.message; + break; + + } + + + + return ""; + } + + template::value,bool>::type = true > + std::vector getCol([[maybe_unused]] std::string keyname) + { + std::vector a; + + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + a.emplace_back(iter.message); + break; + } + } + + return a; + } + + std::string getstrCol(std::string keyname,[[maybe_unused]] bool isyinhao=false) + { + std::ostringstream a; + + unsigned char kpos; + kpos=findcolpos(keyname); + int j=0; + if(isyinhao&&record.size()>0) + { + a<<'"'; + } + for(auto &iter:record) + { + if(j>0) + { + if(isyinhao) + { + a<<"\",\""; + }else{ + a<<','; + } + } + switch(kpos) + { + + case 0: + a<0){ + a<<'"'; + } + + return a.str(); + } + + template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + std::string ktemp,vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + switch(vpos){ + case 1: + vtemp=iter.message; + break; + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + + return a; + } + + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + std::string ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + switch(vpos){ + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + switch(vpos){ + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + std::string vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + switch(vpos){ + case 1: + vtemp=iter.message; + break; + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + std::string ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template,bool>::type = true > + std::map getmapRows([[maybe_unused]] std::string keyname) + { + std::map a; + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + a.emplace(iter.id,iter); + break; + + } + } + + return a; + } + + template::value,bool>::type = true > + std::map getmapRows([[maybe_unused]] std::string keyname) + { + std::map a; + + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + a.emplace(iter.message,iter); + break; + + } + //a.emplace(ktemp,iter); + } + + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + std::string ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + switch(vpos){ + + } + + a.emplace_back(ktemp,vtemp); + } + + + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + switch(vpos){ + + } + + a.emplace_back(ktemp,vtemp); + } + + + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + switch(vpos){ + case 1: + vtemp=iter.message; + break; + + } + + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + + } + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + + } + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + switch(vpos){ +case 1: + vtemp=iter.message; + break; + + } + + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template,bool>::type = true > + std::vector> getvecRows([[maybe_unused]] std::string keyname) + { + std::vector> a; + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + a.emplace_back(iter.id,iter); + break; + + } + } + + return a; + } + template::value,bool>::type = true > + std::vector> getvecRows([[maybe_unused]] std::string keyname) + { + std::vector> a; + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + a.emplace_back(iter.message,iter); + break; + + } + } + + + return a; + } + template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + } + + switch(dpos){ + + } + } + + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + //D vtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + } + + switch(dpos){ + case 1: + a[ktemp][vtemp].emplace_back(iter.message); + break; + + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 1: + vtemp=iter.message; + break; + } + + switch(dpos){ + + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 1: + vtemp=iter.message; + break; + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + + } + } + + return a; + } + template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 1: + vtemp=iter.message; + break; + } + + switch(dpos){ + case 1: + a[ktemp][vtemp].emplace_back(iter.message); + break; + + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + //D vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + } + + switch(dpos){ + + } + } + + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + //D vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + } + + switch(dpos){ + case 1: + a[ktemp][vtemp].emplace_back(iter.message); + break; + + } + } + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 1: + vtemp=iter.message; + break; + } + + switch(dpos){ + + } + } + + + return a; + } + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 1: + vtemp=iter.message; + break; + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + + } + } + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 1: + vtemp=iter.message; + break; + } + + switch(dpos){ + case 1: + a[ktemp][vtemp].emplace_back(iter.message); + break; + + } + } + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 1: + a[ktemp].emplace_back(iter.message); + break; + + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + + } + } + + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 0: + a[ktemp].emplace_back(iter.id); + break; + + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 1: + a[ktemp].emplace_back(iter.message); + break; + + } + } + + + return a; + } + + template,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 0: + a[ktemp].emplace_back(iter.id); + break; + + } + } + + return a; + } + + template,bool>::type = true> + std::map> getgroupRows([[maybe_unused]] std::string keyname) + { + std::map> a; + + unsigned char kpos; + kpos=findcolpos(keyname); + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + a[iter.id].emplace_back(iter); + break; + + } + } + + return a; + } + + template::value,bool>::type = true> + std::map> getgroupRows([[maybe_unused]] std::string keyname) + { + std::map> a; + + unsigned char kpos; + kpos=findcolpos(keyname); + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + a[iter.message].emplace_back(iter); + break; + + } + } + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 1: + a[ktemp][iter.message].emplace_back(iter); + break; + + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 1: + ktemp=iter.message; + break; + } + + switch(vpos){ + case 0: + a[ktemp][iter.id].emplace_back(iter); + break; + + } + } + + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 0: + a[ktemp][iter.id].emplace_back(iter); + break; + + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + } + + switch(vpos){ + case 1: + a[ktemp][iter.message].emplace_back(iter); + break; + + } + } + + return a; + } + + }; + + +} +#endif + \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/orm/include/worldbase.h b/frameworks/C++/paozhu/paozhu_benchmark/orm/include/worldbase.h new file mode 100755 index 00000000000..2bba08096e2 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/orm/include/worldbase.h @@ -0,0 +1,2509 @@ +#ifndef ORM_DEFAULT_WORLDBASEMATA_H +#define ORM_DEFAULT_WORLDBASEMATA_H +/* +*This file is auto create from cli +*本文件为自动生成 Fri, 26 Jan 2024 02:59:30 GMT +***/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "mysql.h" +namespace orm { + + +struct worldbase +{ + struct meta{ + unsigned int id= 0; // + int randomnumber= 0; // + } data; + std::vector record; +std::string _rmstag="default";//this value must be default or tag value, tag in mysqlconnect config file . +std::vector _keypos{0x00}; +MYSQL_ROW _row; +std::vector::iterator begin(){ return record.begin(); } +std::vector::iterator end(){ return record.end(); } +std::vector::const_iterator begin() const{ return record.begin(); } +std::vector::const_iterator end() const{ return record.end(); } +const std::array colnames={"id","randomnumber"}; +const std::array colnamestype= {3,3}; +std::string tablename="world"; +std::string modelname="World"; + + unsigned char findcolpos(const std::string &coln){ + if(coln.size()==0) + { + return 255; + } + unsigned char bi=coln[0]; + + + if(bi<91&&bi>64){ + bi+=32; + } + switch(coln[0]){ + + + case 'i': + return 0; +break; +case 'r': + return 1; +break; + + } + return 255; + } + + int size(){ return record.size(); } + + std::string getPKname(){ + return "id"; +} + + void record_reset() + { + record.clear(); + } + void data_reset(){ + worldbase::meta metatemp; + data = metatemp; + } + + std::string soft_remove_sql([[maybe_unused]] const std::string &fieldsql){ + std::string temp; + + return temp; + } + void _setColnamevalue() + { + for(unsigned char i=0;i<_keypos.size();i++) + { + switch(_keypos[i]){ + case 0: + try{ + data.id=std::stoul(_row[i]); + }catch (...) { + data.id=0; + } + break; + case 1: + try{ + data.randomnumber=std::stoi(_row[i]); + }catch (...) { + data.randomnumber=0; + } + break; + default: + { } + + + } + + if(i>210){ + break; + } + } + } + void _addnewrowvalue(){ + worldbase::meta metatemp; + + for(unsigned char i=0;i<_keypos.size();i++){ + + switch(_keypos[i]){ + + case 0: + try{ + metatemp.id=std::stoul(_row[i]); + }catch (...) { + metatemp.id=0; + } + break; + case 1: + try{ + metatemp.randomnumber=std::stoi(_row[i]); + }catch (...) { + metatemp.randomnumber=0; + } + break; + default: + { } + + + } + if(i>210){ + break; + } + } + record.emplace_back(std::move(metatemp)); + } + + inline std::string stringaddslash(std::string &content){ + std::string temp; + for(unsigned int i=0;i0){ + tempsql<<"`,`"; + }else{ + tempsql<<"`"; + } + tempsql<0){ + tempsql<<"`"; + } + tempsql<<") VALUES ("; + + if(data.id==0){ +tempsql<<"null"; + }else{ + tempsql<0){ + tempsql<<"`,`"; + }else{ + tempsql<<"`"; + } + tempsql<0){ + tempsql<<"`"; + } + tempsql<<") VALUES ("; + + if(insert_data.id==0){ +tempsql<<"null"; + }else{ + tempsql< &insert_data){ + unsigned int j=0; + std::ostringstream tempsql; + tempsql<<"INSERT INTO "; + tempsql<0){ + tempsql<<"`,`"; + }else{ + tempsql<<"`"; + } + tempsql<0){ + tempsql<<"`"; + } + tempsql<<") VALUES "; + + for(unsigned int i=0;i0) + { + tempsql<<","; + } + tempsql<<"("; + + + if(insert_data[i].id==0){ + tempsql<<"null"; + }else{ + tempsql<0){ + unsigned char bpos_i=findcolpos(keyname); + #ifdef DEBUG + if (bpos_i == 254) + { + std::cout << "\033[1m\033[31m-----------\n" + << keyname << " not in " << tablename << " table Field.\n-----------\033[0m" + << std::endl; + } +#endif + keypos.emplace_back(bpos_i); + keyname.clear(); + } + for(jj=0;jj0){ tempsql<<","; } +if(data.id==0){ + tempsql<<"`id`=0"; + }else{ + tempsql<<"`id`="<0){ tempsql<<","; } +if(data.randomnumber==0){ + tempsql<<"`randomnumber`=0"; + }else{ + tempsql<<"`randomnumber`="< 0) + { + tempsql << "`,`"; + } + else + { + tempsql << "`"; + } + tempsql << colnames[j]; + } + if (j > 0) + { + tempsql << "`"; + } + tempsql << ") VALUES "; + + for (unsigned int i = 0; i < record.size(); i++) + { + if (i > 0) + { + tempsql << ",\n"; + } + tempsql << "("; + if(record[i].id==0){ + tempsql<<"null"; + }else{ + tempsql< 0) + { + tempsql << "`,`"; + } + else + { + tempsql << "`"; + } + tempsql << colnames[j]; + } + if (j > 0) + { + tempsql << "`"; + } + tempsql << ") VALUES "; + + for (unsigned int i = 0; i < record.size(); i++) + { + if (i > 0) + { + tempsql << ",\n"; + } + tempsql << "("; + if(record[i].id==0){ + tempsql<<"null"; + }else{ + tempsql<0){ + for(;jj0) + { + tempsql<<","; + } + tempsql<0){ + if(findcolpos(keyname)<255) + { + if(j>0) + { + tempsql<<","; + } + tempsql< data_toarray(std::string fileld=""){ + std::vector temparray; + std::string keyname; + unsigned char jj=0; + std::vector keypos; + if(fileld.size()>1){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj data_tomap(std::string fileld=""){ + std::map tempsql; + std::string keyname; + unsigned char jj=0; + std::vector keypos; + if(fileld.size()>1){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj keypos; + if(fileld.size()>0){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj0){ tempsql<<","; } +if(data.id==0){ + tempsql<<"\"id\":0"; + }else{ + tempsql<<"\"id\":"<0){ tempsql<<","; } +if(data.randomnumber==0){ + tempsql<<"\"randomnumber\":0"; + }else{ + tempsql<<"\"randomnumber\":"< list_content; + for(;json_offset0) + { + data=metatemp; + } + if(json_offset>=json_content.size()) + { + break; + } + for(;json_offset=json_content.size()) + { + break; + } + json_value_name.clear(); + if(json_content[json_offset]==0x22) + { + + temp_offset=json_offset; + json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset); + json_offset=temp_offset; + if(json_content[json_offset]==0x22) + { + json_offset+=1; + } + } + else + { + if(json_content[json_offset]!='{'&&json_content[json_offset]!=']') + { + for(;json_offset1) + { + data=record[0]; + } + } + else + { + if(json_content[json_offset]=='{') + { + json_offset+=1; + std::string json_key_name,json_value_name; + + + for(;json_offset=json_content.size()) + { + break; + } + json_value_name.clear(); + if(json_content[json_offset]==0x22) + { + + temp_offset=json_offset; + json_value_name=http::jsonstring_to_utf8(&json_content[json_offset],json_content.size()-json_offset,temp_offset); + json_offset=temp_offset; + if(json_content[json_offset]==0x22) + { + json_offset+=1; + } + } + else + { + if(json_content[json_offset]!='{'&&json_content[json_offset]!=']') + { + for(;json_offset keypos; + if(fileld.size()>0){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj0){ + tempsql<<",{"; + }else{ + tempsql<<"{"; + } + + for(jj=0;jj0){ tempsql<<","; } +if(record[n].id==0){ + tempsql<<"\"id\":0"; + }else{ + tempsql<<"\"id\":"<0){ tempsql<<","; } +if(record[n].randomnumber==0){ + tempsql<<"\"randomnumber\":0"; + }else{ + tempsql<<"\"randomnumber\":"< func,std::string fileld=""){ + std::ostringstream tempsql; + std::string keyname; + unsigned char jj=0; + std::vector keypos; + if(fileld.size()>0){ + for(;jj0){ + keypos.emplace_back(findcolpos(keyname)); + keyname.clear(); + } + }else{ + for(jj=0;jj0){ + tempsql<<",{"; + }else{ + tempsql<<"{"; + } + tempsql<0){ tempsql<<","; } +if(record[n].id==0){ + tempsql<<"\"id\":0"; + }else{ + tempsql<<"\"id\":"<0){ tempsql<<","; } +if(record[n].randomnumber==0){ + tempsql<<"\"randomnumber\":0"; + }else{ + tempsql<<"\"randomnumber\":"< getRecord(){ + return record; +} + + + template::value,bool>::type = true> + T& ref_meta([[maybe_unused]] std::string key_name) + { + return nullptr; + } + + + template,bool>::type = true> + T& ref_meta([[maybe_unused]] std::string key_name) + { + if(key_name=="id") + { + return data.id; + } + if(key_name=="randomnumber") + { + return data.randomnumber; + } + return nullptr; + } + + + template,bool>::type = true > + T& ref_meta([[maybe_unused]] std::string key_name) + { + return nullptr; + } + + template,bool>::type = true > + std::vector getCol([[maybe_unused]] std::string keyname) + { + std::vector a; + + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + case 0: + a.emplace_back(iter.id); + break; + case 1: + a.emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + + template,bool>::type = true > + std::vector getCol([[maybe_unused]] std::string keyname) + { + std::vector a; + + + return a; + } + + template,bool>::type = true > + T getVal([[maybe_unused]] std::string keyname) + { + + unsigned char kpos; + kpos=findcolpos(keyname); + switch(kpos) + { + + case 0: + return data.id; + break; + case 1: + return data.randomnumber; + break; + } + return 0; + } + + template,bool>::type = true > + T getVal([[maybe_unused]] worldbase::meta & iter,[[maybe_unused]] std::string keyname) + { + + + unsigned char kpos; + kpos=findcolpos(keyname); + switch(kpos) + { + case 0: + return iter.id; + break; + case 1: + return iter.randomnumber; + break; + + } + + return 0; + } + + template,bool>::type = true > + T getVal(std::string keyname) + { + unsigned char kpos; + kpos=findcolpos(keyname); + + switch(kpos) + { + + + } + + + return 0.0; + } + + template,bool>::type = true > + T getVal([[maybe_unused]] worldbase::meta & iter,std::string keyname) + { + unsigned char kpos; + kpos=findcolpos(keyname); + switch(kpos) + { + + } + + + + return 0.0; + } + + template::value,bool>::type = true > + std::string getVal(std::string keyname) + { + unsigned char kpos; + kpos=findcolpos(keyname); + + switch(kpos) + { + + + } + return ""; + } + + template::value,bool>::type = true > + std::string getVal([[maybe_unused]] worldbase::meta & iter,std::string keyname) + { + + unsigned char kpos; + kpos=findcolpos(keyname); + + switch(kpos) + { + + + } + + + + return ""; + } + + template::value,bool>::type = true > + std::vector getCol([[maybe_unused]] std::string keyname) + { + std::vector a; + + + + return a; + } + + std::string getstrCol(std::string keyname,[[maybe_unused]] bool isyinhao=false) + { + std::ostringstream a; + + unsigned char kpos; + kpos=findcolpos(keyname); + int j=0; + if(isyinhao&&record.size()>0) + { + a<<'"'; + } + for(auto &iter:record) + { + if(j>0) + { + if(isyinhao) + { + a<<"\",\""; + }else{ + a<<','; + } + } + switch(kpos) + { + + case 0: + a<0){ + a<<'"'; + } + + return a.str(); + } + + template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + return a; + } + + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; +case 1: + ktemp=iter.randomnumber; + break; + } + switch(vpos){ + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + std::string vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + switch(vpos){ + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + std::string ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map getCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + + } + if(ktemp.size()>0) + { + a.emplace(ktemp,vtemp); + } + } + + return a; + } + + template,bool>::type = true > + std::map getmapRows([[maybe_unused]] std::string keyname) + { + std::map a; + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + a.emplace(iter.id,iter); + break; + case 1: + a.emplace(iter.randomnumber,iter); + break; + + } + } + + return a; + } + + template::value,bool>::type = true > + std::map getmapRows([[maybe_unused]] std::string keyname) + { + std::map a; + + + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + switch(vpos){ + + } + + a.emplace_back(ktemp,vtemp); + } + + + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + switch(vpos){ + + } + + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + + switch(kpos) + { + + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + + } + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + + } + a.emplace_back(ktemp,vtemp); + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::vector> getvecCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::vector> a; + + return a; + } + + template,bool>::type = true > + std::vector> getvecRows([[maybe_unused]] std::string keyname) + { + std::vector> a; + + unsigned char kpos; + kpos=findcolpos(keyname); + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + a.emplace_back(iter.id,iter); + break; +case 1: + a.emplace_back(iter.randomnumber,iter); + break; + + } + } + + return a; + } + template::value,bool>::type = true > + std::vector> getvecRows([[maybe_unused]] std::string keyname) + { + std::vector> a; + + + return a; + } + template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + } + + switch(dpos){ + + } + } + + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + //D vtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + case 1: + a[ktemp][vtemp].emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + } + + switch(dpos){ + + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + } + + switch(dpos){ + + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + case 1: + a[ktemp][vtemp].emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + template,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + } + + switch(dpos){ + + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + //D vtemp; + for(auto &iter:record) + { + switch(kpos) + { + + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + } + + switch(dpos){ + + } + } + + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + //D vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + case 1: + a[ktemp][vtemp].emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + } + + switch(vpos){ + case 0: + vtemp=iter.id; + break; + case 1: + vtemp=iter.randomnumber; + break; + } + + switch(dpos){ + + } + } + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + return a; + } + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + unsigned char kpos,vpos,dpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + dpos=findcolpos(dataname); + T ktemp; + U vtemp; + // D dtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + } + + switch(vpos){ + } + + switch(dpos){ + case 0: + a[ktemp][vtemp].emplace_back(iter.id); + break; + case 1: + a[ktemp][vtemp].emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname,[[maybe_unused]] std::string dataname) + { + std::map>> a; + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + + return a; + } + + template::value,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + } + + switch(vpos){ + case 0: + a[ktemp].emplace_back(iter.id); + break; + case 1: + a[ktemp].emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + + template,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + + } + } + + + return a; + } + + template,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map> getgroupCols([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + //U vtemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + case 0: + a[ktemp].emplace_back(iter.id); + break; + case 1: + a[ktemp].emplace_back(iter.randomnumber); + break; + + } + } + + return a; + } + + template,bool>::type = true> + std::map> getgroupRows([[maybe_unused]] std::string keyname) + { + std::map> a; + + unsigned char kpos; + kpos=findcolpos(keyname); + + for(auto &iter:record) + { + switch(kpos) + { + + case 0: + a[iter.id].emplace_back(iter); + break; + case 1: + a[iter.randomnumber].emplace_back(iter); + break; + + } + } + + return a; + } + + template::value,bool>::type = true> + std::map> getgroupRows([[maybe_unused]] std::string keyname) + { + std::map> a; + + return a; + } + + template::value,bool>::type = true, typename std::enable_if::value,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + return a; + } + + template::value,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + } + + switch(vpos){ + case 0: + a[ktemp][iter.id].emplace_back(iter); + break; + case 1: + a[ktemp][iter.randomnumber].emplace_back(iter); + break; + + } + } + + + return a; + } + + template,bool>::type = true,typename std::enable_if,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + case 0: + a[ktemp][iter.id].emplace_back(iter); + break; + case 1: + a[ktemp][iter.randomnumber].emplace_back(iter); + break; + + } + } + + return a; + } + + template,bool>::type = true,typename std::enable_if::value,bool>::type = true> + std::map>> getgroupRows([[maybe_unused]] std::string keyname,[[maybe_unused]] std::string valname) + { + std::map>> a; + + + unsigned char kpos,vpos; + kpos=findcolpos(keyname); + vpos=findcolpos(valname); + T ktemp; + + for(auto &iter:record) + { + + switch(kpos) + { + + case 0: + ktemp=iter.id; + break; + case 1: + ktemp=iter.randomnumber; + break; + } + + switch(vpos){ + + } + } + + return a; + } + + }; + + +} +#endif + \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/orm/orm.h b/frameworks/C++/paozhu/paozhu_benchmark/orm/orm.h new file mode 100755 index 00000000000..816b9ae4dc9 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/orm/orm.h @@ -0,0 +1,4 @@ +/*build this file time Tue, 20 Dec 2022 11:40:56 GMT*/ + +#include "Fortune.h" +#include "World.h" diff --git a/frameworks/C++/paozhu/paozhu_benchmark/view/techempower/fortunes.html b/frameworks/C++/paozhu/paozhu_benchmark/view/techempower/fortunes.html new file mode 100755 index 00000000000..b9079541143 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/view/techempower/fortunes.html @@ -0,0 +1,5 @@ +Fortunes<%c + for(auto &a:obj["list"].as_array()){ +%><%c + } +%>
idmessage
<%c echo<<%c echo<
\ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/viewsrc/include/regviewmethod.hpp b/frameworks/C++/paozhu/paozhu_benchmark/viewsrc/include/regviewmethod.hpp new file mode 100755 index 00000000000..98a52eeada1 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/viewsrc/include/regviewmethod.hpp @@ -0,0 +1,26 @@ +#ifndef __HTTP_REG_VIEW_METHOD_HPP +#define __HTTP_REG_VIEW_METHOD_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include +#include +#include "request.h" +#include "viewso_param.h" +#include "viewmethold_reg.h" +#include "viewsrc.h" + +namespace http +{ + void _initview_method_regto(VIEW_REG &_viewmetholdreg) + { + //create time: Mon, 30 Dec 2024 15:45:45 GMT + + _viewmetholdreg.emplace("techempower/fortunes",http::view::techempower::fortunes); + + } +} +#endif \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/viewsrc/include/viewsrc.h b/frameworks/C++/paozhu/paozhu_benchmark/viewsrc/include/viewsrc.h new file mode 100755 index 00000000000..8991765bf19 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/viewsrc/include/viewsrc.h @@ -0,0 +1,26 @@ +#ifndef __HTTP_VIEWSRC_ALL_METHOD_H +#define __HTTP_VIEWSRC_ALL_METHOD_H + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +#pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include +#include +#include "request.h" +#include "viewso_param.h" + +namespace http { +namespace view { + +namespace techempower{ + + std::string fortunes(const struct view_param &vinfo,http::OBJ_VALUE &obj); +} + + +} + +} +#endif \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/viewsrc/view/techempower/fortunes.cpp b/frameworks/C++/paozhu/paozhu_benchmark/viewsrc/view/techempower/fortunes.cpp new file mode 100755 index 00000000000..b29f89356b5 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/viewsrc/view/techempower/fortunes.cpp @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "request.h" +#include "datetime.h" +#include "cookie.h" +#include "urlcode.h" +#include "loadviewso.h" +#include "viewso_param.h" +#include "http_so_common_api.h" +#include "viewsrc.h" +//g++ viewsrc/view/techempower/fortunes.cpp +namespace http { + +namespace view { + namespace techempower{ + std::string fortunes([[maybe_unused]] const struct view_param &vinfo,[[maybe_unused]] http::OBJ_VALUE &obj) + { + + std::ostringstream echo; + + + echo<<"Fortunes"; + + for(auto &a:obj["list"].as_array()){ + + echo<<""; + + } + + echo<<"
idmessage
"; + echo<"; + echo<
"; + + return echo.str(); + } + + } + } + } + \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/websockets/include/loopwebsockets.hpp b/frameworks/C++/paozhu/paozhu_benchmark/websockets/include/loopwebsockets.hpp new file mode 100755 index 00000000000..388449b6a33 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/websockets/include/loopwebsockets.hpp @@ -0,0 +1,66 @@ +#include +#include +#include + +#include "orm.h" +#include "httppeer.h" +#include "websockets.h" + +namespace http +{ + +class loopwebsockets : public websockets_api +{ + public: + unsigned int outcount = 0; + loopwebsockets(std::weak_ptr p) : websockets_api(4, 0, p) {} + ~loopwebsockets() { std::cout << "~loopwebsockets" << std::endl; } + + public: + void onopen() { std::cout << "onopen" << std::endl; } + void onclose() { std::cout << "onclose" << std::endl; } + void onpong() {} + void pushloop() + { + std::shared_ptr peer = weakpeer.lock(); + if (peer) + { + std::cout << "timeloop:" << std::endl; + std::string aa = "looptests"; + std::string outhello; + peer->ws->makeWSText(aa, outhello); + peer->send(outhello); + + // peer->send(aa); + if (outcount == 4) + { + timeloop_num = 0; + outcount = 0; + return; + } + outcount++; + } + else + { + std::cout << "peer is die!" << std::endl; + } + } + void onfiles(std::string_view filename) { std::cout << "--------onfiles:--------" << filename << std::endl; } + void onmessage(std::string_view data) + { + std::cout << "onmessage:" << data << std::endl; + std::shared_ptr peer = weak_peer.lock(); + if (peer) + { + std::string outhello; + peer->ws->makeWSText(data, outhello); + peer->send(outhello); + } + } + static std::shared_ptr create(std::weak_ptr p) + { + return std::make_shared(p); + } +}; + +}// namespace http diff --git a/frameworks/C++/paozhu/paozhu_benchmark/websockets/include/mywebsockets.hpp b/frameworks/C++/paozhu/paozhu_benchmark/websockets/include/mywebsockets.hpp new file mode 100755 index 00000000000..4ebd42b88f3 --- /dev/null +++ b/frameworks/C++/paozhu/paozhu_benchmark/websockets/include/mywebsockets.hpp @@ -0,0 +1,83 @@ +#include +#include +#include + +#include "orm.h" +#include "httppeer.h" +#include "websockets.h" +#include "terminal_color.h" +// g++ -shared -fPIC mywebsockets.cpp -o mywebsockets.so +namespace http +{ + +class mywebsockets : public websockets_api +{ + public: + // unsigned int timeloop_num; + // unsigned char state; + unsigned int outcount = 0; + mywebsockets(std::weak_ptr p) : websockets_api(4, 0, p) {} + ~mywebsockets() { DEBUG_LOG(" ~mywebsockets "); } + + public: + void onopen() { DEBUG_LOG(" onopen "); } + void onclose() { DEBUG_LOG(" onclose "); } + void onpong() {} + void pushloop() + { + std::shared_ptr peer = weak_peer.lock(); + if (peer) + { + DEBUG_LOG(" timeloop "); + std::string aa = "This server push msg or subscribe msg"; + std::string outhello; + peer->ws->makeWSText(aa.data(), aa.length(), outhello); + peer->send(outhello); + + // peer->send(aa); + if (outcount == 4) + { + timeloop_num = 0; + outcount = 0; + return; + } + outcount++; + } + else + { + DEBUG_LOG(" peer is die! "); + } + } + + void onfiles([[maybe_unused]] std::string_view filename) { DEBUG_LOG("onfiles %zu", filename.size()); } + void onmessage(std::string_view data) + { + std::ostringstream oss; + oss << std::this_thread::get_id(); + oss << " onmessage:" << data << std::endl; + std::string temp = oss.str(); + DEBUG_LOG("%s", temp.c_str()); + std::shared_ptr peer = weak_peer.lock(); + if (peer) + { + std::string outhello; + if(data=="html") + { + std::string html_data="

Websocket test 测试h3

"; + peer->ws->makeWSText(html_data, outhello); + } + else + { + peer->ws->makeWSText(data, outhello); + } + + peer->send(outhello); + } + } + static std::shared_ptr create(std::weak_ptr p) + { + return std::make_shared(p); + } +}; + +}// namespace http \ No newline at end of file From 4b78e4b3be9c486242fb187e4ae3ecdb8d8a8708 Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 1 Jan 2025 14:20:00 +0800 Subject: [PATCH 51/65] paozhu update --- .../paozhu/paozhu_benchmark/CMakeLists.txt | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt b/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt index a4fabfb1ae6..4f4dc54b963 100755 --- a/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt +++ b/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt @@ -7,21 +7,27 @@ set(ENABLE_BOOST OFF CACHE BOOL "choose ON to enable") set(ENABLE_GD OFF CACHE BOOL "choose ON to enable") set(ENABLE_WIN_VCPKG OFF CACHE BOOL "choose ON to enable") -if (ENABLE_GD STREQUAL "ON") - list(FIND VCPKG_MANIFEST_FEATURES "gd" index) - if (index EQUAL -1) - message(STATUS "Auto append features: gd") - list(APPEND VCPKG_MANIFEST_FEATURES "gd") - endif () -endif () +if(ENABLE_VCPKG) + set(vcpkg_root $ENV{VCPKG_ROOT}) + if(NOT DEFINED CMAKE_TOOLCHAIN_FILE AND vcpkg_root) + set(CMAKE_TOOLCHAIN_FILE "${vcpkg_root}/scripts/buildsystems/vcpkg.cmake") + endif() +endif() -if (ENABLE_BOOST STREQUAL "ON") - list(FIND VCPKG_MANIFEST_FEATURES "boost" index) - if (index EQUAL -1) - message(STATUS "Auto append features: boost") - list(APPEND VCPKG_MANIFEST_FEATURES "boost") - endif () -endif () +macro(auto_enable_vcpkg_feature opt feature) + if(${opt}) + list(FIND VCPKG_MANIFEST_FEATURES ${feature} index) + if(index EQUAL -1) + message(STATUS "Auto append features: ${feature}") + list(APPEND VCPKG_MANIFEST_FEATURES ${feature}) + endif() + endif() +endmacro() + +if(ENABLE_VCPKG) + auto_enable_vcpkg_feature(ENABLE_GD "gd") + auto_enable_vcpkg_feature(ENABLE_BOOST "boost") +endif() PROJECT(Paozhu_web_framework) set(CMAKE_CXX_STANDARD 20) @@ -602,4 +608,4 @@ endif () if (CMAKE_SYSTEM_NAME MATCHES "Windows") target_link_libraries(paozhu ws2_32) target_link_libraries(paozhu_cli ws2_32) -endif () \ No newline at end of file +endif () From 2c2bfde62613291366d20988ec31d45020c25281 Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 1 Jan 2025 14:25:20 +0800 Subject: [PATCH 52/65] paozhu update --- frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt b/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt index 4f4dc54b963..4d2779800a0 100755 --- a/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt +++ b/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt @@ -189,6 +189,7 @@ include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/models) include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/controller/include) include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/libs) include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/include) +include_sub_directories_recursively(${CMAKE_CURRENT_SOURCE_DIR}/common) add_executable(paozhu_cli ${CMAKE_CURRENT_SOURCE_DIR}/vendor/httpcli/http_cli.cpp) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin) From 04ab8f4906e9627b2f74335d4527e0e5c5f00fb5 Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 1 Jan 2025 14:49:36 +0800 Subject: [PATCH 53/65] paozhu update --- frameworks/C++/paozhu/paozhu.dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 480d726d314..05823528df3 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -36,7 +36,7 @@ COPY ./paozhu_benchmark/orm ./paozhu/ COPY ./paozhu_benchmark/models ./paozhu/ COPY ./paozhu_benchmark/common ./paozhu/ - +RUN ls -l ./paozhu/common # RUN mkdir ./paozhu/libs # RUN mkdir ./paozhu/libs/types @@ -54,6 +54,7 @@ COPY ./paozhu_benchmark/common ./paozhu/ # COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ # COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ # COPY ./paozhu_benchmark/common/json_reflect_headers.h ./paozhu/common/ +COPY ./paozhu_benchmark/common/cost_define.h ./paozhu/common/ COPY ./paozhu_benchmark/conf/server.conf ./paozhu/conf/server.conf COPY ./paozhu_benchmark/conf/orm.conf ./paozhu/conf/orm.conf From 61d1364566483a16d4e92de8a0a151747d2d8e32 Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 1 Jan 2025 15:07:48 +0800 Subject: [PATCH 54/65] paozhu update --- frameworks/C++/paozhu/paozhu.dockerfile | 67 +++++++++++++++++++------ 1 file changed, 53 insertions(+), 14 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 05823528df3..68b78055ddc 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -27,6 +27,7 @@ RUN rm -Rf ./paozhu/models RUN rm -Rf ./paozhu/common + COPY ./paozhu_benchmark/controller ./paozhu/ COPY ./paozhu_benchmark/libs ./paozhu/ COPY ./paozhu_benchmark/view ./paozhu/ @@ -36,30 +37,68 @@ COPY ./paozhu_benchmark/orm ./paozhu/ COPY ./paozhu_benchmark/models ./paozhu/ COPY ./paozhu_benchmark/common ./paozhu/ -RUN ls -l ./paozhu/common -# RUN mkdir ./paozhu/libs -# RUN mkdir ./paozhu/libs/types +RUN ls -l ./paozhu + +RUN mkdir ./paozhu/common +RUN mkdir ./paozhu/libs +RUN mkdir ./paozhu/libs/types +COPY ./paozhu_benchmark/libs/types/techempower_json.h ./paozhu/libs/types/ +COPY ./paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ -# RUN mkdir ./paozhu/controller -# RUN mkdir ./paozhu/controller/include -# RUN mkdir ./paozhu/controller/src +RUN mkdir ./paozhu/controller +RUN mkdir ./paozhu/controller/include +RUN mkdir ./paozhu/controller/src -# COPY ./paozhu_benchmark/controller/include/techempower.h ./paozhu/controller/include/ -# COPY ./paozhu_benchmark/controller/src/techempower.cpp ./paozhu/controller/src/ +COPY ./paozhu_benchmark/controller/include/techempower.h ./paozhu/controller/include/ +COPY ./paozhu_benchmark/controller/src/techempower.cpp ./paozhu/controller/src/ -# COPY ./paozhu_benchmark/libs/types/techempower_json.h ./paozhu/libs/types/ -# COPY ./paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ -# COPY ./paozhu_benchmark/common/autocontrolmethod.hpp ./paozhu/common/ -# COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ -# COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ -# COPY ./paozhu_benchmark/common/json_reflect_headers.h ./paozhu/common/ +COPY ./paozhu_benchmark/common/autocontrolmethod.hpp ./paozhu/common/ +COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ +COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ +COPY ./paozhu_benchmark/common/json_reflect_headers.h ./paozhu/common/ + COPY ./paozhu_benchmark/common/cost_define.h ./paozhu/common/ +COPY ./paozhu_benchmark/common/autorestfulpaths.hpp ./paozhu/common/ +COPY ./paozhu_benchmark/common/websockets_method_reg.hpp ./paozhu/common/ +COPY ./paozhu_benchmark/common/httphook.cpp ./paozhu/common/ COPY ./paozhu_benchmark/conf/server.conf ./paozhu/conf/server.conf COPY ./paozhu_benchmark/conf/orm.conf ./paozhu/conf/orm.conf COPY ./paozhu_benchmark/CMakeLists.txt ./paozhu/CMakeLists.txt +RUN mkdir ./paozhu/view +RUN mkdir ./paozhu/view/techempower + +COPY ./paozhu_benchmark/view/techempower/fortunes.html ./paozhu/view/techempower/ + +RUN mkdir ./paozhu/viewsrc +RUN mkdir ./paozhu/viewsrc/include +RUN mkdir ./paozhu/viewsrc/view +RUN mkdir ./paozhu/viewsrc/view/techempower + +COPY ./paozhu_benchmark/viewsrc/view/techempower/fortunes.cpp ./paozhu/viewsrc/view/techempower/ +COPY ./paozhu_benchmark/viewsrc/include/viewsrc.h ./paozhu/viewsrc/include/ +COPY ./paozhu_benchmark/viewsrc/include/regviewmethod.hpp ./paozhu/viewsrc/include/ + + + +RUN mkdir ./paozhu/orm +RUN mkdir ./paozhu/orm/include + + +COPY ./paozhu_benchmark/orm/orm.h ./paozhu/orm/ +COPY ./paozhu_benchmark/orm/include/fortunebase.h ./paozhu/orm/include/ +COPY ./paozhu_benchmark/orm/include/worldbase.h ./paozhu/orm/include/ + +RUN mkdir ./paozhu/models +RUN mkdir ./paozhu/models/include + +COPY ./paozhu_benchmark/models/include/Fortune.h ./paozhu/models/include/ +COPY ./paozhu_benchmark/models/include/World.h ./paozhu/models/include/ +COPY ./paozhu_benchmark/models/World.cpp ./paozhu/models/ +COPY ./paozhu_benchmark/models/Fortune.cpp ./paozhu/models/ + WORKDIR /paozhu RUN unzip asio.zip From 5c339e5ef5dfd06af60c1ac6f5ebad79b0813422 Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 1 Jan 2025 15:18:35 +0800 Subject: [PATCH 55/65] paozhu update --- frameworks/C++/paozhu/paozhu.dockerfile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 68b78055ddc..e4c3e01f6d6 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -28,14 +28,14 @@ RUN rm -Rf ./paozhu/common -COPY ./paozhu_benchmark/controller ./paozhu/ -COPY ./paozhu_benchmark/libs ./paozhu/ -COPY ./paozhu_benchmark/view ./paozhu/ -COPY ./paozhu_benchmark/viewsrc ./paozhu/ - -COPY ./paozhu_benchmark/orm ./paozhu/ -COPY ./paozhu_benchmark/models ./paozhu/ -COPY ./paozhu_benchmark/common ./paozhu/ +# COPY ./paozhu_benchmark/controller ./paozhu/ +# COPY ./paozhu_benchmark/libs ./paozhu/ +# COPY ./paozhu_benchmark/view ./paozhu/ +# COPY ./paozhu_benchmark/viewsrc ./paozhu/ + +# COPY ./paozhu_benchmark/orm ./paozhu/ +# COPY ./paozhu_benchmark/models ./paozhu/ +# COPY ./paozhu_benchmark/common ./paozhu/ RUN ls -l ./paozhu From 20402da95165ec61bf844443b589e1779091ff37 Mon Sep 17 00:00:00 2001 From: hzq Date: Wed, 1 Jan 2025 15:31:51 +0800 Subject: [PATCH 56/65] paozhu update --- frameworks/C++/paozhu/paozhu.dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index e4c3e01f6d6..49094ed13fd 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -105,6 +105,8 @@ RUN unzip asio.zip RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release RUN cmake --build build +RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release +RUN cmake --build build EXPOSE 8888 From 0cc5300363fdc18fac60dbc49383e0a5cd48e298 Mon Sep 17 00:00:00 2001 From: hzq Date: Mon, 6 Jan 2025 15:21:10 +0800 Subject: [PATCH 57/65] update [Paozhu] --- frameworks/C++/paozhu/paozhu.dockerfile | 100 ++++++++++++------------ 1 file changed, 49 insertions(+), 51 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 49094ed13fd..ccfdd71bc75 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -18,13 +18,13 @@ WORKDIR / # RUN wget https://github.com/hggq/paozhu/releases/download/v1.5.8/benchmark.zip RUN git clone https://github.com/hggq/paozhu # RUN unzip benchmark.zip -RUN rm -Rf ./paozhu/controller -RUN rm -Rf ./paozhu/libs -RUN rm -Rf ./paozhu/view -RUN rm -Rf ./paozhu/viewsrc -RUN rm -Rf ./paozhu/orm -RUN rm -Rf ./paozhu/models -RUN rm -Rf ./paozhu/common +# RUN rm -Rf ./paozhu/controller +# RUN rm -Rf ./paozhu/libs +# RUN rm -Rf ./paozhu/view +# RUN rm -Rf ./paozhu/viewsrc +# RUN rm -Rf ./paozhu/orm +# RUN rm -Rf ./paozhu/models +# RUN rm -Rf ./paozhu/common @@ -37,67 +37,67 @@ RUN rm -Rf ./paozhu/common # COPY ./paozhu_benchmark/models ./paozhu/ # COPY ./paozhu_benchmark/common ./paozhu/ -RUN ls -l ./paozhu +# RUN ls -l ./paozhu +# RUN pwd +# RUN mkdir ./paozhu/common +# RUN mkdir ./paozhu/libs +# RUN mkdir ./paozhu/libs/types +# COPY ./paozhu_benchmark/libs/types/techempower_json.h ./paozhu/libs/types/ +# COPY ./paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ -RUN mkdir ./paozhu/common -RUN mkdir ./paozhu/libs -RUN mkdir ./paozhu/libs/types -COPY ./paozhu_benchmark/libs/types/techempower_json.h ./paozhu/libs/types/ -COPY ./paozhu_benchmark/libs/types/techempower_json_jsonreflect.cpp ./paozhu/libs/types/ +# RUN mkdir ./paozhu/controller +# RUN mkdir ./paozhu/controller/include +# RUN mkdir ./paozhu/controller/src -RUN mkdir ./paozhu/controller -RUN mkdir ./paozhu/controller/include -RUN mkdir ./paozhu/controller/src +# COPY ./paozhu_benchmark/controller/include/techempower.h ./paozhu/controller/include/ +# COPY ./paozhu_benchmark/controller/src/techempower.cpp ./paozhu/controller/src/ -COPY ./paozhu_benchmark/controller/include/techempower.h ./paozhu/controller/include/ -COPY ./paozhu_benchmark/controller/src/techempower.cpp ./paozhu/controller/src/ +# COPY ./paozhu_benchmark/common/autocontrolmethod.hpp ./paozhu/common/ +# COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ +# COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ +# COPY ./paozhu_benchmark/common/json_reflect_headers.h ./paozhu/common/ -COPY ./paozhu_benchmark/common/autocontrolmethod.hpp ./paozhu/common/ -COPY ./paozhu_benchmark/common/reghttpmethod_pre.hpp ./paozhu/common/ -COPY ./paozhu_benchmark/common/reghttpmethod.hpp ./paozhu/common/ -COPY ./paozhu_benchmark/common/json_reflect_headers.h ./paozhu/common/ - -COPY ./paozhu_benchmark/common/cost_define.h ./paozhu/common/ -COPY ./paozhu_benchmark/common/autorestfulpaths.hpp ./paozhu/common/ -COPY ./paozhu_benchmark/common/websockets_method_reg.hpp ./paozhu/common/ -COPY ./paozhu_benchmark/common/httphook.cpp ./paozhu/common/ +# COPY ./paozhu_benchmark/common/cost_define.h ./paozhu/common/ +# COPY ./paozhu_benchmark/common/autorestfulpaths.hpp ./paozhu/common/ +# COPY ./paozhu_benchmark/common/websockets_method_reg.hpp ./paozhu/common/ +# COPY ./paozhu_benchmark/common/httphook.cpp ./paozhu/common/ COPY ./paozhu_benchmark/conf/server.conf ./paozhu/conf/server.conf COPY ./paozhu_benchmark/conf/orm.conf ./paozhu/conf/orm.conf -COPY ./paozhu_benchmark/CMakeLists.txt ./paozhu/CMakeLists.txt +# COPY ./paozhu_benchmark/CMakeLists.txt ./paozhu/CMakeLists.txt -RUN mkdir ./paozhu/view -RUN mkdir ./paozhu/view/techempower +# RUN mkdir ./paozhu/view +# RUN mkdir ./paozhu/view/techempower -COPY ./paozhu_benchmark/view/techempower/fortunes.html ./paozhu/view/techempower/ +# COPY ./paozhu_benchmark/view/techempower/fortunes.html ./paozhu/view/techempower/ -RUN mkdir ./paozhu/viewsrc -RUN mkdir ./paozhu/viewsrc/include -RUN mkdir ./paozhu/viewsrc/view -RUN mkdir ./paozhu/viewsrc/view/techempower +# RUN mkdir ./paozhu/viewsrc +# RUN mkdir ./paozhu/viewsrc/include +# RUN mkdir ./paozhu/viewsrc/view +# RUN mkdir ./paozhu/viewsrc/view/techempower -COPY ./paozhu_benchmark/viewsrc/view/techempower/fortunes.cpp ./paozhu/viewsrc/view/techempower/ -COPY ./paozhu_benchmark/viewsrc/include/viewsrc.h ./paozhu/viewsrc/include/ -COPY ./paozhu_benchmark/viewsrc/include/regviewmethod.hpp ./paozhu/viewsrc/include/ +# COPY ./paozhu_benchmark/viewsrc/view/techempower/fortunes.cpp ./paozhu/viewsrc/view/techempower/ +# COPY ./paozhu_benchmark/viewsrc/include/viewsrc.h ./paozhu/viewsrc/include/ +# COPY ./paozhu_benchmark/viewsrc/include/regviewmethod.hpp ./paozhu/viewsrc/include/ -RUN mkdir ./paozhu/orm -RUN mkdir ./paozhu/orm/include +# RUN mkdir ./paozhu/orm +# RUN mkdir ./paozhu/orm/include -COPY ./paozhu_benchmark/orm/orm.h ./paozhu/orm/ -COPY ./paozhu_benchmark/orm/include/fortunebase.h ./paozhu/orm/include/ -COPY ./paozhu_benchmark/orm/include/worldbase.h ./paozhu/orm/include/ +# COPY ./paozhu_benchmark/orm/orm.h ./paozhu/orm/ +# COPY ./paozhu_benchmark/orm/include/fortunebase.h ./paozhu/orm/include/ +# COPY ./paozhu_benchmark/orm/include/worldbase.h ./paozhu/orm/include/ -RUN mkdir ./paozhu/models -RUN mkdir ./paozhu/models/include +# RUN mkdir ./paozhu/models +# RUN mkdir ./paozhu/models/include -COPY ./paozhu_benchmark/models/include/Fortune.h ./paozhu/models/include/ -COPY ./paozhu_benchmark/models/include/World.h ./paozhu/models/include/ -COPY ./paozhu_benchmark/models/World.cpp ./paozhu/models/ -COPY ./paozhu_benchmark/models/Fortune.cpp ./paozhu/models/ +# COPY ./paozhu_benchmark/models/include/Fortune.h ./paozhu/models/include/ +# COPY ./paozhu_benchmark/models/include/World.h ./paozhu/models/include/ +# COPY ./paozhu_benchmark/models/World.cpp ./paozhu/models/ +# COPY ./paozhu_benchmark/models/Fortune.cpp ./paozhu/models/ WORKDIR /paozhu RUN unzip asio.zip @@ -105,8 +105,6 @@ RUN unzip asio.zip RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release RUN cmake --build build -RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release -RUN cmake --build build EXPOSE 8888 From feed59233b7307d935b68bc42b5e240b55e3447b Mon Sep 17 00:00:00 2001 From: hzq Date: Mon, 6 Jan 2025 15:47:19 +0800 Subject: [PATCH 58/65] update [Paozhu] --- frameworks/C++/paozhu/paozhu.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index ccfdd71bc75..a454457d967 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -105,7 +105,7 @@ RUN unzip asio.zip RUN cmake . -B build -DCMAKE_BUILD_TYPE=Release RUN cmake --build build - EXPOSE 8888 CMD ./bin/paozhu +RUN pstree -aup \ No newline at end of file From 375ce980f1607b080aea50f20c23aa8774109b01 Mon Sep 17 00:00:00 2001 From: hzq Date: Mon, 6 Jan 2025 16:02:12 +0800 Subject: [PATCH 59/65] update [Paozhu] --- frameworks/C++/paozhu/paozhu.dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index a454457d967..b0825f148d7 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:22.04 +FROM ubuntu:24.04 RUN apt-get update -yqq && apt-get install -yqq apt-utils software-properties-common wget unzip cmake git RUN apt-get install -yqq gcc g++ openssl libssl-dev zlib1g-dev build-essential locales @@ -6,6 +6,7 @@ RUN apt-get -y install brotli libbrotli-dev RUN apt-get -y install libreadline-dev RUN apt-get -y install mysql-client RUN apt-get -y install libmysqlclient-dev +RUN apt-get -y install pstree RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 From f99723be32306cd86a87850351b3ece78281182d Mon Sep 17 00:00:00 2001 From: hzq Date: Mon, 6 Jan 2025 16:09:27 +0800 Subject: [PATCH 60/65] update [Paozhu] --- frameworks/C++/paozhu/paozhu.dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index b0825f148d7..888df1f0cb5 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -6,7 +6,6 @@ RUN apt-get -y install brotli libbrotli-dev RUN apt-get -y install libreadline-dev RUN apt-get -y install mysql-client RUN apt-get -y install libmysqlclient-dev -RUN apt-get -y install pstree RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 @@ -109,4 +108,4 @@ RUN cmake --build build EXPOSE 8888 CMD ./bin/paozhu -RUN pstree -aup \ No newline at end of file +RUN ps aux | less \ No newline at end of file From eab8b13bf136fe5e4a1155af733964838ed23022 Mon Sep 17 00:00:00 2001 From: hzq Date: Mon, 6 Jan 2025 16:22:36 +0800 Subject: [PATCH 61/65] update [Paozhu] --- frameworks/C++/paozhu/paozhu.dockerfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 888df1f0cb5..f1f63c31e3c 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -6,6 +6,7 @@ RUN apt-get -y install brotli libbrotli-dev RUN apt-get -y install libreadline-dev RUN apt-get -y install mysql-client RUN apt-get -y install libmysqlclient-dev +RUN apt-get -y install psmisc RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 @@ -107,5 +108,6 @@ RUN cmake --build build EXPOSE 8888 -CMD ./bin/paozhu -RUN ps aux | less \ No newline at end of file +# CMD ./bin/paozhu +CMD /paozhu/bin/paozhu +RUN pstree -aup \ No newline at end of file From eac6f8ca77fc540aeba9b2341fb4737032e130eb Mon Sep 17 00:00:00 2001 From: hzq Date: Mon, 6 Jan 2025 16:36:09 +0800 Subject: [PATCH 62/65] update [Paozhu] --- frameworks/C++/paozhu/paozhu.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index f1f63c31e3c..21ebf144dc1 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -110,4 +110,4 @@ EXPOSE 8888 # CMD ./bin/paozhu CMD /paozhu/bin/paozhu -RUN pstree -aup \ No newline at end of file +RUN ps aux \ No newline at end of file From c39169f00d6bd6521947ee9e8a95d00ed92e042d Mon Sep 17 00:00:00 2001 From: hzq Date: Mon, 6 Jan 2025 16:44:26 +0800 Subject: [PATCH 63/65] update [Paozhu] --- frameworks/C++/paozhu/paozhu.dockerfile | 4 +--- frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 21ebf144dc1..5d20846a2ae 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -108,6 +108,4 @@ RUN cmake --build build EXPOSE 8888 -# CMD ./bin/paozhu -CMD /paozhu/bin/paozhu -RUN ps aux \ No newline at end of file +CMD ./bin/paozhu \ No newline at end of file diff --git a/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt b/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt index 4d2779800a0..f893e890146 100755 --- a/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt +++ b/frameworks/C++/paozhu/paozhu_benchmark/CMakeLists.txt @@ -196,7 +196,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin) if(${mode} AND (CMAKE_BUILD_TYPE STREQUAL "Release")) - add_executable(paozhu ${CMAKE_CURRENT_SOURCE_DIR}/test/testdaemon.cpp ${common_list} ${viewsrc_list} ${FRAMEWORK_CPP_PATH} ${orm_list} ${reflect_list} ${src_list} ${source_list} ${controller_list}) + add_executable(paozhu ${CMAKE_CURRENT_SOURCE_DIR}/test/testbenchmark.cpp ${common_list} ${viewsrc_list} ${FRAMEWORK_CPP_PATH} ${orm_list} ${reflect_list} ${src_list} ${source_list} ${controller_list}) else() add_executable(paozhu ${CMAKE_CURRENT_SOURCE_DIR}/test/test.cpp ${common_list} ${viewsrc_list} ${FRAMEWORK_CPP_PATH} ${orm_list} ${reflect_list} ${src_list} ${source_list} ${controller_list}) endif() From 608a5bff151deeca32888f70ce7b3bce9b0778d1 Mon Sep 17 00:00:00 2001 From: hzq Date: Mon, 6 Jan 2025 16:44:55 +0800 Subject: [PATCH 64/65] update [Paozhu] --- frameworks/C++/paozhu/paozhu.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index 5d20846a2ae..dc841ec2a24 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -66,7 +66,7 @@ RUN git clone https://github.com/hggq/paozhu COPY ./paozhu_benchmark/conf/server.conf ./paozhu/conf/server.conf COPY ./paozhu_benchmark/conf/orm.conf ./paozhu/conf/orm.conf -# COPY ./paozhu_benchmark/CMakeLists.txt ./paozhu/CMakeLists.txt +COPY ./paozhu_benchmark/CMakeLists.txt ./paozhu/CMakeLists.txt # RUN mkdir ./paozhu/view # RUN mkdir ./paozhu/view/techempower From 5238fd7a6196defbd8483be0a23c6a06b743bc37 Mon Sep 17 00:00:00 2001 From: hzq Date: Mon, 6 Jan 2025 17:03:40 +0800 Subject: [PATCH 65/65] update [Paozhu] --- frameworks/C++/paozhu/paozhu.dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frameworks/C++/paozhu/paozhu.dockerfile b/frameworks/C++/paozhu/paozhu.dockerfile index dc841ec2a24..4419e8e0cb8 100644 --- a/frameworks/C++/paozhu/paozhu.dockerfile +++ b/frameworks/C++/paozhu/paozhu.dockerfile @@ -66,6 +66,8 @@ RUN git clone https://github.com/hggq/paozhu COPY ./paozhu_benchmark/conf/server.conf ./paozhu/conf/server.conf COPY ./paozhu_benchmark/conf/orm.conf ./paozhu/conf/orm.conf + +# must use testbenchmark.cpp to test benchmark COPY ./paozhu_benchmark/CMakeLists.txt ./paozhu/CMakeLists.txt # RUN mkdir ./paozhu/view