]> git.pld-linux.org Git - packages/mysql.git/blame - mysql-5.7-sphinx.patch
use system libevent
[packages/mysql.git] / mysql-5.7-sphinx.patch
CommitLineData
416b5906
AM
1From d4273a352d22e8c5e924bc4fd094fc7d9f8e047f Mon Sep 17 00:00:00 2001
2From: riden <denis.doronin@gmail.com>
3Date: Thu, 26 Nov 2015 03:51:40 +0200
4Subject: [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
11diff --git a/storage/sphinx/ha_sphinx.cc b/storage/sphinx/ha_sphinx.cc
12index 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
169diff --git a/storage/sphinx/snippets_udf.cc b/storage/sphinx/snippets_udf.cc
170index 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;
This page took 0.070113 seconds and 4 git commands to generate.