mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
Merge bk-internal:/home/bk/mysql-5.0
into serg.mylan:/usr/home/serg/Abk/mysql-5.0 ndb/src/common/mgmcommon/ConfigRetriever.cpp: Auto merged
This commit is contained in:
@@ -2273,7 +2273,7 @@ AC_ARG_WITH([mysqlmanager],
|
||||
[if test "x${withval}" != "xno"; then
|
||||
tools_dirs="$tools_dirs server-tools"
|
||||
fi],
|
||||
[if test "x${with_server}" == "xyes"; then
|
||||
[if test "x${with_server}" = "xyes"; then
|
||||
tools_dirs="$tools_dirs server-tools"
|
||||
fi]
|
||||
)
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace yaSSL {
|
||||
|
||||
|
||||
#ifdef MULTI_THREADED
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
|
||||
class Mutex {
|
||||
@@ -50,7 +50,7 @@ namespace yaSSL {
|
||||
~Lock();
|
||||
};
|
||||
};
|
||||
#else // WIN32
|
||||
#else // _WIN32
|
||||
#include <pthread.h>
|
||||
|
||||
class Mutex {
|
||||
@@ -71,7 +71,7 @@ namespace yaSSL {
|
||||
};
|
||||
};
|
||||
|
||||
#endif // WIN32
|
||||
#endif // _WIN32
|
||||
#else // MULTI_THREADED (WE'RE SINGLE)
|
||||
|
||||
class Mutex {
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
#include <winsock2.h>
|
||||
#else
|
||||
#include <sys/time.h>
|
||||
@@ -47,7 +47,7 @@ namespace yaSSL {
|
||||
|
||||
typedef unsigned int uint;
|
||||
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
typedef SOCKET socket_t;
|
||||
#else
|
||||
typedef int socket_t;
|
||||
|
||||
@@ -31,32 +31,39 @@
|
||||
#include <new> // placement new
|
||||
|
||||
|
||||
|
||||
#ifdef __IBMCPP__
|
||||
/*
|
||||
Workaround for the lack of operator new(size_t, void*)
|
||||
in IBM VA C++ 6.0
|
||||
Workaround for the lack of operator new(size_t, void*)
|
||||
in IBM VA C++ 6.0
|
||||
*/
|
||||
struct Dummy {};
|
||||
inline void *operator new(size_t size, Dummy *d) { return (void*) d; }
|
||||
typedef Dummy *yassl_pointer;
|
||||
struct Dummy {};
|
||||
|
||||
inline void* operator new(size_t size, Dummy* d)
|
||||
{
|
||||
return static_cast<void*>(d);
|
||||
}
|
||||
|
||||
typedef Dummy* yassl_pointer;
|
||||
#else
|
||||
typedef void *yassl_pointer;
|
||||
typedef void* yassl_pointer;
|
||||
#endif
|
||||
|
||||
|
||||
namespace mySTL {
|
||||
|
||||
|
||||
template <typename T, typename T2>
|
||||
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>
|
||||
inline void construct(T* p)
|
||||
{
|
||||
new (static_cast<void*>(p)) T();
|
||||
new (reinterpret_cast<yassl_pointer>(p)) T();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace yaSSL {
|
||||
|
||||
|
||||
#ifdef MULTI_THREADED
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
|
||||
Mutex::Mutex()
|
||||
{
|
||||
@@ -54,7 +54,7 @@ namespace yaSSL {
|
||||
LeaveCriticalSection(&mutex_.cs_);
|
||||
}
|
||||
|
||||
#else // WIN32
|
||||
#else // _WIN32
|
||||
|
||||
Mutex::Mutex()
|
||||
{
|
||||
@@ -80,7 +80,7 @@ namespace yaSSL {
|
||||
}
|
||||
|
||||
|
||||
#endif // WIN32
|
||||
#endif // _WIN32
|
||||
#endif // MULTI_THREADED
|
||||
|
||||
|
||||
|
||||
@@ -78,8 +78,8 @@ namespace yaSSL {
|
||||
}
|
||||
|
||||
|
||||
#if defined(WIN32) || defined(__MACH__) || defined(__hpux__)
|
||||
typedef int socklen_t;
|
||||
#if defined(_WIN32) || defined(__MACH__) || defined(__hpux__)
|
||||
typedef int socklen_t;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
#include "socket_wrapper.hpp"
|
||||
|
||||
#ifndef WIN32
|
||||
#ifndef _WIN32
|
||||
#include <errno.h>
|
||||
#include <netdb.h>
|
||||
#include <unistd.h>
|
||||
@@ -36,19 +36,19 @@
|
||||
#include <netinet/in.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <string.h>
|
||||
#endif // WIN32
|
||||
#endif // _WIN32
|
||||
|
||||
#ifdef __sun
|
||||
#include <sys/filio.h>
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
const int SOCKET_EINVAL = WSAEINVAL;
|
||||
const int SOCKET_EWOULDBLOCK = WSAEWOULDBLOCK;
|
||||
#else
|
||||
const int SOCKET_EINVAL = EINVAL;
|
||||
const int SOCKET_EWOULDBLOCK = EWOULDBLOCK;
|
||||
#endif // WIN32
|
||||
#endif // _WIN32
|
||||
|
||||
|
||||
namespace yaSSL {
|
||||
@@ -80,7 +80,7 @@ Socket::~Socket()
|
||||
void Socket::closeSocket()
|
||||
{
|
||||
if (socket_ != INVALID_SOCKET) {
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
closesocket(socket_);
|
||||
#else
|
||||
close(socket_);
|
||||
@@ -94,7 +94,7 @@ uint Socket::get_ready() const
|
||||
{
|
||||
unsigned long ready = 0;
|
||||
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
ioctlsocket(socket_, FIONREAD, &ready);
|
||||
#else
|
||||
ioctl(socket_, FIONREAD, &ready);
|
||||
@@ -145,7 +145,7 @@ void Socket::shutDown(int how)
|
||||
|
||||
int Socket::get_lastError()
|
||||
{
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
return WSAGetLastError();
|
||||
#else
|
||||
return errno;
|
||||
@@ -155,7 +155,7 @@ int Socket::get_lastError()
|
||||
|
||||
void Socket::set_lastError(int errorCode)
|
||||
{
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
WSASetLastError(errorCode);
|
||||
#else
|
||||
errno = errorCode;
|
||||
|
||||
@@ -32,11 +32,11 @@
|
||||
|
||||
/* see man pages for function descriptions */
|
||||
|
||||
#include "runtime.hpp"
|
||||
#include "openssl/ssl.h"
|
||||
#include "handshake.hpp"
|
||||
#include "yassl_int.hpp"
|
||||
#include <stdio.h>
|
||||
#include "runtime.hpp"
|
||||
|
||||
|
||||
namespace yaSSL {
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
namespace yaSSL {
|
||||
|
||||
#ifdef WIN32
|
||||
#ifdef _WIN32
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
@@ -54,7 +54,7 @@ namespace yaSSL {
|
||||
return static_cast<uint>(timer());
|
||||
}
|
||||
|
||||
#else // WIN32
|
||||
#else // _WIN32
|
||||
|
||||
#include <sys/time.h>
|
||||
|
||||
@@ -77,5 +77,5 @@ namespace yaSSL {
|
||||
}
|
||||
|
||||
|
||||
#endif // WIN32
|
||||
#endif // _WIN32
|
||||
} // namespace yaSSL
|
||||
|
||||
@@ -30,15 +30,10 @@
|
||||
#include "types.hpp"
|
||||
#include "type_traits.hpp"
|
||||
|
||||
/*
|
||||
namespace GCC_ABI {
|
||||
extern "C" int __cxa_pure_virtual();
|
||||
} */
|
||||
|
||||
|
||||
namespace TaoCrypt {
|
||||
|
||||
// using GCC_ABI::__cxa_pure_virtual;
|
||||
|
||||
// library allocation
|
||||
struct new_t {}; // TaoCrypt New type
|
||||
extern new_t tc; // pass in parameter
|
||||
@@ -75,7 +70,7 @@ void tcArrayDelete(T* ptr)
|
||||
|
||||
|
||||
// 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 {
|
||||
public:
|
||||
static void operator delete(void*) { assert(0); }
|
||||
@@ -742,8 +737,6 @@ unsigned int BytePrecision(unsigned long value);
|
||||
unsigned int BitPrecision(unsigned long);
|
||||
unsigned long Crop(unsigned long value, unsigned int size);
|
||||
|
||||
void CallNewHandler();
|
||||
|
||||
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -42,7 +42,7 @@ public:
|
||||
void GenerateSeed(byte*, word32 sz);
|
||||
Error GetError() const { return error_; }
|
||||
private:
|
||||
#if defined(WIN32)
|
||||
#if defined(_WIN32)
|
||||
#if defined(_WIN64)
|
||||
typedef unsigned __int64 ProviderHandle;
|
||||
// type HCRYPTPROV, avoid #include <windows.h>
|
||||
|
||||
@@ -80,16 +80,14 @@ typedef unsigned int word32;
|
||||
#else
|
||||
#define TAOCRYPT_NATIVE_DWORD_AVAILABLE
|
||||
#ifdef WORD64_AVAILABLE
|
||||
#define TAOCRYPT_SLOW_WORD64
|
||||
// define this if your CPU is not64-bit to use alternative code
|
||||
// that avoids word64
|
||||
typedef word16 hword;
|
||||
typedef word32 word;
|
||||
typedef word64 dword;
|
||||
#define TAOCRYPT_SLOW_WORD64
|
||||
typedef word16 hword;
|
||||
typedef word32 word;
|
||||
typedef word64 dword;
|
||||
#else
|
||||
typedef byte hword;
|
||||
typedef word16 word;
|
||||
typedef word32 dword;
|
||||
typedef byte hword;
|
||||
typedef word16 word;
|
||||
typedef word32 dword;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
/* asn.cpp implements ASN1 BER, PublicKey, and x509v3 decoding
|
||||
*/
|
||||
|
||||
|
||||
#include "runtime.hpp"
|
||||
#include "asn.hpp"
|
||||
#include "file.hpp"
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
/* based on Wei Dai's integer.cpp from CryptoPP */
|
||||
|
||||
#include "runtime.hpp"
|
||||
#include "integer.hpp"
|
||||
#include "modarith.hpp"
|
||||
#include "asn.hpp"
|
||||
@@ -34,6 +35,21 @@
|
||||
#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 __GNUC__
|
||||
#include <xmmintrin.h>
|
||||
@@ -73,16 +89,15 @@ CPP_TYPENAME AllocatorBase<T>::pointer AlignedAllocator<T>::allocate(
|
||||
{
|
||||
void* p;
|
||||
#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)
|
||||
while (!(p = memalign(16, sizeof(T)*n)))
|
||||
p = memalign(16, sizeof(T)*n);
|
||||
#elif defined(TAOCRYPT_MALLOC_ALIGNMENT_IS_16)
|
||||
while (!(p = malloc(sizeof(T)*n)))
|
||||
p = malloc(sizeof(T)*n);
|
||||
#else
|
||||
while (!(p = (byte *)malloc(sizeof(T)*n + 8)))
|
||||
p = (byte *)malloc(sizeof(T)*n + 8);
|
||||
// assume malloc alignment is at least 8
|
||||
#endif
|
||||
CallNewHandler();
|
||||
|
||||
#ifdef TAOCRYPT_NO_ALIGNED_ALLOC
|
||||
assert(m_pBlock == 0);
|
||||
@@ -156,8 +171,14 @@ DWord() {}
|
||||
static DWord Multiply(word a, word b)
|
||||
{
|
||||
DWord r;
|
||||
|
||||
#ifdef TAOCRYPT_NATIVE_DWORD_AVAILABLE
|
||||
r.whole_ = (dword)a * b;
|
||||
|
||||
#elif defined(_MSC_VER)
|
||||
r.halfs_.low = a*b;
|
||||
r.halfs_.high = myUMULH(a,b);
|
||||
|
||||
#elif defined(__alpha__)
|
||||
r.halfs_.low = a*b;
|
||||
#ifdef __GNUC__
|
||||
@@ -166,22 +187,27 @@ DWord() {}
|
||||
#elif defined(__DECCXX)
|
||||
r.halfs_.high = asm("umulh %a0, %a1, %v0", a, b);
|
||||
#else
|
||||
#error can not implement multiply overflow
|
||||
#error unknown alpha compiler
|
||||
#endif
|
||||
|
||||
#elif defined(__ia64__)
|
||||
r.halfs_.low = a*b;
|
||||
__asm__("xmpy.hu %0=%1,%2" : "=f" (r.halfs_.high)
|
||||
: "f" (a), "f" (b));
|
||||
|
||||
#elif defined(_ARCH_PPC64)
|
||||
r.halfs_.low = a*b;
|
||||
__asm__("mulhdu %0,%1,%2" : "=r" (r.halfs_.high)
|
||||
: "r" (a), "r" (b) : "cc");
|
||||
|
||||
#elif defined(__x86_64__)
|
||||
__asm__("mulq %3" : "=d" (r.halfs_.high), "=a" (r.halfs_.low) :
|
||||
"a" (a), "rm" (b) : "cc");
|
||||
|
||||
#elif defined(__mips64)
|
||||
__asm__("dmultu %2,%3" : "=h" (r.halfs_.high), "=l" (r.halfs_.low)
|
||||
: "r" (a), "r" (b));
|
||||
|
||||
#elif defined(_M_IX86)
|
||||
// for testing
|
||||
word64 t = (word64)a * b;
|
||||
@@ -190,6 +216,7 @@ DWord() {}
|
||||
#else
|
||||
#error can not implement DWord
|
||||
#endif
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -3936,5 +3963,6 @@ template hword DivideThreeWordsByTwo<hword, Word>(hword*, hword, hword, Word*);
|
||||
template word DivideThreeWordsByTwo<word, DWord>(word*, word, word, DWord*);
|
||||
#endif
|
||||
|
||||
|
||||
} // namespace
|
||||
|
||||
|
||||
@@ -64,10 +64,6 @@ void* operator new[](size_t sz);
|
||||
void operator delete[](void* ptr);
|
||||
*/
|
||||
|
||||
/* namespace GCC_ABI {
|
||||
extern "C" int __cxa_pure_virtual() { assert(0); return 0; }
|
||||
} */
|
||||
|
||||
|
||||
namespace TaoCrypt {
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
#include "random.hpp"
|
||||
|
||||
#if defined(WIN32)
|
||||
#if defined(_WIN32)
|
||||
#define _WIN32_WINNT 0x0400
|
||||
#include <windows.h>
|
||||
#include <wincrypt.h>
|
||||
@@ -34,7 +34,7 @@
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#endif // WIN32
|
||||
#endif // _WIN32
|
||||
|
||||
namespace TaoCrypt {
|
||||
|
||||
@@ -64,7 +64,7 @@ byte RandomNumberGenerator::GenerateByte()
|
||||
}
|
||||
|
||||
|
||||
#if defined(WIN32)
|
||||
#if defined(_WIN32)
|
||||
|
||||
OS_Seed::OS_Seed()
|
||||
{
|
||||
@@ -87,7 +87,7 @@ void OS_Seed::GenerateSeed(byte* output, word32 sz)
|
||||
}
|
||||
|
||||
|
||||
#else // WIN32
|
||||
#else // _WIN32
|
||||
|
||||
|
||||
OS_Seed::OS_Seed()
|
||||
@@ -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'
|
||||
drop user user1@localhost, user2@localhost, user3@localhost, user4@localhost;
|
||||
use test;
|
||||
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
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 3
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using where
|
||||
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;
|
||||
drop user user1@localhost, user2@localhost, user3@localhost, user4@localhost;
|
||||
use test;
|
||||
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;
|
||||
|
||||
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)
|
||||
|
||||
/* Special handling of hex and binary strings */
|
||||
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;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -139,8 +139,6 @@ ConfigRetriever::getConfig(NdbMgmHandle m_handle){
|
||||
return 0;
|
||||
}
|
||||
|
||||
ndb_mgm_disconnect(m_handle);
|
||||
|
||||
return conf;
|
||||
}
|
||||
|
||||
|
||||
@@ -1208,7 +1208,7 @@ TransporterRegistry::report_connect(NodeId node_id)
|
||||
void
|
||||
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));
|
||||
performStates[node_id] = DISCONNECTED;
|
||||
reportDisconnect(callbackObj, node_id, errnum);
|
||||
|
||||
@@ -101,6 +101,12 @@ int main(int argc, char** argv)
|
||||
*/
|
||||
catchsigs(true);
|
||||
|
||||
/**
|
||||
* We no longer need the mgm connection in this process
|
||||
* (as we are the angel, not ndb)
|
||||
*/
|
||||
theConfig->closeConfiguration();
|
||||
|
||||
int status = 0;
|
||||
while(waitpid(child, &status, 0) != child);
|
||||
if(WIFEXITED(status)){
|
||||
|
||||
@@ -114,6 +114,14 @@ enum enum_sp_data_access
|
||||
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_VIEW 2
|
||||
|
||||
@@ -448,25 +448,32 @@ bool mysqld_show_create_db(THD *thd, char *dbname,
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
#endif
|
||||
|
||||
(void) sprintf(path,"%s/%s",mysql_data_home, dbname);
|
||||
length=unpack_dirname(path,path); // Convert if not unix
|
||||
found_libchar= 0;
|
||||
if (length && path[length-1] == FN_LIBCHAR)
|
||||
if (!my_strcasecmp(system_charset_info, dbname,
|
||||
information_schema_name.str))
|
||||
{
|
||||
found_libchar= 1;
|
||||
path[length-1]=0; // remove ending '\'
|
||||
dbname= information_schema_name.str;
|
||||
create.default_table_charset= system_charset_info;
|
||||
}
|
||||
if (access(path,F_OK))
|
||||
else
|
||||
{
|
||||
my_error(ER_BAD_DB_ERROR, MYF(0), dbname);
|
||||
DBUG_RETURN(TRUE);
|
||||
(void) sprintf(path,"%s/%s",mysql_data_home, dbname);
|
||||
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;
|
||||
field_list.push_back(new Item_empty_string("Database",NAME_LEN));
|
||||
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,
|
||||
restore_record(table, s->default_values);
|
||||
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);
|
||||
get_field(thd->mem_root, proc_table->field[3], &tmp_string);
|
||||
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,
|
||||
table->field[10]->store("SQL", 3, cs);
|
||||
get_field(thd->mem_root, proc_table->field[6], &tmp_string);
|
||||
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("CONTAINS SQL", 12 , cs);
|
||||
}
|
||||
table->field[12]->store(sp_data_access_name[enum_idx].str,
|
||||
sp_data_access_name[enum_idx].length , cs);
|
||||
get_field(thd->mem_root, proc_table->field[7], &tmp_string);
|
||||
table->field[14]->store(tmp_string.ptr(), tmp_string.length(), cs);
|
||||
bzero((char *)&time, sizeof(time));
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
struct st_table;
|
||||
class Field;
|
||||
|
||||
#define STRING_WITH_LEN(X) X, (sizeof(X)-1)
|
||||
|
||||
typedef struct st_lex_string
|
||||
{
|
||||
char *str;
|
||||
|
||||
Reference in New Issue
Block a user