diff options
author | unknown <Sinisa@sinisa.nasamreza.org> | 2001-08-18 15:29:21 +0300 |
---|---|---|
committer | unknown <Sinisa@sinisa.nasamreza.org> | 2001-08-18 15:29:21 +0300 |
commit | e3a9e7e40e63e8bed554cfbceacf29490df1a14a (patch) | |
tree | 35de6d990347d36ed98c291f451de3d5c41dc151 | |
parent | 12d4a5efe938688ef935818d22880137c95c2bfc (diff) | |
download | mariadb-git-e3a9e7e40e63e8bed554cfbceacf29490df1a14a.tar.gz |
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
-rw-r--r-- | .bzrignore | 1 | ||||
-rw-r--r-- | =6 | 0 | ||||
-rw-r--r-- | include/mysqld_error.h | 3 | ||||
-rw-r--r-- | sql/mysql_priv.h | 2 | ||||
-rw-r--r-- | sql/mysqld.cc | 9 | ||||
-rw-r--r-- | sql/share/english/errmsg.txt | 1 | ||||
-rw-r--r-- | sql/sql_base.cc | 12 | ||||
-rw-r--r-- | sql/sql_parse.cc | 13 |
8 files changed, 28 insertions, 13 deletions
diff --git a/.bzrignore b/.bzrignore index 64c67aba176..6660cfb86f7 100644 --- a/.bzrignore +++ b/.bzrignore @@ -391,3 +391,4 @@ support-files/mysql.spec tags tmp/* vio/viotest-ssl +=6 diff --git a/include/mysqld_error.h b/include/mysqld_error.h index ab37065b761..c921beafa4a 100644 --- a/include/mysqld_error.h +++ b/include/mysqld_error.h @@ -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 diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index dbc8f1a06cd..c73df4eaaeb 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -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; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 4e50ac2e8cf..e3670ff9803 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -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; diff --git a/sql/share/english/errmsg.txt b/sql/share/english/errmsg.txt index 8a9e246c3e2..b2b298d62a8 100644 --- a/sql/share/english/errmsg.txt +++ b/sql/share/english/errmsg.txt @@ -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",
\ No newline at end of file diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 2a9043cc0d7..0198f0ce176 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -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); } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 46906914fd4..386fd61c61e 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -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 |