From 7c18e6948e619d6b100a31e28cb18c2b5cafb715 Mon Sep 17 00:00:00 2001 From: Marcin Krol Date: Thu, 25 Nov 2021 03:06:43 +0100 Subject: [PATCH] - missing patches --- build.patch | 42 ++++ mysql-5.7-sphinx.patch | 431 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 473 insertions(+) create mode 100644 build.patch create mode 100644 mysql-5.7-sphinx.patch diff --git a/build.patch b/build.patch new file mode 100644 index 0000000..f3dbd71 --- /dev/null +++ b/build.patch @@ -0,0 +1,42 @@ +diff -ur percona-server-5.7.35-38.orig/cmake/maintainer.cmake percona-server-5.7.35-38/cmake/maintainer.cmake +--- percona-server-5.7.35-38.orig/cmake/maintainer.cmake 2021-11-25 00:03:41.234897661 +0100 ++++ percona-server-5.7.35-38/cmake/maintainer.cmake 2021-11-25 00:05:01.649091453 +0100 +@@ -37,12 +37,6 @@ + "${MY_CXX_WARNING_FLAGS} -Wno-null-conversion -Wno-unused-private-field") + ENDIF() + +-# Turn on Werror (warning => error) when using maintainer mode. +-IF(MYSQL_MAINTAINER_MODE) +- STRING_APPEND(MY_C_WARNING_FLAGS " -Werror") +- STRING_APPEND(MY_CXX_WARNING_FLAGS " -Werror") +-ENDIF() +- + # Set warning flags for GCC/Clang + IF(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") + STRING_APPEND(CMAKE_C_FLAGS " ${MY_C_WARNING_FLAGS}") +diff -ur percona-server-5.7.35-38.orig/storage/rocksdb/CMakeLists.txt percona-server-5.7.35-38/storage/rocksdb/CMakeLists.txt +--- percona-server-5.7.35-38.orig/storage/rocksdb/CMakeLists.txt 2021-11-25 00:03:45.359907607 +0100 ++++ percona-server-5.7.35-38/storage/rocksdb/CMakeLists.txt 2021-11-25 00:04:04.352953376 +0100 +@@ -57,7 +57,7 @@ + # get a list of rocksdb library source files + # run with env -i to avoid passing variables + EXECUTE_PROCESS( +- COMMAND env -i ${CMAKE_CURRENT_SOURCE_DIR}/get_rocksdb_files.sh ++ COMMAND env -i PATH=$ENV{PATH} ${CMAKE_CURRENT_SOURCE_DIR}/get_rocksdb_files.sh + OUTPUT_VARIABLE SCRIPT_OUTPUT + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) +diff -ur percona-server-5.7.35-38.orig/storage/tokudb/PerconaFT/cmake_modules/TokuSetupCompiler.cmake percona-server-5.7.35-38/storage/tokudb/PerconaFT/cmake_modules/TokuSetupCompiler.cmake +--- percona-server-5.7.35-38.orig/storage/tokudb/PerconaFT/cmake_modules/TokuSetupCompiler.cmake 2021-11-25 00:03:46.402910121 +0100 ++++ percona-server-5.7.35-38/storage/tokudb/PerconaFT/cmake_modules/TokuSetupCompiler.cmake 2021-11-25 00:04:04.352953376 +0100 +@@ -221,10 +221,6 @@ + prepend_cflags_if_supported_remove_unsupported(-Wcast-align) + endif () + +-## always want these +-set(CMAKE_C_FLAGS "-Wall -Werror ${CMAKE_C_FLAGS}") +-set(CMAKE_CXX_FLAGS "-Wall -Werror ${CMAKE_CXX_FLAGS}") +- + # pick language dialect + set(CMAKE_C_FLAGS "-std=c99 ${CMAKE_C_FLAGS}") + check_cxx_compiler_flag(-std=c++11 HAVE_STDCXX11) diff --git a/mysql-5.7-sphinx.patch b/mysql-5.7-sphinx.patch new file mode 100644 index 0000000..2f558da --- /dev/null +++ b/mysql-5.7-sphinx.patch @@ -0,0 +1,431 @@ +diff -ur percona-server-5.7.35-38.orig/storage/sphinx/ha_sphinx.cc percona-server-5.7.35-38/storage/sphinx/ha_sphinx.cc +--- percona-server-5.7.35-38.orig/storage/sphinx/ha_sphinx.cc 2021-11-24 19:47:23.900607509 +0100 ++++ percona-server-5.7.35-38/storage/sphinx/ha_sphinx.cc 2021-11-24 19:47:54.875680910 +0100 +@@ -34,13 +34,37 @@ + #include "../mysql_priv.h" + #endif + ++#if !defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID>=50709 ++#include "item_timefunc.h" ++#define sphinx_append push_back ++#define sphinx_array std::vector ++#define sphinx_elements size ++#if defined(_WIN32) ++#define __WIN__ _WIN32 ++#define pthread_mutex_init(A,B) (InitializeCriticalSection(A),0) ++#define pthread_mutex_lock(A) (EnterCriticalSection(A),0) ++#define pthread_mutex_unlock(A) (LeaveCriticalSection(A), 0) ++#define pthread_mutex_destroy(A) (DeleteCriticalSection(A), 0) ++#define in_addr_t uint32 ++#include ++#endif ++#else ++#define sphinx_append append ++#define sphinx_array Dynamic_array ++#define sphinx_elements elements ++#endif ++ + #include + #include + #include // include client for INSERT table (sort of redoing federated..) + + #ifndef __WIN__ + // UNIX-specific +- #include ++ #if !defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID>=50709 ++ #include ++ #else ++ #include ++ #endif + #include + #include + +@@ -286,6 +310,12 @@ + #define SafeDelete(_arg) { if ( _arg ) delete ( _arg ); (_arg) = NULL; } + #define SafeDeleteArray(_arg) { if ( _arg ) delete [] ( _arg ); (_arg) = NULL; } + ++#if !defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID>=50709 ++#ifdef __WIN__ ++typedef native_mutex_t pthread_mutex_t; ++#endif ++#endif ++ + ////////////////////////////////////////////////////////////////////////////// + + /// per-table structure that will be shared among all open Sphinx SE handlers +@@ -602,10 +632,10 @@ + }; + char * m_sName; ///< points to query buffer + int m_iType; +- Dynamic_array m_dIds; +- Dynamic_array m_dValues; ++ sphinx_array m_dIds; ++ sphinx_array m_dValues; + }; +- Dynamic_array m_dOverrides; ++ sphinx_array m_dOverrides; + + public: + char m_sParseError[256]; +@@ -634,10 +664,10 @@ + void SendString ( const char * v ) { int iLen = strlen(v); SendDword(iLen); SendBytes ( v, iLen ); } + void SendFloat ( float v ) { SendDword ( sphF2DW(v) ); } + }; +- ++#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION + template int CSphSEQuery::ParseArray ( uint32 **, const char * ); + template int CSphSEQuery::ParseArray ( longlong **, const char * ); +- ++#endif + ////////////////////////////////////////////////////////////////////////////// + + #if MYSQL_VERSION_ID>50100 +@@ -733,13 +763,21 @@ + { + sphinx_init = 1; + void ( pthread_mutex_init ( &sphinx_mutex, MY_MUTEX_INIT_FAST ) ); ++ #if !defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID >= 50709 ++ sphinx_hash_init ( &sphinx_open_tables, system_charset_info, 32, 0, 0, ++ sphinx_get_key, 0, 0, 0 ); ++ #else + sphinx_hash_init ( &sphinx_open_tables, system_charset_info, 32, 0, 0, + sphinx_get_key, 0, 0 ); +- ++ #endif + #if MYSQL_VERSION_ID > 50100 + handlerton * hton = (handlerton*) p; + hton->state = SHOW_OPTION_YES; ++ #if !defined(MARIADB_BASE_VERSION) + hton->db_type = DB_TYPE_FIRST_DYNAMIC; ++ #else ++ hton->db_type = DB_TYPE_AUTOASSIGN; ++ #endif + hton->create = sphinx_create_handler; + hton->close_connection = sphinx_close_connection; + hton->show_status = sphinx_show_status; +@@ -855,10 +893,15 @@ + SPH_RET(TRUE); + } + CSphTLS * pTls = (CSphTLS*) thd->ha_data[sphinx_hton.slot]; +- ++ #ifndef MARIADB_BASE_VERSION + field_list.push_back ( new Item_empty_string ( "Type", 10 ) ); + field_list.push_back ( new Item_empty_string ( "Name", FN_REFLEN ) ); + field_list.push_back ( new Item_empty_string ( "Status", 10 ) ); ++ #else ++ field_list.push_back ( new Item_empty_string ( thd, "Type", 10 ) ); ++ field_list.push_back ( new Item_empty_string ( thd, "Name", FN_REFLEN ) ); ++ field_list.push_back ( new Item_empty_string ( thd, "Status", 10 ) ); ++ #endif + if ( protocol->send_fields ( &field_list, Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF ) ) + SPH_RET(TRUE); + +@@ -1321,7 +1364,7 @@ + SafeDeleteArray ( m_sQueryBuffer ); + SafeDeleteArray ( m_pWeights ); + SafeDeleteArray ( m_pBuf ); +- for ( int i=0; im_sName = chop(sName); + pOverride->m_iType = iType; +- m_dOverrides.append ( pOverride ); ++ m_dOverrides.sphinx_append ( pOverride ); + } + + ulonglong uId = strtoull ( sId, NULL, 10 ); +@@ -1801,8 +1853,8 @@ + else + tValue.m_uValue = (uint32)strtoul ( sValue, NULL, 10 ); + +- pOverride->m_dIds.append ( uId ); +- pOverride->m_dValues.append ( tValue ); ++ pOverride->m_dIds.sphinx_append ( uId ); ++ pOverride->m_dValues.sphinx_append ( tValue ); + } + + if ( !pOverride ) +@@ -1906,11 +1958,11 @@ + iReqSize += 8 + strlen(m_sFieldWeight[i] ); + // overrides + iReqSize += 4; +- for ( int i=0; im_iType==SPH_ATTR_BIGINT ? 16 : 12; // id64 + value +- iReqSize += strlen ( pOverride->m_sName ) + 12 + uSize*pOverride->m_dIds.elements(); ++ iReqSize += strlen ( pOverride->m_sName ) + 12 + uSize*pOverride->m_dIds.sphinx_elements(); + } + // select + iReqSize += 4; +@@ -2012,14 +2064,14 @@ + SendString ( m_sComment ); + + // overrides +- SendInt ( m_dOverrides.elements() ); +- for ( int i=0; im_sName ); + SendDword ( pOverride->m_iType ); +- SendInt ( pOverride->m_dIds.elements() ); +- for ( int j=0; jm_dIds.elements(); j++ ) ++ SendInt ( pOverride->m_dIds.sphinx_elements() ); ++ for ( int j=0; jm_dIds.sphinx_elements(); j++ ) + { + SendUint64 ( pOverride->m_dIds.at(j) ); + if ( pOverride->m_iType==SPH_ATTR_FLOAT ) +@@ -2045,9 +2097,9 @@ + ////////////////////////////////////////////////////////////////////////////// + // SPHINX HANDLER + ////////////////////////////////////////////////////////////////////////////// +- ++#ifndef MARIADB_BASE_VERSION + static const char * ha_sphinx_exts[] = { NullS }; +- ++#endif + + #if MYSQL_VERSION_ID<50100 + ha_sphinx::ha_sphinx ( TABLE_ARG * table ) +@@ -2073,8 +2125,10 @@ + , m_dUnboundFields ( NULL ) + { + SPH_ENTER_METHOD(); ++ #if MYSQL_VERSION_ID < 50709 + if ( current_thd ) + current_thd->variables.engine_condition_pushdown = true; ++ #endif + SPH_VOID_RET(); + } + +@@ -2082,11 +2136,24 @@ + // If frm_error() is called then we will use this to to find out what file extentions + // exist for the storage engine. This is also used by the default rename_table and + // delete_table method in handler.cc. ++#ifndef MARIADB_BASE_VERSION + const char ** ha_sphinx::bas_ext() const + { + return ha_sphinx_exts; + } +- ++#else ++ha_sphinx::~ha_sphinx() ++{ ++ SafeDeleteArray ( m_dAttrs ); ++ SafeDeleteArray ( m_dUnboundFields ); ++ if ( m_dFields ) ++ { ++ for (uint32 i=0; i< m_iFields; i++ ) ++ SafeDeleteArray ( m_dFields[i] ); ++ delete [] m_dFields; ++ } ++} ++#endif + + // Used for opening tables. The name will be the name of the file. + // A table is opened when it needs to be opened. For instance +@@ -2349,11 +2416,19 @@ + sQuery.append ( "''" ); + + } else +- { ++ { ++ #if MYSQL_VERSION_ID>=100000 ++ THD *thd= ha_thd(); ++ #endif + if ( (*ppField)->type()==MYSQL_TYPE_TIMESTAMP ) + { +- Item_field * pWrap = new Item_field ( *ppField ); // autofreed by query arena, I assume +- Item_func_unix_timestamp * pConv = new Item_func_unix_timestamp ( pWrap ); ++ #if MYSQL_VERSION_ID>=100000 ++ Item_field * pWrap = new (thd->mem_root) Item_field(thd, *ppField); // autofreed by query arena, I assume ++ Item_func_unix_timestamp * pConv = new (thd->mem_root) Item_func_unix_timestamp(thd, pWrap); ++ #else ++ Item_field * pWrap = new Item_field ( *ppField ); // autofreed by query arena, I assume ++ Item_func_unix_timestamp * pConv = new Item_func_unix_timestamp ( pWrap ); ++ #endif + pConv->quick_fix_field(); + unsigned int uTs = (unsigned int) pConv->val_int(); + +@@ -2390,7 +2465,10 @@ + + unsigned int uTimeout = 1; + mysql_options ( pConn, MYSQL_OPT_CONNECT_TIMEOUT, (const char*)&uTimeout ); +- ++ #ifdef MARIADB_BASE_VERSION ++ my_bool my_true= 1; ++ mysql_options(pConn, MYSQL_OPT_USE_THREAD_SPECIFIC_MEMORY, (char*) &my_true); ++ #endif + if ( !mysql_real_connect ( pConn, m_pShare->m_sHost, "root", "", "", m_pShare->m_iPort, m_pShare->m_sSocket, 0 ) ) + SPH_RET ( HandleMysqlError ( pConn, ER_CONNECT_TO_FOREIGN_DATA_SOURCE ) ); + +@@ -2449,6 +2527,10 @@ + + unsigned int uTimeout = 1; + mysql_options ( pConn, MYSQL_OPT_CONNECT_TIMEOUT, (const char*)&uTimeout ); ++ #ifdef MARIADB_BASE_VERSION ++ my_bool my_true= 1; ++ mysql_options(pConn, MYSQL_OPT_USE_THREAD_SPECIFIC_MEMORY, (char*) &my_true); ++ #endif + + if ( !mysql_real_connect ( pConn, m_pShare->m_sHost, "root", "", "", m_pShare->m_iPort, m_pShare->m_sSocket, 0 ) ) + SPH_RET ( HandleMysqlError ( pConn, ER_CONNECT_TO_FOREIGN_DATA_SOURCE ) ); +@@ -2756,11 +2838,19 @@ + break; + + // copy the query, and let know that we intercepted this condition +- Item_string * pString = (Item_string *) args[1]; +- pTable->m_bQuery = true; ++ #if MYSQL_VERSION_ID>=100000 ++ String *pString= args[1]->val_str(NULL); ++ pTable->m_bQuery = true; ++ strncpy ( pTable->m_sQuery, pString->c_ptr(), sizeof(pTable->m_sQuery) ); ++ pTable->m_sQuery[sizeof(pTable->m_sQuery)-1] = '\0'; ++ pTable->m_pQueryCharset = pString->charset(); ++ #else ++ Item_string * pString = (Item_string *) args[1]; ++ pTable->m_bQuery = true; + strncpy ( pTable->m_sQuery, pString->str_value.c_ptr(), sizeof(pTable->m_sQuery) ); + pTable->m_sQuery[sizeof(pTable->m_sQuery)-1] = '\0'; + pTable->m_pQueryCharset = pString->str_value.charset(); ++ #endif + + } else + { +@@ -3540,7 +3630,7 @@ + #endif + + out->type = SHOW_CHAR; +- out->value = ""; ++ out->value = ""; + return 0; + } + +@@ -3673,7 +3763,25 @@ + {0, 0, (enum_mysql_show_type)0} + }; + +- ++#ifdef MARIADB_BASE_VERSION ++maria_declare_plugin(sphinx) ++{ ++ MYSQL_STORAGE_ENGINE_PLUGIN, ++ &sphinx_storage_engine, ++ sphinx_hton_name, ++ "Sphinx developers", ++ sphinx_hton_comment, ++ PLUGIN_LICENSE_GPL, ++ sphinx_init_func, // Plugin Init ++ sphinx_done_func, // Plugin Deinit ++ 0x0202, // 2.2 ++ sphinx_status_vars, ++ NULL, ++ SPHINXSE_VERSION, // string version ++MariaDB_PLUGIN_MATURITY_GAMMA ++} ++maria_declare_plugin_end; ++#else + mysql_declare_plugin(sphinx) + { + MYSQL_STORAGE_ENGINE_PLUGIN, +@@ -3690,7 +3798,7 @@ + NULL + } + mysql_declare_plugin_end; +- ++#endif + #endif // >50100 + + // +diff -ur percona-server-5.7.35-38.orig/storage/sphinx/ha_sphinx.h percona-server-5.7.35-38/storage/sphinx/ha_sphinx.h +--- percona-server-5.7.35-38.orig/storage/sphinx/ha_sphinx.h 2021-11-24 19:47:23.900607509 +0100 ++++ percona-server-5.7.35-38/storage/sphinx/ha_sphinx.h 2021-11-24 19:47:55.056681337 +0100 +@@ -53,14 +53,24 @@ + #else + ha_sphinx ( handlerton * hton, TABLE_ARG * table_arg ); + #endif +- ~ha_sphinx () {} ++#ifndef MARIADB_BASE_VERSION ++ ~ha_sphinx (){} ++#else ++ ~ha_sphinx (); ++#endif + + const char * table_type () const { return "SPHINX"; } ///< SE name for display purposes + const char * index_type ( uint ) { return "HASH"; } ///< index type name for display purposes +- const char ** bas_ext () const; ///< my file extensions +- ++ #ifndef MARIADB_BASE_VERSION ++ const char ** bas_ext () const; ++ #endif + #if MYSQL_VERSION_ID>50100 +- ulonglong table_flags () const { return HA_CAN_INDEX_BLOBS; } ///< bitmap of implemented flags (see handler.h for more info) ++ #ifdef MARIADB_BASE_VERSION ++ ulonglong table_flags () const { return HA_CAN_INDEX_BLOBS | ++ HA_CAN_TABLE_CONDITION_PUSHDOWN; } ///< bitmap of implemented flags (see handler.h for more info) ++ #else ++ ulonglong table_flags () const { return HA_CAN_INDEX_BLOBS; } ++ #endif + #else + ulong table_flags () const { return HA_CAN_INDEX_BLOBS; } ///< bitmap of implemented flags (see handler.h for more info) + #endif +@@ -77,8 +87,12 @@ + #else + virtual double scan_time () { return (double)( records+deleted )/20.0 + 10; } ///< called in test_quick_select to determine if indexes should be used + #endif +- +- virtual double read_time ( ha_rows rows ) { return (double)rows/20.0 + 1; } ///< index read time estimate ++ #ifdef MARIADB_BASE_VERSION ++ virtual double read_time(uint index, uint ranges, ha_rows rows) ++ { return ranges + (double)rows/20.0 + 1; } ///< index read time estimate ++ #else ++ virtual double read_time ( ha_rows rows ) { return (double)rows/20.0 + 1; } ++ #endif + + public: + int open ( const char * name, int mode, uint test_if_locked ); +diff -ur percona-server-5.7.35-38.orig/storage/sphinx/snippets_udf.cc percona-server-5.7.35-38/storage/sphinx/snippets_udf.cc +--- percona-server-5.7.35-38.orig/storage/sphinx/snippets_udf.cc 2021-11-24 19:47:23.900607509 +0100 ++++ percona-server-5.7.35-38/storage/sphinx/snippets_udf.cc 2021-11-24 19:47:55.056681337 +0100 +@@ -34,6 +34,9 @@ + #include "../mysql_priv.h" + #endif + ++#if !defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID>=50709 ++ #include ++#endif + #include + #include + -- 2.44.0