summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <monty@mishka.local>2005-04-16 04:35:54 +0300
committerunknown <monty@mishka.local>2005-04-16 04:35:54 +0300
commit2be63528bc0f7d524df4660cea4fcc002604c42e (patch)
tree4432c91a9b8ee8482b369f2a066a5e9a9d87b399 /sql
parent88538066ba1cbf80da5f88b0d4188f8b875127c9 (diff)
parent9b224e9180d26aa5b7e087537255c60c5c061ad3 (diff)
downloadmariadb-git-2be63528bc0f7d524df4660cea4fcc002604c42e.tar.gz
Merge with 4.1
scripts/mysql_create_system_tables.sh: Auto merged scripts/mysql_fix_privilege_tables.sql: Auto merged sql/set_var.cc: Auto merged support-files/mysql.server.sh: Auto merged sql/ha_ndbcluster.cc: Merge sql/handler.cc: Merge sql/handler.h: Merge sql/mysqld.cc: Merge
Diffstat (limited to 'sql')
-rw-r--r--sql/ha_ndbcluster.cc28
-rw-r--r--sql/handler.cc20
-rw-r--r--sql/handler.h1
-rw-r--r--sql/mysqld.cc29
-rw-r--r--sql/set_var.cc4
5 files changed, 66 insertions, 16 deletions
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index a522d6256fb..020a76b667e 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -67,6 +67,8 @@ static handlerton ndbcluster_hton = {
#define NDB_HIDDEN_PRIMARY_KEY_LENGTH 8
+#define NDB_FAILED_AUTO_INCREMENT ~(Uint64)0
+#define NDB_AUTO_INCREMENT_RETRIES 10
#define ERR_PRINT(err) \
DBUG_PRINT("error", ("%d message: %s", err.code, err.message))
@@ -1928,7 +1930,15 @@ int ha_ndbcluster::write_row(byte *record)
{
// Table has hidden primary key
Ndb *ndb= get_ndb();
- Uint64 auto_value= ndb->getAutoIncrementValue((const NDBTAB *) m_table);
+ Uint64 auto_value= NDB_FAILED_AUTO_INCREMENT;
+ uint retries= NDB_AUTO_INCREMENT_RETRIES;
+ do {
+ auto_value= ndb->getAutoIncrementValue((const NDBTAB *) m_table);
+ } while (auto_value == NDB_FAILED_AUTO_INCREMENT &&
+ --retries &&
+ ndb->getNdbError().status == NdbError::TemporaryError);
+ if (auto_value == NDB_FAILED_AUTO_INCREMENT)
+ ERR_RETURN(ndb->getNdbError());
if (set_hidden_key(op, table->s->fields, (const byte*)&auto_value))
ERR_RETURN(op->getNdbError());
}
@@ -4119,10 +4129,18 @@ ulonglong ha_ndbcluster::get_auto_increment()
: (m_rows_to_insert > m_autoincrement_prefetch) ?
m_rows_to_insert
: m_autoincrement_prefetch;
- auto_value=
- (m_skip_auto_increment) ?
- ndb->readAutoIncrementValue((const NDBTAB *) m_table)
- : ndb->getAutoIncrementValue((const NDBTAB *) m_table, cache_size);
+ auto_value= NDB_FAILED_AUTO_INCREMENT;
+ uint retries= NDB_AUTO_INCREMENT_RETRIES;
+ do {
+ auto_value=
+ (m_skip_auto_increment) ?
+ ndb->readAutoIncrementValue((const NDBTAB *) m_table)
+ : ndb->getAutoIncrementValue((const NDBTAB *) m_table, cache_size);
+ } while (auto_value == NDB_FAILED_AUTO_INCREMENT &&
+ --retries &&
+ ndb->getNdbError().status == NdbError::TemporaryError);
+ if (auto_value == NDB_FAILED_AUTO_INCREMENT)
+ ERR_RETURN(ndb->getNdbError());
DBUG_RETURN((longlong)auto_value);
}
diff --git a/sql/handler.cc b/sql/handler.cc
index 8315ec6bb1a..14b8974ece9 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -149,18 +149,27 @@ const char *ha_get_storage_engine(enum db_type db_type)
return "none";
}
- /* Use other database handler if databasehandler is not incompiled */
-enum db_type ha_checktype(enum db_type database_type)
+my_bool ha_storage_engine_is_enabled(enum db_type database_type)
{
show_table_type_st *types;
- THD *thd= current_thd;
for (types= sys_table_types; types->type; types++)
{
- if ((database_type == types->db_type) &&
+ if ((database_type == types->db_type) &&
(*types->value == SHOW_OPTION_YES))
- return database_type;
+ return TRUE;
}
+ return FALSE;
+}
+
+
+ /* Use other database handler if databasehandler is not incompiled */
+
+enum db_type ha_checktype(enum db_type database_type)
+{
+ THD *thd;
+ if (ha_storage_engine_is_enabled(database_type))
+ return database_type;
switch (database_type) {
#ifndef NO_HASH
@@ -173,6 +182,7 @@ enum db_type ha_checktype(enum db_type database_type)
break;
}
+ thd= current_thd;
return ((enum db_type) thd->variables.table_type != DB_TYPE_UNKNOWN ?
(enum db_type) thd->variables.table_type :
(enum db_type) global_system_variables.table_type !=
diff --git a/sql/handler.h b/sql/handler.h
index 5d26bca241a..4c06fe8299d 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -819,6 +819,7 @@ TYPELIB *ha_known_exts(void);
int ha_panic(enum ha_panic_function flag);
int ha_update_statistics();
void ha_close_connection(THD* thd);
+my_bool ha_storage_engine_is_enabled(enum db_type database_type);
bool ha_flush_logs(void);
void ha_drop_database(char* path);
int ha_create_table(const char *name, HA_CREATE_INFO *create_info,
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 39ec71acf34..9c592d068ee 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -1185,6 +1185,7 @@ static struct passwd *check_user(const char *user)
err:
sql_print_error("Fatal error: Can't change to run as user '%s' ; Please check that the user exists!\n",user);
+ unireg_abort(1);
#endif
return NULL;
}
@@ -2436,8 +2437,10 @@ static int init_common_variables(const char *conf_file_name, int argc,
{
struct tm tm_tmp;
localtime_r(&start_time,&tm_tmp);
- strmov(system_time_zone, tzname[tm_tmp.tm_isdst != 0 ? 1 : 0]);
- }
+ strmake(system_time_zone, tzname[tm_tmp.tm_isdst != 0 ? 1 : 0],
+ sizeof(system_time_zone)-1);
+
+ }
#endif
/*
We set SYSTEM time zone as reasonable default and
@@ -3144,6 +3147,7 @@ we force server id to 2, but this MySQL server will not act as a slave.");
if (opt_bootstrap)
{
+ select_thread_in_use= 0; // Allow 'kill' to work
bootstrap(stdin);
end_thr_alarm(1); // Don't allow alarms
unireg_abort(bootstrap_error ? 1 : 0);
@@ -6383,9 +6387,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case OPT_STORAGE_ENGINE:
{
if ((enum db_type)((global_system_variables.table_type=
- ha_resolve_by_name(argument, strlen(argument)))) == DB_TYPE_UNKNOWN)
+ ha_resolve_by_name(argument, strlen(argument)))) ==
+ DB_TYPE_UNKNOWN)
{
- fprintf(stderr,"Unknown table type: %s\n",argument);
+ fprintf(stderr,"Unknown/unsupported table type: %s\n",argument);
exit(1);
}
break;
@@ -6659,6 +6664,22 @@ static void get_options(int argc,char **argv)
sql_print_warning("this binary does not contain BDB storage engine");
#endif
+ /*
+ Check that the default storage engine is actually available.
+ */
+ if (!ha_storage_engine_is_enabled((enum db_type)
+ global_system_variables.table_type))
+ {
+ if (!opt_bootstrap)
+ {
+ sql_print_error("Default storage engine (%s) is not available",
+ ha_get_storage_engine((enum db_type)
+ global_system_variables.table_type));
+ exit(1);
+ }
+ global_system_variables.table_type= DB_TYPE_MYISAM;
+ }
+
if (argc > 0)
{
fprintf(stderr, "%s: Too many arguments (first extra is '%s').\nUse --help to get a list of available options\n", my_progname, *argv);
diff --git a/sql/set_var.cc b/sql/set_var.cc
index fa8eddf7218..70d64b5dac6 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -3125,8 +3125,8 @@ bool sys_var_thd_storage_engine::check(THD *thd, set_var *var)
enum db_type db_type;
if (!(res=var->value->val_str(&str)) ||
!(var->save_result.ulong_value=
- (ulong) (db_type= ha_resolve_by_name(res->ptr(), res->length()))) ||
- ha_checktype(db_type) != db_type)
+ (ulong) (db_type= ha_resolve_by_name(res->ptr(), res->length()))) ||
+ ha_checktype(db_type) != db_type)
{
value= res ? res->c_ptr() : "NULL";
goto err;