00001 /* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*- 00002 * vim:expandtab:shiftwidth=2:tabstop=2:smarttab: 00003 * 00004 * Copyright (C) 2008-2009 Sun Microsystems, Inc. 00005 * 00006 * This program is free software; you can redistribute it and/or modify 00007 * it under the terms of the GNU General Public License as published by 00008 * the Free Software Foundation; either version 2 of the License, or 00009 * (at your option) any later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with this program; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00019 */ 00020 00027 #pragma once 00028 00029 namespace drizzled { 00030 00031 /* 00032 String names used to print a statement with index hints. 00033 Keep in sync with index_hint_type. 00034 */ 00035 extern const char* index_hint_type_name[]; 00036 typedef unsigned char index_clause_map; 00037 00038 enum index_hint_type 00039 { 00040 INDEX_HINT_IGNORE, 00041 INDEX_HINT_USE, 00042 INDEX_HINT_FORCE 00043 }; 00044 00045 /* 00046 Bits in index_clause_map : one for each possible FOR clause in 00047 USE/FORCE/IGNORE INDEX index hint specification 00048 */ 00049 #define INDEX_HINT_MASK_JOIN (1) 00050 #define INDEX_HINT_MASK_GROUP (1 << 1) 00051 #define INDEX_HINT_MASK_ORDER (1 << 2) 00052 00053 #define INDEX_HINT_MASK_ALL (INDEX_HINT_MASK_JOIN | INDEX_HINT_MASK_GROUP | INDEX_HINT_MASK_ORDER) 00054 00055 /* Single element of an USE/FORCE/IGNORE INDEX list specified as a SQL hint */ 00056 class Index_hint : public memory::SqlAlloc 00057 { 00058 public: 00059 /* The type of the hint : USE/FORCE/IGNORE */ 00060 index_hint_type type; 00061 /* Where the hit applies to. A bitmask of INDEX_HINT_MASK_<place> values */ 00062 index_clause_map clause; 00063 /* 00064 The index name. Empty (str=NULL) name represents an empty list 00065 USE INDEX () clause 00066 */ 00067 const char* key_name; 00068 00069 Index_hint(index_hint_type type_arg, index_clause_map clause_arg, const char *str) : 00070 type(type_arg), clause(clause_arg), key_name(str) 00071 { 00072 } 00073 00074 void print(String&) const; 00075 }; 00076 00077 } /* namespace drizzled */