Below is the list of changes that have just been committed into a local
4.1 repository of serg. When serg does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://www.mysql.com/doc/I/n/Installing_source_tree.html
ChangeSet
1.1658 03/12/06 23:21:09 serg@stripped +9 -0
QUERY_NO_GOOD_INDEX_USED and QUERY_NO_INDEX_USED moved from thd->lex.select_lex->options to thd->server_status
mysql-test/t/union-master.opt
1.1 03/12/06 23:21:04 serg@stripped +1 -0
sql/sql_update.cc
1.105 03/12/06 23:21:04 serg@stripped +1 -1
QUERY_NO_GOOD_INDEX_USED and QUERY_NO_INDEX_USED moved from thd->lex.select_lex->options to thd->server_status
sql/sql_select.cc
1.284 03/12/06 23:21:04 serg@stripped +4 -4
QUERY_NO_GOOD_INDEX_USED and QUERY_NO_INDEX_USED moved from thd->lex.select_lex->options to thd->server_status
sql/sql_parse.cc
1.306 03/12/06 23:21:04 serg@stripped +5 -3
QUERY_NO_GOOD_INDEX_USED and QUERY_NO_INDEX_USED moved from thd->lex.select_lex->options to thd->server_status
sql/sql_delete.cc
1.114 03/12/06 23:21:04 serg@stripped +1 -1
QUERY_NO_GOOD_INDEX_USED and QUERY_NO_INDEX_USED moved from thd->lex.select_lex->options to thd->server_status
sql/mysql_priv.h
1.239 03/12/06 23:21:04 serg@stripped +32 -37
QUERY_NO_GOOD_INDEX_USED and QUERY_NO_INDEX_USED moved from thd->lex.select_lex->options to thd->server_status
mysql-test/t/union.test
1.49 03/12/06 23:21:04 serg@stripped +23 -3
union and slow log tests
mysql-test/t/union-master.opt
1.0 03/12/06 23:21:04 serg@stripped +0 -0
BitKeeper file /usr/home/serg/Abk/mysql-4.1/mysql-test/t/union-master.opt
mysql-test/r/union.result
1.51 03/12/06 23:21:04 serg@stripped +38 -0
union and slow log tests
include/mysql_com.h
1.88 03/12/06 23:21:04 serg@stripped +2 -0
QUERY_NO_GOOD_INDEX_USED and QUERY_NO_INDEX_USED moved from thd->lex.select_lex->options to thd->server_status
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: serg
# Host: serg.mylan
# Root: /usr/home/serg/Abk/mysql-4.1
--- 1.87/include/mysql_com.h Sun Nov 23 13:36:38 2003
+++ 1.88/include/mysql_com.h Sat Dec 6 23:21:04 2003
@@ -124,6 +124,8 @@
#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */
#define SERVER_STATUS_MORE_RESULTS 4 /* More results on server */
#define SERVER_MORE_RESULTS_EXISTS 8 /* Multi query - next query exists */
+#define SERVER_QUERY_NO_GOOD_INDEX_USED 16
+#define SERVER_QUERY_NO_INDEX_USED 32
#define MYSQL_ERRMSG_SIZE 512
#define NET_READ_TIMEOUT 30 /* Timeout on read */
--- 1.238/sql/mysql_priv.h Tue Dec 2 21:46:59 2003
+++ 1.239/sql/mysql_priv.h Sat Dec 6 23:21:04 2003
@@ -177,50 +177,45 @@
#define TEST_SIGINT 1024 /* Allow sigint on threads */
/* options for select set by the yacc parser (stored in lex->options) */
-#define SELECT_DISTINCT 1
-#define SELECT_STRAIGHT_JOIN 2
-#define SELECT_DESCRIBE 4
-#define SELECT_SMALL_RESULT 8
-#define SELECT_BIG_RESULT 16
-#define OPTION_FOUND_ROWS 32
-#define OPTION_TO_QUERY_CACHE 64
-#define SELECT_NO_JOIN_CACHE 256 /* Intern */
-
-#define OPTION_BIG_TABLES 512 /* for SQL OPTION */
-#define OPTION_BIG_SELECTS 1024 /* for SQL OPTION */
-#define OPTION_LOG_OFF 2048
-#define OPTION_UPDATE_LOG 4096 /* update log flag */
-#define TMP_TABLE_ALL_COLUMNS 8192
-#define OPTION_WARNINGS 16384
-#define OPTION_AUTO_IS_NULL 32768
-#define OPTION_FOUND_COMMENT 65536L
-#define OPTION_SAFE_UPDATES OPTION_FOUND_COMMENT*2
-#define OPTION_BUFFER_RESULT OPTION_SAFE_UPDATES*2
-#define OPTION_BIN_LOG OPTION_BUFFER_RESULT*2
-#define OPTION_NOT_AUTOCOMMIT OPTION_BIN_LOG*2
-#define OPTION_BEGIN OPTION_NOT_AUTOCOMMIT*2
-#define OPTION_TABLE_LOCK OPTION_BEGIN*2
-#define OPTION_QUICK OPTION_TABLE_LOCK*2
-#define OPTION_QUOTE_SHOW_CREATE OPTION_QUICK*2
-#define OPTION_INTERNAL_SUBTRANSACTIONS OPTION_QUOTE_SHOW_CREATE*2
-
-/* options for UNION set by the yacc parser (stored in unit->union_option) */
-#define UNION_ALL 1
+#define SELECT_DISTINCT (1L << 0)
+#define SELECT_STRAIGHT_JOIN (1L << 1)
+#define SELECT_DESCRIBE (1L << 2)
+#define SELECT_SMALL_RESULT (1L << 3)
+#define SELECT_BIG_RESULT (1L << 4)
+#define OPTION_FOUND_ROWS (1L << 5)
+#define OPTION_TO_QUERY_CACHE (1L << 6)
+#define SELECT_NO_JOIN_CACHE (1L << 7) /* Intern */
+#define OPTION_BIG_TABLES (1L << 8) /* for SQL OPTION */
+#define OPTION_BIG_SELECTS (1L << 9) /* for SQL OPTION */
+#define OPTION_LOG_OFF (1L << 10)
+#define OPTION_UPDATE_LOG (1L << 11) /* update log flag */
+#define TMP_TABLE_ALL_COLUMNS (1L << 12)
+#define OPTION_WARNINGS (1L << 13)
+#define OPTION_AUTO_IS_NULL (1L << 14)
+#define OPTION_FOUND_COMMENT (1L << 15)
+#define OPTION_SAFE_UPDATES (1L << 16)
+#define OPTION_BUFFER_RESULT (1L << 17)
+#define OPTION_BIN_LOG (1L << 18)
+#define OPTION_NOT_AUTOCOMMIT (1L << 19)
+#define OPTION_BEGIN (1L << 20)
+#define OPTION_TABLE_LOCK (1L << 21)
+#define OPTION_QUICK (1L << 22)
+#define OPTION_QUOTE_SHOW_CREATE (1L << 23)
+#define OPTION_INTERNAL_SUBTRANSACTIONS (1L << 24)
/* Set if we are updating a non-transaction safe table */
-#define OPTION_STATUS_NO_TRANS_UPDATE OPTION_INTERNAL_SUBTRANSACTIONS*2
+#define OPTION_STATUS_NO_TRANS_UPDATE (1L << 25)
-/* The following is set when parsing the query */
-#define QUERY_NO_INDEX_USED OPTION_STATUS_NO_TRANS_UPDATE*2
-#define QUERY_NO_GOOD_INDEX_USED QUERY_NO_INDEX_USED*2
/* The following can be set when importing tables in a 'wrong order'
to suppress foreign key checks */
-#define OPTION_NO_FOREIGN_KEY_CHECKS QUERY_NO_GOOD_INDEX_USED*2
+#define OPTION_NO_FOREIGN_KEY_CHECKS (1L << 26)
/* The following speeds up inserts to InnoDB tables by suppressing unique
key checks in some cases */
-#define OPTION_RELAXED_UNIQUE_CHECKS OPTION_NO_FOREIGN_KEY_CHECKS*2
-#define SELECT_NO_UNLOCK ((ulong) OPTION_RELAXED_UNIQUE_CHECKS*2)
-/* NOTE: we have now used up all 32 bits of the OPTION flag! */
+#define OPTION_RELAXED_UNIQUE_CHECKS (1L << 27)
+#define SELECT_NO_UNLOCK (1L << 28)
+
+/* options for UNION set by the yacc parser (stored in unit->union_option) */
+#define UNION_ALL 1
/* Bits for different SQL modes modes (including ANSI mode) */
#define MODE_REAL_AS_FLOAT 1
--- 1.113/sql/sql_delete.cc Tue Nov 18 16:48:42 2003
+++ 1.114/sql/sql_delete.cc Sat Dec 6 23:21:04 2003
@@ -104,7 +104,7 @@
/* If running in safe sql mode, don't allow updates without keys */
if (table->quick_keys.is_clear_all())
{
- thd->lex.select_lex.options|=QUERY_NO_INDEX_USED;
+ thd->server_status|=SERVER_QUERY_NO_INDEX_USED;
if (safe_update && !using_limit)
{
delete select;
--- 1.305/sql/sql_parse.cc Fri Nov 28 12:20:47 2003
+++ 1.306/sql/sql_parse.cc Sat Dec 6 23:21:04 2003
@@ -1203,7 +1203,8 @@
thread_running++;
VOID(pthread_mutex_unlock(&LOCK_thread_count));
- thd->lex.select_lex.options=0; // We store status here
+ thd->server_status&=
+ ~(SERVER_QUERY_NO_INDEX_USED | SERVER_QUERY_NO_GOOD_INDEX_USED);
switch (command) {
case COM_INIT_DB:
{
@@ -1635,8 +1636,8 @@
if ((ulong) (thd->start_time - thd->time_after_lock) >
thd->variables.long_query_time ||
- ((thd->lex.select_lex.options &
- (QUERY_NO_INDEX_USED | QUERY_NO_GOOD_INDEX_USED)) &&
+ ((thd->server_status &
+ (SERVER_QUERY_NO_INDEX_USED | SERVER_QUERY_NO_GOOD_INDEX_USED)) &&
(specialflag & SPECIAL_LOG_QUERIES_NOT_USING_INDEXES)))
{
long_query_count++;
@@ -3730,6 +3731,7 @@
lex->select_lex.prev= &lex->unit.slave;
lex->select_lex.link_next= lex->select_lex.slave= lex->select_lex.next= 0;
lex->select_lex.link_prev= (st_select_lex_node**)&(lex->all_selects_list);
+ lex->select_lex.options=0;
lex->describe= 0;
lex->derived_tables= FALSE;
lex->lock_option= TL_READ;
--- 1.283/sql/sql_select.cc Mon Dec 1 18:53:03 2003
+++ 1.284/sql/sql_select.cc Sat Dec 6 23:21:04 2003
@@ -3619,7 +3619,7 @@
/* These init changes read_record */
if (tab->use_quick == 2)
{
- select_lex->options|=QUERY_NO_GOOD_INDEX_USED;
+ join->thd->server_status|=SERVER_QUERY_NO_GOOD_INDEX_USED;
tab->read_first_record= join_init_quick_read_record;
statistic_increment(select_range_check_count, &LOCK_status);
}
@@ -3634,7 +3634,7 @@
}
else
{
- select_lex->options|=QUERY_NO_INDEX_USED;
+ join->thd->server_status|=SERVER_QUERY_NO_INDEX_USED;
statistic_increment(select_scan_count, &LOCK_status);
}
}
@@ -3646,7 +3646,7 @@
}
else
{
- select_lex->options|=QUERY_NO_INDEX_USED;
+ join->thd->server_status|=SERVER_QUERY_NO_INDEX_USED;
statistic_increment(select_full_join_count, &LOCK_status);
}
}
@@ -8926,7 +8926,7 @@
(ulong)join->select_lex, join->select_lex->type,
message ? message : "NULL"));
/* Don't log this into the slow query log */
- select_lex->options&= ~(QUERY_NO_INDEX_USED | QUERY_NO_GOOD_INDEX_USED);
+ thd->server_status&= ~(SERVER_QUERY_NO_INDEX_USED | SERVER_QUERY_NO_GOOD_INDEX_USED);
join->unit->offset_limit_cnt= 0;
if (message)
--- 1.104/sql/sql_update.cc Fri Nov 28 11:18:10 2003
+++ 1.105/sql/sql_update.cc Sat Dec 6 23:21:04 2003
@@ -166,7 +166,7 @@
/* If running in safe sql mode, don't allow updates without keys */
if (table->quick_keys.is_clear_all())
{
- thd->lex.select_lex.options|=QUERY_NO_INDEX_USED;
+ thd->server_status|=SERVER_QUERY_NO_INDEX_USED;
if (safe_update && !using_limit)
{
my_message(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE,
--- 1.50/mysql-test/r/union.result Thu Nov 27 18:45:26 2003
+++ 1.51/mysql-test/r/union.result Sat Dec 6 23:21:04 2003
@@ -823,3 +823,41 @@
13
drop table t1,t2;
set local tmp_table_size=default;
+create table t1 (a int, index (a), b int);
+insert t1 values (1,1),(2,2),(3,3),(4,4),(5,5);
+insert t1 select a+1, a+b from t1;
+insert t1 select a+1, a+b from t1;
+insert t1 select a+1, a+b from t1;
+insert t1 select a+1, a+b from t1;
+insert t1 select a+1, a+b from t1;
+FLUSH STATUS;
+show status like 'Slow_queries';
+Variable_name Value
+Slow_queries 0
+select count(*) from t1 where a=7;
+count(*)
+26
+show status like 'Slow_queries';
+Variable_name Value
+Slow_queries 0
+select count(*) from t1 where b=13;
+count(*)
+10
+show status like 'Slow_queries';
+Variable_name Value
+Slow_queries 1
+select count(*) from t1 where b=13 union select count(*) from t1 where a=7;
+count(*)
+0
+26
+show status like 'Slow_queries';
+Variable_name Value
+Slow_queries 2
+select count(*) from t1 where a=7 union select count(*) from t1 where b=13;
+count(*)
+26
+10
+show status like 'Slow_queries';
+Variable_name Value
+Slow_queries 3
+drop table t1;
--- 1.48/mysql-test/t/union.test Thu Nov 27 18:45:26 2003
+++ 1.49/mysql-test/t/union.test Sat Dec 6 23:21:04 2003
@@ -419,9 +419,6 @@
#
# conversion memory->disk table
#
-#
-# conversion memory->disk table
-#
create table t1 (s char(200));
insert into t1 values (repeat("1",200));
create table t2 select * from t1;
@@ -436,3 +433,26 @@
select count(*) from t2;
drop table t1,t2;
set local tmp_table_size=default;
+
+#
+# slow logging
+#
+create table t1 (a int, index (a), b int);
+insert t1 values (1,1),(2,2),(3,3),(4,4),(5,5);
+insert t1 select a+1, a+b from t1;
+insert t1 select a+1, a+b from t1;
+insert t1 select a+1, a+b from t1;
+insert t1 select a+1, a+b from t1;
+insert t1 select a+1, a+b from t1;
+FLUSH STATUS;
+show status like 'Slow_queries';
+select count(*) from t1 where a=7;
+show status like 'Slow_queries';
+select count(*) from t1 where b=13;
+show status like 'Slow_queries';
+select count(*) from t1 where b=13 union select count(*) from t1 where a=7;
+show status like 'Slow_queries';
+select count(*) from t1 where a=7 union select count(*) from t1 where b=13;
+show status like 'Slow_queries';
+drop table t1;
+
--- New file ---
+++ mysql-test/t/union-master.opt 03/12/06 23:21:04
--log-slow-queries --log-long-format --log-queries-not-using-indexes
| Thread |
|---|
| • bk commit into 4.1 tree (serg:1.1658) | Sergei Golubchik | 6 Dec |