Commit bfe2917f authored by monty@mysql.com's avatar monty@mysql.com

Merge bk-internal.mysql.com:/home/bk/mysql-4.1

into mysql.com:/home/my/mysql-4.1
parents 7c9b83fc 8c2f17d1
...@@ -150,6 +150,9 @@ static struct my_option my_long_options[] = ...@@ -150,6 +150,9 @@ static struct my_option my_long_options[] =
{"character-sets-dir", OPT_CHARSETS_DIR, {"character-sets-dir", OPT_CHARSETS_DIR,
"Directory where character sets are.", (gptr*) &charsets_dir, "Directory where character sets are.", (gptr*) &charsets_dir,
(gptr*) &charsets_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, (gptr*) &charsets_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"comments", 'i', "Write additional information.",
(gptr*) &opt_comments, (gptr*) &opt_comments, 0, GET_BOOL, NO_ARG,
1, 0, 0, 0, 0, 0},
{"compatible", OPT_COMPATIBLE, {"compatible", OPT_COMPATIBLE,
"Change the dump to be compatible with a given mode. By default tables are dumped in a format optimized for MySQL. Legal modes are: ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb, no_key_options, no_table_options, no_field_options. One can use several modes separated by commas. Note: Requires MySQL server version 4.1.0 or higher. This option is ignored with earlier server versions.", "Change the dump to be compatible with a given mode. By default tables are dumped in a format optimized for MySQL. Legal modes are: ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb, no_key_options, no_table_options, no_field_options. One can use several modes separated by commas. Note: Requires MySQL server version 4.1.0 or higher. This option is ignored with earlier server versions.",
(gptr*) &opt_compatible_mode_str, (gptr*) &opt_compatible_mode_str, 0, (gptr*) &opt_compatible_mode_str, (gptr*) &opt_compatible_mode_str, 0,
...@@ -225,6 +228,9 @@ static struct my_option my_long_options[] = ...@@ -225,6 +228,9 @@ static struct my_option my_long_options[] =
0, 0, 0, 0, 0, 0}, 0, 0, 0, 0, 0, 0},
{"help", '?', "Display this help message and exit.", 0, 0, 0, GET_NO_ARG, {"help", '?', "Display this help message and exit.", 0, 0, 0, GET_NO_ARG,
NO_ARG, 0, 0, 0, 0, 0, 0}, NO_ARG, 0, 0, 0, 0, 0, 0},
{"hex-blob", OPT_HEXBLOB, "Dump binary strings (BINARY, "
"VARBINARY, BLOB) in hexadecimal format.",
(gptr*) &opt_hex_blob, (gptr*) &opt_hex_blob, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"host", 'h', "Connect to host.", (gptr*) &current_host, {"host", 'h', "Connect to host.", (gptr*) &current_host,
(gptr*) &current_host, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, (gptr*) &current_host, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"lines-terminated-by", OPT_LTB, "Lines in the i.file are terminated by ...", {"lines-terminated-by", OPT_LTB, "Lines in the i.file are terminated by ...",
...@@ -344,13 +350,7 @@ static struct my_option my_long_options[] = ...@@ -344,13 +350,7 @@ static struct my_option my_long_options[] =
{"net_buffer_length", OPT_NET_BUFFER_LENGTH, "", {"net_buffer_length", OPT_NET_BUFFER_LENGTH, "",
(gptr*) &opt_net_buffer_length, (gptr*) &opt_net_buffer_length, 0, (gptr*) &opt_net_buffer_length, (gptr*) &opt_net_buffer_length, 0,
GET_ULONG, REQUIRED_ARG, 1024*1024L-1025, 4096, 16*1024L*1024L, GET_ULONG, REQUIRED_ARG, 1024*1024L-1025, 4096, 16*1024L*1024L,
MALLOC_OVERHEAD-1024, 1024, 0}, MALLOC_OVERHEAD-1024, 1024, 0}
{"comments", 'i', "Write additional information.",
(gptr*) &opt_comments, (gptr*) &opt_comments, 0, GET_BOOL, NO_ARG,
1, 0, 0, 0, 0, 0},
{"hex-blob", OPT_HEXBLOB, "Dump BLOBs in HEX.",
(gptr*) &opt_hex_blob, (gptr*) &opt_hex_blob, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
}; };
static const char *load_default_groups[]= { "mysqldump","client",0 }; static const char *load_default_groups[]= { "mysqldump","client",0 };
......
...@@ -1069,30 +1069,6 @@ trx_purge(void) ...@@ -1069,30 +1069,6 @@ trx_purge(void)
} }
} }
/* Determine how much data manipulation language (DML) statements
need to be delayed in order to reduce the lagging of the purge
thread. */
srv_dml_needed_delay = 0; /* in microseconds; default: no delay */
/* If we cannot advance the 'purge view' because of an old
'consistent read view', then the DML statements cannot be delayed.
Also, srv_max_purge_lag <= 0 means 'infinity'. */
if (srv_max_purge_lag > 0
&& !UT_LIST_GET_LAST(trx_sys->view_list)) {
float ratio = (float) trx_sys->rseg_history_len
/ srv_max_purge_lag;
if (ratio > ULINT_MAX / 10000) {
/* Avoid overflow: maximum delay is 4295 seconds */
srv_dml_needed_delay = ULINT_MAX;
} else if (ratio > 1) {
/* If the history list length exceeds the
innodb_max_purge_lag, the
data manipulation statements are delayed
by at least 5000 microseconds. */
srv_dml_needed_delay = (ulint) ((ratio - .5) * 10000);
}
}
purge_sys->view = read_view_oldest_copy_or_open_new(NULL, purge_sys->view = read_view_oldest_copy_or_open_new(NULL,
purge_sys->heap); purge_sys->heap);
mutex_exit(&kernel_mutex); mutex_exit(&kernel_mutex);
......
...@@ -656,6 +656,14 @@ static int chk_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo, ...@@ -656,6 +656,14 @@ static int chk_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
if (chk_index_down(param,info,&info->s->ft2_keyinfo,record, if (chk_index_down(param,info,&info->s->ft2_keyinfo,record,
temp_buff,&tmp_keys,key_checksum,1)) temp_buff,&tmp_keys,key_checksum,1))
goto err; goto err;
if (tmp_keys + subkeys)
{
mi_check_print_error(param,"Number of words in the 2nd level tree "
"does not match the number in the header. "
"Parent word in on the page %s, offset %d",
llstr(page,llbuff), old_keypos-buff);
goto err;
}
(*keys)+=tmp_keys-1; (*keys)+=tmp_keys-1;
continue; continue;
} }
......
...@@ -372,6 +372,7 @@ static int w_search(register MI_INFO *info, register MI_KEYDEF *keyinfo, ...@@ -372,6 +372,7 @@ static int w_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
/* popular word. two-level tree. going down */ /* popular word. two-level tree. going down */
my_off_t root=info->dupp_key_pos; my_off_t root=info->dupp_key_pos;
keyinfo=&info->s->ft2_keyinfo; keyinfo=&info->s->ft2_keyinfo;
get_key_full_length_rdonly(off, key);
key+=off; key+=off;
keypos-=keyinfo->keylength+nod_flag; /* we'll modify key entry 'in vivo' */ keypos-=keyinfo->keylength+nod_flag; /* we'll modify key entry 'in vivo' */
error=_mi_ck_real_write_btree(info, keyinfo, key, 0, error=_mi_ck_real_write_btree(info, keyinfo, key, 0,
......
...@@ -227,7 +227,7 @@ DO_CLIENT_GDB="" ...@@ -227,7 +227,7 @@ DO_CLIENT_GDB=""
SLEEP_TIME_AFTER_RESTART=1 SLEEP_TIME_AFTER_RESTART=1
SLEEP_TIME_FOR_DELETE=10 SLEEP_TIME_FOR_DELETE=10
SLEEP_TIME_FOR_FIRST_MASTER=400 # Enough time to create innodb tables SLEEP_TIME_FOR_FIRST_MASTER=400 # Enough time to create innodb tables
SLEEP_TIME_FOR_SECOND_MASTER=30 SLEEP_TIME_FOR_SECOND_MASTER=400
SLEEP_TIME_FOR_FIRST_SLAVE=400 SLEEP_TIME_FOR_FIRST_SLAVE=400
SLEEP_TIME_FOR_SECOND_SLAVE=30 SLEEP_TIME_FOR_SECOND_SLAVE=30
CHARACTER_SET=latin1 CHARACTER_SET=latin1
......
...@@ -20,6 +20,10 @@ ...@@ -20,6 +20,10 @@
#include <basestring_vsnprintf.h> #include <basestring_vsnprintf.h>
#include <my_config.h> #include <my_config.h>
/*
#define SNPRINTF_RETURN_TRUNC
*/
int int
basestring_snprintf(char *str, size_t size, const char *format, ...) basestring_snprintf(char *str, size_t size, const char *format, ...)
{ {
...@@ -47,13 +51,27 @@ static char basestring_vsnprintf_buf[16*1024]; ...@@ -47,13 +51,27 @@ static char basestring_vsnprintf_buf[16*1024];
int int
basestring_vsnprintf(char *str, size_t size, const char *format, va_list ap) basestring_vsnprintf(char *str, size_t size, const char *format, va_list ap)
{ {
int ret= BASESTRING_VSNPRINTF_FUNC(str, size, format, ap); if (size == 0)
{
#ifdef SNPRINTF_RETURN_TRUNC #ifdef SNPRINTF_RETURN_TRUNC
if (ret == size-1 || ret == -1) { return BASESTRING_VSNPRINTF_FUNC(basestring_vsnprintf_buf,
ret= BASESTRING_VSNPRINTF_FUNC(basestring_vsnprintf_buf, sizeof(basestring_vsnprintf_buf),
sizeof(basestring_vsnprintf_buf), format, ap);
format, ap); #else
char buf[1];
return BASESTRING_VSNPRINTF_FUNC(buf, 1, format, ap);
#endif
} }
{
int ret= BASESTRING_VSNPRINTF_FUNC(str, size, format, ap);
#ifdef SNPRINTF_RETURN_TRUNC
if (ret == size-1 || ret == -1)
{
ret= BASESTRING_VSNPRINTF_FUNC(basestring_vsnprintf_buf,
sizeof(basestring_vsnprintf_buf),
format, ap);
}
#endif #endif
return ret; return ret;
}
} }
...@@ -32,19 +32,21 @@ int test_snprintf(const char * fmt, int buf_sz, int result) ...@@ -32,19 +32,21 @@ int test_snprintf(const char * fmt, int buf_sz, int result)
if(ret < 0) if(ret < 0)
{ {
printf("BaseString::snprint returns %d\n", ret); printf("BaseString::snprint returns %d with size=%d and strlen(fmt)=%d\n",
ret, buf_sz, strlen(fmt));
return -1; return -1;
} }
if(ret+1 == buf_sz) if(ret+1 == buf_sz)
{ {
printf("BaseString::snprint truncates\n"); printf("BaseString::snprint truncates returns %d with size=%d and strlen(fmt)=%d\n",
ret, buf_sz, strlen(fmt));
return -1; return -1;
} }
if(ret != result) if(ret != result)
{ {
printf("BaseString::snprint returns incorrect value: %d != %d\n", printf("BaseString::snprint returns incorrect value: returned=%d != expected=%d\n",
ret, result); ret, result);
return -1; return -1;
} }
...@@ -54,7 +56,7 @@ int test_snprintf(const char * fmt, int buf_sz, int result) ...@@ -54,7 +56,7 @@ int test_snprintf(const char * fmt, int buf_sz, int result)
if(buf[ret] != fmt[ret]) if(buf[ret] != fmt[ret])
{ {
printf("BaseString::snprint Incorrect value in output buffer: " printf("BaseString::snprint Incorrect value in output buffer: "
"%d %d %d %d %d\n", "size=%d returned=expected=%d at pos=%d result=%d != expected=%d\n",
buf_sz, result, ret, buf[ret], fmt[ret]); buf_sz, result, ret, buf[ret], fmt[ret]);
return -1; return -1;
} }
......
...@@ -86,7 +86,7 @@ int main(int argc, char** argv){ ...@@ -86,7 +86,7 @@ int main(int argc, char** argv){
if (_hostName == NULL){ if (_hostName == NULL){
LocalConfig lcfg; LocalConfig lcfg;
if(!lcfg.init()) if(!lcfg.init(opt_connect_str, 0))
{ {
lcfg.printError(); lcfg.printError();
lcfg.printUsage(); lcfg.printUsage();
......
...@@ -5628,7 +5628,7 @@ revoke_command: ...@@ -5628,7 +5628,7 @@ revoke_command:
grant_privileges ON opt_table FROM user_list grant_privileges ON opt_table FROM user_list
{} {}
| |
ALL PRIVILEGES ',' GRANT OPTION FROM user_list ALL opt_privileges ',' GRANT OPTION FROM user_list
{ {
Lex->sql_command = SQLCOM_REVOKE_ALL; Lex->sql_command = SQLCOM_REVOKE_ALL;
} }
...@@ -5654,10 +5654,14 @@ grant: ...@@ -5654,10 +5654,14 @@ grant:
grant_privileges: grant_privileges:
grant_privilege_list {} grant_privilege_list {}
| ALL PRIVILEGES { Lex->grant = GLOBAL_ACLS;} | ALL opt_privileges { Lex->grant = GLOBAL_ACLS;}
| ALL { Lex->grant = GLOBAL_ACLS;}
; ;
opt_privileges:
/* empty */
| PRIVILEGES
;
grant_privilege_list: grant_privilege_list:
grant_privilege grant_privilege
| grant_privilege_list ',' grant_privilege; | grant_privilege_list ',' grant_privilege;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment