Commit 6db47606 authored by serg@serg.mylan's avatar serg@serg.mylan

Merge bk-internal:/home/bk/mysql-5.0

into serg.mylan:/usr/home/serg/Abk/mysql-5.0
parents e9b47ad3 bb885d03
...@@ -2273,7 +2273,7 @@ AC_ARG_WITH([mysqlmanager], ...@@ -2273,7 +2273,7 @@ AC_ARG_WITH([mysqlmanager],
[if test "x${withval}" != "xno"; then [if test "x${withval}" != "xno"; then
tools_dirs="$tools_dirs server-tools" tools_dirs="$tools_dirs server-tools"
fi], fi],
[if test "x${with_server}" == "xyes"; then [if test "x${with_server}" = "xyes"; then
tools_dirs="$tools_dirs server-tools" tools_dirs="$tools_dirs server-tools"
fi] fi]
) )
......
...@@ -31,7 +31,7 @@ namespace yaSSL { ...@@ -31,7 +31,7 @@ namespace yaSSL {
#ifdef MULTI_THREADED #ifdef MULTI_THREADED
#ifdef WIN32 #ifdef _WIN32
#include <windows.h> #include <windows.h>
class Mutex { class Mutex {
...@@ -50,7 +50,7 @@ namespace yaSSL { ...@@ -50,7 +50,7 @@ namespace yaSSL {
~Lock(); ~Lock();
}; };
}; };
#else // WIN32 #else // _WIN32
#include <pthread.h> #include <pthread.h>
class Mutex { class Mutex {
...@@ -71,7 +71,7 @@ namespace yaSSL { ...@@ -71,7 +71,7 @@ namespace yaSSL {
}; };
}; };
#endif // WIN32 #endif // _WIN32
#else // MULTI_THREADED (WE'RE SINGLE) #else // MULTI_THREADED (WE'RE SINGLE)
class Mutex { class Mutex {
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#include <assert.h> #include <assert.h>
#ifdef WIN32 #ifdef _WIN32
#include <winsock2.h> #include <winsock2.h>
#else #else
#include <sys/time.h> #include <sys/time.h>
...@@ -47,7 +47,7 @@ namespace yaSSL { ...@@ -47,7 +47,7 @@ namespace yaSSL {
typedef unsigned int uint; typedef unsigned int uint;
#ifdef WIN32 #ifdef _WIN32
typedef SOCKET socket_t; typedef SOCKET socket_t;
#else #else
typedef int socket_t; typedef int socket_t;
......
...@@ -31,32 +31,39 @@ ...@@ -31,32 +31,39 @@
#include <new> // placement new #include <new> // placement new
#ifdef __IBMCPP__ #ifdef __IBMCPP__
/* /*
Workaround for the lack of operator new(size_t, void*) Workaround for the lack of operator new(size_t, void*)
in IBM VA C++ 6.0 in IBM VA C++ 6.0
*/ */
struct Dummy {}; struct Dummy {};
inline void *operator new(size_t size, Dummy *d) { return (void*) d; }
typedef Dummy *yassl_pointer; inline void* operator new(size_t size, Dummy* d)
{
return static_cast<void*>(d);
}
typedef Dummy* yassl_pointer;
#else #else
typedef void *yassl_pointer; typedef void* yassl_pointer;
#endif #endif
namespace mySTL { namespace mySTL {
template <typename T, typename T2> template <typename T, typename T2>
inline void construct(T* p, const T2& value) inline void construct(T* p, const T2& value)
{ {
new ((yassl_pointer) p) T(value); new (reinterpret_cast<yassl_pointer>(p)) T(value);
} }
template <typename T> template <typename T>
inline void construct(T* p) inline void construct(T* p)
{ {
new (static_cast<void*>(p)) T(); new (reinterpret_cast<yassl_pointer>(p)) T();
} }
......
...@@ -29,7 +29,7 @@ namespace yaSSL { ...@@ -29,7 +29,7 @@ namespace yaSSL {
#ifdef MULTI_THREADED #ifdef MULTI_THREADED
#ifdef WIN32 #ifdef _WIN32
Mutex::Mutex() Mutex::Mutex()
{ {
...@@ -54,7 +54,7 @@ namespace yaSSL { ...@@ -54,7 +54,7 @@ namespace yaSSL {
LeaveCriticalSection(&mutex_.cs_); LeaveCriticalSection(&mutex_.cs_);
} }
#else // WIN32 #else // _WIN32
Mutex::Mutex() Mutex::Mutex()
{ {
...@@ -80,7 +80,7 @@ namespace yaSSL { ...@@ -80,7 +80,7 @@ namespace yaSSL {
} }
#endif // WIN32 #endif // _WIN32
#endif // MULTI_THREADED #endif // MULTI_THREADED
......
...@@ -78,8 +78,8 @@ namespace yaSSL { ...@@ -78,8 +78,8 @@ namespace yaSSL {
} }
#if defined(WIN32) || defined(__MACH__) || defined(__hpux__) #if defined(_WIN32) || defined(__MACH__) || defined(__hpux__)
typedef int socklen_t; typedef int socklen_t;
#endif #endif
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include "socket_wrapper.hpp" #include "socket_wrapper.hpp"
#ifndef WIN32 #ifndef _WIN32
#include <errno.h> #include <errno.h>
#include <netdb.h> #include <netdb.h>
#include <unistd.h> #include <unistd.h>
...@@ -36,19 +36,19 @@ ...@@ -36,19 +36,19 @@
#include <netinet/in.h> #include <netinet/in.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <string.h> #include <string.h>
#endif // WIN32 #endif // _WIN32
#ifdef __sun #ifdef __sun
#include <sys/filio.h> #include <sys/filio.h>
#endif #endif
#ifdef WIN32 #ifdef _WIN32
const int SOCKET_EINVAL = WSAEINVAL; const int SOCKET_EINVAL = WSAEINVAL;
const int SOCKET_EWOULDBLOCK = WSAEWOULDBLOCK; const int SOCKET_EWOULDBLOCK = WSAEWOULDBLOCK;
#else #else
const int SOCKET_EINVAL = EINVAL; const int SOCKET_EINVAL = EINVAL;
const int SOCKET_EWOULDBLOCK = EWOULDBLOCK; const int SOCKET_EWOULDBLOCK = EWOULDBLOCK;
#endif // WIN32 #endif // _WIN32
namespace yaSSL { namespace yaSSL {
...@@ -80,7 +80,7 @@ Socket::~Socket() ...@@ -80,7 +80,7 @@ Socket::~Socket()
void Socket::closeSocket() void Socket::closeSocket()
{ {
if (socket_ != INVALID_SOCKET) { if (socket_ != INVALID_SOCKET) {
#ifdef WIN32 #ifdef _WIN32
closesocket(socket_); closesocket(socket_);
#else #else
close(socket_); close(socket_);
...@@ -94,7 +94,7 @@ uint Socket::get_ready() const ...@@ -94,7 +94,7 @@ uint Socket::get_ready() const
{ {
unsigned long ready = 0; unsigned long ready = 0;
#ifdef WIN32 #ifdef _WIN32
ioctlsocket(socket_, FIONREAD, &ready); ioctlsocket(socket_, FIONREAD, &ready);
#else #else
ioctl(socket_, FIONREAD, &ready); ioctl(socket_, FIONREAD, &ready);
...@@ -145,7 +145,7 @@ void Socket::shutDown(int how) ...@@ -145,7 +145,7 @@ void Socket::shutDown(int how)
int Socket::get_lastError() int Socket::get_lastError()
{ {
#ifdef WIN32 #ifdef _WIN32
return WSAGetLastError(); return WSAGetLastError();
#else #else
return errno; return errno;
...@@ -155,7 +155,7 @@ int Socket::get_lastError() ...@@ -155,7 +155,7 @@ int Socket::get_lastError()
void Socket::set_lastError(int errorCode) void Socket::set_lastError(int errorCode)
{ {
#ifdef WIN32 #ifdef _WIN32
WSASetLastError(errorCode); WSASetLastError(errorCode);
#else #else
errno = errorCode; errno = errorCode;
......
...@@ -32,11 +32,11 @@ ...@@ -32,11 +32,11 @@
/* see man pages for function descriptions */ /* see man pages for function descriptions */
#include "runtime.hpp"
#include "openssl/ssl.h" #include "openssl/ssl.h"
#include "handshake.hpp" #include "handshake.hpp"
#include "yassl_int.hpp" #include "yassl_int.hpp"
#include <stdio.h> #include <stdio.h>
#include "runtime.hpp"
namespace yaSSL { namespace yaSSL {
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
namespace yaSSL { namespace yaSSL {
#ifdef WIN32 #ifdef _WIN32
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
...@@ -54,7 +54,7 @@ namespace yaSSL { ...@@ -54,7 +54,7 @@ namespace yaSSL {
return static_cast<uint>(timer()); return static_cast<uint>(timer());
} }
#else // WIN32 #else // _WIN32
#include <sys/time.h> #include <sys/time.h>
...@@ -77,5 +77,5 @@ namespace yaSSL { ...@@ -77,5 +77,5 @@ namespace yaSSL {
} }
#endif // WIN32 #endif // _WIN32
} // namespace yaSSL } // namespace yaSSL
...@@ -30,14 +30,9 @@ ...@@ -30,14 +30,9 @@
#include "types.hpp" #include "types.hpp"
#include "type_traits.hpp" #include "type_traits.hpp"
/*
namespace GCC_ABI {
extern "C" int __cxa_pure_virtual();
} */
namespace TaoCrypt {
// using GCC_ABI::__cxa_pure_virtual; namespace TaoCrypt {
// library allocation // library allocation
struct new_t {}; // TaoCrypt New type struct new_t {}; // TaoCrypt New type
...@@ -75,7 +70,7 @@ void tcArrayDelete(T* ptr) ...@@ -75,7 +70,7 @@ void tcArrayDelete(T* ptr)
// to resolve compiler generated operator delete on base classes with // to resolve compiler generated operator delete on base classes with
// virtual destructors, make sure doesn't get called // virtual destructors (when on stack), make sure doesn't get called
class virtual_base { class virtual_base {
public: public:
static void operator delete(void*) { assert(0); } static void operator delete(void*) { assert(0); }
...@@ -742,8 +737,6 @@ unsigned int BytePrecision(unsigned long value); ...@@ -742,8 +737,6 @@ unsigned int BytePrecision(unsigned long value);
unsigned int BitPrecision(unsigned long); unsigned int BitPrecision(unsigned long);
unsigned long Crop(unsigned long value, unsigned int size); unsigned long Crop(unsigned long value, unsigned int size);
void CallNewHandler();
} // namespace } // namespace
......
...@@ -42,7 +42,7 @@ public: ...@@ -42,7 +42,7 @@ public:
void GenerateSeed(byte*, word32 sz); void GenerateSeed(byte*, word32 sz);
Error GetError() const { return error_; } Error GetError() const { return error_; }
private: private:
#if defined(WIN32) #if defined(_WIN32)
#if defined(_WIN64) #if defined(_WIN64)
typedef unsigned __int64 ProviderHandle; typedef unsigned __int64 ProviderHandle;
// type HCRYPTPROV, avoid #include <windows.h> // type HCRYPTPROV, avoid #include <windows.h>
......
...@@ -80,16 +80,14 @@ typedef unsigned int word32; ...@@ -80,16 +80,14 @@ typedef unsigned int word32;
#else #else
#define TAOCRYPT_NATIVE_DWORD_AVAILABLE #define TAOCRYPT_NATIVE_DWORD_AVAILABLE
#ifdef WORD64_AVAILABLE #ifdef WORD64_AVAILABLE
#define TAOCRYPT_SLOW_WORD64 #define TAOCRYPT_SLOW_WORD64
// define this if your CPU is not64-bit to use alternative code typedef word16 hword;
// that avoids word64 typedef word32 word;
typedef word16 hword; typedef word64 dword;
typedef word32 word;
typedef word64 dword;
#else #else
typedef byte hword; typedef byte hword;
typedef word16 word; typedef word16 word;
typedef word32 dword; typedef word32 dword;
#endif #endif
#endif #endif
......
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
/* asn.cpp implements ASN1 BER, PublicKey, and x509v3 decoding /* asn.cpp implements ASN1 BER, PublicKey, and x509v3 decoding
*/ */
#include "runtime.hpp" #include "runtime.hpp"
#include "asn.hpp" #include "asn.hpp"
#include "file.hpp" #include "file.hpp"
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
/* based on Wei Dai's integer.cpp from CryptoPP */ /* based on Wei Dai's integer.cpp from CryptoPP */
#include "runtime.hpp"
#include "integer.hpp" #include "integer.hpp"
#include "modarith.hpp" #include "modarith.hpp"
#include "asn.hpp" #include "asn.hpp"
...@@ -34,6 +35,21 @@ ...@@ -34,6 +35,21 @@
#endif #endif
#if defined(_MSC_VER) && defined(_WIN64) // 64 bit X overflow intrinsic
#ifdef __ia64__
#define myUMULH __UMULH
#elif __x86_64__
#define myUMULH __umulh
#else
#error unknown 64bit windows
#endif
extern "C" word myUMULH(word, word);
#pragma intrinsic (myUMULH)
#endif
#ifdef SSE2_INTRINSICS_AVAILABLE #ifdef SSE2_INTRINSICS_AVAILABLE
#ifdef __GNUC__ #ifdef __GNUC__
#include <xmmintrin.h> #include <xmmintrin.h>
...@@ -73,16 +89,15 @@ CPP_TYPENAME AllocatorBase<T>::pointer AlignedAllocator<T>::allocate( ...@@ -73,16 +89,15 @@ CPP_TYPENAME AllocatorBase<T>::pointer AlignedAllocator<T>::allocate(
{ {
void* p; void* p;
#ifdef TAOCRYPT_MM_MALLOC_AVAILABLE #ifdef TAOCRYPT_MM_MALLOC_AVAILABLE
while (!(p = _mm_malloc(sizeof(T)*n, 16))) p = _mm_malloc(sizeof(T)*n, 16);
#elif defined(TAOCRYPT_MEMALIGN_AVAILABLE) #elif defined(TAOCRYPT_MEMALIGN_AVAILABLE)
while (!(p = memalign(16, sizeof(T)*n))) p = memalign(16, sizeof(T)*n);
#elif defined(TAOCRYPT_MALLOC_ALIGNMENT_IS_16) #elif defined(TAOCRYPT_MALLOC_ALIGNMENT_IS_16)
while (!(p = malloc(sizeof(T)*n))) p = malloc(sizeof(T)*n);
#else #else
while (!(p = (byte *)malloc(sizeof(T)*n + 8))) p = (byte *)malloc(sizeof(T)*n + 8);
// assume malloc alignment is at least 8 // assume malloc alignment is at least 8
#endif #endif
CallNewHandler();
#ifdef TAOCRYPT_NO_ALIGNED_ALLOC #ifdef TAOCRYPT_NO_ALIGNED_ALLOC
assert(m_pBlock == 0); assert(m_pBlock == 0);
...@@ -156,8 +171,14 @@ DWord() {} ...@@ -156,8 +171,14 @@ DWord() {}
static DWord Multiply(word a, word b) static DWord Multiply(word a, word b)
{ {
DWord r; DWord r;
#ifdef TAOCRYPT_NATIVE_DWORD_AVAILABLE #ifdef TAOCRYPT_NATIVE_DWORD_AVAILABLE
r.whole_ = (dword)a * b; r.whole_ = (dword)a * b;
#elif defined(_MSC_VER)
r.halfs_.low = a*b;
r.halfs_.high = myUMULH(a,b);
#elif defined(__alpha__) #elif defined(__alpha__)
r.halfs_.low = a*b; r.halfs_.low = a*b;
#ifdef __GNUC__ #ifdef __GNUC__
...@@ -166,22 +187,27 @@ DWord() {} ...@@ -166,22 +187,27 @@ DWord() {}
#elif defined(__DECCXX) #elif defined(__DECCXX)
r.halfs_.high = asm("umulh %a0, %a1, %v0", a, b); r.halfs_.high = asm("umulh %a0, %a1, %v0", a, b);
#else #else
#error can not implement multiply overflow #error unknown alpha compiler
#endif #endif
#elif defined(__ia64__) #elif defined(__ia64__)
r.halfs_.low = a*b; r.halfs_.low = a*b;
__asm__("xmpy.hu %0=%1,%2" : "=f" (r.halfs_.high) __asm__("xmpy.hu %0=%1,%2" : "=f" (r.halfs_.high)
: "f" (a), "f" (b)); : "f" (a), "f" (b));
#elif defined(_ARCH_PPC64) #elif defined(_ARCH_PPC64)
r.halfs_.low = a*b; r.halfs_.low = a*b;
__asm__("mulhdu %0,%1,%2" : "=r" (r.halfs_.high) __asm__("mulhdu %0,%1,%2" : "=r" (r.halfs_.high)
: "r" (a), "r" (b) : "cc"); : "r" (a), "r" (b) : "cc");
#elif defined(__x86_64__) #elif defined(__x86_64__)
__asm__("mulq %3" : "=d" (r.halfs_.high), "=a" (r.halfs_.low) : __asm__("mulq %3" : "=d" (r.halfs_.high), "=a" (r.halfs_.low) :
"a" (a), "rm" (b) : "cc"); "a" (a), "rm" (b) : "cc");
#elif defined(__mips64) #elif defined(__mips64)
__asm__("dmultu %2,%3" : "=h" (r.halfs_.high), "=l" (r.halfs_.low) __asm__("dmultu %2,%3" : "=h" (r.halfs_.high), "=l" (r.halfs_.low)
: "r" (a), "r" (b)); : "r" (a), "r" (b));
#elif defined(_M_IX86) #elif defined(_M_IX86)
// for testing // for testing
word64 t = (word64)a * b; word64 t = (word64)a * b;
...@@ -190,6 +216,7 @@ DWord() {} ...@@ -190,6 +216,7 @@ DWord() {}
#else #else
#error can not implement DWord #error can not implement DWord
#endif #endif
return r; return r;
} }
...@@ -3936,5 +3963,6 @@ template hword DivideThreeWordsByTwo<hword, Word>(hword*, hword, hword, Word*); ...@@ -3936,5 +3963,6 @@ template hword DivideThreeWordsByTwo<hword, Word>(hword*, hword, hword, Word*);
template word DivideThreeWordsByTwo<word, DWord>(word*, word, word, DWord*); template word DivideThreeWordsByTwo<word, DWord>(word*, word, word, DWord*);
#endif #endif
} // namespace } // namespace
...@@ -64,10 +64,6 @@ void* operator new[](size_t sz); ...@@ -64,10 +64,6 @@ void* operator new[](size_t sz);
void operator delete[](void* ptr); void operator delete[](void* ptr);
*/ */
/* namespace GCC_ABI {
extern "C" int __cxa_pure_virtual() { assert(0); return 0; }
} */
namespace TaoCrypt { namespace TaoCrypt {
...@@ -135,17 +131,5 @@ unsigned long Crop(unsigned long value, unsigned int size) ...@@ -135,17 +131,5 @@ unsigned long Crop(unsigned long value, unsigned int size)
} }
#if !(defined(_MSC_VER) && (_MSC_VER < 1300)) && \
!(defined(__HP_aCC) && (__HP_aCC <= 36300))
using std::new_handler;
using std::set_new_handler;
#endif
void CallNewHandler()
{
abort();
}
} // namespace } // namespace
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
#include "random.hpp" #include "random.hpp"
#if defined(WIN32) #if defined(_WIN32)
#define _WIN32_WINNT 0x0400 #define _WIN32_WINNT 0x0400
#include <windows.h> #include <windows.h>
#include <wincrypt.h> #include <wincrypt.h>
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#endif // WIN32 #endif // _WIN32
namespace TaoCrypt { namespace TaoCrypt {
...@@ -64,7 +64,7 @@ byte RandomNumberGenerator::GenerateByte() ...@@ -64,7 +64,7 @@ byte RandomNumberGenerator::GenerateByte()
} }
#if defined(WIN32) #if defined(_WIN32)
OS_Seed::OS_Seed() OS_Seed::OS_Seed()
{ {
...@@ -87,7 +87,7 @@ void OS_Seed::GenerateSeed(byte* output, word32 sz) ...@@ -87,7 +87,7 @@ void OS_Seed::GenerateSeed(byte* output, word32 sz)
} }
#else // WIN32 #else // _WIN32
OS_Seed::OS_Seed() OS_Seed::OS_Seed()
...@@ -122,7 +122,7 @@ void OS_Seed::GenerateSeed(byte* output, word32 sz) ...@@ -122,7 +122,7 @@ void OS_Seed::GenerateSeed(byte* output, word32 sz)
} }
} }
#endif // WIN32 #endif // _WIN32
......
...@@ -823,3 +823,15 @@ GRANT SELECT ON *.* TO 'user4'@'localhost' ...@@ -823,3 +823,15 @@ GRANT SELECT ON *.* TO 'user4'@'localhost'
drop user user1@localhost, user2@localhost, user3@localhost, user4@localhost; drop user user1@localhost, user2@localhost, user3@localhost, user4@localhost;
use test; use test;
drop database mysqltest; drop database mysqltest;
create procedure p1 () modifies sql data set @a = 5;
create procedure p2 () set @a = 5;
select sql_data_access from information_schema.routines
where specific_name like 'p%';
sql_data_access
MODIFIES SQL DATA
CONTAINS SQL
drop procedure p1;
drop procedure p2;
show create database information_schema;
Database Create Database
information_schema CREATE DATABASE `information_schema` /*!40100 DEFAULT CHARACTER SET utf8 */
...@@ -2699,3 +2699,6 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -2699,3 +2699,6 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 1 SIMPLE t2 ALL NULL NULL NULL NULL 3
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using where 1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using where
DROP TABLE t1,t2; DROP TABLE t1,t2;
select x'10' + 0, X'10' + 0, b'10' + 0, B'10' + 0;
x'10' + 0 X'10' + 0 b'10' + 0 B'10' + 0
16 16 2 2
...@@ -542,3 +542,18 @@ connection default; ...@@ -542,3 +542,18 @@ connection default;
drop user user1@localhost, user2@localhost, user3@localhost, user4@localhost; drop user user1@localhost, user2@localhost, user3@localhost, user4@localhost;
use test; use test;
drop database mysqltest; drop database mysqltest;
#
# Bug #11055 information_schema: routines.sql_data_access has wrong value
#
create procedure p1 () modifies sql data set @a = 5;
create procedure p2 () set @a = 5;
select sql_data_access from information_schema.routines
where specific_name like 'p%';
drop procedure p1;
drop procedure p2;
#
# Bug #9434 SHOW CREATE DATABASE information_schema;
#
show create database information_schema;
...@@ -2271,3 +2271,8 @@ EXPLAIN SELECT t1.a FROM t1 INNER JOIN t2 ON t1.a=t2.a; ...@@ -2271,3 +2271,8 @@ EXPLAIN SELECT t1.a FROM t1 INNER JOIN t2 ON t1.a=t2.a;
DROP TABLE t1,t2; DROP TABLE t1,t2;
#
# Bug #10650
#
select x'10' + 0, X'10' + 0, b'10' + 0, B'10' + 0;
...@@ -97,7 +97,7 @@ static my_bool init_state_maps(CHARSET_INFO *cs) ...@@ -97,7 +97,7 @@ static my_bool init_state_maps(CHARSET_INFO *cs)
/* Special handling of hex and binary strings */ /* Special handling of hex and binary strings */
state_map[(uchar)'x']= state_map[(uchar)'X']= (uchar) MY_LEX_IDENT_OR_HEX; state_map[(uchar)'x']= state_map[(uchar)'X']= (uchar) MY_LEX_IDENT_OR_HEX;
state_map[(uchar)'b']= state_map[(uchar)'b']= (uchar) MY_LEX_IDENT_OR_BIN; state_map[(uchar)'b']= state_map[(uchar)'B']= (uchar) MY_LEX_IDENT_OR_BIN;
state_map[(uchar)'n']= state_map[(uchar)'N']= (uchar) MY_LEX_IDENT_OR_NCHAR; state_map[(uchar)'n']= state_map[(uchar)'N']= (uchar) MY_LEX_IDENT_OR_NCHAR;
return 0; return 0;
} }
......
...@@ -139,8 +139,6 @@ ConfigRetriever::getConfig(NdbMgmHandle m_handle){ ...@@ -139,8 +139,6 @@ ConfigRetriever::getConfig(NdbMgmHandle m_handle){
return 0; return 0;
} }
ndb_mgm_disconnect(m_handle);
return conf; return conf;
} }
......
...@@ -1208,7 +1208,7 @@ TransporterRegistry::report_connect(NodeId node_id) ...@@ -1208,7 +1208,7 @@ TransporterRegistry::report_connect(NodeId node_id)
void void
TransporterRegistry::report_disconnect(NodeId node_id, int errnum) TransporterRegistry::report_disconnect(NodeId node_id, int errnum)
{ {
DBUG_ENTER("TransporterRegistry::report_connect"); DBUG_ENTER("TransporterRegistry::report_disconnect");
DBUG_PRINT("info",("performStates[%d]=DISCONNECTED",node_id)); DBUG_PRINT("info",("performStates[%d]=DISCONNECTED",node_id));
performStates[node_id] = DISCONNECTED; performStates[node_id] = DISCONNECTED;
reportDisconnect(callbackObj, node_id, errnum); reportDisconnect(callbackObj, node_id, errnum);
......
...@@ -101,6 +101,12 @@ int main(int argc, char** argv) ...@@ -101,6 +101,12 @@ int main(int argc, char** argv)
*/ */
catchsigs(true); catchsigs(true);
/**
* We no longer need the mgm connection in this process
* (as we are the angel, not ndb)
*/
theConfig->closeConfiguration();
int status = 0; int status = 0;
while(waitpid(child, &status, 0) != child); while(waitpid(child, &status, 0) != child);
if(WIFEXITED(status)){ if(WIFEXITED(status)){
......
...@@ -114,6 +114,14 @@ enum enum_sp_data_access ...@@ -114,6 +114,14 @@ enum enum_sp_data_access
SP_MODIFIES_SQL_DATA SP_MODIFIES_SQL_DATA
}; };
const LEX_STRING sp_data_access_name[]=
{
{ (char*) STRING_WITH_LEN("") },
{ (char*) STRING_WITH_LEN("CONTAINS SQL") },
{ (char*) STRING_WITH_LEN("NO SQL") },
{ (char*) STRING_WITH_LEN("READS SQL DATA") },
{ (char*) STRING_WITH_LEN("MODIFIES SQL DATA") }
};
#define DERIVED_SUBQUERY 1 #define DERIVED_SUBQUERY 1
#define DERIVED_VIEW 2 #define DERIVED_VIEW 2
......
...@@ -448,25 +448,32 @@ bool mysqld_show_create_db(THD *thd, char *dbname, ...@@ -448,25 +448,32 @@ bool mysqld_show_create_db(THD *thd, char *dbname,
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
} }
#endif #endif
if (!my_strcasecmp(system_charset_info, dbname,
(void) sprintf(path,"%s/%s",mysql_data_home, dbname); information_schema_name.str))
length=unpack_dirname(path,path); // Convert if not unix
found_libchar= 0;
if (length && path[length-1] == FN_LIBCHAR)
{ {
found_libchar= 1; dbname= information_schema_name.str;
path[length-1]=0; // remove ending '\' create.default_table_charset= system_charset_info;
} }
if (access(path,F_OK)) else
{ {
my_error(ER_BAD_DB_ERROR, MYF(0), dbname); (void) sprintf(path,"%s/%s",mysql_data_home, dbname);
DBUG_RETURN(TRUE); length=unpack_dirname(path,path); // Convert if not unix
found_libchar= 0;
if (length && path[length-1] == FN_LIBCHAR)
{
found_libchar= 1;
path[length-1]=0; // remove ending '\'
}
if (access(path,F_OK))
{
my_error(ER_BAD_DB_ERROR, MYF(0), dbname);
DBUG_RETURN(TRUE);
}
if (found_libchar)
path[length-1]= FN_LIBCHAR;
strmov(path+length, MY_DB_OPT_FILE);
load_db_opt(thd, path, &create);
} }
if (found_libchar)
path[length-1]= FN_LIBCHAR;
strmov(path+length, MY_DB_OPT_FILE);
load_db_opt(thd, path, &create);
List<Item> field_list; List<Item> field_list;
field_list.push_back(new Item_empty_string("Database",NAME_LEN)); field_list.push_back(new Item_empty_string("Database",NAME_LEN));
field_list.push_back(new Item_empty_string("Create Database",1024)); field_list.push_back(new Item_empty_string("Create Database",1024));
...@@ -2645,6 +2652,7 @@ bool store_schema_proc(THD *thd, TABLE *table, TABLE *proc_table, ...@@ -2645,6 +2652,7 @@ bool store_schema_proc(THD *thd, TABLE *table, TABLE *proc_table,
restore_record(table, s->default_values); restore_record(table, s->default_values);
if (!wild || !wild[0] || !wild_compare(sp_name, wild, 0)) if (!wild || !wild[0] || !wild_compare(sp_name, wild, 0))
{ {
int enum_idx= proc_table->field[5]->val_int();
table->field[3]->store(sp_name, strlen(sp_name), cs); table->field[3]->store(sp_name, strlen(sp_name), cs);
get_field(thd->mem_root, proc_table->field[3], &tmp_string); get_field(thd->mem_root, proc_table->field[3], &tmp_string);
table->field[0]->store(tmp_string.ptr(), tmp_string.length(), cs); table->field[0]->store(tmp_string.ptr(), tmp_string.length(), cs);
...@@ -2666,10 +2674,8 @@ bool store_schema_proc(THD *thd, TABLE *table, TABLE *proc_table, ...@@ -2666,10 +2674,8 @@ bool store_schema_proc(THD *thd, TABLE *table, TABLE *proc_table,
table->field[10]->store("SQL", 3, cs); table->field[10]->store("SQL", 3, cs);
get_field(thd->mem_root, proc_table->field[6], &tmp_string); get_field(thd->mem_root, proc_table->field[6], &tmp_string);
table->field[11]->store(tmp_string.ptr(), tmp_string.length(), cs); table->field[11]->store(tmp_string.ptr(), tmp_string.length(), cs);
if (proc_table->field[5]->val_int() == SP_CONTAINS_SQL) table->field[12]->store(sp_data_access_name[enum_idx].str,
{ sp_data_access_name[enum_idx].length , cs);
table->field[12]->store("CONTAINS SQL", 12 , cs);
}
get_field(thd->mem_root, proc_table->field[7], &tmp_string); get_field(thd->mem_root, proc_table->field[7], &tmp_string);
table->field[14]->store(tmp_string.ptr(), tmp_string.length(), cs); table->field[14]->store(tmp_string.ptr(), tmp_string.length(), cs);
bzero((char *)&time, sizeof(time)); bzero((char *)&time, sizeof(time));
......
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
struct st_table; struct st_table;
class Field; class Field;
#define STRING_WITH_LEN(X) X, (sizeof(X)-1)
typedef struct st_lex_string typedef struct st_lex_string
{ {
char *str; char *str;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment