]> TLD Linux GIT Repositories - packages/mysql.git/blob - mysql-5.7-sphinx.patch
- keep common dirs for mysqlrouter in mysql-common, fix /var/{lib,log} dirs
[packages/mysql.git] / mysql-5.7-sphinx.patch
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
5
6 ---
7  mysqlse/ha_sphinx.cc    | 66 ++++++++++++++++++++++++++++++++++++++-----------
8  mysqlse/snippets_udf.cc | 22 +++++++++++++----
9  2 files changed, 68 insertions(+), 20 deletions(-)
10
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
15 @@ -34,13 +34,37 @@
16  #include "../mysql_priv.h"
17  #endif
18  
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
24 +#if defined(_WIN32)
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>
32 +#endif
33 +#else
34 +#define sphinx_append append
35 +#define sphinx_array Dynamic_array
36 +#define sphinx_elements elements
37 +#endif
38 +
39  #include <mysys_err.h>
40  #include <my_sys.h>
41  #include <mysql.h> // include client for INSERT table (sort of redoing federated..)
42  
43  #ifndef __WIN__
44         // UNIX-specific
45 -       #include <my_net.h>
46 +       #if MYSQL_VERSION_ID>=50709
47 +               #include <arpa/inet.h>
48 +       #else
49 +               #include <my_net.h>
50 +       #endif
51         #include <netdb.h>
52         #include <sys/un.h>
53  
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; }
57  
58 +#if MYSQL_VERSION_ID>=50709
59 +#ifdef __WIN__
60 +typedef native_mutex_t pthread_mutex_t;
61 +#endif
62 +#endif
63 +
64  //////////////////////////////////////////////////////////////////////////////
65  
66  /// per-table structure that will be shared among all open Sphinx SE handlers
67 @@ -602,10 +632,10 @@ struct CSphSEQuery
68                 };
69                 char *                                          m_sName; ///< points to query buffer
70                 int                                                     m_iType;
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;
75         };
76 -       Dynamic_array<Override_t *> m_dOverrides;
77 +       sphinx_array<Override_t *> m_dOverrides;
78  
79  public:
80         char                    m_sParseError[256];
81 @@ -733,9 +763,13 @@ static int sphinx_init_func ( void * p )
82         {
83                 sphinx_init = 1;
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 );
88 +               #else
89                 sphinx_hash_init ( &sphinx_open_tables, system_charset_info, 32, 0, 0,
90                         sphinx_get_key, 0, 0 );
91 -
92 +               #endif
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) );
103         SPH_VOID_RET();
104  }
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 );
111                         }
112  
113                         ulonglong uId = strtoull ( sId, NULL, 10 );
114 @@ -1801,8 +1835,8 @@ bool CSphSEQuery::ParseField ( char * sField )
115                         else
116                                 tValue.m_uValue = (uint32)strtoul ( sValue, NULL, 10 );
117  
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 );
122                 }
123  
124                 if ( !pOverride )
125 @@ -1906,11 +1940,11 @@ int CSphSEQuery::BuildRequest ( char ** ppBuffer )
126                 iReqSize += 8 + strlen(m_sFieldWeight[i] );
127         // overrides
128         iReqSize += 4;
129 -       for ( int i=0; i<m_dOverrides.elements(); i++ )
130 +       for ( int i=0; i<m_dOverrides.sphinx_elements(); i++ )
131         {
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();
136         }
137         // select
138         iReqSize += 4;
139 @@ -2012,14 +2046,14 @@ int CSphSEQuery::BuildRequest ( char ** ppBuffer )
140         SendString ( m_sComment );
141  
142         // overrides
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++ )
147         {
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++ )
155                 {
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 )
160  {
161         SPH_ENTER_METHOD();
162 +       #if MYSQL_VERSION_ID < 50709
163         if ( current_thd )
164                 current_thd->variables.engine_condition_pushdown = true;
165 +       #endif
166         SPH_VOID_RET();
167  }
168  
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
173 @@ -17,13 +17,16 @@
174  #include <string.h>
175  #include <assert.h>
176  
177 -#ifndef __WIN__
178 +#include <mysql_version.h>
179 +
180 +#ifndef _WIN32
181 +#if MYSQL_VERSION_ID>=50709
182 +#include <arpa/inet.h>
183 +#endif
184  #include <sys/un.h>
185  #include <netdb.h>
186  #endif
187  
188 -#include <mysql_version.h>
189 -
190  #if MYSQL_VERSION_ID>=50515
191  #include "sql_class.h"
192  #include "sql_array.h"
193 @@ -34,6 +37,13 @@
194  #include "../mysql_priv.h"
195  #endif
196  
197 +#ifdef _WIN32
198 +#if MYSQL_VERSION_ID>=50709
199 +#define in_addr_t uint32
200 +#include <winsock2.h>
201 +#endif
202 +#endif
203 +
204  #include <mysys_err.h>
205  #include <my_sys.h>
206  
207 @@ -90,7 +100,9 @@ void sphUnalignedWrite ( void * pPtr, const T & tVal )
208  
209  #define Min(a,b) ((a)<(b)?(a):(b))
210  
211 +#if !defined(_WIN32)
212  typedef unsigned int DWORD;
213 +#endif
214  
215  inline DWORD sphF2DW ( float f ) { union { float f; uint32 d; } u; u.f = f; return u.d; }
216  
217 @@ -359,7 +371,7 @@ bool CSphUrl::Parse ( const char * sUrl, int iLen )
218  int CSphUrl::Connect()
219  {
220         struct sockaddr_in sin;
221 -#ifndef __WIN__
222 +#ifndef _WIN32
223         struct sockaddr_un saun;
224  #endif
225  
226 @@ -426,7 +438,7 @@ int CSphUrl::Connect()
227                 }
228         } else
229         {
230 -#ifndef __WIN__
231 +#ifndef _WIN32
232                 iDomain = AF_UNIX;
233                 iSockaddrSize = sizeof(saun);
234                 pSockaddr = (struct sockaddr *) &saun;