Commit aa0b07a9 authored by unknown's avatar unknown

Merge mysql.com:/home/bkroot/mysql-5.0

into  mysql.com:/home/bk/mysql-5.0

parents 53fd46c1 358b6930
...@@ -396,10 +396,7 @@ int __void__; ...@@ -396,10 +396,7 @@ int __void__;
#endif #endif
/* Define some useful general macros */ /* Define some useful general macros */
#if defined(__cplusplus) && defined(__GNUC__) #if !defined(max)
#define max(a, b) ((a) >? (b))
#define min(a, b) ((a) <? (b))
#elif !defined(max)
#define max(a, b) ((a) > (b) ? (a) : (b)) #define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b))
#endif #endif
......
...@@ -218,6 +218,18 @@ enum mysql_rpl_type ...@@ -218,6 +218,18 @@ enum mysql_rpl_type
MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN
}; };
typedef struct character_set
{
unsigned int number; /* character set number */
unsigned int state; /* character set state */
const char *csname; /* collation name */
const char *name; /* character set name */
const char *comment; /* comment */
const char *dir; /* character set directory */
unsigned int mbminlen; /* min. length for multibyte strings */
unsigned int mbmaxlen; /* max. length for multibyte strings */
} MY_CHARSET_INFO;
struct st_mysql_methods; struct st_mysql_methods;
typedef struct st_mysql typedef struct st_mysql
...@@ -418,6 +430,8 @@ my_bool STDCALL mysql_slave_query(MYSQL *mysql, const char *q, ...@@ -418,6 +430,8 @@ my_bool STDCALL mysql_slave_query(MYSQL *mysql, const char *q,
unsigned long length); unsigned long length);
my_bool STDCALL mysql_slave_send_query(MYSQL *mysql, const char *q, my_bool STDCALL mysql_slave_send_query(MYSQL *mysql, const char *q,
unsigned long length); unsigned long length);
void STDCALL mysql_get_character_set_info(MYSQL *mysql,
MY_CHARSET_INFO *charset);
/* local infile support */ /* local infile support */
......
...@@ -1495,6 +1495,21 @@ const char * STDCALL mysql_character_set_name(MYSQL *mysql) ...@@ -1495,6 +1495,21 @@ const char * STDCALL mysql_character_set_name(MYSQL *mysql)
return mysql->charset->csname; return mysql->charset->csname;
} }
void STDCALL mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *csinfo)
{
csinfo->number = mysql->charset->number;
csinfo->state = mysql->charset->state;
csinfo->csname = mysql->charset->csname;
csinfo->name = mysql->charset->name;
csinfo->comment = mysql->charset->comment;
csinfo->mbminlen = mysql->charset->mbminlen;
csinfo->mbmaxlen = mysql->charset->mbmaxlen;
if (mysql->options.charset_dir)
csinfo->dir = mysql->options.charset_dir;
else
csinfo->dir = charsets_dir;
}
int STDCALL mysql_set_character_set(MYSQL *mysql, char *cs_name) int STDCALL mysql_set_character_set(MYSQL *mysql, char *cs_name)
{ {
......
...@@ -149,5 +149,6 @@ EXPORTS ...@@ -149,5 +149,6 @@ EXPORTS
mysql_server_init mysql_server_init
mysql_server_end mysql_server_end
mysql_set_character_set mysql_set_character_set
mysql_get_character_set_info
get_defaults_files get_defaults_files
modify_defaults_file modify_defaults_file
...@@ -939,6 +939,17 @@ content msisdn ...@@ -939,6 +939,17 @@ content msisdn
ERR Имри.Афимим.Аеимимримдмримрмрирор имримримримр имридм ирбднримрфмририримрфмфмим.Ад.Д имдимримрад.Адимримримрмдиримримримр м.Дадимфшьмримд им.Адимимрн имадми 1234567890 ERR Имри.Афимим.Аеимимримдмримрмрирор имримримримр имридм ирбднримрфмририримрфмфмим.Ад.Д имдимримрад.Адимримримрмдиримримримр м.Дадимфшьмримд им.Адимимрн имадми 1234567890
11 g 1234567890 11 g 1234567890
DROP TABLE t1,t2; DROP TABLE t1,t2;
create table t1 (a char(20) character set utf8);
insert into t1 values ('123456'),('андрей');
alter table t1 modify a char(2) character set utf8;
Warnings:
Warning 1265 Data truncated for column 'a' at row 1
Warning 1265 Data truncated for column 'a' at row 2
select char_length(a), length(a), a from t1 order by a;
char_length(a) length(a) a
2 2 12
2 4 ан
drop table t1;
CREATE TABLE t1 ( CREATE TABLE t1 (
a varchar(255) NOT NULL default '', a varchar(255) NOT NULL default '',
KEY a (a) KEY a (a)
......
...@@ -383,20 +383,6 @@ select * from t1; ...@@ -383,20 +383,6 @@ select * from t1;
ERROR HY000: Can't lock file (errno: 4009) ERROR HY000: Can't lock file (errno: 4009)
use test; use test;
drop database test_only_ndb_tables; drop database test_only_ndb_tables;
CREATE TABLE sys.SYSTAB_0 (a int);
ERROR 42S01: Table 'SYSTAB_0' already exists
select * from sys.SYSTAB_0;
ERROR HY000: Failed to open 'SYSTAB_0', error while unpacking from engine
CREATE TABLE IF NOT EXISTS sys.SYSTAB_0 (a int);
show warnings;
Level Code Message
select * from sys.SYSTAB_0;
ERROR HY000: Failed to open 'SYSTAB_0', error while unpacking from engine
drop table sys.SYSTAB_0;
ERROR 42S02: Unknown table 'SYSTAB_0'
drop table IF EXISTS sys.SYSTAB_0;
Warnings:
Note 1051 Unknown table 'SYSTAB_0'
CREATE TABLE t9 ( CREATE TABLE t9 (
a int NOT NULL PRIMARY KEY, a int NOT NULL PRIMARY KEY,
b int b int
......
...@@ -789,6 +789,16 @@ SELECT content, t2.msisdn FROM t1, t2 WHERE t1.msisdn = '1234567890'; ...@@ -789,6 +789,16 @@ SELECT content, t2.msisdn FROM t1, t2 WHERE t1.msisdn = '1234567890';
DROP TABLE t1,t2; DROP TABLE t1,t2;
#
# Bug#11591: CHAR column with utf8 does not work properly
# (more chars than expected)
#
create table t1 (a char(20) character set utf8);
insert into t1 values ('123456'),('андрей');
alter table t1 modify a char(2) character set utf8;
select char_length(a), length(a), a from t1 order by a;
drop table t1;
# #
# Bug#9557 MyISAM utf8 table crash # Bug#9557 MyISAM utf8 table crash
# #
......
...@@ -501,19 +501,20 @@ drop database test_only_ndb_tables; ...@@ -501,19 +501,20 @@ drop database test_only_ndb_tables;
# a table with tha same name as a table that can't be # a table with tha same name as a table that can't be
# discovered( for example a table created via NDBAPI) # discovered( for example a table created via NDBAPI)
--error 1050 # Test disabled since it doesn't work on case insensitive systems
CREATE TABLE sys.SYSTAB_0 (a int); #--error 1050
--error 1105 #CREATE TABLE sys.SYSTAB_0 (a int);
select * from sys.SYSTAB_0; #--error 1105
#select * from sys.SYSTAB_0;
CREATE TABLE IF NOT EXISTS sys.SYSTAB_0 (a int);
show warnings; #CREATE TABLE IF NOT EXISTS sys.SYSTAB_0 (a int);
--error 1105 #show warnings;
select * from sys.SYSTAB_0; #--error 1105
#select * from sys.SYSTAB_0;
--error 1051
drop table sys.SYSTAB_0; #--error 1051
drop table IF EXISTS sys.SYSTAB_0; #drop table sys.SYSTAB_0;
#drop table IF EXISTS sys.SYSTAB_0;
###################################################### ######################################################
# Note! This should always be the last step in this # Note! This should always be the last step in this
......
...@@ -32,6 +32,7 @@ public: ...@@ -32,6 +32,7 @@ public:
~ConfigRetriever(); ~ConfigRetriever();
int do_connect(int no_retries, int retry_delay_in_seconds, int verbose); int do_connect(int no_retries, int retry_delay_in_seconds, int verbose);
int disconnect();
/** /**
* Get configuration for current node. * Get configuration for current node.
......
...@@ -107,6 +107,12 @@ ConfigRetriever::do_connect(int no_retries, ...@@ -107,6 +107,12 @@ ConfigRetriever::do_connect(int no_retries,
0 : -1; 0 : -1;
} }
int
ConfigRetriever::disconnect()
{
return ndb_mgm_disconnect(m_handle);
}
//**************************************************************************** //****************************************************************************
//**************************************************************************** //****************************************************************************
//**************************************************************************** //****************************************************************************
......
...@@ -353,7 +353,8 @@ int main(int argc, char** argv) ...@@ -353,7 +353,8 @@ int main(int argc, char** argv)
g_eventLogger.info("Shutting down server..."); g_eventLogger.info("Shutting down server...");
glob.socketServer->stopServer(); glob.socketServer->stopServer();
glob.socketServer->stopSessions(); glob.mgmObject->get_config_retriever()->disconnect();
glob.socketServer->stopSessions(true);
g_eventLogger.info("Shutdown complete"); g_eventLogger.info("Shutdown complete");
return 0; return 0;
error_end: error_end:
......
...@@ -324,21 +324,28 @@ static void do_field_real(Copy_field *copy) ...@@ -324,21 +324,28 @@ static void do_field_real(Copy_field *copy)
static void do_cut_string(Copy_field *copy) static void do_cut_string(Copy_field *copy)
{ // Shorter string field { // Shorter string field
memcpy(copy->to_ptr,copy->from_ptr,copy->to_length); int well_formed_error;
CHARSET_INFO *cs= copy->from_field->charset();
/* Check if we loosed any important characters */ const char *from_end= copy->from_ptr + copy->from_length;
char *ptr,*end; uint copy_length= cs->cset->well_formed_len(cs, copy->from_ptr, from_end,
for (ptr=copy->from_ptr+copy->to_length,end=copy->from_ptr+copy->from_length ; copy->to_length / cs->mbmaxlen,
ptr != end ; &well_formed_error);
ptr++) if (copy->to_length < copy_length)
copy_length= copy->to_length;
memcpy(copy->to_ptr, copy->from_ptr, copy_length);
/* Check if we lost any important characters */
if (well_formed_error ||
cs->cset->scan(cs, copy->from_ptr + copy_length, from_end,
MY_SEQ_SPACES) < (copy->from_length - copy_length))
{ {
if (!my_isspace(system_charset_info, *ptr)) // QQ: ucs incompatible copy->to_field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
{ WARN_DATA_TRUNCATED, 1);
copy->to_field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
WARN_DATA_TRUNCATED, 1);
break;
}
} }
if (copy_length < copy->to_length)
cs->cset->fill(cs, copy->to_ptr + copy_length,
copy->to_length - copy_length, ' ');
} }
......
...@@ -13626,6 +13626,23 @@ static void test_bug10214() ...@@ -13626,6 +13626,23 @@ static void test_bug10214()
mysql_query(mysql, "set sql_mode=''"); mysql_query(mysql, "set sql_mode=''");
} }
static void test_client_character_set()
{
MY_CHARSET_INFO cs;
const char *csname;
int rc;
myheader("test_client_character_set");
csname = "utf8";
rc = mysql_set_character_set(mysql, csname);
DIE_UNLESS(rc == 0);
mysql_get_character_set_info(mysql, &cs);
DIE_UNLESS(!strcmp(cs.csname, "utf8"));
DIE_UNLESS(!strcmp(cs.name, "utf8_general_ci"));
}
/* /*
Read and parse arguments and MySQL options from my.cnf Read and parse arguments and MySQL options from my.cnf
...@@ -13850,6 +13867,7 @@ static struct my_tests_st my_tests[]= { ...@@ -13850,6 +13867,7 @@ static struct my_tests_st my_tests[]= {
{ "test_cursors_with_union", test_cursors_with_union }, { "test_cursors_with_union", test_cursors_with_union },
{ "test_truncation", test_truncation }, { "test_truncation", test_truncation },
{ "test_truncation_option", test_truncation_option }, { "test_truncation_option", test_truncation_option },
{ "test_client_character_set", test_client_character_set },
{ "test_bug8330", test_bug8330 }, { "test_bug8330", test_bug8330 },
{ "test_bug7990", test_bug7990 }, { "test_bug7990", test_bug7990 },
{ "test_bug8378", test_bug8378 }, { "test_bug8378", test_bug8378 },
......
...@@ -316,7 +316,7 @@ int sslaccept(struct st_VioSSLAcceptorFd* ptr, Vio* vio, long timeout) ...@@ -316,7 +316,7 @@ int sslaccept(struct st_VioSSLAcceptorFd* ptr, Vio* vio, long timeout)
vio_blocking(vio, net_blocking, &unused); vio_blocking(vio, net_blocking, &unused);
DBUG_RETURN(1); DBUG_RETURN(1);
} }
#ifndef DBUF_OFF #ifndef DBUG_OFF
DBUG_PRINT("info",("SSL_get_cipher_name() = '%s'" DBUG_PRINT("info",("SSL_get_cipher_name() = '%s'"
,SSL_get_cipher_name((SSL*) vio->ssl_arg))); ,SSL_get_cipher_name((SSL*) vio->ssl_arg)));
client_cert = SSL_get_peer_certificate ((SSL*) vio->ssl_arg); client_cert = SSL_get_peer_certificate ((SSL*) vio->ssl_arg);
......
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