Loading client/mysqlcheck.c +21 −4 Original line number Diff line number Diff line Loading @@ -539,13 +539,13 @@ static int process_all_tables_in_db(char *database) static int fix_object_name(const char *obj, const char *name) static int fix_table_storage_name(const char *name) { char qbuf[100 + NAME_LEN*4]; int rc= 0; if (strncmp(name, "#mysql50#", 9)) return 1; sprintf(qbuf, "RENAME %s `%s` TO `%s`", obj, name, name + 9); sprintf(qbuf, "RENAME TABLE `%s` TO `%s`", name, name + 9); if (mysql_query(sock, qbuf)) { fprintf(stderr, "Failed to %s\n", qbuf); Loading @@ -557,6 +557,23 @@ static int fix_object_name(const char *obj, const char *name) return rc; } static int fix_database_storage_name(const char *name) { char qbuf[100 + NAME_LEN*4]; int rc= 0; if (strncmp(name, "#mysql50#", 9)) return 1; sprintf(qbuf, "ALTER DATABASE `%s` UPGRADE DATA DIRECTORY NAME", name); if (mysql_query(sock, qbuf)) { fprintf(stderr, "Failed to %s\n", qbuf); fprintf(stderr, "Error: %s\n", mysql_error(sock)); rc= 1; } if (verbose) printf("%-50s %s\n", name, rc ? "FAILED" : "OK"); return rc; } static int process_one_db(char *database) { Loading @@ -565,7 +582,7 @@ static int process_one_db(char *database) int rc= 0; if (opt_fix_db_names && !strncmp(database,"#mysql50#", 9)) { rc= fix_object_name("DATABASE", database); rc= fix_database_storage_name(database); database+= 9; } if (rc || !opt_fix_table_names) Loading Loading @@ -620,7 +637,7 @@ static int handle_request_for_tables(char *tables, uint length) op= (opt_write_binlog) ? "OPTIMIZE" : "OPTIMIZE NO_WRITE_TO_BINLOG"; break; case DO_UPGRADE: return fix_object_name("TABLE", tables); return fix_table_storage_name(tables); } if (!(query =(char *) my_malloc((sizeof(char)*(length+110)), MYF(MY_WME)))) Loading client/mysqltest.c +2 −2 Original line number Diff line number Diff line Loading @@ -1507,7 +1507,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) die("Failed to create temporary file for ds"); /* Write ds to temporary file and set file pos to beginning*/ if (my_write(fd, ds->str, ds->length, if (my_write(fd, (uchar *) ds->str, ds->length, MYF(MY_FNABP | MY_WME)) || my_seek(fd, 0, SEEK_SET, MYF(0)) == MY_FILEPOS_ERROR) { Loading Loading @@ -1986,7 +1986,7 @@ void var_set_query_get_value(struct st_command *command, VAR *var) const struct command_arg query_get_value_args[] = { "query", ARG_STRING, TRUE, &ds_query, "Query to run", "column name", ARG_STRING, TRUE, &ds_col, "Name of column", "row number", ARG_STRING, TRUE, &ds_row, "Number for row", "row number", ARG_STRING, TRUE, &ds_row, "Number for row" }; DBUG_ENTER("var_set_query_get_value"); Loading libmysql/client_settings.h +4 −0 Original line number Diff line number Diff line Loading @@ -63,3 +63,7 @@ int cli_read_change_user_result(MYSQL *mysql, char *buff, const char *passwd); int init_embedded_server(int argc, char **argv, char **groups); void end_embedded_server(); #endif /*EMBEDDED_LIBRARY*/ C_MODE_START extern int mysql_init_character_set(MYSQL *mysql); C_MODE_END libmysql/libmysql.c +27 −3 Original line number Diff line number Diff line Loading @@ -685,14 +685,25 @@ int cli_read_change_user_result(MYSQL *mysql, char *buff, const char *passwd) return 0; } my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, const char *passwd, const char *db) { char buff[512],*end=buff; int rc; CHARSET_INFO *saved_cs= mysql->charset; DBUG_ENTER("mysql_change_user"); /* Get the connection-default character set. */ if (mysql_init_character_set(mysql)) { mysql->charset= saved_cs; DBUG_RETURN(TRUE); } /* Use an empty string instead of NULL. */ if (!user) user=""; if (!passwd) Loading Loading @@ -721,6 +732,14 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, /* Add database if needed */ end= strmov(end, db ? db : "") + 1; /* Add character set number. */ if (mysql->server_capabilities & CLIENT_SECURE_CONNECTION) { int2store(end, (ushort) mysql->charset->number); end+= 2; } /* Write authentication package */ simple_command(mysql,COM_CHANGE_USER, (uchar*) buff, (ulong) (end-buff), 1); Loading @@ -743,6 +762,11 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, mysql->passwd=my_strdup(passwd,MYF(MY_WME)); mysql->db= db ? my_strdup(db,MYF(MY_WME)) : 0; } else { mysql->charset= saved_cs; } DBUG_RETURN(rc); } Loading Loading @@ -2502,7 +2526,7 @@ static my_bool execute(MYSQL_STMT *stmt, char *packet, ulong length) 5 /* execution flags */]; my_bool res; DBUG_ENTER("execute"); DBUG_DUMP("packet", packet, length); DBUG_DUMP("packet", (uchar *) packet, length); mysql->last_used_con= mysql; int4store(buff, stmt->stmt_id); /* Send stmt id to server */ Loading mysql-test/include/mix1.inc +34 −0 Original line number Diff line number Diff line Loading @@ -1146,4 +1146,38 @@ select @b:=f2 from t1; select if(@a=@b,"ok","wrong"); drop table t1; # # Bug#30747 Create table with identical constraint names behaves incorrectly # if ($test_foreign_keys) { CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY (a,b)) engine=innodb; --error ER_WRONG_FK_DEF CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), CONSTRAINT c2 FOREIGN KEY f2 (c) REFERENCES t1 (a,b) ON UPDATE NO ACTION) engine=innodb; --error ER_WRONG_FK_DEF CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a,b) ON UPDATE NO ACTION) engine=innodb; CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), CONSTRAINT c1 FOREIGN KEY c2 (c) REFERENCES t1 (a) ON DELETE NO ACTION, CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION) engine=innodb; ALTER TABLE t2 DROP FOREIGN KEY c2; DROP TABLE t2; --error ER_WRONG_FK_DEF CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), FOREIGN KEY (c) REFERENCES t1 (a,k) ON UPDATE NO ACTION) engine=innodb; --error ER_WRONG_FK_DEF CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), FOREIGN KEY f1 (c) REFERENCES t1 (a,k) ON UPDATE NO ACTION) engine=innodb; CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), CONSTRAINT c1 FOREIGN KEY f1 (c) REFERENCES t1 (a) ON DELETE NO ACTION, CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION, FOREIGN KEY f3 (c) REFERENCES t1 (a) ON UPDATE NO ACTION, FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION) engine=innodb; SHOW CREATE TABLE t2; DROP TABLE t2; DROP TABLE t1; } --echo End of 5.1 tests Loading
client/mysqlcheck.c +21 −4 Original line number Diff line number Diff line Loading @@ -539,13 +539,13 @@ static int process_all_tables_in_db(char *database) static int fix_object_name(const char *obj, const char *name) static int fix_table_storage_name(const char *name) { char qbuf[100 + NAME_LEN*4]; int rc= 0; if (strncmp(name, "#mysql50#", 9)) return 1; sprintf(qbuf, "RENAME %s `%s` TO `%s`", obj, name, name + 9); sprintf(qbuf, "RENAME TABLE `%s` TO `%s`", name, name + 9); if (mysql_query(sock, qbuf)) { fprintf(stderr, "Failed to %s\n", qbuf); Loading @@ -557,6 +557,23 @@ static int fix_object_name(const char *obj, const char *name) return rc; } static int fix_database_storage_name(const char *name) { char qbuf[100 + NAME_LEN*4]; int rc= 0; if (strncmp(name, "#mysql50#", 9)) return 1; sprintf(qbuf, "ALTER DATABASE `%s` UPGRADE DATA DIRECTORY NAME", name); if (mysql_query(sock, qbuf)) { fprintf(stderr, "Failed to %s\n", qbuf); fprintf(stderr, "Error: %s\n", mysql_error(sock)); rc= 1; } if (verbose) printf("%-50s %s\n", name, rc ? "FAILED" : "OK"); return rc; } static int process_one_db(char *database) { Loading @@ -565,7 +582,7 @@ static int process_one_db(char *database) int rc= 0; if (opt_fix_db_names && !strncmp(database,"#mysql50#", 9)) { rc= fix_object_name("DATABASE", database); rc= fix_database_storage_name(database); database+= 9; } if (rc || !opt_fix_table_names) Loading Loading @@ -620,7 +637,7 @@ static int handle_request_for_tables(char *tables, uint length) op= (opt_write_binlog) ? "OPTIMIZE" : "OPTIMIZE NO_WRITE_TO_BINLOG"; break; case DO_UPGRADE: return fix_object_name("TABLE", tables); return fix_table_storage_name(tables); } if (!(query =(char *) my_malloc((sizeof(char)*(length+110)), MYF(MY_WME)))) Loading
client/mysqltest.c +2 −2 Original line number Diff line number Diff line Loading @@ -1507,7 +1507,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname) die("Failed to create temporary file for ds"); /* Write ds to temporary file and set file pos to beginning*/ if (my_write(fd, ds->str, ds->length, if (my_write(fd, (uchar *) ds->str, ds->length, MYF(MY_FNABP | MY_WME)) || my_seek(fd, 0, SEEK_SET, MYF(0)) == MY_FILEPOS_ERROR) { Loading Loading @@ -1986,7 +1986,7 @@ void var_set_query_get_value(struct st_command *command, VAR *var) const struct command_arg query_get_value_args[] = { "query", ARG_STRING, TRUE, &ds_query, "Query to run", "column name", ARG_STRING, TRUE, &ds_col, "Name of column", "row number", ARG_STRING, TRUE, &ds_row, "Number for row", "row number", ARG_STRING, TRUE, &ds_row, "Number for row" }; DBUG_ENTER("var_set_query_get_value"); Loading
libmysql/client_settings.h +4 −0 Original line number Diff line number Diff line Loading @@ -63,3 +63,7 @@ int cli_read_change_user_result(MYSQL *mysql, char *buff, const char *passwd); int init_embedded_server(int argc, char **argv, char **groups); void end_embedded_server(); #endif /*EMBEDDED_LIBRARY*/ C_MODE_START extern int mysql_init_character_set(MYSQL *mysql); C_MODE_END
libmysql/libmysql.c +27 −3 Original line number Diff line number Diff line Loading @@ -685,14 +685,25 @@ int cli_read_change_user_result(MYSQL *mysql, char *buff, const char *passwd) return 0; } my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, const char *passwd, const char *db) { char buff[512],*end=buff; int rc; CHARSET_INFO *saved_cs= mysql->charset; DBUG_ENTER("mysql_change_user"); /* Get the connection-default character set. */ if (mysql_init_character_set(mysql)) { mysql->charset= saved_cs; DBUG_RETURN(TRUE); } /* Use an empty string instead of NULL. */ if (!user) user=""; if (!passwd) Loading Loading @@ -721,6 +732,14 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, /* Add database if needed */ end= strmov(end, db ? db : "") + 1; /* Add character set number. */ if (mysql->server_capabilities & CLIENT_SECURE_CONNECTION) { int2store(end, (ushort) mysql->charset->number); end+= 2; } /* Write authentication package */ simple_command(mysql,COM_CHANGE_USER, (uchar*) buff, (ulong) (end-buff), 1); Loading @@ -743,6 +762,11 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, mysql->passwd=my_strdup(passwd,MYF(MY_WME)); mysql->db= db ? my_strdup(db,MYF(MY_WME)) : 0; } else { mysql->charset= saved_cs; } DBUG_RETURN(rc); } Loading Loading @@ -2502,7 +2526,7 @@ static my_bool execute(MYSQL_STMT *stmt, char *packet, ulong length) 5 /* execution flags */]; my_bool res; DBUG_ENTER("execute"); DBUG_DUMP("packet", packet, length); DBUG_DUMP("packet", (uchar *) packet, length); mysql->last_used_con= mysql; int4store(buff, stmt->stmt_id); /* Send stmt id to server */ Loading
mysql-test/include/mix1.inc +34 −0 Original line number Diff line number Diff line Loading @@ -1146,4 +1146,38 @@ select @b:=f2 from t1; select if(@a=@b,"ok","wrong"); drop table t1; # # Bug#30747 Create table with identical constraint names behaves incorrectly # if ($test_foreign_keys) { CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, PRIMARY KEY (a,b)) engine=innodb; --error ER_WRONG_FK_DEF CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), CONSTRAINT c2 FOREIGN KEY f2 (c) REFERENCES t1 (a,b) ON UPDATE NO ACTION) engine=innodb; --error ER_WRONG_FK_DEF CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a,b) ON UPDATE NO ACTION) engine=innodb; CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), CONSTRAINT c1 FOREIGN KEY c2 (c) REFERENCES t1 (a) ON DELETE NO ACTION, CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION) engine=innodb; ALTER TABLE t2 DROP FOREIGN KEY c2; DROP TABLE t2; --error ER_WRONG_FK_DEF CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), FOREIGN KEY (c) REFERENCES t1 (a,k) ON UPDATE NO ACTION) engine=innodb; --error ER_WRONG_FK_DEF CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), FOREIGN KEY f1 (c) REFERENCES t1 (a,k) ON UPDATE NO ACTION) engine=innodb; CREATE TABLE t2 (c INT NOT NULL, d INT NOT NULL, PRIMARY KEY (c,d), CONSTRAINT c1 FOREIGN KEY f1 (c) REFERENCES t1 (a) ON DELETE NO ACTION, CONSTRAINT c2 FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION, FOREIGN KEY f3 (c) REFERENCES t1 (a) ON UPDATE NO ACTION, FOREIGN KEY (c) REFERENCES t1 (a) ON UPDATE NO ACTION) engine=innodb; SHOW CREATE TABLE t2; DROP TABLE t2; DROP TABLE t1; } --echo End of 5.1 tests