]>
Commit | Line | Data |
---|---|---|
416b5906 AM |
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; |