mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge branch '5.5' into 10.0
This commit is contained in:
@ -264,9 +264,15 @@ IF(HAVE_GGDB3)
|
||||
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb3")
|
||||
ENDIF(HAVE_GGDB3)
|
||||
|
||||
OPTION(ENABLED_LOCAL_INFILE
|
||||
"If we should should enable LOAD DATA LOCAL by default" ${IF_WIN})
|
||||
SET(ENABLED_LOCAL_INFILE "AUTO" CACHE STRING "If we should should enable LOAD DATA LOCAL by default (OFF/ON/AUTO)")
|
||||
MARK_AS_ADVANCED(ENABLED_LOCAL_INFILE)
|
||||
IF (ENABLED_LOCAL_INFILE MATCHES "^(0|FALSE)$")
|
||||
SET(ENABLED_LOCAL_INFILE OFF)
|
||||
ELSEIF(ENABLED_LOCAL_INFILE MATCHES "^(1|TRUE)$")
|
||||
SET(ENABLED_LOCAL_INFILE ON)
|
||||
ELSEIF (NOT ENABLED_LOCAL_INFILE MATCHES "^(ON|OFF|AUTO)$")
|
||||
MESSAGE(FATAL_ERROR "ENABLED_LOCAL_INFILE must be one of OFF, ON, AUTO")
|
||||
ENDIF()
|
||||
|
||||
OPTION(WITH_FAST_MUTEXES "Compile with fast mutexes" OFF)
|
||||
MARK_AS_ADVANCED(WITH_FAST_MUTEXES)
|
||||
|
@ -6105,7 +6105,6 @@ void do_connect(struct st_command *command)
|
||||
#endif
|
||||
if (opt_compress || con_compress)
|
||||
mysql_options(con_slot->mysql, MYSQL_OPT_COMPRESS, NullS);
|
||||
mysql_options(con_slot->mysql, MYSQL_OPT_LOCAL_INFILE, 0);
|
||||
mysql_options(con_slot->mysql, MYSQL_SET_CHARSET_NAME,
|
||||
charset_info->csname);
|
||||
if (opt_charsets_dir)
|
||||
@ -9211,7 +9210,6 @@ int main(int argc, char **argv)
|
||||
(void *) &opt_connect_timeout);
|
||||
if (opt_compress)
|
||||
mysql_options(con->mysql,MYSQL_OPT_COMPRESS,NullS);
|
||||
mysql_options(con->mysql, MYSQL_OPT_LOCAL_INFILE, 0);
|
||||
mysql_options(con->mysql, MYSQL_SET_CHARSET_NAME,
|
||||
charset_info->csname);
|
||||
if (opt_charsets_dir)
|
||||
|
@ -96,7 +96,6 @@ IF(FEATURE_SET)
|
||||
ENDFOREACH()
|
||||
ENDIF()
|
||||
|
||||
OPTION(ENABLED_LOCAL_INFILE "" ON)
|
||||
IF(RPM)
|
||||
SET(WITH_SSL system CACHE STRING "")
|
||||
SET(WITH_ZLIB system CACHE STRING "")
|
||||
|
@ -536,7 +536,11 @@
|
||||
/*
|
||||
MySQL features
|
||||
*/
|
||||
#cmakedefine ENABLED_LOCAL_INFILE 1
|
||||
#define LOCAL_INFILE_MODE_OFF 0
|
||||
#define LOCAL_INFILE_MODE_ON 1
|
||||
#define LOCAL_INFILE_MODE_AUTO 2
|
||||
#define ENABLED_LOCAL_INFILE LOCAL_INFILE_MODE_@ENABLED_LOCAL_INFILE@
|
||||
|
||||
#cmakedefine ENABLED_PROFILING 1
|
||||
#cmakedefine EXTRA_DEBUG 1
|
||||
#cmakedefine BACKUP_TEST 1
|
||||
|
@ -283,7 +283,7 @@ typedef struct st_mysql
|
||||
|
||||
/* session-wide random string */
|
||||
char scramble[SCRAMBLE_LENGTH+1];
|
||||
my_bool unused1;
|
||||
my_bool auto_local_infile;
|
||||
void *unused2, *unused3, *unused4, *unused5;
|
||||
|
||||
LIST *stmts; /* list of all statements */
|
||||
|
@ -354,7 +354,7 @@ typedef struct st_mysql
|
||||
my_bool free_me;
|
||||
my_bool reconnect;
|
||||
char scramble[20 +1];
|
||||
my_bool unused1;
|
||||
my_bool auto_local_infile;
|
||||
void *unused2, *unused3, *unused4, *unused5;
|
||||
LIST *stmts;
|
||||
const struct st_mysql_methods *methods;
|
||||
|
@ -19,3 +19,4 @@ ssl_crl : broken upstream
|
||||
ssl_crl_clrpath : broken upstream
|
||||
file_contents : MDEV-6526 these files are not installed anymore
|
||||
lowercase_fs_on : lower_case_table_names=0 is not an error until 10.1
|
||||
partition_open_files_limit : open_files_limit check broken by MDEV-18360
|
||||
|
@ -587,3 +587,29 @@ a
|
||||
2
|
||||
drop table "a1\""b1";
|
||||
set sql_mode=default;
|
||||
create table t1 (a text);
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
41
|
||||
truncate table t1;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
41
|
||||
truncate table t1;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
0
|
||||
truncate table t1;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
0
|
||||
truncate table t1;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
41
|
||||
truncate table t1;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
0
|
||||
truncate table t1;
|
||||
drop table t1;
|
||||
|
@ -656,3 +656,25 @@ show create table "a1\""b1";
|
||||
select * from "a1\""b1";
|
||||
drop table "a1\""b1";
|
||||
set sql_mode=default;
|
||||
|
||||
#
|
||||
# mysql --local-infile
|
||||
#
|
||||
--let $ldli = load data local infile '$MYSQLTEST_VARDIR/tmp/bug.sql' into table test.t1;
|
||||
create table t1 (a text);
|
||||
--exec $MYSQL -e "$ldli"
|
||||
select count(*) from t1; truncate table t1;
|
||||
--exec $MYSQL --enable-local-infile -e "$ldli"
|
||||
select count(*) from t1; truncate table t1;
|
||||
--error 1
|
||||
--exec $MYSQL --disable-local-infile -e "$ldli"
|
||||
select count(*) from t1; truncate table t1;
|
||||
--error 1
|
||||
--exec $MYSQL -e "/*q*/$ldli"
|
||||
select count(*) from t1; truncate table t1;
|
||||
--exec $MYSQL --enable-local-infile -e "/*q*/$ldli"
|
||||
select count(*) from t1; truncate table t1;
|
||||
--error 1
|
||||
--exec $MYSQL --disable-local-infile -e "/*q*/$ldli"
|
||||
select count(*) from t1; truncate table t1;
|
||||
drop table t1;
|
||||
|
@ -52,10 +52,9 @@ static uint set_max_open_files(uint max_file_limit)
|
||||
DBUG_PRINT("info", ("rlim_cur: %u rlim_max: %u",
|
||||
(uint) rlimit.rlim_cur,
|
||||
(uint) rlimit.rlim_max));
|
||||
if ((ulonglong) rlimit.rlim_cur == (ulonglong) RLIM_INFINITY)
|
||||
rlimit.rlim_cur = max_file_limit;
|
||||
if (rlimit.rlim_cur >= max_file_limit)
|
||||
DBUG_RETURN(rlimit.rlim_cur); /* purecov: inspected */
|
||||
if ((ulonglong) rlimit.rlim_cur == (ulonglong) RLIM_INFINITY ||
|
||||
rlimit.rlim_cur >= max_file_limit)
|
||||
DBUG_RETURN(max_file_limit);
|
||||
rlimit.rlim_cur= rlimit.rlim_max= max_file_limit;
|
||||
if (setrlimit(RLIMIT_NOFILE, &rlimit))
|
||||
max_file_limit= old_cur; /* Use original value */
|
||||
|
@ -110,6 +110,12 @@ my_bool net_flush(NET *net);
|
||||
#include <my_context.h>
|
||||
#include <mysql_async.h>
|
||||
|
||||
typedef enum {
|
||||
ALWAYS_ACCEPT, /* heuristics is disabled, use CLIENT_LOCAL_FILES */
|
||||
WAIT_FOR_QUERY, /* heuristics is enabled, not sending files */
|
||||
ACCEPT_FILE_REQUEST /* heuristics is enabled, ready to send a file */
|
||||
} auto_local_infile_state;
|
||||
|
||||
#define native_password_plugin_name "mysql_native_password"
|
||||
#define old_password_plugin_name "mysql_old_password"
|
||||
|
||||
@ -1632,8 +1638,10 @@ mysql_init(MYSQL *mysql)
|
||||
--enable-local-infile
|
||||
*/
|
||||
|
||||
#if defined(ENABLED_LOCAL_INFILE) && !defined(MYSQL_SERVER)
|
||||
#if ENABLED_LOCAL_INFILE && !defined(MYSQL_SERVER)
|
||||
mysql->options.client_flag|= CLIENT_LOCAL_FILES;
|
||||
mysql->auto_local_infile= ENABLED_LOCAL_INFILE == LOCAL_INFILE_MODE_AUTO
|
||||
? WAIT_FOR_QUERY : ALWAYS_ACCEPT;
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SMEM
|
||||
@ -3999,8 +4007,14 @@ static my_bool cli_read_query_result(MYSQL *mysql)
|
||||
ulong field_count;
|
||||
MYSQL_DATA *fields;
|
||||
ulong length;
|
||||
#ifdef MYSQL_CLIENT
|
||||
my_bool can_local_infile= mysql->auto_local_infile != WAIT_FOR_QUERY;
|
||||
#endif
|
||||
DBUG_ENTER("cli_read_query_result");
|
||||
|
||||
if (mysql->auto_local_infile == ACCEPT_FILE_REQUEST)
|
||||
mysql->auto_local_infile= WAIT_FOR_QUERY;
|
||||
|
||||
if ((length = cli_safe_read(mysql)) == packet_error)
|
||||
DBUG_RETURN(1);
|
||||
free_old_query(mysql); /* Free old result */
|
||||
@ -4037,7 +4051,8 @@ get_info:
|
||||
{
|
||||
int error;
|
||||
|
||||
if (!(mysql->options.client_flag & CLIENT_LOCAL_FILES))
|
||||
if (!(mysql->options.client_flag & CLIENT_LOCAL_FILES) ||
|
||||
!can_local_infile)
|
||||
{
|
||||
set_mysql_error(mysql, CR_MALFORMED_PACKET, unknown_sqlstate);
|
||||
DBUG_RETURN(1);
|
||||
@ -4075,6 +4090,13 @@ int STDCALL
|
||||
mysql_send_query(MYSQL* mysql, const char* query, ulong length)
|
||||
{
|
||||
DBUG_ENTER("mysql_send_query");
|
||||
if (mysql->options.client_flag & CLIENT_LOCAL_FILES &&
|
||||
mysql->auto_local_infile == WAIT_FOR_QUERY &&
|
||||
(*query == 'l' || *query == 'L'))
|
||||
{
|
||||
if (strncasecmp(query, STRING_WITH_LEN("load")) == 0)
|
||||
mysql->auto_local_infile= ACCEPT_FILE_REQUEST;
|
||||
}
|
||||
DBUG_RETURN(simple_command(mysql, COM_QUERY, (uchar*) query, length, 1));
|
||||
}
|
||||
|
||||
@ -4288,10 +4310,12 @@ mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg)
|
||||
mysql->options.protocol=MYSQL_PROTOCOL_PIPE; /* Force named pipe */
|
||||
break;
|
||||
case MYSQL_OPT_LOCAL_INFILE: /* Allow LOAD DATA LOCAL ?*/
|
||||
if (!arg || MY_TEST(*(uint*) arg))
|
||||
if (!arg || *(uint*) arg)
|
||||
mysql->options.client_flag|= CLIENT_LOCAL_FILES;
|
||||
else
|
||||
mysql->options.client_flag&= ~CLIENT_LOCAL_FILES;
|
||||
mysql->auto_local_infile= arg && *(uint*)arg == LOCAL_INFILE_MODE_AUTO
|
||||
? WAIT_FOR_QUERY : ALWAYS_ACCEPT;
|
||||
break;
|
||||
case MYSQL_INIT_COMMAND:
|
||||
add_init_command(&mysql->options,arg);
|
||||
|
Reference in New Issue
Block a user