mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge build.mysql.com:/users/tulin/mysql-5.0
into build.mysql.com:/users/tulin/mysql-5.0-ndb sql/sql_analyse.cc: Auto merged
This commit is contained in:
@ -531,10 +531,7 @@ struct row_prebuilt_struct {
|
|||||||
format */
|
format */
|
||||||
ulint hint_need_to_fetch_extra_cols;
|
ulint hint_need_to_fetch_extra_cols;
|
||||||
/* normally this is set to 0; if this
|
/* normally this is set to 0; if this
|
||||||
is set to ROW_RETRIEVE_PRIMARY_KEY
|
is set to ROW_RETRIEVE_PRIMARY_KEY,
|
||||||
(that value is obsolete starting from
|
|
||||||
5.0.2, because we always fetch the
|
|
||||||
primary key cols),
|
|
||||||
then we should at least retrieve all
|
then we should at least retrieve all
|
||||||
columns in the primary key; if this
|
columns in the primary key; if this
|
||||||
is set to ROW_RETRIEVE_ALL_COLS, then
|
is set to ROW_RETRIEVE_ALL_COLS, then
|
||||||
@ -607,9 +604,6 @@ struct row_prebuilt_struct {
|
|||||||
|
|
||||||
/* Values for hint_need_to_fetch_extra_cols */
|
/* Values for hint_need_to_fetch_extra_cols */
|
||||||
#define ROW_RETRIEVE_PRIMARY_KEY 1
|
#define ROW_RETRIEVE_PRIMARY_KEY 1
|
||||||
/* value 1 is obsolete starting from
|
|
||||||
5.0.2, because we always fetch the
|
|
||||||
primary key cols */
|
|
||||||
#define ROW_RETRIEVE_ALL_COLS 2
|
#define ROW_RETRIEVE_ALL_COLS 2
|
||||||
|
|
||||||
|
|
||||||
|
@ -2331,11 +2331,6 @@ row_sel_store_mysql_rec(
|
|||||||
prebuilt->blob_heap = NULL;
|
prebuilt->blob_heap = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MySQL assumes that all columns have the SQL NULL bit set unless it
|
|
||||||
is a nullable column with a non-NULL value */
|
|
||||||
|
|
||||||
memset(mysql_rec, 0xFF, prebuilt->null_bitmap_len);
|
|
||||||
|
|
||||||
for (i = 0; i < prebuilt->n_template; i++) {
|
for (i = 0; i < prebuilt->n_template; i++) {
|
||||||
|
|
||||||
templ = prebuilt->mysql_template + i;
|
templ = prebuilt->mysql_template + i;
|
||||||
@ -2431,6 +2426,8 @@ row_sel_store_mysql_rec(
|
|||||||
bug number 154 in the MySQL bug database: GROUP BY
|
bug number 154 in the MySQL bug database: GROUP BY
|
||||||
and DISTINCT could treat NULL values inequal. */
|
and DISTINCT could treat NULL values inequal. */
|
||||||
|
|
||||||
|
mysql_rec[templ->mysql_null_byte_offset] |=
|
||||||
|
(byte) (templ->mysql_null_bit_mask);
|
||||||
if (templ->type == DATA_VARCHAR
|
if (templ->type == DATA_VARCHAR
|
||||||
|| templ->type == DATA_CHAR
|
|| templ->type == DATA_CHAR
|
||||||
|| templ->type == DATA_BINARY
|
|| templ->type == DATA_BINARY
|
||||||
@ -2749,10 +2746,15 @@ row_sel_pop_cached_row_for_mysql(
|
|||||||
buf + templ->mysql_col_offset,
|
buf + templ->mysql_col_offset,
|
||||||
cached_rec + templ->mysql_col_offset,
|
cached_rec + templ->mysql_col_offset,
|
||||||
templ->mysql_col_len);
|
templ->mysql_col_len);
|
||||||
|
/* Copy NULL bit of the current field from cached_rec
|
||||||
|
to buf */
|
||||||
if (templ->mysql_null_bit_mask)
|
if (templ->mysql_null_bit_mask)
|
||||||
buf[templ->mysql_null_byte_offset] &=
|
{
|
||||||
cached_rec[templ->mysql_null_byte_offset];
|
buf[templ->mysql_null_byte_offset] ^=
|
||||||
|
(buf[templ->mysql_null_byte_offset] ^
|
||||||
|
cached_rec[templ->mysql_null_byte_offset]) &
|
||||||
|
(byte)templ->mysql_null_bit_mask;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -146,3 +146,4 @@ EXPORTS
|
|||||||
mysql_rpl_query_type
|
mysql_rpl_query_type
|
||||||
mysql_slave_query
|
mysql_slave_query
|
||||||
mysql_embedded
|
mysql_embedded
|
||||||
|
get_defaults_files
|
||||||
|
@ -157,3 +157,4 @@ EXPORTS
|
|||||||
mysql_stmt_attr_get
|
mysql_stmt_attr_get
|
||||||
mysql_stmt_attr_set
|
mysql_stmt_attr_set
|
||||||
mysql_stmt_field_count
|
mysql_stmt_field_count
|
||||||
|
get_defaults_files
|
||||||
|
@ -53,3 +53,71 @@ key1 key2 str1 zeroval str2 str3
|
|||||||
1 199 aaa 0 bbb 199-0_A
|
1 199 aaa 0 bbb 199-0_A
|
||||||
0 200 aaa 0 bbb 200-0_a
|
0 200 aaa 0 bbb 200-0_a
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (
|
||||||
|
pk integer not null auto_increment primary key,
|
||||||
|
key1 integer,
|
||||||
|
key2 integer not null,
|
||||||
|
filler char (200),
|
||||||
|
index (key1),
|
||||||
|
index (key2)
|
||||||
|
) engine=innodb;
|
||||||
|
show warnings;
|
||||||
|
Level Code Message
|
||||||
|
explain select pk from t1 where key1 = 1 and key2 = 1;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 index_merge key1,key2 key1,key2 5,4 NULL 1 Using intersect(key1,key2); Using where; Using index
|
||||||
|
select pk from t1 where key2 = 1 and key1 = 1;
|
||||||
|
pk
|
||||||
|
26
|
||||||
|
select pk from t1 ignore index(key1,key2) where key2 = 1 and key1 = 1;
|
||||||
|
pk
|
||||||
|
26
|
||||||
|
drop table t1;
|
||||||
|
create table t1 (
|
||||||
|
pk int primary key auto_increment,
|
||||||
|
key1a int,
|
||||||
|
key2a int,
|
||||||
|
key1b int,
|
||||||
|
key2b int,
|
||||||
|
dummy1 int,
|
||||||
|
dummy2 int,
|
||||||
|
dummy3 int,
|
||||||
|
dummy4 int,
|
||||||
|
key3a int,
|
||||||
|
key3b int,
|
||||||
|
filler1 char (200),
|
||||||
|
index i1(key1a, key1b),
|
||||||
|
index i2(key2a, key2b),
|
||||||
|
index i3(key3a, key3b)
|
||||||
|
) engine=innodb;
|
||||||
|
create table t2 (a int);
|
||||||
|
insert into t2 values (0),(1),(2),(3),(4),(NULL);
|
||||||
|
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
|
||||||
|
select A.a, B.a, C.a, D.a, C.a, D.a from t2 A,t2 B,t2 C, t2 D;
|
||||||
|
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
|
||||||
|
select key1a, key1b, key2a, key2b, key3a, key3b from t1;
|
||||||
|
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
|
||||||
|
select key1a, key1b, key2a, key2b, key3a, key3b from t1;
|
||||||
|
analyze table t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 analyze status OK
|
||||||
|
select count(*) from t1;
|
||||||
|
count(*)
|
||||||
|
5184
|
||||||
|
explain select count(*) from t1 where
|
||||||
|
key1a = 2 and key1b is null and key2a = 2 and key2b is null;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 index_merge i1,i2 i1,i2 10,10 NULL 3 Using intersect(i1,i2); Using where; Using index
|
||||||
|
select count(*) from t1 where
|
||||||
|
key1a = 2 and key1b is null and key2a = 2 and key2b is null;
|
||||||
|
count(*)
|
||||||
|
4
|
||||||
|
explain select count(*) from t1 where
|
||||||
|
key1a = 2 and key1b is null and key3a = 2 and key3b is null;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 index_merge i1,i3 i1,i3 10,10 NULL 3 Using intersect(i1,i3); Using where; Using index
|
||||||
|
select count(*) from t1 where
|
||||||
|
key1a = 2 and key1b is null and key3a = 2 and key3b is null;
|
||||||
|
count(*)
|
||||||
|
4
|
||||||
|
drop table t1,t2;
|
||||||
|
@ -77,7 +77,7 @@ select @@session.max_user_connections, @@global.max_user_connections;
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
i
|
i
|
||||||
connect(localhost,mysqltest_1,,test,MYSQL_PORT,MYSQL_SOCK);
|
connect(localhost,mysqltest_1,,test,MYSQL_PORT,MYSQL_SOCK);
|
||||||
ERROR 42000: User mysqltest_1 has already more than 'max_user_connections' active connections
|
ERROR 42000: User mysqltest_1 already has more than 'max_user_connections' active connections
|
||||||
grant usage on *.* to mysqltest_1@localhost with max_user_connections 3;
|
grant usage on *.* to mysqltest_1@localhost with max_user_connections 3;
|
||||||
select @@session.max_user_connections, @@global.max_user_connections;
|
select @@session.max_user_connections, @@global.max_user_connections;
|
||||||
@@session.max_user_connections @@global.max_user_connections
|
@@session.max_user_connections @@global.max_user_connections
|
||||||
|
@ -38,6 +38,11 @@ select * from t2;
|
|||||||
insert into t2 select * from t1 procedure analyse();
|
insert into t2 select * from t1 procedure analyse();
|
||||||
select * from t2;
|
select * from t2;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#2813 - analyse does not quote string values in enums from string
|
||||||
|
#
|
||||||
|
|
||||||
create table t1 (v varchar(128));
|
create table t1 (v varchar(128));
|
||||||
insert into t1 values ('abc'),('abc\'def\\hij\"klm\0opq'),('\''),('\"'),('\\'),('a\0'),('b\''),('c\"'),('d\\'),('\'b'),('\"c'),('\\d'),('a\0\0\0b'),('a\'\'\'\'b'),('a\"\"\"\"b'),('a\\\\\\\\b'),('\'\0\\\"'),('\'\''),('\"\"'),('\\\\'),('The\ZEnd');
|
insert into t1 values ('abc'),('abc\'def\\hij\"klm\0opq'),('\''),('\"'),('\\'),('a\0'),('b\''),('c\"'),('d\\'),('\'b'),('\"c'),('\\d'),('a\0\0\0b'),('a\'\'\'\'b'),('a\"\"\"\"b'),('a\\\\\\\\b'),('\'\0\\\"'),('\'\''),('\"\"'),('\\\\'),('The\ZEnd');
|
||||||
select * from t1 procedure analyse();
|
select * from t1 procedure analyse();
|
||||||
|
@ -51,4 +51,72 @@ select * from t1 where key1 < 5 or key2 > 197;
|
|||||||
explain select * from t1 where key1 < 3 or key2 > 195;
|
explain select * from t1 where key1 < 3 or key2 > 195;
|
||||||
select * from t1 where key1 < 3 or key2 > 195;
|
select * from t1 where key1 < 3 or key2 > 195;
|
||||||
|
|
||||||
|
# Test for BUG#5401
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (
|
||||||
|
pk integer not null auto_increment primary key,
|
||||||
|
key1 integer,
|
||||||
|
key2 integer not null,
|
||||||
|
filler char (200),
|
||||||
|
index (key1),
|
||||||
|
index (key2)
|
||||||
|
) engine=innodb;
|
||||||
|
show warnings;
|
||||||
|
--disable_query_log
|
||||||
|
let $1=30;
|
||||||
|
while ($1)
|
||||||
|
{
|
||||||
|
eval insert into t1 (key1, key2, filler) values ($1/4, $1/8, 'filler-data');
|
||||||
|
dec $1;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
explain select pk from t1 where key1 = 1 and key2 = 1;
|
||||||
|
select pk from t1 where key2 = 1 and key1 = 1;
|
||||||
|
select pk from t1 ignore index(key1,key2) where key2 = 1 and key1 = 1;
|
||||||
|
|
||||||
|
# More tests for BUG#5401.
|
||||||
|
drop table t1;
|
||||||
|
create table t1 (
|
||||||
|
pk int primary key auto_increment,
|
||||||
|
key1a int,
|
||||||
|
key2a int,
|
||||||
|
key1b int,
|
||||||
|
key2b int,
|
||||||
|
dummy1 int,
|
||||||
|
dummy2 int,
|
||||||
|
dummy3 int,
|
||||||
|
dummy4 int,
|
||||||
|
key3a int,
|
||||||
|
key3b int,
|
||||||
|
filler1 char (200),
|
||||||
|
index i1(key1a, key1b),
|
||||||
|
index i2(key2a, key2b),
|
||||||
|
index i3(key3a, key3b)
|
||||||
|
) engine=innodb;
|
||||||
|
|
||||||
|
create table t2 (a int);
|
||||||
|
insert into t2 values (0),(1),(2),(3),(4),(NULL);
|
||||||
|
|
||||||
|
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
|
||||||
|
select A.a, B.a, C.a, D.a, C.a, D.a from t2 A,t2 B,t2 C, t2 D;
|
||||||
|
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
|
||||||
|
select key1a, key1b, key2a, key2b, key3a, key3b from t1;
|
||||||
|
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
|
||||||
|
select key1a, key1b, key2a, key2b, key3a, key3b from t1;
|
||||||
|
analyze table t1;
|
||||||
|
select count(*) from t1;
|
||||||
|
|
||||||
|
explain select count(*) from t1 where
|
||||||
|
key1a = 2 and key1b is null and key2a = 2 and key2b is null;
|
||||||
|
|
||||||
|
select count(*) from t1 where
|
||||||
|
key1a = 2 and key1b is null and key2a = 2 and key2b is null;
|
||||||
|
|
||||||
|
explain select count(*) from t1 where
|
||||||
|
key1a = 2 and key1b is null and key3a = 2 and key3b is null;
|
||||||
|
|
||||||
|
select count(*) from t1 where
|
||||||
|
key1a = 2 and key1b is null and key3a = 2 and key3b is null;
|
||||||
|
|
||||||
|
drop table t1,t2;
|
||||||
|
|
||||||
|
@ -2302,13 +2302,7 @@ build_template(
|
|||||||
ulint n_fields;
|
ulint n_fields;
|
||||||
ulint n_requested_fields = 0;
|
ulint n_requested_fields = 0;
|
||||||
ibool fetch_all_in_key = FALSE;
|
ibool fetch_all_in_key = FALSE;
|
||||||
ibool fetch_primary_key_cols = TRUE; /* The ROR code in
|
ibool fetch_primary_key_cols = FALSE;
|
||||||
opt_range.cc assumes that the
|
|
||||||
primary key cols are always
|
|
||||||
retrieved. Starting from
|
|
||||||
MySQL-5.0.2, let us always
|
|
||||||
fetch them, even though it
|
|
||||||
wastes some CPU. */
|
|
||||||
ulint i;
|
ulint i;
|
||||||
|
|
||||||
if (prebuilt->select_lock_type == LOCK_X) {
|
if (prebuilt->select_lock_type == LOCK_X) {
|
||||||
|
@ -4418,6 +4418,9 @@ Disable with --skip-large-pages.",
|
|||||||
Disable with --skip-innodb (will save memory).",
|
Disable with --skip-innodb (will save memory).",
|
||||||
(gptr*) &opt_innodb, (gptr*) &opt_innodb, 0, GET_BOOL, NO_ARG, OPT_INNODB_DEFAULT, 0, 0,
|
(gptr*) &opt_innodb, (gptr*) &opt_innodb, 0, GET_BOOL, NO_ARG, OPT_INNODB_DEFAULT, 0, 0,
|
||||||
0, 0, 0},
|
0, 0, 0},
|
||||||
|
{"innodb_checksums", OPT_INNODB_CHECKSUMS, "Enable InnoDB checksums validation (enabled by default). \
|
||||||
|
Disable with --skip-innodb-checksums.", (gptr*) &innobase_use_checksums,
|
||||||
|
(gptr*) &innobase_use_checksums, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
|
||||||
{"innodb_data_file_path", OPT_INNODB_DATA_FILE_PATH,
|
{"innodb_data_file_path", OPT_INNODB_DATA_FILE_PATH,
|
||||||
"Path to individual files and their sizes.",
|
"Path to individual files and their sizes.",
|
||||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
@ -4429,9 +4432,6 @@ Disable with --skip-innodb (will save memory).",
|
|||||||
{"innodb_doublewrite", OPT_INNODB_DOUBLEWRITE, "Enable InnoDB doublewrite buffer (enabled by default). \
|
{"innodb_doublewrite", OPT_INNODB_DOUBLEWRITE, "Enable InnoDB doublewrite buffer (enabled by default). \
|
||||||
Disable with --skip-innodb-doublewrite.", (gptr*) &innobase_use_doublewrite,
|
Disable with --skip-innodb-doublewrite.", (gptr*) &innobase_use_doublewrite,
|
||||||
(gptr*) &innobase_use_doublewrite, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
|
(gptr*) &innobase_use_doublewrite, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
|
||||||
{"innodb_checksums", OPT_INNODB_CHECKSUMS, "Enable InnoDB checksums validation (enabled by default). \
|
|
||||||
Disable with --skip-innodb-checksums.", (gptr*) &innobase_use_checksums,
|
|
||||||
(gptr*) &innobase_use_checksums, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
|
|
||||||
{"innodb_fast_shutdown", OPT_INNODB_FAST_SHUTDOWN,
|
{"innodb_fast_shutdown", OPT_INNODB_FAST_SHUTDOWN,
|
||||||
"Speeds up server shutdown process.", (gptr*) &innobase_fast_shutdown,
|
"Speeds up server shutdown process.", (gptr*) &innobase_fast_shutdown,
|
||||||
(gptr*) &innobase_fast_shutdown, 0, GET_BOOL, OPT_ARG, 1, 0, 0, 0, 0, 0},
|
(gptr*) &innobase_fast_shutdown, 0, GET_BOOL, OPT_ARG, 1, 0, 0, 0, 0, 0},
|
||||||
@ -5016,6 +5016,12 @@ log and this option does nothing anymore.",
|
|||||||
"The size of the memory buffer InnoDB uses to cache data and indexes of its tables.",
|
"The size of the memory buffer InnoDB uses to cache data and indexes of its tables.",
|
||||||
(gptr*) &innobase_buffer_pool_size, (gptr*) &innobase_buffer_pool_size, 0,
|
(gptr*) &innobase_buffer_pool_size, (gptr*) &innobase_buffer_pool_size, 0,
|
||||||
GET_LONG, REQUIRED_ARG, 8*1024*1024L, 1024*1024L, ~0L, 0, 1024*1024L, 0},
|
GET_LONG, REQUIRED_ARG, 8*1024*1024L, 1024*1024L, ~0L, 0, 1024*1024L, 0},
|
||||||
|
{"innodb_concurrency_tickets", OPT_INNODB_CONCURRENCY_TICKETS,
|
||||||
|
"Number of times a thread is allowed to enter InnoDB within the same \
|
||||||
|
SQL query after it has once got the ticket",
|
||||||
|
(gptr*) &srv_n_free_tickets_to_enter,
|
||||||
|
(gptr*) &srv_n_free_tickets_to_enter,
|
||||||
|
0, GET_LONG, REQUIRED_ARG, 500L, 1L, ~0L, 0, 1L, 0},
|
||||||
{"innodb_file_io_threads", OPT_INNODB_FILE_IO_THREADS,
|
{"innodb_file_io_threads", OPT_INNODB_FILE_IO_THREADS,
|
||||||
"Number of file I/O threads in InnoDB.", (gptr*) &innobase_file_io_threads,
|
"Number of file I/O threads in InnoDB.", (gptr*) &innobase_file_io_threads,
|
||||||
(gptr*) &innobase_file_io_threads, 0, GET_LONG, REQUIRED_ARG, 4, 4, 64, 0,
|
(gptr*) &innobase_file_io_threads, 0, GET_LONG, REQUIRED_ARG, 4, 4, 64, 0,
|
||||||
@ -5049,17 +5055,6 @@ log and this option does nothing anymore.",
|
|||||||
"How many files at the maximum InnoDB keeps open at the same time.",
|
"How many files at the maximum InnoDB keeps open at the same time.",
|
||||||
(gptr*) &innobase_open_files, (gptr*) &innobase_open_files, 0,
|
(gptr*) &innobase_open_files, (gptr*) &innobase_open_files, 0,
|
||||||
GET_LONG, REQUIRED_ARG, 300L, 10L, ~0L, 0, 1L, 0},
|
GET_LONG, REQUIRED_ARG, 300L, 10L, ~0L, 0, 1L, 0},
|
||||||
{"innodb_sync_spin_loops", OPT_INNODB_SYNC_SPIN_LOOPS,
|
|
||||||
"Count of spin-loop rounds in InnoDB mutexes",
|
|
||||||
(gptr*) &srv_n_spin_wait_rounds,
|
|
||||||
(gptr*) &srv_n_spin_wait_rounds,
|
|
||||||
0, GET_LONG, REQUIRED_ARG, 20L, 0L, ~0L, 0, 1L, 0},
|
|
||||||
{"innodb_concurrency_tickets", OPT_INNODB_CONCURRENCY_TICKETS,
|
|
||||||
"Number of times a thread is allowed to enter InnoDB within the same \
|
|
||||||
SQL query after it has once got the ticket",
|
|
||||||
(gptr*) &srv_n_free_tickets_to_enter,
|
|
||||||
(gptr*) &srv_n_free_tickets_to_enter,
|
|
||||||
0, GET_LONG, REQUIRED_ARG, 500L, 1L, ~0L, 0, 1L, 0},
|
|
||||||
#ifdef HAVE_REPLICATION
|
#ifdef HAVE_REPLICATION
|
||||||
/*
|
/*
|
||||||
Disabled for the 4.1.3 release. Disabling just this paragraph of code is
|
Disabled for the 4.1.3 release. Disabling just this paragraph of code is
|
||||||
@ -5080,6 +5075,11 @@ log and this option does nothing anymore.",
|
|||||||
0, GET_BOOL, NO_ARG, 0, 0, 1, 0, 1, 0},
|
0, GET_BOOL, NO_ARG, 0, 0, 1, 0, 1, 0},
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
{"innodb_sync_spin_loops", OPT_INNODB_SYNC_SPIN_LOOPS,
|
||||||
|
"Count of spin-loop rounds in InnoDB mutexes",
|
||||||
|
(gptr*) &srv_n_spin_wait_rounds,
|
||||||
|
(gptr*) &srv_n_spin_wait_rounds,
|
||||||
|
0, GET_LONG, REQUIRED_ARG, 20L, 0L, ~0L, 0, 1L, 0},
|
||||||
{"innodb_thread_concurrency", OPT_INNODB_THREAD_CONCURRENCY,
|
{"innodb_thread_concurrency", OPT_INNODB_THREAD_CONCURRENCY,
|
||||||
"Helps in performance tuning in heavily concurrent environments.",
|
"Helps in performance tuning in heavily concurrent environments.",
|
||||||
(gptr*) &srv_thread_concurrency, (gptr*) &srv_thread_concurrency,
|
(gptr*) &srv_thread_concurrency, (gptr*) &srv_thread_concurrency,
|
||||||
|
@ -912,7 +912,7 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler)
|
|||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("Reusing handler %p", file));
|
DBUG_PRINT("info", ("Reusing handler %p", file));
|
||||||
if (file->extra(HA_EXTRA_KEYREAD) ||
|
if (file->extra(HA_EXTRA_KEYREAD) ||
|
||||||
file->extra(HA_EXTRA_RETRIEVE_ALL_COLS) |
|
file->extra(HA_EXTRA_RETRIEVE_PRIMARY_KEY) ||
|
||||||
init() || reset())
|
init() || reset())
|
||||||
{
|
{
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
@ -937,7 +937,7 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (file->extra(HA_EXTRA_KEYREAD) ||
|
if (file->extra(HA_EXTRA_KEYREAD) ||
|
||||||
file->extra(HA_EXTRA_RETRIEVE_ALL_COLS) ||
|
file->extra(HA_EXTRA_RETRIEVE_PRIMARY_KEY) ||
|
||||||
init() || reset())
|
init() || reset())
|
||||||
{
|
{
|
||||||
file->close();
|
file->close();
|
||||||
@ -5621,7 +5621,8 @@ int QUICK_INDEX_MERGE_SELECT::read_keys_and_merge()
|
|||||||
DBUG_ENTER("QUICK_INDEX_MERGE_SELECT::prepare_unique");
|
DBUG_ENTER("QUICK_INDEX_MERGE_SELECT::prepare_unique");
|
||||||
|
|
||||||
/* We're going to just read rowids. */
|
/* We're going to just read rowids. */
|
||||||
head->file->extra(HA_EXTRA_KEYREAD);
|
if (head->file->extra(HA_EXTRA_KEYREAD))
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Make innodb retrieve all PK member fields, so
|
Make innodb retrieve all PK member fields, so
|
||||||
@ -5630,7 +5631,8 @@ int QUICK_INDEX_MERGE_SELECT::read_keys_and_merge()
|
|||||||
(This also creates a deficiency - it is possible that we will retrieve
|
(This also creates a deficiency - it is possible that we will retrieve
|
||||||
parts of key that are not used by current query at all.)
|
parts of key that are not used by current query at all.)
|
||||||
*/
|
*/
|
||||||
head->file->extra(HA_EXTRA_RETRIEVE_ALL_COLS);
|
if (head->file->extra(HA_EXTRA_RETRIEVE_PRIMARY_KEY))
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
cur_quick_it.rewind();
|
cur_quick_it.rewind();
|
||||||
cur_quick= cur_quick_it++;
|
cur_quick= cur_quick_it++;
|
||||||
|
@ -750,11 +750,11 @@ struct show_var_st init_vars[]= {
|
|||||||
{sys_innodb_autoextend_increment.name, (char*) &sys_innodb_autoextend_increment, SHOW_SYS},
|
{sys_innodb_autoextend_increment.name, (char*) &sys_innodb_autoextend_increment, SHOW_SYS},
|
||||||
{"innodb_buffer_pool_awe_mem_mb", (char*) &innobase_buffer_pool_awe_mem_mb, SHOW_LONG },
|
{"innodb_buffer_pool_awe_mem_mb", (char*) &innobase_buffer_pool_awe_mem_mb, SHOW_LONG },
|
||||||
{"innodb_buffer_pool_size", (char*) &innobase_buffer_pool_size, SHOW_LONG },
|
{"innodb_buffer_pool_size", (char*) &innobase_buffer_pool_size, SHOW_LONG },
|
||||||
|
{"innodb_checksums", (char*) &innobase_use_checksums, SHOW_MY_BOOL},
|
||||||
|
{sys_innodb_concurrency_tickets.name, (char*) &sys_innodb_concurrency_tickets, SHOW_SYS},
|
||||||
{"innodb_data_file_path", (char*) &innobase_data_file_path, SHOW_CHAR_PTR},
|
{"innodb_data_file_path", (char*) &innobase_data_file_path, SHOW_CHAR_PTR},
|
||||||
{"innodb_data_home_dir", (char*) &innobase_data_home_dir, SHOW_CHAR_PTR},
|
{"innodb_data_home_dir", (char*) &innobase_data_home_dir, SHOW_CHAR_PTR},
|
||||||
{"innodb_doublewrite", (char*) &innobase_use_doublewrite, SHOW_MY_BOOL},
|
{"innodb_doublewrite", (char*) &innobase_use_doublewrite, SHOW_MY_BOOL},
|
||||||
{"innodb_checksums", (char*) &innobase_use_checksums, SHOW_MY_BOOL},
|
|
||||||
{sys_innodb_concurrency_tickets.name, (char*) &sys_innodb_concurrency_tickets, SHOW_SYS},
|
|
||||||
{"innodb_fast_shutdown", (char*) &innobase_fast_shutdown, SHOW_MY_BOOL},
|
{"innodb_fast_shutdown", (char*) &innobase_fast_shutdown, SHOW_MY_BOOL},
|
||||||
{"innodb_file_io_threads", (char*) &innobase_file_io_threads, SHOW_LONG },
|
{"innodb_file_io_threads", (char*) &innobase_file_io_threads, SHOW_LONG },
|
||||||
{"innodb_file_per_table", (char*) &innobase_file_per_table, SHOW_MY_BOOL},
|
{"innodb_file_per_table", (char*) &innobase_file_per_table, SHOW_MY_BOOL},
|
||||||
@ -773,10 +773,10 @@ struct show_var_st init_vars[]= {
|
|||||||
{sys_innodb_max_purge_lag.name, (char*) &sys_innodb_max_purge_lag, SHOW_SYS},
|
{sys_innodb_max_purge_lag.name, (char*) &sys_innodb_max_purge_lag, SHOW_SYS},
|
||||||
{"innodb_mirrored_log_groups", (char*) &innobase_mirrored_log_groups, SHOW_LONG},
|
{"innodb_mirrored_log_groups", (char*) &innobase_mirrored_log_groups, SHOW_LONG},
|
||||||
{"innodb_open_files", (char*) &innobase_open_files, SHOW_LONG },
|
{"innodb_open_files", (char*) &innobase_open_files, SHOW_LONG },
|
||||||
{sys_innodb_thread_concurrency.name, (char*) &sys_innodb_thread_concurrency, SHOW_SYS},
|
|
||||||
{sys_innodb_thread_sleep_delay.name, (char*) &sys_innodb_thread_sleep_delay, SHOW_SYS},
|
|
||||||
{sys_innodb_sync_spin_loops.name, (char*) &sys_innodb_sync_spin_loops, SHOW_SYS},
|
{sys_innodb_sync_spin_loops.name, (char*) &sys_innodb_sync_spin_loops, SHOW_SYS},
|
||||||
{sys_innodb_table_locks.name, (char*) &sys_innodb_table_locks, SHOW_SYS},
|
{sys_innodb_table_locks.name, (char*) &sys_innodb_table_locks, SHOW_SYS},
|
||||||
|
{sys_innodb_thread_concurrency.name, (char*) &sys_innodb_thread_concurrency, SHOW_SYS},
|
||||||
|
{sys_innodb_thread_sleep_delay.name, (char*) &sys_innodb_thread_sleep_delay, SHOW_SYS},
|
||||||
#endif
|
#endif
|
||||||
{sys_interactive_timeout.name,(char*) &sys_interactive_timeout, SHOW_SYS},
|
{sys_interactive_timeout.name,(char*) &sys_interactive_timeout, SHOW_SYS},
|
||||||
{sys_join_buffer_size.name, (char*) &sys_join_buffer_size, SHOW_SYS},
|
{sys_join_buffer_size.name, (char*) &sys_join_buffer_size, SHOW_SYS},
|
||||||
|
@ -4266,7 +4266,7 @@ ER_SLAVE_THREAD
|
|||||||
ER_TOO_MANY_USER_CONNECTIONS 42000
|
ER_TOO_MANY_USER_CONNECTIONS 42000
|
||||||
dan "Brugeren %-.64s har allerede mere end 'max_user_connections' aktive forbindelser"
|
dan "Brugeren %-.64s har allerede mere end 'max_user_connections' aktive forbindelser"
|
||||||
nla "Gebruiker %-.64s heeft reeds meer dan 'max_user_connections' actieve verbindingen"
|
nla "Gebruiker %-.64s heeft reeds meer dan 'max_user_connections' actieve verbindingen"
|
||||||
eng "User %-.64s has already more than 'max_user_connections' active connections"
|
eng "User %-.64s already has more than 'max_user_connections' active connections"
|
||||||
est "Kasutajal %-.64s on juba rohkem <20>hendusi kui lubatud 'max_user_connections' muutujaga"
|
est "Kasutajal %-.64s on juba rohkem <20>hendusi kui lubatud 'max_user_connections' muutujaga"
|
||||||
fre "L'utilisateur %-.64s poss<73>de d<>j<EFBFBD> plus de 'max_user_connections' connections actives"
|
fre "L'utilisateur %-.64s poss<73>de d<>j<EFBFBD> plus de 'max_user_connections' connections actives"
|
||||||
ger "Benutzer '%-.64s' hat mehr als max_user_connections aktive Verbindungen"
|
ger "Benutzer '%-.64s' hat mehr als max_user_connections aktive Verbindungen"
|
||||||
@ -4764,7 +4764,7 @@ ER_SLAVE_WAS_RUNNING
|
|||||||
spa "Slave ya est<73> funcionando"
|
spa "Slave ya est<73> funcionando"
|
||||||
swe "Slaven har redan startat"
|
swe "Slaven har redan startat"
|
||||||
ER_SLAVE_WAS_NOT_RUNNING
|
ER_SLAVE_WAS_NOT_RUNNING
|
||||||
eng "Slave has already been stopped"
|
eng "Slave already has been stopped"
|
||||||
ger "Slave wurde bereits angehalten"
|
ger "Slave wurde bereits angehalten"
|
||||||
por "O slave j<> est<73> parado"
|
por "O slave j<> est<73> parado"
|
||||||
spa "Slave ya fu<66> parado"
|
spa "Slave ya fu<66> parado"
|
||||||
|
@ -1029,20 +1029,19 @@ uint check_ulonglong(const char *str, uint length)
|
|||||||
} /* check_ulonlong */
|
} /* check_ulonlong */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
FUNCTION: append_escaped()
|
Quote special characters in a string.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
append_escaped(to_str, from_str)
|
||||||
|
to_str (in) A pointer to a String.
|
||||||
|
from_str (to) A pointer to an allocated string
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
append_escaped() takes a String type variable, where it appends
|
append_escaped() takes a String type variable, where it appends
|
||||||
escaped the second argument. Only characters that require escaping
|
escaped the second argument. Only characters that require escaping
|
||||||
will be escaped.
|
will be escaped.
|
||||||
|
|
||||||
ARGUMENTS
|
|
||||||
A pointer to a String variable, where results will be appended
|
|
||||||
A pointer to a String variable, which is appended to the result
|
|
||||||
String, escaping those characters that require it.
|
|
||||||
|
|
||||||
RETURN VALUES
|
RETURN VALUES
|
||||||
0 Success
|
0 Success
|
||||||
1 Out of memory
|
1 Out of memory
|
||||||
|
@ -77,7 +77,7 @@ const char *command_name[]={
|
|||||||
"Drop DB", "Refresh", "Shutdown", "Statistics", "Processlist",
|
"Drop DB", "Refresh", "Shutdown", "Statistics", "Processlist",
|
||||||
"Connect","Kill","Debug","Ping","Time","Delayed insert","Change user",
|
"Connect","Kill","Debug","Ping","Time","Delayed insert","Change user",
|
||||||
"Binlog Dump","Table Dump", "Connect Out", "Register Slave",
|
"Binlog Dump","Table Dump", "Connect Out", "Register Slave",
|
||||||
"Prepare", "Prepare Execute", "Long Data", "Close stmt",
|
"Prepare", "Execute", "Long Data", "Close stmt",
|
||||||
"Reset stmt", "Set option", "Fetch",
|
"Reset stmt", "Set option", "Fetch",
|
||||||
"Error" // Last command number
|
"Error" // Last command number
|
||||||
};
|
};
|
||||||
|
@ -1740,7 +1740,7 @@ bool mysql_stmt_prepare(THD *thd, char *packet, uint packet_length,
|
|||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
mysql_log.write(thd, COM_PREPARE, "%s", packet);
|
mysql_log.write(thd, COM_PREPARE, "[%lu] %s", stmt->id, packet);
|
||||||
|
|
||||||
thd->current_arena= stmt;
|
thd->current_arena= stmt;
|
||||||
mysql_init_query(thd, (uchar *) thd->query, thd->query_length);
|
mysql_init_query(thd, (uchar *) thd->query, thd->query_length);
|
||||||
@ -1990,6 +1990,10 @@ void mysql_stmt_execute(THD *thd, char *packet, uint packet_length)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mysql_log.write(thd, COM_EXECUTE, "[%lu] %s", stmt->id,
|
||||||
|
expanded_query.length() ? expanded_query.c_ptr() :
|
||||||
|
stmt->query);
|
||||||
|
|
||||||
thd->protocol= &thd->protocol_prep; // Switch to binary protocol
|
thd->protocol= &thd->protocol_prep; // Switch to binary protocol
|
||||||
if (!(specialflag & SPECIAL_NO_PRIOR))
|
if (!(specialflag & SPECIAL_NO_PRIOR))
|
||||||
my_pthread_setprio(pthread_self(),QUERY_PRIOR);
|
my_pthread_setprio(pthread_self(),QUERY_PRIOR);
|
||||||
|
Reference in New Issue
Block a user