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
|
# Use the debug version if it exists
|
||||||
if test -d /usr/local/BerkeleyDB-dbug/
|
if test -d /usr/local/BerkeleyDB-dbug/
|
||||||
then
|
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
|
fi
|
||||||
|
|
||||||
. "$path/FINISH.sh"
|
. "$path/FINISH.sh"
|
||||||
|
@ -203,4 +203,5 @@
|
|||||||
#define ER_BAD_SLAVE 1200
|
#define ER_BAD_SLAVE 1200
|
||||||
#define ER_MASTER_INFO 1201
|
#define ER_MASTER_INFO 1201
|
||||||
#define ER_SLAVE_THREAD 1202
|
#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
|
# 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_CONFIG_HEADER(ib_config.h)
|
||||||
AM_INIT_AUTOMAKE(ib, 0.90)
|
AM_INIT_AUTOMAKE(ib, 0.90)
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
|
@ -9,6 +9,7 @@ Created 5/7/1996 Heikki Tuuri
|
|||||||
#ifndef lock0types_h
|
#ifndef lock0types_h
|
||||||
#define lock0types_h
|
#define lock0types_h
|
||||||
|
|
||||||
|
#define lock_t ib_lock_t
|
||||||
typedef struct lock_struct lock_t;
|
typedef struct lock_struct lock_t;
|
||||||
typedef struct lock_sys_struct lock_sys_t;
|
typedef struct lock_sys_struct lock_sys_t;
|
||||||
|
|
||||||
|
@ -25,8 +25,8 @@ struct os_event_struct {
|
|||||||
fields */
|
fields */
|
||||||
ibool is_set; /* this is TRUE if the next mutex is
|
ibool is_set; /* this is TRUE if the next mutex is
|
||||||
not reserved */
|
not reserved */
|
||||||
os_fast_mutex_t wait_mutex; /* this mutex is used in waiting for
|
pthread_cond_t cond_var; /* condition variable is used in
|
||||||
the event */
|
waiting for the event */
|
||||||
};
|
};
|
||||||
typedef struct os_event_struct os_event_struct_t;
|
typedef struct os_event_struct os_event_struct_t;
|
||||||
typedef os_event_struct_t* os_event_t;
|
typedef os_event_struct_t* os_event_t;
|
||||||
@ -190,9 +190,9 @@ os_fast_mutex_free(
|
|||||||
/*===============*/
|
/*===============*/
|
||||||
os_fast_mutex_t* fast_mutex); /* in: mutex to free */
|
os_fast_mutex_t* fast_mutex); /* in: mutex to free */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UNIV_NONINL
|
#ifndef UNIV_NONINL
|
||||||
#include "os0sync.ic"
|
#include "os0sync.ic"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -9,6 +9,7 @@ Created 9/5/1995 Heikki Tuuri
|
|||||||
#ifndef sync0types_h
|
#ifndef sync0types_h
|
||||||
#define sync0types_h
|
#define sync0types_h
|
||||||
|
|
||||||
|
#define mutex_t ib_mutex_t
|
||||||
typedef struct mutex_struct mutex_t;
|
typedef struct mutex_struct mutex_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -316,8 +316,11 @@ try_again:
|
|||||||
UT_NOT_USED(purpose);
|
UT_NOT_USED(purpose);
|
||||||
|
|
||||||
if (create_mode == OS_FILE_CREATE) {
|
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);
|
file = open(name, create_flag, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
file = open(name, create_flag);
|
file = open(name, create_flag);
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,9 @@ Created 2/16/1996 Heikki Tuuri
|
|||||||
#include "srv0start.h"
|
#include "srv0start.h"
|
||||||
#include "que0que.h"
|
#include "que0que.h"
|
||||||
|
|
||||||
|
ibool srv_is_being_started = FALSE;
|
||||||
|
ibool srv_was_started = FALSE;
|
||||||
|
|
||||||
ibool measure_cont = FALSE;
|
ibool measure_cont = FALSE;
|
||||||
|
|
||||||
os_file_t files[1000];
|
os_file_t files[1000];
|
||||||
@ -443,6 +446,8 @@ innobase_start_or_create_for_mysql(void)
|
|||||||
log_do_write = TRUE;
|
log_do_write = TRUE;
|
||||||
/* yydebug = TRUE; */
|
/* yydebug = TRUE; */
|
||||||
|
|
||||||
|
srv_is_being_started = TRUE;
|
||||||
|
|
||||||
os_aio_use_native_aio = srv_use_native_aio;
|
os_aio_use_native_aio = srv_use_native_aio;
|
||||||
|
|
||||||
err = srv_boot();
|
err = srv_boot();
|
||||||
@ -676,6 +681,9 @@ innobase_start_or_create_for_mysql(void)
|
|||||||
thread_ids + 2 + SRV_MAX_N_IO_THREADS);
|
thread_ids + 2 + SRV_MAX_N_IO_THREADS);
|
||||||
fprintf(stderr, "Innobase: Started\n");
|
fprintf(stderr, "Innobase: Started\n");
|
||||||
|
|
||||||
|
srv_was_started = TRUE;
|
||||||
|
srv_is_being_started = FALSE;
|
||||||
|
|
||||||
sync_order_checks_on = TRUE;
|
sync_order_checks_on = TRUE;
|
||||||
|
|
||||||
/* buf_debug_prints = TRUE; */
|
/* buf_debug_prints = TRUE; */
|
||||||
@ -691,6 +699,14 @@ innobase_shutdown_for_mysql(void)
|
|||||||
/*=============================*/
|
/*=============================*/
|
||||||
/* out: DB_SUCCESS or error code */
|
/* 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
|
/* Flush buffer pool to disk, write the current lsn to
|
||||||
the tablespace header(s), and copy all log data to archive */
|
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);
|
return(HA_ERR_TO_BIG_ROW);
|
||||||
|
|
||||||
} else {
|
} 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;
|
trx = (trx_t*) thd->transaction.all.innobase_tid;
|
||||||
|
|
||||||
if (trx == NULL) {
|
if (trx == NULL) {
|
||||||
assert(thd != NULL);
|
dbug_assert(thd != NULL);
|
||||||
trx = trx_allocate_for_mysql();
|
trx = trx_allocate_for_mysql();
|
||||||
|
|
||||||
thd->transaction.all.innobase_tid = trx;
|
thd->transaction.all.innobase_tid = trx;
|
||||||
@ -418,31 +418,41 @@ innobase_init(void)
|
|||||||
int err;
|
int err;
|
||||||
bool ret;
|
bool ret;
|
||||||
ibool test_bool;
|
ibool test_bool;
|
||||||
|
static char *current_dir[3];
|
||||||
DBUG_ENTER("innobase_init");
|
DBUG_ENTER("innobase_init");
|
||||||
|
|
||||||
test_bool = TRUE;
|
/* Use current_dir if no paths are set */
|
||||||
assert(test_bool == 1);
|
current_dir[0]=FN_CURLIB;
|
||||||
test_bool = FALSE;
|
current_dir[1]=FN_LIBCHAR;
|
||||||
assert(test_bool == 0);
|
current_dir[2]=0;
|
||||||
|
|
||||||
/* Set Innobase initialization parameters according to the values
|
/* Set Innobase initialization parameters according to the values
|
||||||
read from MySQL .cnf file */
|
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_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();
|
ret = innobase_parse_data_file_paths_and_sizes();
|
||||||
|
|
||||||
if (ret == FALSE) {
|
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();
|
ret = innobase_parse_log_group_home_dirs();
|
||||||
|
|
||||||
if (ret == FALSE) {
|
if (ret == FALSE) {
|
||||||
return(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
srv_n_log_groups = (ulint) innobase_mirrored_log_groups;
|
srv_n_log_groups = (ulint) innobase_mirrored_log_groups;
|
||||||
@ -466,12 +476,12 @@ innobase_init(void)
|
|||||||
|
|
||||||
if (err != DB_SUCCESS) {
|
if (err != DB_SUCCESS) {
|
||||||
|
|
||||||
return(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
(void) hash_init(&innobase_open_tables,32,0,0,
|
(void) hash_init(&innobase_open_tables,32,0,0,
|
||||||
(hash_get_key) innobase_get_key,0,0);
|
(hash_get_key) innobase_get_key,0,0);
|
||||||
pthread_mutex_init(&innobase_mutex,NULL);
|
pthread_mutex_init(&innobase_mutex,NULL);
|
||||||
return(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
@ -490,10 +500,10 @@ innobase_end(void)
|
|||||||
|
|
||||||
if (err != DB_SUCCESS) {
|
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 */
|
/* Scan name from the end */
|
||||||
|
|
||||||
ptr = (char*) name + strlen(name) - 1;
|
ptr = strend(name)-1;
|
||||||
|
|
||||||
while (ptr >= name && *ptr != '\\' && *ptr != '/') {
|
while (ptr >= name && *ptr != '\\' && *ptr != '/') {
|
||||||
ptr--;
|
ptr--;
|
||||||
@ -674,7 +684,7 @@ normalize_table_name(
|
|||||||
|
|
||||||
name_ptr = ptr + 1;
|
name_ptr = ptr + 1;
|
||||||
|
|
||||||
assert(ptr > name);
|
dbug_assert(ptr > name);
|
||||||
|
|
||||||
ptr--;
|
ptr--;
|
||||||
|
|
||||||
@ -770,7 +780,7 @@ ha_innobase::open(
|
|||||||
((row_prebuilt_t*)innobase_prebuilt)
|
((row_prebuilt_t*)innobase_prebuilt)
|
||||||
->clust_index_was_generated = TRUE;
|
->clust_index_was_generated = TRUE;
|
||||||
|
|
||||||
assert(key_used_on_scan == MAX_KEY);
|
dbug_assert(key_used_on_scan == MAX_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Init table lock structure */
|
/* Init table lock structure */
|
||||||
@ -911,8 +921,8 @@ innobase_mysql_cmp(
|
|||||||
{
|
{
|
||||||
enum_field_types mysql_tp;
|
enum_field_types mysql_tp;
|
||||||
|
|
||||||
assert(a_length != UNIV_SQL_NULL);
|
dbug_assert(a_length != UNIV_SQL_NULL);
|
||||||
assert(b_length != UNIV_SQL_NULL);
|
dbug_assert(b_length != UNIV_SQL_NULL);
|
||||||
|
|
||||||
mysql_tp = (enum_field_types) mysql_type;
|
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
|
8 bits: this is used in ibuf and also when DATA_NOT_NULL is
|
||||||
ORed to the type */
|
ORed to the type */
|
||||||
|
|
||||||
assert((ulint)FIELD_TYPE_STRING < 256);
|
dbug_assert((ulint)FIELD_TYPE_STRING < 256);
|
||||||
assert((ulint)FIELD_TYPE_VAR_STRING < 256);
|
dbug_assert((ulint)FIELD_TYPE_VAR_STRING < 256);
|
||||||
assert((ulint)FIELD_TYPE_DOUBLE < 256);
|
dbug_assert((ulint)FIELD_TYPE_DOUBLE < 256);
|
||||||
assert((ulint)FIELD_TYPE_FLOAT < 256);
|
dbug_assert((ulint)FIELD_TYPE_FLOAT < 256);
|
||||||
assert((ulint)FIELD_TYPE_DECIMAL < 256);
|
dbug_assert((ulint)FIELD_TYPE_DECIMAL < 256);
|
||||||
|
|
||||||
switch (field->type()) {
|
switch (field->type()) {
|
||||||
case FIELD_TYPE_VAR_STRING: if (field->flags & BINARY_FLAG) {
|
case FIELD_TYPE_VAR_STRING: if (field->flags & BINARY_FLAG) {
|
||||||
@ -1072,6 +1082,14 @@ build_template(
|
|||||||
templ_type = ROW_MYSQL_WHOLE_ROW;
|
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 (templ_type == ROW_MYSQL_REC_FIELDS) {
|
||||||
|
|
||||||
if (prebuilt->select_lock_type != LOCK_NONE) {
|
if (prebuilt->select_lock_type != LOCK_NONE) {
|
||||||
@ -1288,9 +1306,9 @@ calc_row_difference(
|
|||||||
uint n_fields;
|
uint n_fields;
|
||||||
ulint o_len;
|
ulint o_len;
|
||||||
ulint n_len;
|
ulint n_len;
|
||||||
mysql_byte* o_ptr;
|
byte* o_ptr;
|
||||||
mysql_byte* n_ptr;
|
byte* n_ptr;
|
||||||
mysql_byte* buf;
|
byte* buf;
|
||||||
upd_field_t* ufield;
|
upd_field_t* ufield;
|
||||||
ulint col_type;
|
ulint col_type;
|
||||||
ulint is_unsigned;
|
ulint is_unsigned;
|
||||||
@ -1300,7 +1318,7 @@ calc_row_difference(
|
|||||||
n_fields = table->fields;
|
n_fields = table->fields;
|
||||||
|
|
||||||
/* We use upd_buff to convert changed fields */
|
/* We use upd_buff to convert changed fields */
|
||||||
buf = upd_buff;
|
buf = (byte*) upd_buff;
|
||||||
|
|
||||||
for (i = 0; i < n_fields; i++) {
|
for (i = 0; i < n_fields; i++) {
|
||||||
field = table->field[i];
|
field = table->field[i];
|
||||||
@ -1312,8 +1330,8 @@ calc_row_difference(
|
|||||||
goto skip_field;
|
goto skip_field;
|
||||||
}
|
}
|
||||||
|
|
||||||
o_ptr = old_row + get_field_offset(table, field);
|
o_ptr = (byte*) old_row + get_field_offset(table, field);
|
||||||
n_ptr = new_row + get_field_offset(table, field);
|
n_ptr = (byte*) new_row + get_field_offset(table, field);
|
||||||
o_len = field->pack_length();
|
o_len = field->pack_length();
|
||||||
n_len = field->pack_length();
|
n_len = field->pack_length();
|
||||||
|
|
||||||
@ -1353,8 +1371,10 @@ calc_row_difference(
|
|||||||
|
|
||||||
ufield = uvect->fields + n_changed;
|
ufield = uvect->fields + n_changed;
|
||||||
|
|
||||||
buf = innobase_convert_and_store_changed_col(ufield,
|
buf = (byte*)
|
||||||
buf, n_ptr, n_len, col_type,
|
innobase_convert_and_store_changed_col(ufield,
|
||||||
|
(mysql_byte*)buf,
|
||||||
|
(mysql_byte*)n_ptr, n_len, col_type,
|
||||||
is_unsigned);
|
is_unsigned);
|
||||||
ufield->exp = NULL;
|
ufield->exp = NULL;
|
||||||
ufield->field_no =
|
ufield->field_no =
|
||||||
@ -1580,7 +1600,7 @@ ha_innobase::index_read(
|
|||||||
|
|
||||||
last_match_mode = match_mode;
|
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) {
|
if (ret == DB_SUCCESS) {
|
||||||
error = 0;
|
error = 0;
|
||||||
@ -1690,7 +1710,8 @@ ha_innobase::general_fetch(
|
|||||||
|
|
||||||
DBUG_ENTER("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) {
|
if (ret == DB_SUCCESS) {
|
||||||
error = 0;
|
error = 0;
|
||||||
@ -1935,7 +1956,7 @@ ha_innobase::position(
|
|||||||
len = store_key_val_for_row(primary_key, (char*) ref, record);
|
len = store_key_val_for_row(primary_key, (char*) ref, record);
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(len <= ref_length);
|
dbug_assert(len <= ref_length);
|
||||||
|
|
||||||
ref_stored_len = len;
|
ref_stored_len = len;
|
||||||
}
|
}
|
||||||
@ -2174,23 +2195,14 @@ ha_innobase::create(
|
|||||||
int primary_key_no = -1;
|
int primary_key_no = -1;
|
||||||
KEY* key;
|
KEY* key;
|
||||||
uint i;
|
uint i;
|
||||||
char name2[1000];
|
char name2[FN_REFLEN];
|
||||||
char norm_name[1000];
|
char norm_name[FN_REFLEN];
|
||||||
|
|
||||||
DBUG_ENTER("ha_innobase::create");
|
DBUG_ENTER("ha_innobase::create");
|
||||||
|
|
||||||
trx = trx_allocate_for_mysql();
|
trx = trx_allocate_for_mysql();
|
||||||
|
|
||||||
name_len = strlen(name);
|
fn_format(name2, name, "", "",2); // Remove the .frm extension
|
||||||
|
|
||||||
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';
|
|
||||||
|
|
||||||
normalize_table_name(norm_name, name2);
|
normalize_table_name(norm_name, name2);
|
||||||
|
|
||||||
@ -2550,11 +2562,11 @@ ha_innobase::update_table_comment(
|
|||||||
char *str=my_malloc(length + 50,MYF(0));
|
char *str=my_malloc(length + 50,MYF(0));
|
||||||
|
|
||||||
if (!str)
|
if (!str)
|
||||||
return comment;
|
return (char*)comment;
|
||||||
|
|
||||||
sprintf(str,"%s Innobase free: %lu kB", comment,innobase_get_free_space());
|
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);
|
bool mysql_change_db(THD *thd,const char *name);
|
||||||
void mysql_parse(THD *thd,char *inBuf,uint length);
|
void mysql_parse(THD *thd,char *inBuf,uint length);
|
||||||
void mysql_init_select(LEX *lex);
|
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_one_connection,arg);
|
||||||
pthread_handler_decl(handle_bootstrap,arg);
|
pthread_handler_decl(handle_bootstrap,arg);
|
||||||
sig_handler end_thread_signal(int sig);
|
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,
|
ulong specialflag=0,opened_tables=0,created_tmp_tables=0,
|
||||||
created_tmp_disk_tables=0;
|
created_tmp_disk_tables=0;
|
||||||
ulong max_connections,max_insert_delayed_threads,max_used_connections,
|
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 thread_id=1L,current_pid;
|
||||||
ulong slow_launch_threads = 0;
|
ulong slow_launch_threads = 0;
|
||||||
char mysql_real_data_home[FN_REFLEN],
|
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_error_log,
|
||||||
LOCK_delayed_insert, LOCK_delayed_status, LOCK_delayed_create,
|
LOCK_delayed_insert, LOCK_delayed_status, LOCK_delayed_create,
|
||||||
LOCK_crypt, LOCK_bytes_sent, LOCK_bytes_received,
|
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,
|
pthread_cond_t COND_refresh,COND_thread_count,COND_binlog_update,
|
||||||
COND_slave_stopped, COND_slave_start;
|
COND_slave_stopped, COND_slave_start;
|
||||||
@ -647,6 +648,7 @@ void clean_up(void)
|
|||||||
my_free(mysql_tmpdir,MYF(0));
|
my_free(mysql_tmpdir,MYF(0));
|
||||||
x_free(opt_bin_logname);
|
x_free(opt_bin_logname);
|
||||||
bitmap_free(&temp_pool);
|
bitmap_free(&temp_pool);
|
||||||
|
free_max_user_conn();
|
||||||
#ifndef __WIN__
|
#ifndef __WIN__
|
||||||
if (!opt_bootstrap)
|
if (!opt_bootstrap)
|
||||||
(void) my_delete(pidfile_name,MYF(0)); // This may not always exist
|
(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_binlog_update, NULL);
|
||||||
(void) pthread_mutex_init(&LOCK_slave, NULL);
|
(void) pthread_mutex_init(&LOCK_slave, NULL);
|
||||||
(void) pthread_mutex_init(&LOCK_server_id, 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_binlog_update, NULL);
|
||||||
(void) pthread_cond_init(&COND_slave_stopped, NULL);
|
(void) pthread_cond_init(&COND_slave_stopped, NULL);
|
||||||
(void) pthread_cond_init(&COND_slave_start, NULL);
|
(void) pthread_cond_init(&COND_slave_start, NULL);
|
||||||
@ -1765,6 +1768,8 @@ The server will not act as a slave.");
|
|||||||
}
|
}
|
||||||
if (!opt_noacl)
|
if (!opt_noacl)
|
||||||
(void) grant_init();
|
(void) grant_init();
|
||||||
|
if (max_user_connections)
|
||||||
|
init_max_user_conn();
|
||||||
|
|
||||||
#ifdef HAVE_DLOPEN
|
#ifdef HAVE_DLOPEN
|
||||||
if (!opt_noacl)
|
if (!opt_noacl)
|
||||||
@ -2625,6 +2630,8 @@ CHANGEABLE_VAR changeable_vars[] = {
|
|||||||
1024, 4, 8192*1024L, 0, 1 },
|
1024, 4, 8192*1024L, 0, 1 },
|
||||||
{ "max_tmp_tables", (long*) &max_tmp_tables,
|
{ "max_tmp_tables", (long*) &max_tmp_tables,
|
||||||
32, 1, ~0L, 0, 1 },
|
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,
|
{ "max_write_lock_count", (long*) &max_write_lock_count,
|
||||||
~0L, 1, ~0L, 0, 1 },
|
~0L, 1, ~0L, 0, 1 },
|
||||||
{ "myisam_sort_buffer_size", (long*) &myisam_sort_buffer_size,
|
{ "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_heap_table_size", (char*) &max_heap_table_size, SHOW_LONG},
|
||||||
{"max_join_size", (char*) &max_join_size, SHOW_LONG},
|
{"max_join_size", (char*) &max_join_size, SHOW_LONG},
|
||||||
{"max_sort_length", (char*) &max_item_sort_length, 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_tmp_tables", (char*) &max_tmp_tables, SHOW_LONG},
|
||||||
{"max_write_lock_count", (char*) &max_write_lock_count, SHOW_LONG},
|
{"max_write_lock_count", (char*) &max_write_lock_count, SHOW_LONG},
|
||||||
{"myisam_recover_options", (char*) &myisam_recover_options_str, SHOW_CHAR_PTR},
|
{"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" );
|
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 )
|
else if ( lstrcmp(szKeyValueName, TEXT("MaxConnectErrors")) == 0 )
|
||||||
{
|
{
|
||||||
SET_CHANGEABLE_VARVAL( "max_connect_errors" );
|
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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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><><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><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>",
|
"<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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"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 initialize master info structure, check permisions on master.info",
|
||||||
"Could not create slave thread, check system resources",
|
"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",
|
"Tabell '%-.64s' <20>r crashad och senast (automatiska?) reparation misslyckades",
|
||||||
"Warning: N<>gra icke transaktionella tabeller kunde inte <20>terst<73>llas vid ROLLBACK",
|
"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",
|
"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",
|
"Tabell '%-.64s' <20>r crashad och senast (automatiska?) reparation misslyckades",
|
||||||
"Warning: N<>gra icke transaktionella tabeller kunde inte <20>terst<73>llas vid ROLLBACK",
|
"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",
|
"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",
|
"Denna operation kan inte g<>ras under replikering; G<>r SLAVE STOP f<EFBFBD>rst",
|
||||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
"Denna operation kan endast g<>ras under replikering; Konfigurera slaven och g<>r SLAVE START",
|
||||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
"Servern <20>r inte konfigurerade som en replikations slav. <20>ndra konfigurationsfilen eller g<>r CHANGE MASTER TO",
|
||||||
"Could not initialize master info structure, check permisions on master.info",
|
"Kunde inte initializera replications-strukturerna. Kontrollera privilegerna f<>r 'master.info'",
|
||||||
"Could not create slave thread, check system resources",
|
"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;
|
pthread_t real_id;
|
||||||
uint current_tablenr,tmp_table,cond_count,col_access,query_length;
|
uint current_tablenr,tmp_table,cond_count,col_access,query_length;
|
||||||
uint server_status,open_options;
|
uint server_status,open_options;
|
||||||
bool slave_thread;
|
|
||||||
char scramble[9];
|
char scramble[9];
|
||||||
|
bool slave_thread;
|
||||||
bool set_query_id,locked,count_cuted_fields,some_tables_deleted;
|
bool set_query_id,locked,count_cuted_fields,some_tables_deleted;
|
||||||
bool no_errors, allow_sum_func, password, fatal_error;
|
bool no_errors, allow_sum_func, password, fatal_error;
|
||||||
bool query_start_used,last_insert_id_used,insert_id_used;
|
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 system_thread,in_lock_tables,global_read_lock;
|
||||||
bool query_error;
|
bool query_error, bootstrap;
|
||||||
|
bool volatile killed;
|
||||||
LOG_INFO* current_linfo;
|
LOG_INFO* current_linfo;
|
||||||
// if we do a purge of binary logs, log index info of the threads
|
// 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
|
// 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 char from_buff[100],to_buff[100];
|
||||||
static my_string from,to;
|
static my_string from,to;
|
||||||
static int errors,tests;
|
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 */
|
static void init_strings (void); /* Init from and to */
|
||||||
void test_arg (my_string message,long func_value,long value);
|
void test_arg (const char *message,long func_value,long 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);
|
pchar fill, pchar prefill);
|
||||||
|
|
||||||
int my_test(int a)
|
static int my_test(int a)
|
||||||
{
|
{
|
||||||
return a ? 1 : 0;
|
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,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,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("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,
|
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);
|
4,F_CHAR,2,T_CHAR,0,0);
|
||||||
|
|
||||||
@ -156,7 +164,7 @@ void init_strings(void)
|
|||||||
|
|
||||||
/* Test that function return rigth value */
|
/* 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++;
|
tests++;
|
||||||
printf("testing '%s'\n",message);
|
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 */
|
/* 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;
|
long func_value,value;
|
||||||
int error,length;
|
int error,length;
|
||||||
@ -223,7 +231,7 @@ static int test_strarg(char *message,...)
|
|||||||
|
|
||||||
/* test if function made right value */
|
/* 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)
|
pchar fill, pchar prefill)
|
||||||
{
|
{
|
||||||
int i,error=0;
|
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 */
|
/* These are here to be loaded and examined */
|
||||||
|
|
||||||
|
extern void dummy_functions(void);
|
||||||
|
|
||||||
void dummy_functions(void)
|
void dummy_functions(void)
|
||||||
{
|
{
|
||||||
VOID(memchr(from,'a',5));
|
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
|
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.
|
character pointer, or not the same bit pattern as NullS.
|
||||||
|
|
||||||
Note: strxnmov is like strnmov in that it always moves EXACTLY len
|
Note: strxnmov is like strnmov in that it moves up to len
|
||||||
characters; dst will be padded on the right with NUL characters as
|
characters; dst will be padded on the right with one NUL characters if
|
||||||
needed. strxncpy does the same. strxncat, like strncat, does NOT.
|
needed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <global.h>
|
#include <global.h>
|
||||||
@ -27,20 +27,22 @@
|
|||||||
char *strxnmov(char *dst,uint len, const char *src, ...)
|
char *strxnmov(char *dst,uint len, const char *src, ...)
|
||||||
{
|
{
|
||||||
va_list pvar;
|
va_list pvar;
|
||||||
char *result;
|
char *end_of_dst=dst+len;
|
||||||
|
|
||||||
va_start(pvar,src);
|
va_start(pvar,src);
|
||||||
while (src != NullS) {
|
while (src != NullS)
|
||||||
do if (len-- == 0)
|
{
|
||||||
|
do
|
||||||
{
|
{
|
||||||
va_end(pvar);
|
if (dst == end_of_dst)
|
||||||
return dst;
|
goto end;
|
||||||
}
|
}
|
||||||
while ((*dst++ = *src++) != 0);
|
while ((*dst++ = *src++));
|
||||||
dst--;
|
dst--;
|
||||||
src = va_arg(pvar, char *);
|
src = va_arg(pvar, char *);
|
||||||
}
|
}
|
||||||
for (result= dst; len-- != 0; *dst++ = 0) ;
|
*dst=0;
|
||||||
|
end:
|
||||||
va_end(pvar);
|
va_end(pvar);
|
||||||
return result;
|
return dst;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user