diff options
author | unknown <bar@bar.mysql.r18.ru> | 2003-08-04 12:43:11 +0500 |
---|---|---|
committer | unknown <bar@bar.mysql.r18.ru> | 2003-08-04 12:43:11 +0500 |
commit | d54e55474d6fc8b7c6ec5dd535fa7dafc79ed8c2 (patch) | |
tree | 3306e57f377a645488c42dd793b48839eec8c10e | |
parent | cce9e51a708f46fa1915208762864d83df6e5a8c (diff) | |
parent | 6417c182df2b027d766075876ce969701d3e038a (diff) | |
download | mariadb-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_ok | 2 | ||||
-rw-r--r-- | mysql-test/r/fulltext2.result | 765 | ||||
-rw-r--r-- | mysql-test/r/query_cache.result | 34 | ||||
-rw-r--r-- | mysql-test/r/subselect.result | 25 | ||||
-rw-r--r-- | mysql-test/t/fulltext2.test | 2 | ||||
-rw-r--r-- | mysql-test/t/query_cache.test | 14 | ||||
-rw-r--r-- | mysql-test/t/subselect.test | 28 | ||||
-rw-r--r-- | sql/item.cc | 24 | ||||
-rw-r--r-- | sql/item.h | 1 | ||||
-rw-r--r-- | sql/item_subselect.cc | 2 | ||||
-rw-r--r-- | sql/sql_acl.cc | 13 | ||||
-rw-r--r-- | sql/sql_cache.cc | 4 | ||||
-rw-r--r-- | sql/sql_derived.cc | 3 | ||||
-rw-r--r-- | sql/sql_lex.cc | 5 | ||||
-rw-r--r-- | sql/sql_lex.h | 25 | ||||
-rw-r--r-- | sql/sql_parse.cc | 2 | ||||
-rw-r--r-- | sql/sql_select.cc | 3 | ||||
-rw-r--r-- | sql/sql_union.cc | 3 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 13 |
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 |