diff options
author | unknown <igor@olga.mysql.com> | 2007-05-12 10:54:23 -0700 |
---|---|---|
committer | unknown <igor@olga.mysql.com> | 2007-05-12 10:54:23 -0700 |
commit | 6fa4fdd29ce40375f9b79fd22a0c703fa8b0fc0f (patch) | |
tree | dae2b20962e2b9f5326b2d11adc18ffff0fb7656 /sql | |
parent | c749664deb9f5e77dd846480fba53568f39815d9 (diff) | |
parent | d886ea8fb66c10e58029bf7c010a1a2a085ad23d (diff) | |
download | mariadb-git-6fa4fdd29ce40375f9b79fd22a0c703fa8b0fc0f.tar.gz |
Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into olga.mysql.com:/home/igor/mysql-5.1-opt
mysql-test/r/subselect3.result:
Auto merged
sql/item_subselect.cc:
Auto merged
sql/sql_select.h:
Auto merged
Diffstat (limited to 'sql')
-rw-r--r-- | sql/item_subselect.cc | 6 | ||||
-rw-r--r-- | sql/sql_select.h | 7 |
2 files changed, 11 insertions, 2 deletions
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 8f6503810fc..ab4b4eb6796 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -1872,6 +1872,8 @@ int subselect_single_select_engine::exec() if (cond_guard && !*cond_guard) { /* Change the access method to full table scan */ + tab->save_read_first_record= tab->read_first_record; + tab->save_read_record= tab->read_record.read_record; tab->read_first_record= init_read_record_seq; tab->read_record.record= tab->table->record[0]; tab->read_record.thd= join->thd; @@ -1892,8 +1894,8 @@ int subselect_single_select_engine::exec() JOIN_TAB *tab= *ptab; tab->read_record.record= 0; tab->read_record.ref_length= 0; - tab->read_first_record= join_read_always_key_or_null; - tab->read_record.read_record= join_read_next_same_or_null; + tab->read_first_record= tab->save_read_first_record; + tab->read_record.read_record= tab->save_read_record; } executed= 1; thd->where= save_where; diff --git a/sql/sql_select.h b/sql/sql_select.h index 644224d1bed..971b7caf69d 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -160,6 +160,13 @@ typedef struct st_join_table { Read_record_func read_first_record; Next_select_func next_select; READ_RECORD read_record; + /* + Currently the following two fields are used only for a [NOT] IN subquery + if it is executed by an alternative full table scan when the left operand of + the subquery predicate is evaluated to NULL. + */ + Read_record_func save_read_first_record;/* to save read_first_record */ + int (*save_read_record) (READ_RECORD *);/* to save read_record.read_record */ double worst_seeks; key_map const_keys; /* Keys with constant part */ key_map checked_keys; /* Keys checked in find_best */ |