Skip to content

Commit 3b9d523

Browse files
author
Pavel Parshin
committed
Updated MySQL submodule, fixed compilation and linker issues
1 parent 9d49d72 commit 3b9d523

9 files changed

+81
-58
lines changed

.travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ before_install:
4141
before_script:
4242
- mkdir build
4343
- cd build
44-
- cmake -DCMAKE_BUILD_TYPE=Release ..
44+
- cmake -DCMAKE_BUILD_TYPE=Release ..
4545

4646
script:
4747
- make

CMakeLists.txt

+35-37
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ PROJECT (libslave)
44
OPTION (BUILD_STATIC "Force building static library" ON)
55
OPTION (WITH_TESTING "Enable building the tests framework" OFF)
66

7+
SET (THREADS_PREFER_PTHREAD_FLAG ON)
8+
FIND_PACKAGE (Threads REQUIRED)
9+
710
# Build flags
811
SET (CMAKE_CXX_STANDARD 14)
912
SET (CMAKE_CXX_STANDARD_REQUIRED TRUE)
@@ -21,66 +24,55 @@ IF (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
2124
ADD_DEFINITIONS (-Wall)
2225
ENDIF ()
2326

24-
# Fixes a lot of annoying warnings about auto_ptr deprecation
25-
ADD_DEFINITIONS (-DBOOST_NO_AUTO_PTR)
26-
27-
SET (BOOST_DIR ${CMAKE_CURRENT_SOURCE_DIR})
27+
SET (BOOST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/boost)
2828
SET (MYSQL_SRC ${CMAKE_CURRENT_SOURCE_DIR}/mysql)
2929
SET (MYSQL_BIN ${CMAKE_BINARY_DIR}/mysql)
3030
FILE (MAKE_DIRECTORY ${MYSQL_BIN})
3131

32-
INCLUDE_DIRECTORIES (
33-
BEFORE SYSTEM
34-
${MYSQL_BIN}/include
35-
${MYSQL_SRC}/include
36-
${MYSQL_SRC}/libbinlogevents/export
37-
${BOOST_DIR}/boost_1_69_0/boost
38-
)
39-
ADD_CUSTOM_TARGET (
40-
fix_static_build
41-
WORKING_DIRECTORY ${MYSQL_BIN}
42-
COMMAND sed -i '/GET_TARGET_PROPERTY.*libmysql/s/libmysql/perconaserverclient/' ${MYSQL_SRC}/scripts/CMakeLists.txt
43-
)
4432
ADD_CUSTOM_TARGET (
45-
mysql_configure
46-
WORKING_DIRECTORY ${MYSQL_BIN}
47-
DEPENDS fix_static_build
48-
COMMAND "${CMAKE_COMMAND}"
33+
mysql_configure
34+
WORKING_DIRECTORY ${MYSQL_BIN}
35+
COMMAND "${CMAKE_COMMAND}"
4936
-DCMAKE_BUILD_TYPE=Release
5037
-DDISABLE_SHARED=1
5138
-DENABLED_PROFILING=0
5239
-DWITHOUT_SERVER=1
5340
-DWITH_CLIENT_PROTOCOL_TRACING=0
5441
-DWITH_DEFAULT_FEATURE_SET=0
55-
-DWITH_SSL=bundled
42+
-DWITH_SSL=system
5643
-DWITH_ZLIB=bundled
5744
-DWITH_LIBEVENT=bundled
5845
-DWITH_LZ4=bundled
5946
-DWITH_PROTOBUF=bundled
6047
-DWITH_EDITLINE=bundled
61-
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=${BOOST_DIR}
48+
-DDOWNLOAD_BOOST=1
49+
-DDOWNLOAD_BOOST_TIMEOUT=1200
50+
-DWITH_BOOST=${BOOST_DIR}
6251
${MYSQL_SRC}
6352
)
53+
6454
ADD_CUSTOM_TARGET (
65-
mysqlclient_build
66-
WORKING_DIRECTORY ${MYSQL_BIN}
67-
DEPENDS mysql_configure
68-
COMMAND ${CMAKE_COMMAND} --build . --target perconaserverclient
55+
binlogevents_build
56+
WORKING_DIRECTORY ${MYSQL_BIN}
57+
DEPENDS mysql_configure
58+
COMMAND ${CMAKE_COMMAND} --build . --target binlogevents_static
6959
)
60+
7061
ADD_CUSTOM_TARGET (
71-
binlogevents_build
72-
WORKING_DIRECTORY ${MYSQL_BIN}
73-
DEPENDS mysql_configure
74-
COMMAND ${CMAKE_COMMAND} --build . --target binlogevents_static
62+
mysql_client_build
63+
WORKING_DIRECTORY ${MYSQL_BIN}
64+
DEPENDS binlogevents_build
65+
COMMAND ${CMAKE_COMMAND} --build . --target perconaserverclient
7566
)
7667

77-
ADD_LIBRARY (mysqlclient STATIC IMPORTED)
78-
ADD_DEPENDENCIES (mysqlclient mysqlclient_build)
79-
SET_PROPERTY (TARGET mysqlclient PROPERTY IMPORTED_LOCATION ${MYSQL_BIN}/archive_output_directory/libperconaserverclient.a)
80-
8168
ADD_LIBRARY (binlogevents STATIC IMPORTED)
8269
ADD_DEPENDENCIES (binlogevents binlogevents_build)
83-
SET_PROPERTY (TARGET binlogevents PROPERTY IMPORTED_LOCATION ${MYSQL_BIN}/libbinlogevents/lib/libbinlogevents.a)
70+
SET_PROPERTY (TARGET binlogevents PROPERTY IMPORTED_LOCATION ${MYSQL_BIN}/libbinlogevents/lib/${CMAKE_STATIC_LIBRARY_PREFIX}binlogevents${CMAKE_STATIC_LIBRARY_SUFFIX})
71+
72+
ADD_LIBRARY (libmysql STATIC IMPORTED)
73+
ADD_DEPENDENCIES (libmysql mysql_client_build)
74+
SET_TARGET_PROPERTIES (libmysql PROPERTIES IMPORTED_LOCATION ${MYSQL_BIN}/archive_output_directory/${CMAKE_STATIC_LIBRARY_PREFIX}perconaserverclient${CMAKE_STATIC_LIBRARY_SUFFIX})
75+
SET_TARGET_PROPERTIES (libmysql PROPERTIES INTERFACE_LINK_LIBRARIES binlogevents)
8476

8577
ADD_DEFINITIONS (-DDBUG_OFF)
8678
SET (LINK_TYPE STATIC)
@@ -94,9 +86,15 @@ FILE (GLOB HDR "*.h")
9486
INSTALL (FILES ${HDR} DESTINATION include)
9587
AUX_SOURCE_DIRECTORY (${CMAKE_CURRENT_SOURCE_DIR} SRC)
9688

97-
# Most probably static mysql is built without fPIC, so, we can't build dynamic library with it
9889
ADD_LIBRARY (slave ${LINK_TYPE} ${SRC})
99-
TARGET_LINK_LIBRARIES (slave ${MYSQL_LIBS} -lpthread)
90+
TARGET_LINK_LIBRARIES (slave PUBLIC libmysql ssl crypto Threads::Threads m rt dl)
91+
TARGET_INCLUDE_DIRECTORIES (slave PUBLIC
92+
${MYSQL_BIN}/include
93+
${MYSQL_SRC}
94+
${MYSQL_SRC}/include
95+
${MYSQL_SRC}/libbinlogevents/export
96+
${BOOST_DIR}/boost_1_70_0
97+
)
10098
INSTALL (TARGETS slave DESTINATION lib64)
10199

102100
IF (WITH_TESTING)

collate.cpp

+13-14
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1+
#include "nanomysql.h"
2+
#include "collate.h"
3+
14
#include <map>
25
#include <mysql.h>
36
#include <stdexcept>
4-
#include <stdio.h>
57
#include <string>
6-
#include <vector>
7-
#include "nanomysql.h"
8-
#include "collate.h"
98

109
using namespace slave;
1110

@@ -20,15 +19,15 @@ collate_map_t slave::readCollateMap(nanomysql::Connection& conn)
2019
conn.query("SHOW CHARACTER SET");
2120
conn.store(nanores);
2221

23-
for (nanomysql::Connection::result_t::const_iterator i = nanores.begin(); i != nanores.end(); ++i)
22+
for (const auto& nanore : nanores)
2423
{
25-
std::map<std::string, nanomysql::field>::const_iterator z = i->find("Charset");
26-
if (z == i->end())
24+
auto z = nanore.find("Charset");
25+
if (z == nanore.end())
2726
throw std::runtime_error("Slave::readCollateMap(): SHOW CHARACTER SET query did not return 'Charset'");
2827
const std::string name = z->second.data;
2928

30-
z = i->find("Maxlen");
31-
if (z == i->end())
29+
z = nanore.find("Maxlen");
30+
if (z == nanore.end())
3231
throw std::runtime_error("Slave::readCollateMap(): SHOW CHARACTER SET query did not return 'Maxlen'");
3332

3433
const int maxlen = atoi(z->second.data.c_str());
@@ -40,17 +39,17 @@ collate_map_t slave::readCollateMap(nanomysql::Connection& conn)
4039
conn.query("SHOW COLLATION");
4140
conn.store(nanores);
4241

43-
for (nanomysql::Connection::result_t::const_iterator i = nanores.begin(); i != nanores.end(); ++i)
42+
for (const auto& nanore : nanores)
4443
{
4544
collate_info ci;
4645

47-
std::map<std::string, nanomysql::field>::const_iterator z = i->find("Collation");
48-
if (z == i->end())
46+
auto z = nanore.find("Collation");
47+
if (z == nanore.end())
4948
throw std::runtime_error("Slave::readCollateMap(): SHOW COLLATION query did not return 'Collation'");
5049
ci.name = z->second.data;
5150

52-
z = i->find("Charset");
53-
if (z == i->end())
51+
z = nanore.find("Charset");
52+
if (z == nanore.end())
5453
throw std::runtime_error("Slave::readCollateMap(): SHOW COLLATION query did not return 'Charset'");
5554
ci.charset = z->second.data;
5655

field.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ const char* Field_decimal::unpack(const char *from)
117117
int value_length = decimal_string_size(&dec);
118118
char buffer[ value_length ];
119119

120-
if (::decimal2string(&dec, (char*)&buffer, &value_length, zerofill ? precision : 0, scale, '0') != E_DEC_OK) {
120+
if (::decimal2string(&dec, (char*)&buffer, &value_length, zerofill ? precision : 0, scale) != E_DEC_OK) {
121121
throw std::runtime_error("Field_decimal::unpack(): decimal2string() failed");
122122
}
123123

mysql

Submodule mysql updated from 9c1901d to 9d49d72

nanomysql.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
#include "MysqlGuard.h"
2020
#include "nanofield.h"
2121
#include <stdexcept>
22-
#include <stdio.h>
22+
#include <cstdio>
2323
#include <vector>
2424

2525
namespace nanomysql {
@@ -176,7 +176,7 @@ class Connection {
176176
{
177177
_mysql_res_wrap re(::mysql_use_result(m_conn));
178178

179-
if (re.s == NULL) {
179+
if (re.s == nullptr) {
180180
throw_error("mysql_use_result() failed");
181181
}
182182

@@ -197,7 +197,7 @@ class Connection {
197197
while (1) {
198198
MYSQL_ROW row = ::mysql_fetch_row(re.s);
199199

200-
if (row == NULL) {
200+
if (row == nullptr) {
201201
if (::mysql_errno(m_conn) != 0) {
202202
throw_error("mysql_fetch_row() failed");
203203
}

slave_log_event.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,9 @@ bool read_log_event(const char* buf, uint event_len, Basic_event_info& bei, Even
381381
case TRANSACTION_CONTEXT_EVENT:
382382
case VIEW_CHANGE_EVENT:
383383
case XA_PREPARE_LOG_EVENT:
384+
case PARTIAL_UPDATE_ROWS_EVENT:
385+
case START_5_7_ENCRYPTION_EVENT:
386+
case MARIA_EVENTS_BEGIN:
384387
if (event_stat)
385388
event_stat->tickOther();
386389
return false;

slave_log_event.h

+23
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,29 @@ enum Log_event_type
8787

8888
XA_PREPARE_LOG_EVENT= 38,
8989

90+
/*
91+
* Extension of UPDATE_ROWS_EVENT, allowing partial values according
92+
* to binlog_row_value_options.
93+
*/
94+
PARTIAL_UPDATE_ROWS_EVENT = 39,
95+
96+
/*
97+
* Add new events here - right above this comment!
98+
* Existing events (except ENUM_END_EVENT) should never change their numbers
99+
*/
100+
101+
/* New MySQL events are to be added right above this comment */
102+
MYSQL_END_EVENT,
103+
104+
/* Add new Percona Server events here - its ids should go downwards
105+
* starting from MARIA_EVENTS_BEGIN, i.e. 159, 158 ..
106+
* till MYSQL_END_EVENT
107+
*/
108+
109+
START_5_7_ENCRYPTION_EVENT = 159,
110+
111+
MARIA_EVENTS_BEGIN = 160,
112+
90113
ENUM_END_EVENT
91114
};
92115

table.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
namespace slave
3131
{
3232

33-
typedef std::unique_ptr<Field> PtrField;
33+
typedef std::shared_ptr<Field> PtrField;
3434
typedef std::function<void (RecordSet&)> callback;
3535
typedef std::function<void (const std::string&, const std::string&, const std::vector<PtrField>&)> ddl_callback;
3636
typedef EventKind filter;

0 commit comments

Comments
 (0)