summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xBUILD/check-cpu1
-rw-r--r--cmd-line-utils/libedit/vi.c2
-rw-r--r--configure.in3
-rw-r--r--include/mysql.h1
-rw-r--r--innobase/row/row0mysql.c12
-rw-r--r--libmysql/libmysql.c37
-rw-r--r--libmysql/libmysql.def1
-rw-r--r--libmysqld/Makefile.am5
-rw-r--r--mysql-test/r/ctype_ucs.result18
-rw-r--r--mysql-test/t/ctype_ucs.test10
-rw-r--r--mysql-test/t/ps_grant.test9
-rw-r--r--sql/ha_blackhole.cc3
-rw-r--r--sql/sql_base.cc2
-rw-r--r--strings/ctype-big5.c2
-rw-r--r--strings/ctype-ucs2.c2
15 files changed, 94 insertions, 14 deletions
diff --git a/BUILD/check-cpu b/BUILD/check-cpu
index 3cce4b1ab3d..7619224314b 100755
--- a/BUILD/check-cpu
+++ b/BUILD/check-cpu
@@ -57,6 +57,7 @@ case "$cpu_family--$model_name" in
;;
*Pentium*M*pro*)
cpu_flag="pentium-m";
+ cpu_flag_old="pentium";
;;
*Athlon*64*)
cpu_flag="athlon64";
diff --git a/cmd-line-utils/libedit/vi.c b/cmd-line-utils/libedit/vi.c
index 4a0352859dd..b977ce716c6 100644
--- a/cmd-line-utils/libedit/vi.c
+++ b/cmd-line-utils/libedit/vi.c
@@ -1014,7 +1014,7 @@ vi_histedit(EditLine *el, int c)
return CC_ERROR;
case 0:
close(fd);
- execlp("vi", "vi", tempfile, 0);
+ execlp("vi", "vi", tempfile, (char *) NULL);
exit(0);
/*NOTREACHED*/
default:
diff --git a/configure.in b/configure.in
index 44fe34ad655..cd4f011e1ce 100644
--- a/configure.in
+++ b/configure.in
@@ -141,8 +141,11 @@ AC_ARG_WITH(darwin-mwcc,
export CC CXX LD AR RANLIB
AC_SUBST(AR)
AC_SUBST(RANLIB)
+ with_darwin_mwcc=yes
])
+AM_CONDITIONAL(DARWIN_MWCC, test x$with_darwin_mwcc = xyes)
+
if test "x${CFLAGS-}" = x ; then
cflags_is_set=no
else
diff --git a/include/mysql.h b/include/mysql.h
index 24f1961a260..bcff8fa8645 100644
--- a/include/mysql.h
+++ b/include/mysql.h
@@ -384,6 +384,7 @@ unsigned int STDCALL mysql_warning_count(MYSQL *mysql);
const char * STDCALL mysql_info(MYSQL *mysql);
unsigned long STDCALL mysql_thread_id(MYSQL *mysql);
const char * STDCALL mysql_character_set_name(MYSQL *mysql);
+int STDCALL mysql_set_character_set(MYSQL *mysql, char *csname);
MYSQL * STDCALL mysql_init(MYSQL *mysql);
my_bool STDCALL mysql_ssl_set(MYSQL *mysql, const char *key,
diff --git a/innobase/row/row0mysql.c b/innobase/row/row0mysql.c
index 7f78a5b723b..fd720046e31 100644
--- a/innobase/row/row0mysql.c
+++ b/innobase/row/row0mysql.c
@@ -1885,10 +1885,18 @@ row_create_table_for_mysql(
trx_general_rollback_for_mysql(trx, FALSE, NULL);
if (err == DB_OUT_OF_FILE_SPACE) {
- fputs("InnoDB: Warning: cannot create table ", stderr);
+ ut_print_timestamp(stderr);
+
+ fputs(" InnoDB: Warning: cannot create table ",
+ stderr);
ut_print_name(stderr, trx, table->name);
fputs(" because tablespace full\n", stderr);
- row_drop_table_for_mysql(table->name, trx, FALSE);
+
+ if (dict_table_get_low(table->name)) {
+
+ row_drop_table_for_mysql(table->name, trx,
+ FALSE);
+ }
} else if (err == DB_DUPLICATE_KEY) {
ut_print_timestamp(stderr);
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index 3e6b29b7602..f070d95780c 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -1495,6 +1495,36 @@ const char * STDCALL mysql_character_set_name(MYSQL *mysql)
return mysql->charset->csname;
}
+int STDCALL mysql_set_character_set(MYSQL *mysql, char *cs_name)
+{
+ struct charset_info_st *cs;
+ const char *save_csdir = charsets_dir;
+
+ if (mysql->options.charset_dir)
+ charsets_dir = mysql->options.charset_dir;
+
+ if ( (cs = get_charset_by_csname(cs_name, MY_CS_PRIMARY, MYF(0))) )
+ {
+ char buff[MY_CS_NAME_SIZE + 10];
+ charsets_dir = save_csdir;
+ sprintf(buff, "SET NAMES %s", cs_name);
+ if (!mysql_query(mysql, buff)) {
+ mysql->charset = cs;
+ }
+ } else {
+ char cs_dir_name[FN_REFLEN];
+ get_charsets_dir(cs_dir_name);
+ mysql->net.last_errno=CR_CANT_READ_CHARSET;
+ strmov(mysql->net.sqlstate, unknown_sqlstate);
+ my_snprintf(mysql->net.last_error, sizeof(mysql->net.last_error)-1,
+ ER(mysql->net.last_errno),
+ cs_name,
+ cs_dir_name);
+
+ }
+ charsets_dir = save_csdir;
+ return mysql->net.last_errno;
+}
uint STDCALL mysql_thread_safe(void)
{
@@ -4375,9 +4405,12 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
/*
We only need to check that stmt->field_count - if it is not null
stmt->bind was initialized in mysql_stmt_prepare
- */
+ stmt->bind overlaps with bind if mysql_stmt_bind_param
+ is called from mysql_stmt_store_result.
+ */
- memcpy((char*) stmt->bind, (char*) bind, sizeof(MYSQL_BIND) * bind_count);
+ if (stmt->bind != bind)
+ memcpy((char*) stmt->bind, (char*) bind, sizeof(MYSQL_BIND) * bind_count);
for (param= stmt->bind, end= param + bind_count, field= stmt->fields ;
param < end ;
diff --git a/libmysql/libmysql.def b/libmysql/libmysql.def
index 414ac4afd85..a597ee37682 100644
--- a/libmysql/libmysql.def
+++ b/libmysql/libmysql.def
@@ -148,6 +148,7 @@ EXPORTS
mysql_embedded
mysql_server_init
mysql_server_end
+ mysql_set_character_set
get_defaults_files
get_charset_by_csname
get_charsets_dir
diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am
index 5d3b365042f..6fc919c904f 100644
--- a/libmysqld/Makefile.am
+++ b/libmysqld/Makefile.am
@@ -87,6 +87,9 @@ INC_LIB= $(top_builddir)/regex/libregex.a \
# generate a total libmysqld.a from all library files,
libmysqld.a: libmysqld_int.a $(INC_LIB)
+if DARWIN_MWCC
+ mwld -lib -o $@ libmysqld_int.a `ls -1 $(INC_LIB) | sort -u`
+else
if test "$(host_os)" = "netware" ; \
then \
$(libmysqld_a_AR) libmysqld.a libmysqld_int.a $(INC_LIB) ; \
@@ -108,7 +111,7 @@ libmysqld.a: libmysqld_int.a $(INC_LIB)
rm -f tmp/* ; \
$(RANLIB) libmysqld.a ; \
fi
-
+endif
## XXX: any time the client interface changes, we'll need to bump
## the version info for libmysqld; however, it's possible for the
diff --git a/mysql-test/r/ctype_ucs.result b/mysql-test/r/ctype_ucs.result
index b251044d48b..338fc429090 100644
--- a/mysql-test/r/ctype_ucs.result
+++ b/mysql-test/r/ctype_ucs.result
@@ -606,6 +606,24 @@ ucs2_bin 00610009
ucs2_bin 0061
ucs2_bin 00610020
drop table t1;
+select hex(substr(_ucs2 0x00e400e50068,1));
+hex(substr(_ucs2 0x00e400e50068,1))
+00E400E50068
+select hex(substr(_ucs2 0x00e400e50068,2));
+hex(substr(_ucs2 0x00e400e50068,2))
+00E50068
+select hex(substr(_ucs2 0x00e400e50068,3));
+hex(substr(_ucs2 0x00e400e50068,3))
+0068
+select hex(substr(_ucs2 0x00e400e50068,-1));
+hex(substr(_ucs2 0x00e400e50068,-1))
+0068
+select hex(substr(_ucs2 0x00e400e50068,-2));
+hex(substr(_ucs2 0x00e400e50068,-2))
+00E50068
+select hex(substr(_ucs2 0x00e400e50068,-3));
+hex(substr(_ucs2 0x00e400e50068,-3))
+00E400E50068
SET NAMES latin1;
SET collation_connection='ucs2_swedish_ci';
CREATE TABLE t1 (Field1 int(10) default '0');
diff --git a/mysql-test/t/ctype_ucs.test b/mysql-test/t/ctype_ucs.test
index 9d5bd0459b0..2722e8572b0 100644
--- a/mysql-test/t/ctype_ucs.test
+++ b/mysql-test/t/ctype_ucs.test
@@ -376,6 +376,16 @@ SET NAMES latin1;
SET collation_connection='ucs2_bin';
-- source include/ctype_filesort.inc
+#
+# Bug#10344 Some string functions fail for UCS2
+#
+select hex(substr(_ucs2 0x00e400e50068,1));
+select hex(substr(_ucs2 0x00e400e50068,2));
+select hex(substr(_ucs2 0x00e400e50068,3));
+select hex(substr(_ucs2 0x00e400e50068,-1));
+select hex(substr(_ucs2 0x00e400e50068,-2));
+select hex(substr(_ucs2 0x00e400e50068,-3));
+
SET NAMES latin1;
#
# Bug#8235
diff --git a/mysql-test/t/ps_grant.test b/mysql-test/t/ps_grant.test
index 07bd70f6cff..f23582633b4 100644
--- a/mysql-test/t/ps_grant.test
+++ b/mysql-test/t/ps_grant.test
@@ -1,10 +1,6 @@
# Can't test grants with embedded server
-- source include/not_embedded.inc
-# Tested here simply so it is not tested with embedded server
-prepare stmt4 from ' show full processlist ';
---replace_column 1 number 6 time 3 localhost
-execute stmt4;
let $type= 'MYISAM' ;
@@ -116,6 +112,11 @@ show grants for second_user@localhost ;
drop database mysqltest;
+# Tested here simply so it is not tested with embedded server
+prepare stmt4 from ' show full processlist ';
+--replace_column 1 number 6 time 3 localhost
+execute stmt4;
+
## grant/revoke + drop user
--error 1295
prepare stmt3 from ' grant all on test.t1 to drop_user@localhost
diff --git a/sql/ha_blackhole.cc b/sql/ha_blackhole.cc
index c5062c4ea81..dcc542a7247 100644
--- a/sql/ha_blackhole.cc
+++ b/sql/ha_blackhole.cc
@@ -132,8 +132,9 @@ THR_LOCK_DATA **ha_blackhole::store_lock(THD *thd,
THR_LOCK_DATA **to,
enum thr_lock_type lock_type)
{
+ if (lock_type != TL_IGNORE && lock.type == TL_UNLOCK)
+ lock.type=lock_type;
*to++= &lock;
-
return to;
}
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index bda5700b273..6439bc8a2d7 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -3307,7 +3307,7 @@ bool get_key_map_from_key_list(key_map *map, TABLE *table,
0)
{
my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0),
- name->c_ptr(), table->s->table_name);
+ name->c_ptr_safe(), table->s->table_name);
map->set_all();
return 1;
}
diff --git a/strings/ctype-big5.c b/strings/ctype-big5.c
index e12ff189eaf..447eea3e635 100644
--- a/strings/ctype-big5.c
+++ b/strings/ctype-big5.c
@@ -6301,7 +6301,7 @@ uint my_well_formed_len_big5(CHARSET_INFO *cs __attribute__((unused)),
const char *emb= e - 1; /* Last possible end of an MB character */
*error= 0;
- while (pos && b < e)
+ while (pos-- && b < e)
{
if ((uchar) b[0] < 128)
{
diff --git a/strings/ctype-ucs2.c b/strings/ctype-ucs2.c
index d15144b7438..e57ad8e7d69 100644
--- a/strings/ctype-ucs2.c
+++ b/strings/ctype-ucs2.c
@@ -1267,7 +1267,7 @@ uint my_charpos_ucs2(CHARSET_INFO *cs __attribute__((unused)),
const char *e __attribute__((unused)),
uint pos)
{
- return pos*2;
+ return pos > e - b ? e - b + 2 : pos * 2;
}