Skip to content

Commit 29141e2

Browse files
committed
Switch to other mysql connector
1 parent e8ee2cc commit 29141e2

11 files changed

Lines changed: 120 additions & 56 deletions

.gitmodules

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
[submodule "intercept"]
22
path = intercept
33
url = https://github.com/intercept/intercept.git
4-
[submodule "mysql-connector-cpp"]
5-
path = mysql-connector-cpp
6-
url = https://github.com/mysql/mysql-connector-cpp.git
4+
[submodule "mariadb-connector-c"]
5+
path = mariadb-connector-c
6+
url = https://github.com/MariaDB/mariadb-connector-c
7+
[submodule "mariadbpp"]
8+
path = mariadbpp
9+
url = https://github.com/viaduck/mariadbpp
710
[submodule "wolfssl"]
811
path = wolfssl
912
url = https://github.com/wolfSSL/wolfssl

CMakeLists.txt

Lines changed: 70 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,78 @@ set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE)
4242
SET(BUILD_STATIC ON CACHE BOOL "force static lib" FORCE)
4343
SET(STATIC_MSVCRT ON CACHE BOOL "force static lib" FORCE)
4444

45-
SET(HAVE_SHARED_PTR ON CACHE BOOL "shut up CDK" FORCE)
46-
SET(HAVE_SYSTEM_ERROR ON CACHE BOOL "shut up CDK" FORCE)
47-
SET(HAVE_CODECVT_UTF8 ON CACHE BOOL "shut up CDK" FORCE)
45+
SET(WITH_UNIT_TESTS OFF CACHE BOOL "no mysql tests" FORCE)
46+
set(WITH_SSL "OFF" CACHE STRING "Disabled for now" FORCE)
47+
#set(LIBMARIADB_PLUGIN_LIBS "libcmtd.lib" CACHE STRING "force static build" FORCE)
48+
49+
if(CMAKE_COMPILER_IS_GNUCXX)
50+
set(CMAKE_CXX_FLAGS "-std=c++1z -O2 -s -fPIC -fpermissive -static-libgcc -static-libstdc++")#-march=i686 -m32
51+
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
52+
set(CMAKE_SHARED_LINKER_FLAGS "-shared -static-libgcc -static-libstdc++")
53+
else()
54+
set(CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1 /MP /EHsc")
55+
set(CMAKE_CXX_FLAGS_RELEASE "/MT /Zi /O2 /Ob1 /EHsc /MP") #with debug info
56+
set(CMAKE_C_FLAGS_DEBUG "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1 /MP /EHsc")
57+
set(CMAKE_C_FLAGS_RELEASE "/MT /Zi /O2 /Ob1 /EHsc /MP") #with debug info
58+
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/OPT:REF /DEBUG:FULL")
59+
endif()
60+
61+
62+
63+
64+
# Override add_library() and set the "EXCLUDE_FROM_DEFAULT_BUILD" property to TRUE on all libraries that use "EXCLUDE_FROM_ALL".
65+
function(add_library TARGET)
66+
_add_library(${TARGET} ${ARGN})
67+
cmake_parse_arguments(OPTS "EXCLUDE_FROM_ALL" "" "" ${ARGN})
68+
if(OPTS_EXCLUDE_FROM_ALL)
69+
set_target_properties(${TARGET} PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD TRUE)
70+
endif()
71+
endfunction()
72+
73+
# Helper function to recursively set EXCLUDE_FROM_DEFAULT_BUILD to FALSE on all targets "TARGET" depends on
74+
function(_include_in_build TARGET)
75+
if(TARGET ${TARGET})
76+
get_target_property(TYPE ${TARGET} TYPE)
77+
if(TYPE MATCHES "INTERFACE")
78+
get_target_property(DEPS ${TARGET} INTERFACE_LINK_LIBRARIES)
79+
else()
80+
set_target_properties(${TARGET} PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD FALSE)
81+
get_target_property(DEPS ${TARGET} LINK_LIBRARIES)
82+
endif()
83+
if(DEPS)
84+
foreach(D ${DEPS})
85+
_include_in_build(${D})
86+
endforeach()
87+
endif()
88+
endif()
89+
endfunction()
90+
91+
# Take executables as roots to run _include_in_build() on
92+
function(target_link_libraries TARGET)
93+
_target_link_libraries(${TARGET} ${ARGN})
94+
95+
get_target_property(_TYPE ${TARGET} TYPE)
96+
if(_TYPE MATCHES "EXECUTABLE")
97+
_include_in_build(${TARGET})
98+
endif()
99+
endfunction()
100+
101+
102+
103+
104+
105+
106+
107+
add_subdirectory(mariadb-connector-c)
108+
109+
CONFIGURE_FILE("${CMAKE_CURRENT_BINARY_DIR}/mariadb-connector-c/include/mariadb_version.h"
110+
"${PROJECT_SOURCE_DIR}/mariadb-connector-c/include/mariadb_version.h")
111+
48112

49-
set(WITH_SSL "${CMAKE_SOURCE_DIR}/wolfssl" CACHE STRING
50-
"Use the same setting as used when building connector" FORCE
51-
)
52113

53-
add_subdirectory(mysql-connector-cpp)
114+
add_subdirectory(mariadbpp)
54115

55-
include_directories(AFTER "${PROJECT_SOURCE_DIR}/mysql-connector-cpp/include")
116+
include_directories(AFTER "${PROJECT_SOURCE_DIR}/mariadbpp/include")
117+
include_directories(AFTER "${PROJECT_SOURCE_DIR}/mariadb-connector-c/include")
56118
add_subdirectory(src)
57119

intercept

mariadb-connector-c

Submodule mariadb-connector-c added at 3b3b492

mariadbpp

Submodule mariadbpp added at 6790c12

mysql-connector-cpp

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ file(GLOB INTERCEPT_HOST_SOURCES "${INTERCEPT_CLIENT_PATH}/intercept/client/*.cp
3838
SOURCE_GROUP("intercept" FILES ${INTERCEPT_HOST_SOURCES})
3939

4040
add_library(${INTERCEPT_PLUGIN_NAME} SHARED ${INTERCEPT_PLUGIN_SOURCES} ${INTERCEPT_HOST_SOURCES})
41-
target_link_libraries(${INTERCEPT_PLUGIN_NAME} connector)
41+
target_link_libraries(${INTERCEPT_PLUGIN_NAME} mariadbclientpp)
4242

4343
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${INTERCEPT_INCLUDE_PATH})
4444

src/connection.cpp

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
#include "connection.h"
2-
#include <mysqlx/xdevapi.h>
2+
#include <mariadb++/connection.hpp>
33
#include "query.h"
44
#include "res.h"
55

66
using namespace intercept::client;
7-
using namespace mysqlx;
87

98

109
class GameDataDBConnection : public game_data {
@@ -44,11 +43,7 @@ class GameDataDBConnection : public game_data {
4443
return serialization_return::no_error;
4544
}
4645

47-
//#TODO use connection pool
48-
//https://dev.mysql.com/doc/x-devapi-userguide/en/connecting-connection-pool.html
49-
//for multithreading later, we don't want to use same session in multiple threads
50-
51-
std::shared_ptr<mysqlx::Session> session;
46+
mariadb::connection_ref session;
5247
};
5348

5449
game_data* createGameDataDBConnection(param_archive* ar) {
@@ -66,16 +61,12 @@ game_value Connection::cmd_createConnectionArray(uintptr_t, game_value_parameter
6661
r_string pw = right[3];
6762
r_string db = right[4];
6863

69-
auto newCon = new GameDataDBConnection();
70-
71-
SessionSettings settings(SessionOption::HOST, ip.c_str(),
72-
SessionOption::PORT, port);
64+
auto acc = mariadb::account::create(ip, user, pw, db, port);
65+
7366

74-
settings.set(SessionOption::USER, user.c_str());
75-
settings.set(SessionOption::PWD, pw.c_str());
76-
settings.set(SessionOption::DB, db.c_str());
67+
auto newCon = new GameDataDBConnection();
7768

78-
newCon->session = std::make_shared<mysqlx::Session>(settings);
69+
newCon->session = mariadb::connection::create(acc);
7970

8071

8172
return newCon;
@@ -86,18 +77,19 @@ game_value Connection::cmd_query(uintptr_t, game_value_parameter con, game_value
8677
auto session = con.get_as<GameDataDBConnection>()->session;
8778
auto query = qu.get_as<GameDataDBQuery>();
8879

89-
auto statement = session->sql(query->queryString.c_str());
80+
auto statement = session->create_statement(query->queryString);
9081

82+
uint32_t idx = 0;
9183
for (auto& it : query->boundValues) {
9284

9385
switch (it.type_enum()) {
94-
case game_data_type::SCALAR: statement.bind(static_cast<float>(it)); break;
95-
case game_data_type::BOOL: statement.bind(static_cast<bool>(it)); break;
96-
case game_data_type::STRING: statement.bind(static_cast<r_string>(it)); break;
86+
case game_data_type::SCALAR: statement->set_float(idx++, static_cast<float>(it)); break;
87+
case game_data_type::BOOL: statement->set_boolean(idx++, static_cast<bool>(it)); break;
88+
case game_data_type::STRING: statement->set_string(idx++, static_cast<r_string>(it)); break;
9789
default: ;
9890
}
9991
}
100-
auto res = statement.execute();
92+
auto res = statement->query();
10193

10294
auto gd_res = new GameDataDBResult();
10395
gd_res->res = std::move(res);

src/query.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
#include "query.h"
2-
#include <mysqlx/xdevapi.h>
2+
#include <mariadb++/statement.hpp>
33

44
using namespace intercept::client;
5-
using namespace mysqlx;
6-
75

86

97
game_data* createGameDataDBQuery(param_archive* ar) {

src/res.cpp

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#include "res.h"
2-
#include <mysqlx/xdevapi.h>
2+
#include <mariadb++/result_set.hpp>
33

44
using namespace intercept::client;
55

@@ -15,35 +15,43 @@ game_data* createGameDataDBResult(param_archive* ar) {
1515
game_value Result::cmd_affectedRows(uintptr_t, game_value_parameter right) {
1616
auto& res = right.get_as<GameDataDBResult>()->res;
1717

18-
return res.getAffectedItemsCount();
18+
return res->row_count();
1919
}
2020

2121
game_value Result::cmd_lastInsertId(uintptr_t, game_value_parameter right) {
2222
auto& res = right.get_as<GameDataDBResult>()->res;
2323

24-
return res.getAutoIncrementValue();
24+
return res->get_last_insert_id();
2525
}
2626

2727
game_value Result::cmd_toArray(uintptr_t, game_value_parameter right) {
2828
auto& res = right.get_as<GameDataDBResult>()->res;
2929
auto_array<game_value> result;
3030

31-
for (auto& it : res) {
31+
while (res->next()) {
3232
auto_array<game_value> row;
3333

34-
for (int i = 0; i < it.colCount(); ++i) {
35-
36-
switch (it.get(i).getType()) {
37-
case mysqlx::Value::VNULL: row.emplace_back(game_value{}); break;
38-
case mysqlx::Value::UINT64: row.emplace_back(it.get(i).get<uint64_t>()); break;
39-
case mysqlx::Value::INT64: row.emplace_back(static_cast<float>(it.get(i).get<int64_t>())); break;
40-
case mysqlx::Value::FLOAT: row.emplace_back(it.get(i).get<float>()); break;
41-
case mysqlx::Value::DOUBLE:row.emplace_back(static_cast<float>(it.get(i).get<double>())); break;
42-
case mysqlx::Value::BOOL: row.emplace_back(it.get(i).get<bool>()); break;
43-
case mysqlx::Value::STRING: row.emplace_back(static_cast<std::string>(it.get(i).get<mysqlx::string>())); break;
44-
case mysqlx::Value::DOCUMENT: break;
45-
case mysqlx::Value::RAW: break;
46-
case mysqlx::Value::ARRAY: break;
34+
for (int i = 0; i < res->column_count(); ++i) {
35+
36+
switch (res->column_type(i)) {
37+
case mariadb::value::null: row.emplace_back(game_value{}); break;
38+
case mariadb::value::date: row.emplace_back(res->get_string(i)); break;
39+
case mariadb::value::date_time: row.emplace_back(res->get_string(i)); break;
40+
case mariadb::value::time: row.emplace_back(res->get_string(i)); break;
41+
case mariadb::value::string: row.emplace_back(res->get_string(i)); break;
42+
case mariadb::value::boolean: row.emplace_back(res->get_boolean(i)); break;
43+
case mariadb::value::decimal: row.emplace_back(res->get_decimal(i).float32()); break;
44+
case mariadb::value::unsigned8: row.emplace_back(res->get_float(i)); break;
45+
case mariadb::value::signed8: row.emplace_back(res->get_float(i)); break;
46+
case mariadb::value::unsigned16: row.emplace_back(res->get_float(i)); break;
47+
case mariadb::value::signed16: row.emplace_back(res->get_float(i)); break;
48+
case mariadb::value::unsigned32: row.emplace_back(res->get_float(i)); break;
49+
case mariadb::value::signed32: row.emplace_back(res->get_float(i)); break;
50+
case mariadb::value::unsigned64: row.emplace_back(res->get_float(i)); break;
51+
case mariadb::value::signed64: row.emplace_back(res->get_float(i)); break;
52+
case mariadb::value::float32: row.emplace_back(res->get_float(i)); break;
53+
case mariadb::value::double64: row.emplace_back(res->get_float(i)); break;
54+
case mariadb::value::enumeration: row.emplace_back(res->get_string(i)); break;
4755
default: ;
4856
}
4957
}

0 commit comments

Comments
 (0)