mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
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
8 changed files with 28 additions and 13 deletions
|
@ -391,3 +391,4 @@ support-files/mysql.spec
|
|||
tags
|
||||
tmp/*
|
||||
vio/viotest-ssl
|
||||
=6
|
||||
|
|
0
=6
Normal file
0
=6
Normal file
|
@ -218,4 +218,5 @@
|
|||
#define ER_WRONG_USAGE 1215
|
||||
#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1216
|
||||
#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 bool low_priority_updates, using_update_log;
|
||||
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 const char **errmesg; /* Error messages */
|
||||
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;
|
||||
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_safe_user_create = 0;
|
||||
opt_safe_user_create = 0, opt_no_mix_types = 0;
|
||||
FILE *bootstrap_file=0;
|
||||
int segfaulted = 0; // ensure we do not enter SIGSEGV handler twice
|
||||
extern MASTER_INFO glob_mi;
|
||||
|
@ -2521,7 +2521,7 @@ enum options {
|
|||
OPT_MAX_BINLOG_DUMP_EVENTS, OPT_SPORADIC_BINLOG_DUMP_FAIL,
|
||||
OPT_SHOW_SLAVE_AUTH_INFO, OPT_OLD_RPL_COMPAT,
|
||||
OPT_SQL_MODE,OPT_SAFE_USER_CREATE,
|
||||
OPT_SLAVE_LOAD_TMPDIR};
|
||||
OPT_SLAVE_LOAD_TMPDIR, OPT_NO_MIX_TYPE};
|
||||
|
||||
static struct option long_options[] = {
|
||||
{"ansi", no_argument, 0, 'a'},
|
||||
|
@ -2613,6 +2613,7 @@ static struct option long_options[] = {
|
|||
{"safemalloc-mem-limit", required_argument, 0, (int)
|
||||
OPT_SAFEMALLOC_MEM_LIMIT},
|
||||
{"new", no_argument, 0, 'n'},
|
||||
{"no-mix-table-types", no_argument, 0, (int)OPT_NO_MIX_TYPE},
|
||||
{"old-protocol", no_argument, 0, 'o'},
|
||||
{"old-rpl-compat", no_argument, 0, (int)OPT_OLD_RPL_COMPAT},
|
||||
#ifdef ONE_THREAD
|
||||
|
@ -3094,6 +3095,7 @@ static void usage(void)
|
|||
BACKUP or FORCE.\n\
|
||||
--memlock Lock mysqld in memory\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\
|
||||
-P, --port=... Port number to use for connection\n");
|
||||
#ifdef ONE_THREAD
|
||||
|
@ -3577,6 +3579,9 @@ static void get_options(int argc,char **argv)
|
|||
case (int) OPT_LONG_FORMAT:
|
||||
opt_specialflag|=SPECIAL_LONG_LOG_FORMAT;
|
||||
break;
|
||||
case (int) OPT_NO_MIX_TYPE:
|
||||
opt_no_mix_types = 1;
|
||||
break;
|
||||
case (int) OPT_SKIP_NETWORKING:
|
||||
opt_disable_networking=1;
|
||||
mysql_port=0;
|
||||
|
|
|
@ -219,3 +219,4 @@
|
|||
"Wrong usage of %s and %s",
|
||||
"The used SELECT statements have a different number of columns",
|
||||
"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->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;
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
|
|
|
@ -48,7 +48,6 @@ static void remove_escape(char *name);
|
|||
static void refresh_status(void);
|
||||
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 handle_create_select(THD *thd, LEX *lex, select_result *c_i);
|
||||
|
||||
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
|
||||
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))
|
||||
DBUG_VOID_RETURN;
|
||||
|
||||
|
||||
switch (lex->sql_command) {
|
||||
case SQLCOM_SELECT:
|
||||
{
|
||||
|
@ -1088,8 +1089,6 @@ mysql_execute_command(void)
|
|||
if (select_lex->options & SELECT_DESCRIBE)
|
||||
lex->exchange=0;
|
||||
/* 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)
|
||||
{
|
||||
res=check_table_access(thd,
|
||||
|
@ -1295,8 +1294,6 @@ mysql_execute_command(void)
|
|||
if (select_lex->item_list.elements) // With select
|
||||
{
|
||||
select_result *result;
|
||||
if ((res = create_total_list(thd,lex,&tables)))
|
||||
break;
|
||||
|
||||
if (!(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) &&
|
||||
check_dup(thd,tables->db,tables->real_name,tables->next))
|
||||
|
@ -1574,8 +1571,6 @@ mysql_execute_command(void)
|
|||
case SQLCOM_REPLACE_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
|
||||
// select privileges for the rest
|
||||
|
|
Loading…
Reference in a new issue