summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <bar@bar.mysql.r18.ru>2003-08-04 12:43:11 +0500
committerunknown <bar@bar.mysql.r18.ru>2003-08-04 12:43:11 +0500
commitd54e55474d6fc8b7c6ec5dd535fa7dafc79ed8c2 (patch)
tree3306e57f377a645488c42dd793b48839eec8c10e
parentcce9e51a708f46fa1915208762864d83df6e5a8c (diff)
parent6417c182df2b027d766075876ce969701d3e038a (diff)
downloadmariadb-git-d54e55474d6fc8b7c6ec5dd535fa7dafc79ed8c2.tar.gz
Merge abarkov@build.mysql.com:/home/bk/mysql-4.1
into bar.mysql.r18.ru:/usr/home/bar/mysql-4.1
-rw-r--r--BitKeeper/etc/logging_ok2
-rw-r--r--mysql-test/r/fulltext2.result765
-rw-r--r--mysql-test/r/query_cache.result34
-rw-r--r--mysql-test/r/subselect.result25
-rw-r--r--mysql-test/t/fulltext2.test2
-rw-r--r--mysql-test/t/query_cache.test14
-rw-r--r--mysql-test/t/subselect.test28
-rw-r--r--sql/item.cc24
-rw-r--r--sql/item.h1
-rw-r--r--sql/item_subselect.cc2
-rw-r--r--sql/sql_acl.cc13
-rw-r--r--sql/sql_cache.cc4
-rw-r--r--sql/sql_derived.cc3
-rw-r--r--sql/sql_lex.cc5
-rw-r--r--sql/sql_lex.h25
-rw-r--r--sql/sql_parse.cc2
-rw-r--r--sql/sql_select.cc3
-rw-r--r--sql/sql_union.cc3
-rw-r--r--sql/sql_yacc.yy13
19 files changed, 141 insertions, 827 deletions
diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok
index bc24761c7f9..415461d735d 100644
--- a/BitKeeper/etc/logging_ok
+++ b/BitKeeper/etc/logging_ok
@@ -53,6 +53,8 @@ jcole@sarvik.tfr.cafe.ee
jcole@tetra.spaceapes.com
jorge@linux.jorge.mysql.com
kaj@work.mysql.com
+konstantin@mysql.com
+kostja@oak.local
lenz@kallisto.mysql.com
lenz@mysql.com
miguel@hegel.(none)
diff --git a/mysql-test/r/fulltext2.result b/mysql-test/r/fulltext2.result
index 8086faadba4..a35be210ece 100644
--- a/mysql-test/r/fulltext2.result
+++ b/mysql-test/r/fulltext2.result
@@ -4,771 +4,6 @@ i int(10) unsigned not null auto_increment primary key,
a varchar(255) not null,
FULLTEXT KEY (a)
) TYPE=MyISAM;
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaaxxx');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaazzz');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
-insert t1 (a) values ('aaayyy');
repair table t1 quick;
Table Op Msg_type Msg_text
test.t1 repair status OK
diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result
index 3b3e52d8240..68ddb5a377b 100644
--- a/mysql-test/r/query_cache.result
+++ b/mysql-test/r/query_cache.result
@@ -374,22 +374,23 @@ drop database mysqltest;
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
-create table t1 (a char(1) not null);
-insert into t1 values("á");
+create table t1 (a char(1) not null collate koi8r_general_ci);
+insert into t1 values(_koi8r"á");
+set CHARACTER SET koi8r;
select * from t1;
a
á
set CHARACTER SET cp1251_koi8;
select * from t1;
a
set CHARACTER SET DEFAULT;
show status like "Qcache_queries_in_cache";
Variable_name Value
-Qcache_queries_in_cache 1
+Qcache_queries_in_cache 2
show status like "Qcache_hits";
Variable_name Value
-Qcache_hits 5
+Qcache_hits 4
drop table t1;
create database if not exists mysqltest;
create table mysqltest.t1 (i int not null);
@@ -415,7 +416,7 @@ Variable_name Value
Qcache_queries_in_cache 2
show status like "Qcache_hits";
Variable_name Value
-Qcache_hits 7
+Qcache_hits 6
drop database mysqltest;
drop table t1;
create table t1 (i int not null);
@@ -429,7 +430,7 @@ FOUND_ROWS()
4
show status like "Qcache_hits";
Variable_name Value
-Qcache_hits 7
+Qcache_hits 6
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
@@ -441,7 +442,7 @@ FOUND_ROWS()
1
show status like "Qcache_hits";
Variable_name Value
-Qcache_hits 7
+Qcache_hits 6
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 2
@@ -454,7 +455,7 @@ FOUND_ROWS()
4
show status like "Qcache_hits";
Variable_name Value
-Qcache_hits 8
+Qcache_hits 7
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 2
@@ -466,7 +467,7 @@ FOUND_ROWS()
1
show status like "Qcache_hits";
Variable_name Value
-Qcache_hits 9
+Qcache_hits 8
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 2
@@ -535,7 +536,7 @@ a
3
show status like "Qcache_hits";
Variable_name Value
-Qcache_hits 12
+Qcache_hits 11
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 2
@@ -552,7 +553,7 @@ a
3
show status like "Qcache_hits";
Variable_name Value
-Qcache_hits 13
+Qcache_hits 12
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 2
@@ -561,6 +562,15 @@ set GLOBAL query_cache_min_res_unit=default;
show global variables like "query_cache_min_res_unit";
Variable_name Value
query_cache_min_res_unit 4096
+create table t1 (a int not null);
+insert into t1 values (1);
+select "aaa" from t1;
+aaa
+aaa
+select "AAA" from t1;
+AAA
+AAA
+drop table t1;
create table t1 (a int);
set GLOBAL query_cache_size=1000;
show global variables like "query_cache_size";
diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result
index 7f2cb29dd4c..41fba93db5b 100644
--- a/mysql-test/r/subselect.result
+++ b/mysql-test/r/subselect.result
@@ -1225,16 +1225,17 @@ a (select count(distinct t1.b) as sum from t1,t2 where t1.a=t2.a and t2.b > 0 an
2 2
1 2
drop table t1,t2,t3;
-create table t1 (a char(10) character set koi8r collate koi8r_bin);
-create table t2 select (select a from t1);
-show create table t2;
-Table Create Table
-t2 CREATE TABLE `t2` (
- `(select a from t1)` char(10) character set koi8r collate koi8r_bin default NULL
-) TYPE=MyISAM CHARSET=latin1
+create table t1 (s1 int);
+create table t2 (s1 int);
+insert into t1 values (1);
+insert into t2 values (1);
+select * from t1 where exists (select s1 from t2 having max(t2.s1)=t1.s1);
+s1
drop table t1,t2;
-CREATE TABLE t1
-(s1 CHAR(5) COLLATE latin1_german1_ci,
-s2 CHAR(5) COLLATE latin1_swedish_ci);
-SELECT * FROM t1 WHERE s1 = (SELECT s2 FROM t1);
-ERROR HY000: Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='
+create table t1 (s1 int);
+create table t2 (s1 int);
+insert into t1 values (1);
+insert into t2 values (1);
+update t1 set s1 = s1 + 1 where 1 = (select x.s1 as A from t2 WHERE t2.s1 > t1.s1 order by A);
+ERROR 42S02: Unknown table 'x' in field list
+DROP TABLE t1, t2;
diff --git a/mysql-test/t/fulltext2.test b/mysql-test/t/fulltext2.test
index 2c0d352a870..b739d60e3b3 100644
--- a/mysql-test/t/fulltext2.test
+++ b/mysql-test/t/fulltext2.test
@@ -17,6 +17,7 @@ CREATE TABLE t1 (
) TYPE=MyISAM;
# two-level entry, second-level tree with depth 2
+--disable_query_log
let $1=260;
while ($1)
{
@@ -39,6 +40,7 @@ while ($1)
eval insert t1 (a) values ('aaayyy');
dec $1;
}
+--enable_query_log
# converting to two-level
repair table t1 quick;
diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test
index 929146ba97a..6261260115c 100644
--- a/mysql-test/t/query_cache.test
+++ b/mysql-test/t/query_cache.test
@@ -260,8 +260,9 @@ show status like "Qcache_queries_in_cache";
#
# Charset convertion (cp1251_koi8 always present)
#
-create table t1 (a char(1) not null);
-insert into t1 values("á");
+create table t1 (a char(1) not null collate koi8r_general_ci);
+insert into t1 values(_koi8r"á");
+set CHARACTER SET koi8r;
select * from t1;
set CHARACTER SET cp1251_koi8;
select * from t1;
@@ -369,6 +370,15 @@ set GLOBAL query_cache_min_res_unit=default;
show global variables like "query_cache_min_res_unit";
#
+# Case sensitive test
+#
+create table t1 (a int not null);
+insert into t1 values (1);
+select "aaa" from t1;
+select "AAA" from t1;
+drop table t1;
+
+#
# Test of query cache resizing
#
create table t1 (a int);
diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test
index e7c63098cab..1d7da94d455 100644
--- a/mysql-test/t/subselect.test
+++ b/mysql-test/t/subselect.test
@@ -807,6 +807,7 @@ INSERT INTO t1 VALUES("2f6161e879db43c1a5b82c21ddc49089", "Default", "System", "
INSERT INTO t1 VALUES("c373e9f5ad0791724315444553544200", "AddDocumentTest", "admin", "2003-06-09 10:51:25", "Movie Reviews", "0", "2003-06-09 10:51:25", "admin", "0", "2f6161e879db43c1a5b82c21ddc49089", "03eea05112b845949f3fd03278b5fe43", NULL);
SELECT 'c373e9f5ad0791a0dab5444553544200' IN(SELECT t1.FOLDERID FROM t1 WHERE t1.PARENTID='2f6161e879db43c1a5b82c21ddc49089' AND t1.FOLDERNAME = 'Level1');
drop table t1;
+
#
# alloc_group_fields() working
#
@@ -819,13 +820,24 @@ insert into t3 values (3,3), (2,2), (1,1);
select a,(select count(distinct t1.b) as sum from t1,t2 where t1.a=t2.a and t2.b > 0 and t1.a <= t3.b group by t1.a order by sum limit 1) from t3;
drop table t1,t2,t3;
-create table t1 (a char(10) character set koi8r collate koi8r_bin);
-create table t2 select (select a from t1);
-show create table t2;
+#
+# aggregate functions in HAVING test
+#
+create table t1 (s1 int);
+create table t2 (s1 int);
+insert into t1 values (1);
+insert into t2 values (1);
+select * from t1 where exists (select s1 from t2 having max(t2.s1)=t1.s1);
drop table t1,t2;
+#
+# update subquery with wrong field (to force name resolving
+# in UPDATE name space)
+#
+create table t1 (s1 int);
+create table t2 (s1 int);
+insert into t1 values (1);
+insert into t2 values (1);
+-- error 1109
+update t1 set s1 = s1 + 1 where 1 = (select x.s1 as A from t2 WHERE t2.s1 > t1.s1 order by A);
+DROP TABLE t1, t2;
-CREATE TABLE t1
-(s1 CHAR(5) COLLATE latin1_german1_ci,
- s2 CHAR(5) COLLATE latin1_swedish_ci);
---error 1265
-SELECT * FROM t1 WHERE s1 = (SELECT s2 FROM t1);
diff --git a/sql/item.cc b/sql/item.cc
index 45e26884c0c..48f9dfea4e1 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -49,15 +49,19 @@ Item::Item():
THD *thd= current_thd;
next= thd->free_list; // Put in free list
thd->free_list= this;
- loop_id= 0;
/*
Item constructor can be called during execution other tnen SQL_COM
command => we should check thd->lex.current_select on zero (thd->lex
can be uninitialised)
*/
- if (thd->lex.current_select &&
- thd->lex.current_select->parsing_place == SELECT_LEX_NODE::SELECT_LIST)
- thd->lex.current_select->select_items++;
+ if (thd->lex.current_select)
+ {
+ SELECT_LEX_NODE::enum_parsing_place place=
+ thd->lex.current_select->parsing_place;
+ if (place == SELECT_LEX_NODE::SELECT_LIST ||
+ place == SELECT_LEX_NODE::IN_HAVING)
+ thd->lex.current_select->select_n_having_items++;
+ }
}
/*
@@ -66,7 +70,6 @@ Item::Item():
tables
*/
Item::Item(THD *thd, Item &item):
- loop_id(0),
str_value(item.str_value),
name(item.name),
max_length(item.max_length),
@@ -867,7 +870,7 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
sl= sl->outer_select())
{
table_list= (last= sl)->get_table_list();
- if (sl->insert_select && table_list)
+ if (sl->resolve_mode == SELECT_LEX::INSERT_MODE && table_list)
{
// it is primary INSERT st_select_lex => skip first table resolving
table_list= table_list->next;
@@ -876,7 +879,8 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
table_list, &where,
0)) != not_found_field)
break;
- if ((refer= find_item_in_list(this, sl->item_list, &counter,
+ if (sl->resolve_mode == SELECT_LEX::SELECT_MODE &&
+ (refer= find_item_in_list(this, sl->item_list, &counter,
REPORT_EXCEPT_NOT_FOUND)) !=
(Item **) not_found_item)
break;
@@ -1353,13 +1357,15 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference)
SELECT_LEX *last=0;
for ( ; sl ; sl= sl->outer_select())
{
- if ((ref= find_item_in_list(this, (last= sl)->item_list,
+ last= sl;
+ if (sl->resolve_mode == SELECT_LEX::SELECT_MODE &&
+ (ref= find_item_in_list(this, sl->item_list,
&counter,
REPORT_EXCEPT_NOT_FOUND)) !=
(Item **)not_found_item)
break;
table_list= sl->get_table_list();
- if (sl->insert_select && table_list)
+ if (sl->resolve_mode == SELECT_LEX::INSERT_MODE && table_list)
{
// it is primary INSERT st_select_lex => skip first table resolving
table_list= table_list->next;
diff --git a/sql/item.h b/sql/item.h
index 450cb396787..9df6532a637 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -83,7 +83,6 @@ public:
};
class Item {
- uint loop_id; /* Used to find selfrefering loops */
Item(const Item &); /* Prevent use of these */
void operator=(Item &);
public:
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index 26f8313159f..32edaaca0fd 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -508,7 +508,7 @@ void Item_in_subselect::single_value_transformer(THD *thd,
{
sl->item_list.push_back(item);
setup_ref_array(thd, &sl->ref_pointer_array,
- 1 + sl->select_items +
+ 1 + sl->select_n_having_items +
sl->order_list.elements + sl->group_list.elements);
// To prevent crash on Item_ref_null_helper destruction in case of error
sl->ref_pointer_array[0]= 0;
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 598ff153cad..54a0ee05db2 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -3221,8 +3221,17 @@ int open_grant_tables(THD *thd, TABLE_LIST *tables)
GRANT and REVOKE are applied the slave in/exclusion rules as they are
some kind of updates to the mysql.% tables.
*/
- if (thd->slave_thread && table_rules_on && !tables_ok(0, tables))
- DBUG_RETURN(1);
+ if (thd->slave_thread && table_rules_on)
+ {
+ /*
+ The tables must be marked "updating" so that tables_ok() takes them into
+ account in tests.
+ */
+ tables[0].updating=tables[1].updating=tables[2].updating=tables[3].updating=1;
+ if (!tables_ok(0, tables))
+ DBUG_RETURN(1);
+ tables[0].updating=tables[1].updating=tables[2].updating=tables[3].updating=0;
+ }
#endif
if (open_and_lock_tables(thd, tables))
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index ac6471e794c..767a1a46dcc 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -1422,10 +1422,10 @@ ulong Query_cache::init_cache()
DUMP(this);
- VOID(hash_init(&queries,system_charset_info,def_query_hash_size, 0, 0,
+ VOID(hash_init(&queries, &my_charset_bin, def_query_hash_size, 0, 0,
query_cache_query_get_key, 0, 0));
#ifndef FN_NO_CASE_SENCE
- VOID(hash_init(&tables,system_charset_info,def_table_hash_size, 0, 0,
+ VOID(hash_init(&tables, &my_charset_bin, def_table_hash_size, 0, 0,
query_cache_table_get_key, 0, 0));
#else
// windows, OS/2 or other case insensitive file names work around
diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc
index c61e8f42343..9ed26bc4062 100644
--- a/sql/sql_derived.cc
+++ b/sql/sql_derived.cc
@@ -126,7 +126,8 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
item_list= select_cursor->item_list;
select_cursor->with_wild= 0;
if (setup_ref_array(thd, &select_cursor->ref_pointer_array,
- (item_list.elements + select_cursor->select_items +
+ (item_list.elements +
+ select_cursor->select_n_having_items +
select_cursor->order_list.elements +
select_cursor->group_list.elements)) ||
setup_fields(thd, select_cursor->ref_pointer_array, first_table,
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 350ae8dc1f5..57e39a0dc83 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -959,7 +959,7 @@ void st_select_lex_node::init_select()
order_list.next= (byte**) &order_list.first;
select_limit= HA_POS_ERROR;
offset_limit= 0;
- select_items= 0;
+ select_n_having_items= 0;
with_sum_func= 0;
parsing_place= SELECT_LEX_NODE::NO_MATTER;
}
@@ -986,7 +986,8 @@ void st_select_lex::init_query()
join= 0;
where= 0;
olap= UNSPECIFIED_OLAP_TYPE;
- insert_select= having_fix_field= 0;
+ having_fix_field= 0;
+ resolve_mode= NOMATTER_MODE;
with_wild= 0;
}
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index faf7e16e54a..6b3da620fc1 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -205,8 +205,12 @@ public:
ha_rows select_limit, offset_limit; /* LIMIT clause parameters */
// Arrays of pointers to top elements of all_fields list
Item **ref_pointer_array;
-
- uint select_items; /* number of items in select_list */
+ /*
+ number of items in select_list and HAVING clause used to get number
+ bigger then can be number of entries that will be added to all item
+ list during split_sum_func
+ */
+ uint select_n_having_items;
uint cond_count; /* number of arguments of and/or/xor in where/having */
enum_parsing_place parsing_place; /* where we are parsing expression */
bool with_sum_func; /* sum function indicator */
@@ -360,14 +364,27 @@ public:
bool braces; /* SELECT ... UNION (SELECT ... ) <- this braces */
/* TRUE when having fix field called in processing of this SELECT */
bool having_fix_field;
+
/*
- TRUE for primary st_select_lex structure of simple INSERT/REPLACE
+ SELECT for SELECT command st_select_lex. Used to privent scaning
+ item_list of non-SELECT st_select_lex (no sense find to finding
+ reference in it (all should be in tables, it is dangerouse due
+ to order of fix_fields calling for non-SELECTs commands (item list
+ can be not fix_fieldsd)). This value will be assigned for
+ primary select (sql_yac.yy) and for any subquery and
+ UNION SELECT (sql_parse.cc mysql_new_select())
+
+
+ INSERT for primary st_select_lex structure of simple INSERT/REPLACE
(used for name resolution, see Item_fiels & Item_ref fix_fields,
FALSE for INSERT/REPLACE ... SELECT, because it's
st_select_lex->table_list will be preprocessed (first table removed)
before passing to handle_select)
+
+ NOMATTER for other
*/
- bool insert_select;
+ enum {NOMATTER_MODE, SELECT_MODE, INSERT_MODE} resolve_mode;
+
void init_query();
void init_select();
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 720017f399f..5880a9d4c8a 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -3561,6 +3561,7 @@ mysql_new_select(LEX *lex, bool move_down)
unit->link_prev= 0;
unit->return_to= lex->current_select;
select_lex->include_down(unit);
+ // TODO: assign resolve_mode for fake subquery after merging with new tree
}
else
select_lex->include_neighbour(lex->current_select);
@@ -3568,6 +3569,7 @@ mysql_new_select(LEX *lex, bool move_down)
select_lex->master_unit()->global_parameters= select_lex;
select_lex->include_global((st_select_lex_node**)&lex->all_selects_list);
lex->current_select= select_lex;
+ select_lex->resolve_mode= SELECT_LEX::SELECT_MODE;
return 0;
}
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 0aa7e67a12b..7803e87572d 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -294,7 +294,8 @@ JOIN::prepare(Item ***rref_pointer_array,
fields_list,
&all_fields, wild_num))) ||
setup_ref_array(thd, rref_pointer_array, (fields_list.elements +
- select_lex->select_items +
+ select_lex->
+ select_n_having_items +
og_num)) ||
setup_fields(thd, (*rref_pointer_array), tables_list, fields_list, 1,
&all_fields, 1) ||
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index 724cc658b15..5f3fbadc99a 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -159,7 +159,8 @@ int st_select_lex_unit::prepare(THD *thd, select_result *sel_result,
item_list= select_cursor->item_list;
select_cursor->with_wild= 0;
if (setup_ref_array(thd, &select_cursor->ref_pointer_array,
- (item_list.elements + select_cursor->select_items +
+ (item_list.elements +
+ select_cursor->select_n_having_items +
select_cursor->order_list.elements +
select_cursor->group_list.elements)) ||
setup_fields(thd, select_cursor->ref_pointer_array, first_table,
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 90c586dc2f1..aef58e6cb94 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -1910,7 +1910,12 @@ opt_ignore_leaves:
select:
- select_init { Lex->sql_command=SQLCOM_SELECT; };
+ select_init
+ {
+ LEX *lex= Lex;
+ lex->sql_command= SQLCOM_SELECT;
+ lex->select_lex.resolve_mode= SELECT_LEX::SELECT_MODE;
+ };
/* Need select_init2 for subselects. */
select_init:
@@ -3401,7 +3406,7 @@ insert:
lex->sql_command = SQLCOM_INSERT;
/* for subselects */
lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ;
- lex->select_lex.insert_select= 1;
+ lex->select_lex.resolve_mode= SELECT_LEX::INSERT_MODE;
} insert_lock_option
opt_ignore insert2
{
@@ -3417,7 +3422,7 @@ replace:
LEX *lex=Lex;
lex->sql_command = SQLCOM_REPLACE;
lex->duplicates= DUP_REPLACE;
- lex->select_lex.insert_select= 1;
+ lex->select_lex.resolve_mode= SELECT_LEX::INSERT_MODE;
}
replace_lock_option insert2
{
@@ -3486,7 +3491,7 @@ insert_values:
it is not simple select => table list will be
preprocessed before passing to handle_select
*/
- lex->select_lex.insert_select= 0;
+ lex->select_lex.resolve_mode= SELECT_LEX::NOMATTER_MODE;
lex->current_select->parsing_place= SELECT_LEX_NODE::SELECT_LIST;
}
select_options select_item_list