mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Added max_user_connections
Fixes for Innobase Don't reset whole to-buffer in strxnmov BUILD/compile-pentium-debug: Added innobase include/mysqld_error.h: New error messages innobase/configure.in: Update from heikki innobase/include/lock0types.h: Update from heikki innobase/include/os0sync.h: Update from heikki innobase/include/sync0types.h: Update from heikki innobase/os/os0file.c: Update from heikki innobase/srv/srv0start.c: Update from heikki sql/ha_innobase.cc: Update from Heikki Changed assert -> dbug_assert Changed return -> DBUG_RETURN sql/mysql_priv.h: Added max_user_connections sql/mysqld.cc: Added max_user_connections sql/share/czech/errmsg.txt: Added max_user_connections sql/share/danish/errmsg.txt: Added max_user_connections sql/share/dutch/errmsg.txt: Added max_user_connections sql/share/english/errmsg.txt: Added max_user_connections sql/share/estonian/errmsg.txt: Added max_user_connections sql/share/french/errmsg.txt: Added max_user_connections sql/share/german/errmsg.txt: Added max_user_connections sql/share/greek/errmsg.txt: Added max_user_connections sql/share/hungarian/errmsg.txt: Added max_user_connections sql/share/italian/errmsg.txt: Added max_user_connections sql/share/japanese/errmsg.txt: Added max_user_connections sql/share/korean/errmsg.txt: Added max_user_connections sql/share/norwegian-ny/errmsg.txt: Added max_user_connections sql/share/norwegian/errmsg.txt: Added max_user_connections sql/share/polish/errmsg.txt: Added max_user_connections sql/share/portuguese/errmsg.txt: Added max_user_connections sql/share/romanian/errmsg.txt: Added max_user_connections sql/share/russian/errmsg.txt: Added max_user_connections sql/share/slovak/errmsg.txt: Added max_user_connections sql/share/spanish/errmsg.txt: Added max_user_connections sql/share/swedish/errmsg.OLD: Added max_user_connections sql/share/swedish/errmsg.txt: Added max_user_connections sql/sql_class.h: cleanup strings/str_test.c: Added tests for strxnmov strings/strxnmov.c: Don't reset whole to buffer
This commit is contained in:
@ -11,7 +11,7 @@ extra_configs="$pentium_configs $debug_configs"
|
||||
# Use the debug version if it exists
|
||||
if test -d /usr/local/BerkeleyDB-dbug/
|
||||
then
|
||||
extra_configs="$extra_configs --with-berkeley-db=/usr/local/BerkeleyDB-dbug/"
|
||||
extra_configs="$extra_configs --with-berkeley-db=/usr/local/BerkeleyDB-dbug/ --with-innobase"
|
||||
fi
|
||||
|
||||
. "$path/FINISH.sh"
|
||||
|
@ -203,4 +203,5 @@
|
||||
#define ER_BAD_SLAVE 1200
|
||||
#define ER_MASTER_INFO 1201
|
||||
#define ER_SLAVE_THREAD 1202
|
||||
#define ER_ERROR_MESSAGES 203
|
||||
#define ER_TOO_MANY_USER_CONNECTIONS 1203
|
||||
#define ER_ERROR_MESSAGES 204
|
||||
|
@ -1,5 +1,6 @@
|
||||
# Process this file with autoconf to produce a configure script
|
||||
AC_INIT(./os/os0file.c)
|
||||
AC_INIT
|
||||
AM_MAINTAINER_MODE
|
||||
AM_CONFIG_HEADER(ib_config.h)
|
||||
AM_INIT_AUTOMAKE(ib, 0.90)
|
||||
AC_PROG_CC
|
||||
|
@ -9,6 +9,7 @@ Created 5/7/1996 Heikki Tuuri
|
||||
#ifndef lock0types_h
|
||||
#define lock0types_h
|
||||
|
||||
#define lock_t ib_lock_t
|
||||
typedef struct lock_struct lock_t;
|
||||
typedef struct lock_sys_struct lock_sys_t;
|
||||
|
||||
|
@ -25,8 +25,8 @@ struct os_event_struct {
|
||||
fields */
|
||||
ibool is_set; /* this is TRUE if the next mutex is
|
||||
not reserved */
|
||||
os_fast_mutex_t wait_mutex; /* this mutex is used in waiting for
|
||||
the event */
|
||||
pthread_cond_t cond_var; /* condition variable is used in
|
||||
waiting for the event */
|
||||
};
|
||||
typedef struct os_event_struct os_event_struct_t;
|
||||
typedef os_event_struct_t* os_event_t;
|
||||
|
@ -9,6 +9,7 @@ Created 9/5/1995 Heikki Tuuri
|
||||
#ifndef sync0types_h
|
||||
#define sync0types_h
|
||||
|
||||
#define mutex_t ib_mutex_t
|
||||
typedef struct mutex_struct mutex_t;
|
||||
|
||||
|
||||
|
@ -316,8 +316,11 @@ try_again:
|
||||
UT_NOT_USED(purpose);
|
||||
|
||||
if (create_mode == OS_FILE_CREATE) {
|
||||
|
||||
#ifndef S_IRWXU
|
||||
file = open(name, create_flag);
|
||||
#else
|
||||
file = open(name, create_flag, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
#endif
|
||||
} else {
|
||||
file = open(name, create_flag);
|
||||
}
|
||||
|
@ -56,6 +56,9 @@ Created 2/16/1996 Heikki Tuuri
|
||||
#include "srv0start.h"
|
||||
#include "que0que.h"
|
||||
|
||||
ibool srv_is_being_started = FALSE;
|
||||
ibool srv_was_started = FALSE;
|
||||
|
||||
ibool measure_cont = FALSE;
|
||||
|
||||
os_file_t files[1000];
|
||||
@ -443,6 +446,8 @@ innobase_start_or_create_for_mysql(void)
|
||||
log_do_write = TRUE;
|
||||
/* yydebug = TRUE; */
|
||||
|
||||
srv_is_being_started = TRUE;
|
||||
|
||||
os_aio_use_native_aio = srv_use_native_aio;
|
||||
|
||||
err = srv_boot();
|
||||
@ -676,6 +681,9 @@ innobase_start_or_create_for_mysql(void)
|
||||
thread_ids + 2 + SRV_MAX_N_IO_THREADS);
|
||||
fprintf(stderr, "Innobase: Started\n");
|
||||
|
||||
srv_was_started = TRUE;
|
||||
srv_is_being_started = FALSE;
|
||||
|
||||
sync_order_checks_on = TRUE;
|
||||
|
||||
/* buf_debug_prints = TRUE; */
|
||||
@ -691,6 +699,14 @@ innobase_shutdown_for_mysql(void)
|
||||
/*=============================*/
|
||||
/* out: DB_SUCCESS or error code */
|
||||
{
|
||||
if (!srv_was_started) {
|
||||
if (srv_is_being_started) {
|
||||
fprintf(stderr,
|
||||
"Innobase: Warning: shutting down not properly started database\n");
|
||||
}
|
||||
return(DB_SUCCESS);
|
||||
}
|
||||
|
||||
/* Flush buffer pool to disk, write the current lsn to
|
||||
the tablespace header(s), and copy all log data to archive */
|
||||
|
||||
|
@ -172,9 +172,9 @@ convert_error_code_to_mysql(
|
||||
return(HA_ERR_TO_BIG_ROW);
|
||||
|
||||
} else {
|
||||
assert(0);
|
||||
dbug_assert(0);
|
||||
|
||||
return(0);
|
||||
return(-1); // Unknown error
|
||||
}
|
||||
}
|
||||
|
||||
@ -194,7 +194,7 @@ check_trx_exists(
|
||||
trx = (trx_t*) thd->transaction.all.innobase_tid;
|
||||
|
||||
if (trx == NULL) {
|
||||
assert(thd != NULL);
|
||||
dbug_assert(thd != NULL);
|
||||
trx = trx_allocate_for_mysql();
|
||||
|
||||
thd->transaction.all.innobase_tid = trx;
|
||||
@ -418,31 +418,41 @@ innobase_init(void)
|
||||
int err;
|
||||
bool ret;
|
||||
ibool test_bool;
|
||||
|
||||
static char *current_dir[3];
|
||||
DBUG_ENTER("innobase_init");
|
||||
|
||||
test_bool = TRUE;
|
||||
assert(test_bool == 1);
|
||||
test_bool = FALSE;
|
||||
assert(test_bool == 0);
|
||||
/* Use current_dir if no paths are set */
|
||||
current_dir[0]=FN_CURLIB;
|
||||
current_dir[1]=FN_LIBCHAR;
|
||||
current_dir[2]=0;
|
||||
|
||||
/* Set Innobase initialization parameters according to the values
|
||||
read from MySQL .cnf file */
|
||||
|
||||
srv_data_home = innobase_data_home_dir;
|
||||
if (!innobase_data_file_path)
|
||||
{
|
||||
fprintf(stderr,"Can't initialize innobase as 'innobase_data_file_path' is not set\n");
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
srv_data_home = (innobase_data_home_dir ? innobase_data_home_dir :
|
||||
current_dir);
|
||||
srv_logs_home = "";
|
||||
srv_arch_dir = innobase_log_arch_dir;
|
||||
srv_arch_dir = (innobase_log_arch_dir ? innobase_log_arch_dir :
|
||||
current_dir);
|
||||
|
||||
ret = innobase_parse_data_file_paths_and_sizes();
|
||||
|
||||
if (ret == FALSE) {
|
||||
return(TRUE);
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
if (!innobase_log_group_home_dir)
|
||||
innobase_log_group_home_dir= current_dir;
|
||||
ret = innobase_parse_log_group_home_dirs();
|
||||
|
||||
if (ret == FALSE) {
|
||||
return(TRUE);
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
srv_n_log_groups = (ulint) innobase_mirrored_log_groups;
|
||||
@ -466,12 +476,12 @@ innobase_init(void)
|
||||
|
||||
if (err != DB_SUCCESS) {
|
||||
|
||||
return(1);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
(void) hash_init(&innobase_open_tables,32,0,0,
|
||||
(hash_get_key) innobase_get_key,0,0);
|
||||
pthread_mutex_init(&innobase_mutex,NULL);
|
||||
return(0);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
@ -490,10 +500,10 @@ innobase_end(void)
|
||||
|
||||
if (err != DB_SUCCESS) {
|
||||
|
||||
return(1);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
return(0);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
/********************************************************************
|
||||
@ -666,7 +676,7 @@ normalize_table_name(
|
||||
|
||||
/* Scan name from the end */
|
||||
|
||||
ptr = (char*) name + strlen(name) - 1;
|
||||
ptr = strend(name)-1;
|
||||
|
||||
while (ptr >= name && *ptr != '\\' && *ptr != '/') {
|
||||
ptr--;
|
||||
@ -674,7 +684,7 @@ normalize_table_name(
|
||||
|
||||
name_ptr = ptr + 1;
|
||||
|
||||
assert(ptr > name);
|
||||
dbug_assert(ptr > name);
|
||||
|
||||
ptr--;
|
||||
|
||||
@ -770,7 +780,7 @@ ha_innobase::open(
|
||||
((row_prebuilt_t*)innobase_prebuilt)
|
||||
->clust_index_was_generated = TRUE;
|
||||
|
||||
assert(key_used_on_scan == MAX_KEY);
|
||||
dbug_assert(key_used_on_scan == MAX_KEY);
|
||||
}
|
||||
|
||||
/* Init table lock structure */
|
||||
@ -911,8 +921,8 @@ innobase_mysql_cmp(
|
||||
{
|
||||
enum_field_types mysql_tp;
|
||||
|
||||
assert(a_length != UNIV_SQL_NULL);
|
||||
assert(b_length != UNIV_SQL_NULL);
|
||||
dbug_assert(a_length != UNIV_SQL_NULL);
|
||||
dbug_assert(b_length != UNIV_SQL_NULL);
|
||||
|
||||
mysql_tp = (enum_field_types) mysql_type;
|
||||
|
||||
@ -943,11 +953,11 @@ get_innobase_type_from_mysql_type(
|
||||
8 bits: this is used in ibuf and also when DATA_NOT_NULL is
|
||||
ORed to the type */
|
||||
|
||||
assert((ulint)FIELD_TYPE_STRING < 256);
|
||||
assert((ulint)FIELD_TYPE_VAR_STRING < 256);
|
||||
assert((ulint)FIELD_TYPE_DOUBLE < 256);
|
||||
assert((ulint)FIELD_TYPE_FLOAT < 256);
|
||||
assert((ulint)FIELD_TYPE_DECIMAL < 256);
|
||||
dbug_assert((ulint)FIELD_TYPE_STRING < 256);
|
||||
dbug_assert((ulint)FIELD_TYPE_VAR_STRING < 256);
|
||||
dbug_assert((ulint)FIELD_TYPE_DOUBLE < 256);
|
||||
dbug_assert((ulint)FIELD_TYPE_FLOAT < 256);
|
||||
dbug_assert((ulint)FIELD_TYPE_DECIMAL < 256);
|
||||
|
||||
switch (field->type()) {
|
||||
case FIELD_TYPE_VAR_STRING: if (field->flags & BINARY_FLAG) {
|
||||
@ -1072,6 +1082,14 @@ build_template(
|
||||
templ_type = ROW_MYSQL_WHOLE_ROW;
|
||||
}
|
||||
|
||||
if (prebuilt->select_lock_type == LOCK_X) {
|
||||
/* TODO: should fix the code in sql_update so that we could do
|
||||
with fetching only the needed columns */
|
||||
|
||||
templ_type = ROW_MYSQL_WHOLE_ROW;
|
||||
}
|
||||
|
||||
|
||||
if (templ_type == ROW_MYSQL_REC_FIELDS) {
|
||||
|
||||
if (prebuilt->select_lock_type != LOCK_NONE) {
|
||||
@ -1288,9 +1306,9 @@ calc_row_difference(
|
||||
uint n_fields;
|
||||
ulint o_len;
|
||||
ulint n_len;
|
||||
mysql_byte* o_ptr;
|
||||
mysql_byte* n_ptr;
|
||||
mysql_byte* buf;
|
||||
byte* o_ptr;
|
||||
byte* n_ptr;
|
||||
byte* buf;
|
||||
upd_field_t* ufield;
|
||||
ulint col_type;
|
||||
ulint is_unsigned;
|
||||
@ -1300,7 +1318,7 @@ calc_row_difference(
|
||||
n_fields = table->fields;
|
||||
|
||||
/* We use upd_buff to convert changed fields */
|
||||
buf = upd_buff;
|
||||
buf = (byte*) upd_buff;
|
||||
|
||||
for (i = 0; i < n_fields; i++) {
|
||||
field = table->field[i];
|
||||
@ -1312,8 +1330,8 @@ calc_row_difference(
|
||||
goto skip_field;
|
||||
}
|
||||
|
||||
o_ptr = old_row + get_field_offset(table, field);
|
||||
n_ptr = new_row + get_field_offset(table, field);
|
||||
o_ptr = (byte*) old_row + get_field_offset(table, field);
|
||||
n_ptr = (byte*) new_row + get_field_offset(table, field);
|
||||
o_len = field->pack_length();
|
||||
n_len = field->pack_length();
|
||||
|
||||
@ -1353,8 +1371,10 @@ calc_row_difference(
|
||||
|
||||
ufield = uvect->fields + n_changed;
|
||||
|
||||
buf = innobase_convert_and_store_changed_col(ufield,
|
||||
buf, n_ptr, n_len, col_type,
|
||||
buf = (byte*)
|
||||
innobase_convert_and_store_changed_col(ufield,
|
||||
(mysql_byte*)buf,
|
||||
(mysql_byte*)n_ptr, n_len, col_type,
|
||||
is_unsigned);
|
||||
ufield->exp = NULL;
|
||||
ufield->field_no =
|
||||
@ -1580,7 +1600,7 @@ ha_innobase::index_read(
|
||||
|
||||
last_match_mode = match_mode;
|
||||
|
||||
ret = row_search_for_mysql(buf, mode, prebuilt, match_mode, 0);
|
||||
ret = row_search_for_mysql((byte*) buf, mode, prebuilt, match_mode, 0);
|
||||
|
||||
if (ret == DB_SUCCESS) {
|
||||
error = 0;
|
||||
@ -1690,7 +1710,8 @@ ha_innobase::general_fetch(
|
||||
|
||||
DBUG_ENTER("general_fetch");
|
||||
|
||||
ret = row_search_for_mysql(buf, 0, prebuilt, match_mode, direction);
|
||||
ret = row_search_for_mysql((byte*)buf, 0, prebuilt,
|
||||
match_mode, direction);
|
||||
|
||||
if (ret == DB_SUCCESS) {
|
||||
error = 0;
|
||||
@ -1935,7 +1956,7 @@ ha_innobase::position(
|
||||
len = store_key_val_for_row(primary_key, (char*) ref, record);
|
||||
}
|
||||
|
||||
assert(len <= ref_length);
|
||||
dbug_assert(len <= ref_length);
|
||||
|
||||
ref_stored_len = len;
|
||||
}
|
||||
@ -2174,23 +2195,14 @@ ha_innobase::create(
|
||||
int primary_key_no = -1;
|
||||
KEY* key;
|
||||
uint i;
|
||||
char name2[1000];
|
||||
char norm_name[1000];
|
||||
char name2[FN_REFLEN];
|
||||
char norm_name[FN_REFLEN];
|
||||
|
||||
DBUG_ENTER("ha_innobase::create");
|
||||
|
||||
trx = trx_allocate_for_mysql();
|
||||
|
||||
name_len = strlen(name);
|
||||
|
||||
assert(name_len < 1000);
|
||||
assert(name_len > 4);
|
||||
|
||||
memcpy(name2, name, name_len);
|
||||
|
||||
/* Erase the .frm end from table name: */
|
||||
|
||||
name2[name_len - 4] = '\0';
|
||||
fn_format(name2, name, "", "",2); // Remove the .frm extension
|
||||
|
||||
normalize_table_name(norm_name, name2);
|
||||
|
||||
@ -2550,11 +2562,11 @@ ha_innobase::update_table_comment(
|
||||
char *str=my_malloc(length + 50,MYF(0));
|
||||
|
||||
if (!str)
|
||||
return comment;
|
||||
return (char*)comment;
|
||||
|
||||
sprintf(str,"%s Innobase free: %lu kB", comment,innobase_get_free_space());
|
||||
|
||||
return str;
|
||||
return((char*) str);
|
||||
}
|
||||
|
||||
|
||||
|
@ -231,6 +231,8 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list);
|
||||
bool mysql_change_db(THD *thd,const char *name);
|
||||
void mysql_parse(THD *thd,char *inBuf,uint length);
|
||||
void mysql_init_select(LEX *lex);
|
||||
void init_max_user_conn(void);
|
||||
void free_max_user_conn(void);
|
||||
pthread_handler_decl(handle_one_connection,arg);
|
||||
pthread_handler_decl(handle_bootstrap,arg);
|
||||
sig_handler end_thread_signal(int sig);
|
||||
|
@ -263,7 +263,7 @@ ulong select_full_range_join_count,select_full_join_count;
|
||||
ulong specialflag=0,opened_tables=0,created_tmp_tables=0,
|
||||
created_tmp_disk_tables=0;
|
||||
ulong max_connections,max_insert_delayed_threads,max_used_connections,
|
||||
max_connect_errors;
|
||||
max_connect_errors, max_user_connections = 0;
|
||||
ulong thread_id=1L,current_pid;
|
||||
ulong slow_launch_threads = 0;
|
||||
char mysql_real_data_home[FN_REFLEN],
|
||||
@ -295,7 +295,8 @@ pthread_mutex_t LOCK_mysql_create_db, LOCK_Acl, LOCK_open, LOCK_thread_count,
|
||||
LOCK_error_log,
|
||||
LOCK_delayed_insert, LOCK_delayed_status, LOCK_delayed_create,
|
||||
LOCK_crypt, LOCK_bytes_sent, LOCK_bytes_received,
|
||||
LOCK_binlog_update, LOCK_slave, LOCK_server_id;
|
||||
LOCK_binlog_update, LOCK_slave, LOCK_server_id,
|
||||
LOCK_user_conn;
|
||||
|
||||
pthread_cond_t COND_refresh,COND_thread_count,COND_binlog_update,
|
||||
COND_slave_stopped, COND_slave_start;
|
||||
@ -647,6 +648,7 @@ void clean_up(void)
|
||||
my_free(mysql_tmpdir,MYF(0));
|
||||
x_free(opt_bin_logname);
|
||||
bitmap_free(&temp_pool);
|
||||
free_max_user_conn();
|
||||
#ifndef __WIN__
|
||||
if (!opt_bootstrap)
|
||||
(void) my_delete(pidfile_name,MYF(0)); // This may not always exist
|
||||
@ -1576,6 +1578,7 @@ int main(int argc, char **argv)
|
||||
(void) pthread_mutex_init(&LOCK_binlog_update, NULL);
|
||||
(void) pthread_mutex_init(&LOCK_slave, NULL);
|
||||
(void) pthread_mutex_init(&LOCK_server_id, NULL);
|
||||
(void) pthread_mutex_init(&LOCK_user_conn, NULL);
|
||||
(void) pthread_cond_init(&COND_binlog_update, NULL);
|
||||
(void) pthread_cond_init(&COND_slave_stopped, NULL);
|
||||
(void) pthread_cond_init(&COND_slave_start, NULL);
|
||||
@ -1765,6 +1768,8 @@ The server will not act as a slave.");
|
||||
}
|
||||
if (!opt_noacl)
|
||||
(void) grant_init();
|
||||
if (max_user_connections)
|
||||
init_max_user_conn();
|
||||
|
||||
#ifdef HAVE_DLOPEN
|
||||
if (!opt_noacl)
|
||||
@ -2625,6 +2630,8 @@ CHANGEABLE_VAR changeable_vars[] = {
|
||||
1024, 4, 8192*1024L, 0, 1 },
|
||||
{ "max_tmp_tables", (long*) &max_tmp_tables,
|
||||
32, 1, ~0L, 0, 1 },
|
||||
{ "max_user_connections", (long*) &max_user_connections,
|
||||
0, 1, ~0L, 0, 1 },
|
||||
{ "max_write_lock_count", (long*) &max_write_lock_count,
|
||||
~0L, 1, ~0L, 0, 1 },
|
||||
{ "myisam_sort_buffer_size", (long*) &myisam_sort_buffer_size,
|
||||
@ -2720,6 +2727,7 @@ struct show_var_st init_vars[]= {
|
||||
{"max_heap_table_size", (char*) &max_heap_table_size, SHOW_LONG},
|
||||
{"max_join_size", (char*) &max_join_size, SHOW_LONG},
|
||||
{"max_sort_length", (char*) &max_item_sort_length, SHOW_LONG},
|
||||
{"max_user_connections", (char*) &max_user_connections, SHOW_LONG},
|
||||
{"max_tmp_tables", (char*) &max_tmp_tables, SHOW_LONG},
|
||||
{"max_write_lock_count", (char*) &max_write_lock_count, SHOW_LONG},
|
||||
{"myisam_recover_options", (char*) &myisam_recover_options_str, SHOW_CHAR_PTR},
|
||||
@ -3843,6 +3851,10 @@ static int get_service_parameters()
|
||||
{
|
||||
SET_CHANGEABLE_VARVAL( "max_connections" );
|
||||
}
|
||||
else if ( lstrcmp(szKeyValueName, TEXT("MaxUserConnections")) == 0 )
|
||||
{
|
||||
SET_CHANGEABLE_VARVAL( "max_user_connections" );
|
||||
}
|
||||
else if ( lstrcmp(szKeyValueName, TEXT("MaxConnectErrors")) == 0 )
|
||||
{
|
||||
SET_CHANGEABLE_VARVAL( "max_connect_errors" );
|
||||
|
@ -213,3 +213,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -207,3 +207,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -204,3 +204,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -204,3 +204,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -208,3 +208,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -204,3 +204,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -207,3 +207,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -204,3 +204,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -206,3 +206,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -204,3 +204,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -206,3 +206,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -204,3 +204,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -206,3 +206,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -206,3 +206,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -208,3 +208,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -204,3 +204,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -208,3 +208,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -207,3 +207,4 @@
|
||||
"<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> slave, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CHANGE MASTER TO",
|
||||
"<22><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> master info, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> persmissions <20><> <20><><EFBFBD><EFBFBD><EFBFBD> master.info",
|
||||
"<22><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SLAVE, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -212,3 +212,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -205,3 +205,4 @@
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
|
@ -199,3 +199,9 @@
|
||||
"Tabell '%-.64s' <20>r crashad och senast (automatiska?) reparation misslyckades",
|
||||
"Warning: N<>gra icke transaktionella tabeller kunde inte <20>terst<73>llas vid ROLLBACK",
|
||||
"Transaktionen kr<6B>vde mera <20>n 'max_binlog_cache_size' minne. Ut<55>ka denna mysqld variabel och f<>rs<72>k p<> nytt",
|
||||
"Denna operation kan inte g<>ras under replikering; G<>r SLAVE STOP f<>rst",
|
||||
"Denna operation kan endast g<>ras under replikering; Konfigurera slaven och g<>r SLAVE START",
|
||||
"Servern <20>r inte konfigurerade som en replikations slav. <20>ndra konfigurationsfilen eller g<>r CHANGE MASTER TO",
|
||||
"Kunde inte initializera replications-strukturerna. Kontrollera privilegerna f<>r 'master.info'",
|
||||
"Kunde inte starta en tr<74>d f<>r replikering",
|
||||
"Anv<6E>ndare '%-.64s' har redan 'max_user_connections' aktiva inloggningar",
|
||||
|
@ -199,8 +199,9 @@
|
||||
"Tabell '%-.64s' <20>r crashad och senast (automatiska?) reparation misslyckades",
|
||||
"Warning: N<>gra icke transaktionella tabeller kunde inte <20>terst<73>llas vid ROLLBACK",
|
||||
"Transaktionen kr<6B>vde mera <20>n 'max_binlog_cache_size' minne. Ut<55>ka denna mysqld variabel och f<>rs<72>k p<> nytt",
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"Denna operation kan inte g<>ras under replikering; G<>r SLAVE STOP f<EFBFBD>rst",
|
||||
"Denna operation kan endast g<>ras under replikering; Konfigurera slaven och g<>r SLAVE START",
|
||||
"Servern <20>r inte konfigurerade som en replikations slav. <20>ndra konfigurationsfilen eller g<>r CHANGE MASTER TO",
|
||||
"Kunde inte initializera replications-strukturerna. Kontrollera privilegerna f<>r 'master.info'",
|
||||
"Kunde inte starta en tr<74>d f<>r replikering",
|
||||
"Anv<6E>ndare '%-.64s' har redan 'max_user_connections' aktiva inloggningar",
|
||||
|
@ -265,14 +265,14 @@ public:
|
||||
pthread_t real_id;
|
||||
uint current_tablenr,tmp_table,cond_count,col_access,query_length;
|
||||
uint server_status,open_options;
|
||||
bool slave_thread;
|
||||
char scramble[9];
|
||||
bool slave_thread;
|
||||
bool set_query_id,locked,count_cuted_fields,some_tables_deleted;
|
||||
bool no_errors, allow_sum_func, password, fatal_error;
|
||||
bool query_start_used,last_insert_id_used,insert_id_used;
|
||||
bool volatile killed,bootstrap;
|
||||
bool system_thread,in_lock_tables,global_read_lock;
|
||||
bool query_error;
|
||||
bool query_error, bootstrap;
|
||||
bool volatile killed;
|
||||
LOG_INFO* current_linfo;
|
||||
// if we do a purge of binary logs, log index info of the threads
|
||||
// that are currently reading it needs to be adjusted. To do that
|
||||
|
@ -33,13 +33,13 @@
|
||||
static char from_buff[100],to_buff[100];
|
||||
static my_string from,to;
|
||||
static int errors,tests;
|
||||
static int test_strarg(char *name,...);
|
||||
static int test_strarg(const char *name,...);
|
||||
static void init_strings (void); /* Init from and to */
|
||||
void test_arg (my_string message,long func_value,long value);
|
||||
int compare_buff (my_string message,my_string b1,my_string b2,int length,
|
||||
void test_arg (const char *message,long func_value,long value);
|
||||
int compare_buff(const char *message,my_string b1,my_string b2,int length,
|
||||
pchar fill, pchar prefill);
|
||||
|
||||
int my_test(int a)
|
||||
static int my_test(int a)
|
||||
{
|
||||
return a ? 1 : 0;
|
||||
}
|
||||
@ -116,6 +116,14 @@ int main(void)
|
||||
test_strarg("strxmov(to,from,\"!!\",NullS)",strxmov(to,from,"!!",NullS),to+F_LEN+2,F_LEN,F_CHAR,2,'!',0,0,0);
|
||||
test_strarg("strxmov(to,NullS)",strxmov(to,NullS),to,1,0,0,0);
|
||||
test_strarg("strxmov(to,from,from,from,from,from,'!!',from,NullS)",strxmov(to,from,from,from,from,from,"!!",from,NullS),to+F_LEN*6+2,F_LEN,F_CHAR,F_LEN,F_CHAR,F_LEN,F_CHAR,F_LEN,F_CHAR,F_LEN,F_CHAR,2,'!',F_LEN,F_CHAR,1,0,0,0);
|
||||
|
||||
test_strarg("strxnmov(to,100,from,\"!!\",NullS)",strxnmov(to,100,from,"!!",NullS),to+F_LEN+2,F_LEN,F_CHAR,2,'!',0,0,0);
|
||||
test_strarg("strxnmov(to,2,NullS)",strxnmov(to,2,NullS),to,1,0,0,0);
|
||||
test_strarg("strxnmov(to,100,from,from,from,from,from,'!!',from,NullS)",strxnmov(to,100,from,from,from,from,from,"!!",from,NullS),to+F_LEN*6+2,F_LEN,F_CHAR,F_LEN,F_CHAR,F_LEN,F_CHAR,F_LEN,F_CHAR,F_LEN,F_CHAR,2,'!',F_LEN,F_CHAR,1,0,0,0);
|
||||
test_strarg("strxnmov(to,2,\"!!!\",NullS)",strxnmov(to,2,"!!!",NullS),to+2,2,'!',0,0,0);
|
||||
test_strarg("strxnmov(to,2,\"!!\",NullS)",strxnmov(to,2,"!!","xx",NullS),to+2,2,'!',0,0,0);
|
||||
test_strarg("strxnmov(to,2,\"!\",\"x\",\"y\",NullS)",strxnmov(to,2,"!","x","y",NullS),to+2,1,'!',1,'x',0,0,0);
|
||||
|
||||
test_strarg("bchange(to,2,from,4,6)",(bchange(to,2,from,4,6),0L),INT_MAX32,
|
||||
4,F_CHAR,2,T_CHAR,0,0);
|
||||
|
||||
@ -156,7 +164,7 @@ void init_strings(void)
|
||||
|
||||
/* Test that function return rigth value */
|
||||
|
||||
void test_arg(my_string message, long int func_value, long int value)
|
||||
void test_arg(const char *message, long int func_value, long int value)
|
||||
{
|
||||
tests++;
|
||||
printf("testing '%s'\n",message);
|
||||
@ -169,7 +177,7 @@ void test_arg(my_string message, long int func_value, long int value)
|
||||
|
||||
/* Test function return value and from and to arrays */
|
||||
|
||||
static int test_strarg(char *message,...)
|
||||
static int test_strarg(const char *message,...)
|
||||
{
|
||||
long func_value,value;
|
||||
int error,length;
|
||||
@ -223,7 +231,7 @@ static int test_strarg(char *message,...)
|
||||
|
||||
/* test if function made right value */
|
||||
|
||||
int compare_buff(my_string message, my_string b1, my_string b2, int length,
|
||||
int compare_buff(const char *message, my_string b1, my_string b2, int length,
|
||||
pchar fill, pchar prefill)
|
||||
{
|
||||
int i,error=0;
|
||||
@ -256,6 +264,8 @@ int compare_buff(my_string message, my_string b1, my_string b2, int length,
|
||||
|
||||
/* These are here to be loaded and examined */
|
||||
|
||||
extern void dummy_functions(void);
|
||||
|
||||
void dummy_functions(void)
|
||||
{
|
||||
VOID(memchr(from,'a',5));
|
||||
|
@ -15,9 +15,9 @@
|
||||
and NOT to use 0, as on some machines 0 is not the same size as a
|
||||
character pointer, or not the same bit pattern as NullS.
|
||||
|
||||
Note: strxnmov is like strnmov in that it always moves EXACTLY len
|
||||
characters; dst will be padded on the right with NUL characters as
|
||||
needed. strxncpy does the same. strxncat, like strncat, does NOT.
|
||||
Note: strxnmov is like strnmov in that it moves up to len
|
||||
characters; dst will be padded on the right with one NUL characters if
|
||||
needed.
|
||||
*/
|
||||
|
||||
#include <global.h>
|
||||
@ -27,20 +27,22 @@
|
||||
char *strxnmov(char *dst,uint len, const char *src, ...)
|
||||
{
|
||||
va_list pvar;
|
||||
char *result;
|
||||
char *end_of_dst=dst+len;
|
||||
|
||||
va_start(pvar,src);
|
||||
while (src != NullS) {
|
||||
do if (len-- == 0)
|
||||
while (src != NullS)
|
||||
{
|
||||
do
|
||||
{
|
||||
va_end(pvar);
|
||||
return dst;
|
||||
if (dst == end_of_dst)
|
||||
goto end;
|
||||
}
|
||||
while ((*dst++ = *src++) != 0);
|
||||
while ((*dst++ = *src++));
|
||||
dst--;
|
||||
src = va_arg(pvar, char *);
|
||||
}
|
||||
for (result= dst; len-- != 0; *dst++ = 0) ;
|
||||
*dst=0;
|
||||
end:
|
||||
va_end(pvar);
|
||||
return result;
|
||||
return dst;
|
||||
}
|
||||
|
Reference in New Issue
Block a user