New startup options and some cleanups
BitKeeper/etc/ignore: Added =6 to the ignore list include/mysqld_error.h: Error message for no-mixing of table types.. sql/mysql_priv.h: New option sql/mysqld.cc: New option sql/share/english/errmsg.txt: Error message for no-mixing of table types.. sql/sql_base.cc: Checking of the mixing of table types sql/sql_parse.cc: some fixes
This commit is contained in:
parent
12d4a5efe9
commit
e3a9e7e40e
@ -391,3 +391,4 @@ support-files/mysql.spec
|
|||||||
tags
|
tags
|
||||||
tmp/*
|
tmp/*
|
||||||
vio/viotest-ssl
|
vio/viotest-ssl
|
||||||
|
=6
|
||||||
|
@ -218,4 +218,5 @@
|
|||||||
#define ER_WRONG_USAGE 1215
|
#define ER_WRONG_USAGE 1215
|
||||||
#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1216
|
#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1216
|
||||||
#define ER_CANT_UPDATE_WITH_READLOCK 1217
|
#define ER_CANT_UPDATE_WITH_READLOCK 1217
|
||||||
#define ER_ERROR_MESSAGES 218
|
#define ER_MIXING_NOT_ALLOWED 1218
|
||||||
|
#define ER_ERROR_MESSAGES 219
|
||||||
|
@ -562,7 +562,7 @@ extern ulong keybuff_size,sortbuff_size,max_item_sort_length,table_cache_size,
|
|||||||
extern ulong specialflag, current_pid;
|
extern ulong specialflag, current_pid;
|
||||||
extern bool low_priority_updates, using_update_log;
|
extern bool low_priority_updates, using_update_log;
|
||||||
extern bool opt_sql_bin_update, opt_safe_show_db, opt_warnings,
|
extern bool opt_sql_bin_update, opt_safe_show_db, opt_warnings,
|
||||||
opt_safe_user_create;
|
opt_safe_user_create, opt_no_mix_types;
|
||||||
extern char language[LIBLEN],reg_ext[FN_EXTLEN],blob_newline;
|
extern char language[LIBLEN],reg_ext[FN_EXTLEN],blob_newline;
|
||||||
extern const char **errmesg; /* Error messages */
|
extern const char **errmesg; /* Error messages */
|
||||||
extern const char *default_tx_isolation_name;
|
extern const char *default_tx_isolation_name;
|
||||||
|
@ -224,7 +224,7 @@ static bool opt_log,opt_update_log,opt_bin_log,opt_slow_log,opt_noacl,
|
|||||||
opt_large_files=sizeof(my_off_t) > 4;
|
opt_large_files=sizeof(my_off_t) > 4;
|
||||||
bool opt_sql_bin_update = 0, opt_log_slave_updates = 0, opt_safe_show_db=0,
|
bool opt_sql_bin_update = 0, opt_log_slave_updates = 0, opt_safe_show_db=0,
|
||||||
opt_show_slave_auth_info = 0, opt_old_rpl_compat = 0,
|
opt_show_slave_auth_info = 0, opt_old_rpl_compat = 0,
|
||||||
opt_safe_user_create = 0;
|
opt_safe_user_create = 0, opt_no_mix_types = 0;
|
||||||
FILE *bootstrap_file=0;
|
FILE *bootstrap_file=0;
|
||||||
int segfaulted = 0; // ensure we do not enter SIGSEGV handler twice
|
int segfaulted = 0; // ensure we do not enter SIGSEGV handler twice
|
||||||
extern MASTER_INFO glob_mi;
|
extern MASTER_INFO glob_mi;
|
||||||
@ -2521,7 +2521,7 @@ enum options {
|
|||||||
OPT_MAX_BINLOG_DUMP_EVENTS, OPT_SPORADIC_BINLOG_DUMP_FAIL,
|
OPT_MAX_BINLOG_DUMP_EVENTS, OPT_SPORADIC_BINLOG_DUMP_FAIL,
|
||||||
OPT_SHOW_SLAVE_AUTH_INFO, OPT_OLD_RPL_COMPAT,
|
OPT_SHOW_SLAVE_AUTH_INFO, OPT_OLD_RPL_COMPAT,
|
||||||
OPT_SQL_MODE,OPT_SAFE_USER_CREATE,
|
OPT_SQL_MODE,OPT_SAFE_USER_CREATE,
|
||||||
OPT_SLAVE_LOAD_TMPDIR};
|
OPT_SLAVE_LOAD_TMPDIR, OPT_NO_MIX_TYPE};
|
||||||
|
|
||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
{"ansi", no_argument, 0, 'a'},
|
{"ansi", no_argument, 0, 'a'},
|
||||||
@ -2613,6 +2613,7 @@ static struct option long_options[] = {
|
|||||||
{"safemalloc-mem-limit", required_argument, 0, (int)
|
{"safemalloc-mem-limit", required_argument, 0, (int)
|
||||||
OPT_SAFEMALLOC_MEM_LIMIT},
|
OPT_SAFEMALLOC_MEM_LIMIT},
|
||||||
{"new", no_argument, 0, 'n'},
|
{"new", no_argument, 0, 'n'},
|
||||||
|
{"no-mix-table-types", no_argument, 0, (int)OPT_NO_MIX_TYPE},
|
||||||
{"old-protocol", no_argument, 0, 'o'},
|
{"old-protocol", no_argument, 0, 'o'},
|
||||||
{"old-rpl-compat", no_argument, 0, (int)OPT_OLD_RPL_COMPAT},
|
{"old-rpl-compat", no_argument, 0, (int)OPT_OLD_RPL_COMPAT},
|
||||||
#ifdef ONE_THREAD
|
#ifdef ONE_THREAD
|
||||||
@ -3094,6 +3095,7 @@ static void usage(void)
|
|||||||
BACKUP or FORCE.\n\
|
BACKUP or FORCE.\n\
|
||||||
--memlock Lock mysqld in memory\n\
|
--memlock Lock mysqld in memory\n\
|
||||||
-n, --new Use very new possible 'unsafe' functions\n\
|
-n, --new Use very new possible 'unsafe' functions\n\
|
||||||
|
--no-mix-table-types Do not use transactional and non-transactional tables in a single query\n
|
||||||
-o, --old-protocol Use the old (3.20) protocol\n\
|
-o, --old-protocol Use the old (3.20) protocol\n\
|
||||||
-P, --port=... Port number to use for connection\n");
|
-P, --port=... Port number to use for connection\n");
|
||||||
#ifdef ONE_THREAD
|
#ifdef ONE_THREAD
|
||||||
@ -3577,6 +3579,9 @@ static void get_options(int argc,char **argv)
|
|||||||
case (int) OPT_LONG_FORMAT:
|
case (int) OPT_LONG_FORMAT:
|
||||||
opt_specialflag|=SPECIAL_LONG_LOG_FORMAT;
|
opt_specialflag|=SPECIAL_LONG_LOG_FORMAT;
|
||||||
break;
|
break;
|
||||||
|
case (int) OPT_NO_MIX_TYPE:
|
||||||
|
opt_no_mix_types = 1;
|
||||||
|
break;
|
||||||
case (int) OPT_SKIP_NETWORKING:
|
case (int) OPT_SKIP_NETWORKING:
|
||||||
opt_disable_networking=1;
|
opt_disable_networking=1;
|
||||||
mysql_port=0;
|
mysql_port=0;
|
||||||
|
@ -219,3 +219,4 @@
|
|||||||
"Wrong usage of %s and %s",
|
"Wrong usage of %s and %s",
|
||||||
"The used SELECT statements have a different number of columns",
|
"The used SELECT statements have a different number of columns",
|
||||||
"Can't execute the query because you have a conflicting read lock",
|
"Can't execute the query because you have a conflicting read lock",
|
||||||
|
"Mixing transactional and non-transactional tables disabled by option",
|
@ -1368,6 +1368,18 @@ int open_tables(THD *thd,TABLE_LIST *start)
|
|||||||
tables->table->reginfo.lock_type=tables->lock_type;
|
tables->table->reginfo.lock_type=tables->lock_type;
|
||||||
tables->table->grant= tables->grant;
|
tables->table->grant= tables->grant;
|
||||||
}
|
}
|
||||||
|
if (opt_no_mix_types && start)
|
||||||
|
{
|
||||||
|
bool checking; TABLE_LIST *tl;
|
||||||
|
for (tl=start, checking = tl->table->file->has_transactions(), tl=tl->next; tl ; tl=tl->next)
|
||||||
|
{
|
||||||
|
if (((tl->table->file->has_transactions()) ^ checking))
|
||||||
|
{
|
||||||
|
send_error(&thd->net,ER_MIXING_NOT_ALLOWED);
|
||||||
|
DBUG_RETURN(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
thd->proc_info=0;
|
thd->proc_info=0;
|
||||||
DBUG_RETURN(result);
|
DBUG_RETURN(result);
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,6 @@ static void remove_escape(char *name);
|
|||||||
static void refresh_status(void);
|
static void refresh_status(void);
|
||||||
static bool append_file_to_dir(char **filename_ptr, char *table_name);
|
static bool append_file_to_dir(char **filename_ptr, char *table_name);
|
||||||
static int create_total_list(THD *thd, LEX *lex, TABLE_LIST **result);
|
static int create_total_list(THD *thd, LEX *lex, TABLE_LIST **result);
|
||||||
static int handle_create_select(THD *thd, LEX *lex, select_result *c_i);
|
|
||||||
|
|
||||||
const char *any_db="*any*"; // Special symbol for check_access
|
const char *any_db="*any*"; // Special symbol for check_access
|
||||||
|
|
||||||
@ -1076,11 +1075,13 @@ mysql_execute_command(void)
|
|||||||
/*
|
/*
|
||||||
Skip if we are in the slave thread, some table rules have been given
|
Skip if we are in the slave thread, some table rules have been given
|
||||||
and the table list says the query should not be replicated
|
and the table list says the query should not be replicated
|
||||||
TODO: UPDATE this for UNION
|
TODO: UPDATE this for UNION. Updated by Sinisa !!!!!!!!!!!!!!!!!!!!!!
|
||||||
*/
|
*/
|
||||||
|
if (lex->select_lex.next && tables && (res = create_total_list(thd,lex,&tables)))
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
if (table_rules_on && thd->slave_thread && tables && !tables_ok(thd,tables))
|
if (table_rules_on && thd->slave_thread && tables && !tables_ok(thd,tables))
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
|
|
||||||
switch (lex->sql_command) {
|
switch (lex->sql_command) {
|
||||||
case SQLCOM_SELECT:
|
case SQLCOM_SELECT:
|
||||||
{
|
{
|
||||||
@ -1088,8 +1089,6 @@ mysql_execute_command(void)
|
|||||||
if (select_lex->options & SELECT_DESCRIBE)
|
if (select_lex->options & SELECT_DESCRIBE)
|
||||||
lex->exchange=0;
|
lex->exchange=0;
|
||||||
/* Save a call, as it's very uncomon that we use unions */
|
/* Save a call, as it's very uncomon that we use unions */
|
||||||
if (lex->select_lex.next && (res = create_total_list(thd,lex,&tables)))
|
|
||||||
break;
|
|
||||||
if (tables)
|
if (tables)
|
||||||
{
|
{
|
||||||
res=check_table_access(thd,
|
res=check_table_access(thd,
|
||||||
@ -1295,8 +1294,6 @@ mysql_execute_command(void)
|
|||||||
if (select_lex->item_list.elements) // With select
|
if (select_lex->item_list.elements) // With select
|
||||||
{
|
{
|
||||||
select_result *result;
|
select_result *result;
|
||||||
if ((res = create_total_list(thd,lex,&tables)))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (!(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) &&
|
if (!(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) &&
|
||||||
check_dup(thd,tables->db,tables->real_name,tables->next))
|
check_dup(thd,tables->db,tables->real_name,tables->next))
|
||||||
@ -1574,8 +1571,6 @@ mysql_execute_command(void)
|
|||||||
case SQLCOM_REPLACE_SELECT:
|
case SQLCOM_REPLACE_SELECT:
|
||||||
case SQLCOM_INSERT_SELECT:
|
case SQLCOM_INSERT_SELECT:
|
||||||
{
|
{
|
||||||
if ((res = create_total_list(thd,lex,&tables)))
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Check that we have modify privileges for the first table and
|
// Check that we have modify privileges for the first table and
|
||||||
// select privileges for the rest
|
// select privileges for the rest
|
||||||
|
Loading…
x
Reference in New Issue
Block a user