mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
4.1 -> 5.0 merge
client/mysql.cc: Auto merged client/sql_string.h: Auto merged configure.in: Auto merged myisam/mi_create.c: Auto merged mysql-test/r/date_formats.result: Auto merged mysql-test/t/date_formats.test: Auto merged ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp: Auto merged ndb/src/mgmsrv/ConfigInfo.cpp: Auto merged sql/item_strfunc.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_string.h: Auto merged sql/table.cc: Auto merged
This commit is contained in:
@ -1084,7 +1084,7 @@ static int read_and_execute(bool interactive)
|
|||||||
(We want to allow help, print and clear anywhere at line start
|
(We want to allow help, print and clear anywhere at line start
|
||||||
*/
|
*/
|
||||||
if ((named_cmds || glob_buffer.is_empty())
|
if ((named_cmds || glob_buffer.is_empty())
|
||||||
&& !in_string && (com=find_command(line,0)))
|
&& !ml_comment && !in_string && (com=find_command(line,0)))
|
||||||
{
|
{
|
||||||
if ((*com->func)(&glob_buffer,line) > 0)
|
if ((*com->func)(&glob_buffer,line) > 0)
|
||||||
break;
|
break;
|
||||||
|
@ -2239,17 +2239,18 @@ static void dump_table(char *table, char *db)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt_disable_keys)
|
|
||||||
{
|
|
||||||
fprintf(md_result_file, "\n/*!40000 ALTER TABLE %s DISABLE KEYS */;\n",
|
|
||||||
opt_quoted_table);
|
|
||||||
check_io(md_result_file);
|
|
||||||
}
|
|
||||||
if (opt_lock)
|
if (opt_lock)
|
||||||
{
|
{
|
||||||
fprintf(md_result_file,"LOCK TABLES %s WRITE;\n", opt_quoted_table);
|
fprintf(md_result_file,"LOCK TABLES %s WRITE;\n", opt_quoted_table);
|
||||||
check_io(md_result_file);
|
check_io(md_result_file);
|
||||||
}
|
}
|
||||||
|
/* Moved disable keys to after lock per bug 15977 */
|
||||||
|
if (opt_disable_keys)
|
||||||
|
{
|
||||||
|
fprintf(md_result_file, "/*!40000 ALTER TABLE %s DISABLE KEYS */;\n",
|
||||||
|
opt_quoted_table);
|
||||||
|
check_io(md_result_file);
|
||||||
|
}
|
||||||
|
|
||||||
total_length= opt_net_buffer_length; /* Force row break */
|
total_length= opt_net_buffer_length; /* Force row break */
|
||||||
row_break=0;
|
row_break=0;
|
||||||
@ -2511,17 +2512,19 @@ static void dump_table(char *table, char *db)
|
|||||||
error= EX_CONSCHECK;
|
error= EX_CONSCHECK;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
if (opt_lock)
|
|
||||||
{
|
/* Moved enable keys to before unlock per bug 15977 */
|
||||||
fputs("UNLOCK TABLES;\n", md_result_file);
|
|
||||||
check_io(md_result_file);
|
|
||||||
}
|
|
||||||
if (opt_disable_keys)
|
if (opt_disable_keys)
|
||||||
{
|
{
|
||||||
fprintf(md_result_file,"/*!40000 ALTER TABLE %s ENABLE KEYS */;\n",
|
fprintf(md_result_file,"/*!40000 ALTER TABLE %s ENABLE KEYS */;\n",
|
||||||
opt_quoted_table);
|
opt_quoted_table);
|
||||||
check_io(md_result_file);
|
check_io(md_result_file);
|
||||||
}
|
}
|
||||||
|
if (opt_lock)
|
||||||
|
{
|
||||||
|
fputs("UNLOCK TABLES;\n", md_result_file);
|
||||||
|
check_io(md_result_file);
|
||||||
|
}
|
||||||
if (opt_autocommit)
|
if (opt_autocommit)
|
||||||
{
|
{
|
||||||
fprintf(md_result_file, "commit;\n");
|
fprintf(md_result_file, "commit;\n");
|
||||||
|
4
mysql-test/include/have_case_sensitive_file_system.inc
Normal file
4
mysql-test/include/have_case_sensitive_file_system.inc
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
--require r/case_sensitive_file_system.require
|
||||||
|
--disable_query_log
|
||||||
|
show variables like "lower_case_file_system";
|
||||||
|
--enable_query_log
|
2
mysql-test/r/case_sensitive_file_system.require
Normal file
2
mysql-test/r/case_sensitive_file_system.require
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Variable_name Value
|
||||||
|
lower_case_file_system OFF
|
@ -564,3 +564,9 @@ TIME_FORMAT("24:00:00", '%l %p')
|
|||||||
SELECT TIME_FORMAT("25:00:00", '%l %p');
|
SELECT TIME_FORMAT("25:00:00", '%l %p');
|
||||||
TIME_FORMAT("25:00:00", '%l %p')
|
TIME_FORMAT("25:00:00", '%l %p')
|
||||||
1 AM
|
1 AM
|
||||||
|
SELECT DATE_FORMAT('%Y-%m-%d %H:%i:%s', 1151414896);
|
||||||
|
DATE_FORMAT('%Y-%m-%d %H:%i:%s', 1151414896)
|
||||||
|
NULL
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect datetime value: '%Y-%m-%d %H:%i:%s'
|
||||||
|
"End of 4.1 tests"
|
||||||
|
11
mysql-test/r/lowercase_fs_off.result
Normal file
11
mysql-test/r/lowercase_fs_off.result
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
create database d1;
|
||||||
|
grant all on d1.* to 'sample'@'localhost' identified by 'password';
|
||||||
|
flush privileges;
|
||||||
|
select database();
|
||||||
|
database()
|
||||||
|
d1
|
||||||
|
create database d2;
|
||||||
|
ERROR 42000: Access denied for user 'sample'@'localhost' to database 'd2'
|
||||||
|
create database D1;
|
||||||
|
ERROR 42000: Access denied for user 'sample'@'localhost' to database 'D1'
|
||||||
|
drop database if exists d1;
|
4
mysql-test/r/mysql_client.result
Normal file
4
mysql-test/r/mysql_client.result
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
1
|
||||||
|
1
|
||||||
|
ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
||||||
|
ERROR at line 1: USE must be followed by a database name
|
File diff suppressed because one or more lines are too long
@ -502,6 +502,20 @@ SELECT FOUND_ROWS();
|
|||||||
FOUND_ROWS()
|
FOUND_ROWS()
|
||||||
2
|
2
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
|
drop table if exists t1;
|
||||||
|
create temporary table if not exists t1 (a1 int);
|
||||||
|
prepare stmt from "delete t1 from t1 where (cast(a1/3 as unsigned) * 3) = a1";
|
||||||
|
drop temporary table t1;
|
||||||
|
create temporary table if not exists t1 (a1 int);
|
||||||
|
execute stmt;
|
||||||
|
drop temporary table t1;
|
||||||
|
create temporary table if not exists t1 (a1 int);
|
||||||
|
execute stmt;
|
||||||
|
drop temporary table t1;
|
||||||
|
create temporary table if not exists t1 (a1 int);
|
||||||
|
execute stmt;
|
||||||
|
drop temporary table t1;
|
||||||
|
deallocate prepare stmt;
|
||||||
create table t1 (a char(3) not null, b char(3) not null,
|
create table t1 (a char(3) not null, b char(3) not null,
|
||||||
c char(3) not null, primary key (a, b, c));
|
c char(3) not null, primary key (a, b, c));
|
||||||
create table t2 like t1;
|
create table t2 like t1;
|
||||||
|
@ -290,7 +290,6 @@ drop table t1;
|
|||||||
select str_to_date( 1, NULL );
|
select str_to_date( 1, NULL );
|
||||||
select str_to_date( NULL, 1 );
|
select str_to_date( NULL, 1 );
|
||||||
select str_to_date( 1, IF(1=1,NULL,NULL) );
|
select str_to_date( 1, IF(1=1,NULL,NULL) );
|
||||||
# End of 4.1 tests
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#11326
|
# Bug#11326
|
||||||
@ -321,3 +320,10 @@ SELECT TIME_FORMAT("12:00:00", '%l %p');
|
|||||||
SELECT TIME_FORMAT("23:00:00", '%l %p');
|
SELECT TIME_FORMAT("23:00:00", '%l %p');
|
||||||
SELECT TIME_FORMAT("24:00:00", '%l %p');
|
SELECT TIME_FORMAT("24:00:00", '%l %p');
|
||||||
SELECT TIME_FORMAT("25:00:00", '%l %p');
|
SELECT TIME_FORMAT("25:00:00", '%l %p');
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#20729: Bad date_format() call makes mysql server crash
|
||||||
|
#
|
||||||
|
SELECT DATE_FORMAT('%Y-%m-%d %H:%i:%s', 1151414896);
|
||||||
|
|
||||||
|
--echo "End of 4.1 tests"
|
||||||
|
27
mysql-test/t/lowercase_fs_off.test
Normal file
27
mysql-test/t/lowercase_fs_off.test
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#
|
||||||
|
# Specific tests for case sensitive file systems
|
||||||
|
# i.e. lower_case_filesystem=OFF
|
||||||
|
#
|
||||||
|
-- source include/have_case_sensitive_file_system.inc
|
||||||
|
|
||||||
|
connect (master,localhost,root,,);
|
||||||
|
connection master;
|
||||||
|
create database d1;
|
||||||
|
grant all on d1.* to 'sample'@'localhost' identified by 'password';
|
||||||
|
flush privileges;
|
||||||
|
|
||||||
|
connect (sample,localhost,sample,password,d1);
|
||||||
|
connection sample;
|
||||||
|
select database();
|
||||||
|
--error 1044
|
||||||
|
create database d2;
|
||||||
|
--error 1044
|
||||||
|
create database D1;
|
||||||
|
disconnect sample;
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
drop database if exists d1;
|
||||||
|
disconnect master;
|
||||||
|
connection default;
|
||||||
|
|
||||||
|
# End of 4.1 tests
|
29
mysql-test/t/mysql_client.test
Normal file
29
mysql-test/t/mysql_client.test
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# This test should work in embedded server after we fix mysqltest
|
||||||
|
-- source include/not_embedded.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #20432: mysql client interprets commands in comments
|
||||||
|
#
|
||||||
|
|
||||||
|
# if the client sees the 'use' within the comment, we haven't fixed
|
||||||
|
--exec echo "/*" > $MYSQLTEST_VARDIR/tmp/bug20432.sql
|
||||||
|
--exec echo "use" >> $MYSQLTEST_VARDIR/tmp/bug20432.sql
|
||||||
|
--exec echo "*/" >> $MYSQLTEST_VARDIR/tmp/bug20432.sql
|
||||||
|
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug20432.sql 2>&1
|
||||||
|
|
||||||
|
# SQL can have embedded comments => workie
|
||||||
|
--exec echo "select /*" > $MYSQLTEST_VARDIR/tmp/bug20432.sql
|
||||||
|
--exec echo "use" >> $MYSQLTEST_VARDIR/tmp/bug20432.sql
|
||||||
|
--exec echo "*/ 1" >> $MYSQLTEST_VARDIR/tmp/bug20432.sql
|
||||||
|
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug20432.sql 2>&1
|
||||||
|
|
||||||
|
# client commands on the other hand must be at BOL => error
|
||||||
|
--exec echo "/*" > $MYSQLTEST_VARDIR/tmp/bug20432.sql
|
||||||
|
--exec echo "xxx" >> $MYSQLTEST_VARDIR/tmp/bug20432.sql
|
||||||
|
--exec echo "*/ use" >> $MYSQLTEST_VARDIR/tmp/bug20432.sql
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug20432.sql 2>&1
|
||||||
|
|
||||||
|
# client comment recognized, but parameter missing => error
|
||||||
|
--exec echo "use" > $MYSQLTEST_VARDIR/tmp/bug20432.sql
|
||||||
|
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug20432.sql 2>&1
|
@ -491,6 +491,30 @@ deallocate prepare stmt;
|
|||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
|
||||||
#
|
#
|
||||||
|
# Bug#19399 "Stored Procedures 'Lost Connection' when dropping/creating
|
||||||
|
# tables"
|
||||||
|
# Check that multi-delete tables are also cleaned up before re-execution.
|
||||||
|
#
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1;
|
||||||
|
create temporary table if not exists t1 (a1 int);
|
||||||
|
--enable_warnings
|
||||||
|
# exact delete syntax is essential
|
||||||
|
prepare stmt from "delete t1 from t1 where (cast(a1/3 as unsigned) * 3) = a1";
|
||||||
|
drop temporary table t1;
|
||||||
|
create temporary table if not exists t1 (a1 int);
|
||||||
|
# the server crashed on the next statement without the fix
|
||||||
|
execute stmt;
|
||||||
|
drop temporary table t1;
|
||||||
|
create temporary table if not exists t1 (a1 int);
|
||||||
|
# the problem was in memory corruption: repeat the test just in case
|
||||||
|
execute stmt;
|
||||||
|
drop temporary table t1;
|
||||||
|
create temporary table if not exists t1 (a1 int);
|
||||||
|
execute stmt;
|
||||||
|
drop temporary table t1;
|
||||||
|
deallocate prepare stmt;
|
||||||
|
|
||||||
# Bug#6102 "Server crash with prepared statement and blank after
|
# Bug#6102 "Server crash with prepared statement and blank after
|
||||||
# function name"
|
# function name"
|
||||||
# ensure that stored functions are cached when preparing a statement
|
# ensure that stored functions are cached when preparing a statement
|
||||||
|
@ -156,7 +156,10 @@ public:
|
|||||||
{
|
{
|
||||||
return (null_value=args[0]->get_time(ltime));
|
return (null_value=args[0]->get_time(ltime));
|
||||||
}
|
}
|
||||||
bool is_null() { (void) val_int(); return null_value; }
|
bool is_null() {
|
||||||
|
(void) val_int(); /* Discard result. It sets null_value as side-effect. */
|
||||||
|
return null_value;
|
||||||
|
}
|
||||||
void signal_divide_by_null();
|
void signal_divide_by_null();
|
||||||
friend class udf_handler;
|
friend class udf_handler;
|
||||||
Field *tmp_table_field() { return result_field; }
|
Field *tmp_table_field() { return result_field; }
|
||||||
|
@ -149,8 +149,8 @@ my_bool acl_init(bool dont_read_acl_tables)
|
|||||||
acl_cache= new hash_filo(ACL_CACHE_SIZE, 0, 0,
|
acl_cache= new hash_filo(ACL_CACHE_SIZE, 0, 0,
|
||||||
(hash_get_key) acl_entry_get_key,
|
(hash_get_key) acl_entry_get_key,
|
||||||
(hash_free_key) free,
|
(hash_free_key) free,
|
||||||
/* Use the case sensitive "binary" charset */
|
lower_case_file_system ?
|
||||||
&my_charset_bin);
|
system_charset_info : &my_charset_bin);
|
||||||
if (dont_read_acl_tables)
|
if (dont_read_acl_tables)
|
||||||
{
|
{
|
||||||
DBUG_RETURN(0); /* purecov: tested */
|
DBUG_RETURN(0); /* purecov: tested */
|
||||||
|
@ -124,6 +124,7 @@ void lex_start(THD *thd, uchar *buf,uint length)
|
|||||||
lex->value_list.empty();
|
lex->value_list.empty();
|
||||||
lex->update_list.empty();
|
lex->update_list.empty();
|
||||||
lex->param_list.empty();
|
lex->param_list.empty();
|
||||||
|
lex->auxilliary_table_list.empty();
|
||||||
lex->view_list.empty();
|
lex->view_list.empty();
|
||||||
lex->prepared_stmt_params.empty();
|
lex->prepared_stmt_params.empty();
|
||||||
lex->unit.next= lex->unit.master=
|
lex->unit.next= lex->unit.master=
|
||||||
|
@ -2135,7 +2135,8 @@ void reinit_stmt_before_use(THD *thd, LEX *lex)
|
|||||||
Reset old pointers to TABLEs: they are not valid since the tables
|
Reset old pointers to TABLEs: they are not valid since the tables
|
||||||
were closed in the end of previous prepare or execute call.
|
were closed in the end of previous prepare or execute call.
|
||||||
*/
|
*/
|
||||||
tables->table= 0;
|
tables->reinit_before_use(thd);
|
||||||
|
|
||||||
/* Reset is_schema_table_processed value(needed for I_S tables */
|
/* Reset is_schema_table_processed value(needed for I_S tables */
|
||||||
tables->is_schema_table_processed= FALSE;
|
tables->is_schema_table_processed= FALSE;
|
||||||
|
|
||||||
|
17
sql/table.cc
17
sql/table.cc
@ -2985,6 +2985,23 @@ Field_iterator_table_ref::get_natural_column_ref()
|
|||||||
return nj_col;
|
return nj_col;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Cleanup this table for re-execution.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
st_table_list::reinit_before_use()
|
||||||
|
*/
|
||||||
|
|
||||||
|
void st_table_list::reinit_before_use(THD * /* thd */)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Reset old pointers to TABLEs: they are not valid since the tables
|
||||||
|
were closed in the end of previous prepare or execute call.
|
||||||
|
*/
|
||||||
|
table= 0;
|
||||||
|
table_list= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
** Instansiate templates
|
** Instansiate templates
|
||||||
|
@ -668,6 +668,11 @@ typedef struct st_table_list
|
|||||||
Security_context *find_view_security_context(THD *thd);
|
Security_context *find_view_security_context(THD *thd);
|
||||||
bool prepare_view_securety_context(THD *thd);
|
bool prepare_view_securety_context(THD *thd);
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
|
Cleanup for re-execution in a prepared statement or a stored
|
||||||
|
procedure.
|
||||||
|
*/
|
||||||
|
void reinit_before_use(THD *thd);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool prep_check_option(THD *thd, uint8 check_opt_type);
|
bool prep_check_option(THD *thd, uint8 check_opt_type);
|
||||||
|
Reference in New Issue
Block a user