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/join_table.h>
00023 #include <drizzled/optimizer/access_method/index.h>
00024 #include <drizzled/sql_select.h>
00025 #include <drizzled/table.h>
00026
00027 using namespace drizzled;
00028
00029 void optimizer::Index::getStats(Table& table, JoinTable& join_tab)
00030 {
00031 table.status= STATUS_NO_RECORD;
00032 if (join_tab.select)
00033 {
00034 delete join_tab.select->quick;
00035 join_tab.select->quick= 0;
00036 }
00037
00038 delete join_tab.quick;
00039 join_tab.quick= 0;
00040
00041 if (table.covering_keys.test(join_tab.ref.key) &&
00042 ! table.no_keyread)
00043 {
00044 table.key_read= 1;
00045 table.cursor->extra(HA_EXTRA_KEYREAD);
00046 }
00047
00048 if (join_tab.type == AM_REF)
00049 {
00050 join_tab.read_first_record= join_read_always_key;
00051 join_tab.read_record.read_record= join_tab.insideout_match_tab ?
00052 join_read_next_same_diff : join_read_next_same;
00053 }
00054 else
00055 {
00056 join_tab.read_first_record= join_read_always_key_or_null;
00057 join_tab.read_record.read_record= join_read_next_same_or_null;
00058 }
00059 }