00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <config.h>
00022 #include <drizzled/session.h>
00023 #include <drizzled/join_table.h>
00024 #include <drizzled/sql_select.h>
00025 #include <drizzled/optimizer/access_method/index.h>
00026
00027 using namespace drizzled;
00028
00029 bool optimizer::Index::getStats(Table *table,
00030 JoinTable *join_tab)
00031 {
00032 table->status= STATUS_NO_RECORD;
00033 if (join_tab->select)
00034 {
00035 delete join_tab->select->quick;
00036 join_tab->select->quick= 0;
00037 }
00038
00039 delete join_tab->quick;
00040 join_tab->quick= 0;
00041
00042 if (table->covering_keys.test(join_tab->ref.key) &&
00043 ! table->no_keyread)
00044 {
00045 table->key_read= 1;
00046 table->cursor->extra(HA_EXTRA_KEYREAD);
00047 }
00048
00049 if (join_tab->type == AM_REF)
00050 {
00051 join_tab->read_first_record= join_read_always_key;
00052 join_tab->read_record.read_record= join_tab->insideout_match_tab ?
00053 join_read_next_same_diff : join_read_next_same;
00054 }
00055 else
00056 {
00057 join_tab->read_first_record= join_read_always_key_or_null;
00058 join_tab->read_record.read_record= join_read_next_same_or_null;
00059 }
00060
00061 return false;
00062 }