1 From d4273a352d22e8c5e924bc4fd094fc7d9f8e047f Mon Sep 17 00:00:00 2001
2 From: riden <denis.doronin@gmail.com>
3 Date: Thu, 26 Nov 2015 03:51:40 +0200
4 Subject: [PATCH] MySQLSE MySQL 5.7 support
7 mysqlse/ha_sphinx.cc | 66 ++++++++++++++++++++++++++++++++++++++-----------
8 mysqlse/snippets_udf.cc | 22 +++++++++++++----
9 2 files changed, 68 insertions(+), 20 deletions(-)
11 diff --git a/storage/sphinx/ha_sphinx.cc b/storage/sphinx/ha_sphinx.cc
12 index 8eabe87..e6a49a8 100644
13 --- a/storage/sphinx/ha_sphinx.cc
14 +++ b/storage/sphinx/ha_sphinx.cc
16 #include "../mysql_priv.h"
19 +#if MYSQL_VERSION_ID>=50709
20 +#include "item_timefunc.h"
21 +#define sphinx_append push_back
22 +#define sphinx_array std::vector
23 +#define sphinx_elements size
25 +#define __WIN__ _WIN32
26 +#define pthread_mutex_init(A,B) (InitializeCriticalSection(A),0)
27 +#define pthread_mutex_lock(A) (EnterCriticalSection(A),0)
28 +#define pthread_mutex_unlock(A) (LeaveCriticalSection(A), 0)
29 +#define pthread_mutex_destroy(A) (DeleteCriticalSection(A), 0)
30 +#define in_addr_t uint32
31 +#include <winsock2.h>
34 +#define sphinx_append append
35 +#define sphinx_array Dynamic_array
36 +#define sphinx_elements elements
39 #include <mysys_err.h>
41 #include <mysql.h> // include client for INSERT table (sort of redoing federated..)
46 + #if MYSQL_VERSION_ID>=50709
47 + #include <arpa/inet.h>
54 @@ -286,6 +310,12 @@ inline void SPH_DEBUG ( const char *, ... ) {}
55 #define SafeDelete(_arg) { if ( _arg ) delete ( _arg ); (_arg) = NULL; }
56 #define SafeDeleteArray(_arg) { if ( _arg ) delete [] ( _arg ); (_arg) = NULL; }
58 +#if MYSQL_VERSION_ID>=50709
60 +typedef native_mutex_t pthread_mutex_t;
64 //////////////////////////////////////////////////////////////////////////////
66 /// per-table structure that will be shared among all open Sphinx SE handlers
67 @@ -602,10 +632,10 @@ struct CSphSEQuery
69 char * m_sName; ///< points to query buffer
71 - Dynamic_array<ulonglong> m_dIds;
72 - Dynamic_array<Value_t> m_dValues;
73 + sphinx_array<ulonglong> m_dIds;
74 + sphinx_array<Value_t> m_dValues;
76 - Dynamic_array<Override_t *> m_dOverrides;
77 + sphinx_array<Override_t *> m_dOverrides;
80 char m_sParseError[256];
81 @@ -733,9 +763,13 @@ static int sphinx_init_func ( void * p )
84 void ( pthread_mutex_init ( &sphinx_mutex, MY_MUTEX_INIT_FAST ) );
85 + #if MYSQL_VERSION_ID >= 50709
86 + sphinx_hash_init ( &sphinx_open_tables, system_charset_info, 32, 0, 0,
87 + sphinx_get_key, 0, 0, 0 );
89 sphinx_hash_init ( &sphinx_open_tables, system_charset_info, 32, 0, 0,
90 sphinx_get_key, 0, 0 );
93 #if MYSQL_VERSION_ID > 50100
94 handlerton * hton = (handlerton*) p;
95 hton->state = SHOW_OPTION_YES;
96 @@ -1321,7 +1355,7 @@ CSphSEQuery::~CSphSEQuery ()
97 SafeDeleteArray ( m_sQueryBuffer );
98 SafeDeleteArray ( m_pWeights );
99 SafeDeleteArray ( m_pBuf );
100 - for ( int i=0; i<m_dOverrides.elements(); i++ )
101 + for ( int i=0; i<m_dOverrides.sphinx_elements(); i++ )
102 SafeDelete ( m_dOverrides.at(i) );
105 @@ -1789,7 +1823,7 @@ bool CSphSEQuery::ParseField ( char * sField )
106 pOverride = new CSphSEQuery::Override_t;
107 pOverride->m_sName = chop(sName);
108 pOverride->m_iType = iType;
109 - m_dOverrides.append ( pOverride );
110 + m_dOverrides.sphinx_append ( pOverride );
113 ulonglong uId = strtoull ( sId, NULL, 10 );
114 @@ -1801,8 +1835,8 @@ bool CSphSEQuery::ParseField ( char * sField )
116 tValue.m_uValue = (uint32)strtoul ( sValue, NULL, 10 );
118 - pOverride->m_dIds.append ( uId );
119 - pOverride->m_dValues.append ( tValue );
120 + pOverride->m_dIds.sphinx_append ( uId );
121 + pOverride->m_dValues.sphinx_append ( tValue );
125 @@ -1906,11 +1940,11 @@ int CSphSEQuery::BuildRequest ( char ** ppBuffer )
126 iReqSize += 8 + strlen(m_sFieldWeight[i] );
129 - for ( int i=0; i<m_dOverrides.elements(); i++ )
130 + for ( int i=0; i<m_dOverrides.sphinx_elements(); i++ )
132 CSphSEQuery::Override_t * pOverride = m_dOverrides.at(i);
133 const uint32 uSize = pOverride->m_iType==SPH_ATTR_BIGINT ? 16 : 12; // id64 + value
134 - iReqSize += strlen ( pOverride->m_sName ) + 12 + uSize*pOverride->m_dIds.elements();
135 + iReqSize += strlen ( pOverride->m_sName ) + 12 + uSize*pOverride->m_dIds.sphinx_elements();
139 @@ -2012,14 +2046,14 @@ int CSphSEQuery::BuildRequest ( char ** ppBuffer )
140 SendString ( m_sComment );
143 - SendInt ( m_dOverrides.elements() );
144 - for ( int i=0; i<m_dOverrides.elements(); i++ )
145 + SendInt ( m_dOverrides.sphinx_elements() );
146 + for ( int i=0; i<m_dOverrides.sphinx_elements(); i++ )
148 CSphSEQuery::Override_t * pOverride = m_dOverrides.at(i);
149 SendString ( pOverride->m_sName );
150 SendDword ( pOverride->m_iType );
151 - SendInt ( pOverride->m_dIds.elements() );
152 - for ( int j=0; j<pOverride->m_dIds.elements(); j++ )
153 + SendInt ( pOverride->m_dIds.sphinx_elements() );
154 + for ( int j=0; j<pOverride->m_dIds.sphinx_elements(); j++ )
156 SendUint64 ( pOverride->m_dIds.at(j) );
157 if ( pOverride->m_iType==SPH_ATTR_FLOAT )
158 @@ -2073,8 +2107,10 @@ ha_sphinx::ha_sphinx ( handlerton * hton, TABLE_ARG * table )
159 , m_dUnboundFields ( NULL )
162 + #if MYSQL_VERSION_ID < 50709
164 current_thd->variables.engine_condition_pushdown = true;
169 diff --git a/storage/sphinx/snippets_udf.cc b/storage/sphinx/snippets_udf.cc
170 index d0899e8..e9f7bc0 100644
171 --- a/storage/sphinx/snippets_udf.cc
172 +++ b/storage/sphinx/snippets_udf.cc
178 +#include <mysql_version.h>
181 +#if MYSQL_VERSION_ID>=50709
182 +#include <arpa/inet.h>
188 -#include <mysql_version.h>
190 #if MYSQL_VERSION_ID>=50515
191 #include "sql_class.h"
192 #include "sql_array.h"
194 #include "../mysql_priv.h"
198 +#if MYSQL_VERSION_ID>=50709
199 +#define in_addr_t uint32
200 +#include <winsock2.h>
204 #include <mysys_err.h>
207 @@ -90,7 +100,9 @@ void sphUnalignedWrite ( void * pPtr, const T & tVal )
209 #define Min(a,b) ((a)<(b)?(a):(b))
211 +#if !defined(_WIN32)
212 typedef unsigned int DWORD;
215 inline DWORD sphF2DW ( float f ) { union { float f; uint32 d; } u; u.f = f; return u.d; }
217 @@ -359,7 +371,7 @@ bool CSphUrl::Parse ( const char * sUrl, int iLen )
218 int CSphUrl::Connect()
220 struct sockaddr_in sin;
223 struct sockaddr_un saun;
226 @@ -426,7 +438,7 @@ int CSphUrl::Connect()
233 iSockaddrSize = sizeof(saun);
234 pSockaddr = (struct sockaddr *) &saun;