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
00023 #include <drizzled/sql_select.h>
00024 #include <drizzled/join_table.h>
00025 #include <drizzled/optimizer/access_method.h>
00026 #include <drizzled/optimizer/access_method_factory.h>
00027 #include <drizzled/optimizer/access_method/system.h>
00028 #include <drizzled/optimizer/access_method/const.h>
00029 #include <drizzled/optimizer/access_method/unique_index.h>
00030 #include <drizzled/optimizer/access_method/index.h>
00031 #include <drizzled/optimizer/access_method/scan.h>
00032
00033 #include <boost/shared_ptr.hpp>
00034
00035 using namespace drizzled;
00036
00037 boost::shared_ptr<optimizer::AccessMethod>
00038 optimizer::AccessMethodFactory::createAccessMethod(enum access_method type)
00039 {
00040 boost::shared_ptr<optimizer::AccessMethod> am_ret;
00041
00042 switch (type)
00043 {
00044 case AM_SYSTEM:
00045 am_ret.reset(new optimizer::System());
00046 break;
00047 case AM_CONST:
00048 am_ret.reset(new optimizer::Const());
00049 break;
00050 case AM_EQ_REF:
00051 am_ret.reset(new optimizer::UniqueIndex());
00052 break;
00053 case AM_REF_OR_NULL:
00054 case AM_REF:
00055 am_ret.reset(new optimizer::Index());
00056 break;
00057 case AM_ALL:
00058 am_ret.reset(new optimizer::Scan());
00059 break;
00060 default:
00061 break;
00062 }
00063
00064 return am_ret;
00065 }
00066