00001 /* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*- 00002 * vim:expandtab:shiftwidth=2:tabstop=2:smarttab: 00003 * 00004 * Copyright (C) 2010 Joseph Daly <skinny.moey@gmail.com> 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 00021 #pragma once 00022 00023 #include <drizzled/plugin/table_function.h> 00024 #include <drizzled/field.h> 00025 00026 #include "trx0i_s.h" 00027 #include "trx0trx.h" /* for TRX_QUE_STATE_STR_MAX_LEN */ 00028 #include "buf0buddy.h" /* for i_s_cmpmem */ 00029 #include "buf0buf.h" /* for buf_pool and PAGE_ZIP_MIN_SIZE */ 00030 #include "ha_prototypes.h" /* for innobase_convert_name() */ 00031 #include "srv0start.h" /* for srv_was_started */ 00032 #include "btr0pcur.h" /* for file sys_tables related info. */ 00033 #include "btr0types.h" 00034 #include "dict0load.h" /* for file sys_tables related info. */ 00035 #include "dict0mem.h" 00036 #include "dict0types.h" 00037 00038 class InnodbSysTablesTool : public drizzled::plugin::TableFunction 00039 { 00040 public: 00041 InnodbSysTablesTool(); 00042 class Generator : public drizzled::plugin::TableFunction::Generator 00043 { 00044 public: 00045 Generator(drizzled::Field **arg); 00046 00047 bool populate(); 00048 private: 00049 btr_pcur_t pcur; 00050 const rec_t* rec; 00051 mem_heap_t* heap; 00052 mtr_t mtr; 00053 }; 00054 00055 Generator *generator(drizzled::Field **arg) 00056 { 00057 return new Generator(arg); 00058 } 00059 }; 00060 00061 class InnodbSysTableStatsTool : public drizzled::plugin::TableFunction 00062 { 00063 public: 00064 InnodbSysTableStatsTool(); 00065 class Generator : public drizzled::plugin::TableFunction::Generator 00066 { 00067 public: 00068 Generator(drizzled::Field **arg); 00069 00070 bool populate(); 00071 private: 00072 btr_pcur_t pcur; 00073 const rec_t* rec; 00074 mem_heap_t* heap; 00075 mtr_t mtr; 00076 }; 00077 00078 Generator *generator(drizzled::Field **arg) 00079 { 00080 return new Generator(arg); 00081 } 00082 }; 00083 00084 class InnodbSysIndexesTool : public drizzled::plugin::TableFunction 00085 { 00086 public: 00087 InnodbSysIndexesTool(); 00088 class Generator : public drizzled::plugin::TableFunction::Generator 00089 { 00090 public: 00091 Generator(drizzled::Field **arg); 00092 00093 bool populate(); 00094 private: 00095 btr_pcur_t pcur; 00096 const rec_t* rec; 00097 mem_heap_t* heap; 00098 mtr_t mtr; 00099 }; 00100 00101 Generator *generator(drizzled::Field **arg) 00102 { 00103 return new Generator(arg); 00104 } 00105 }; 00106 00107 class InnodbSysColumnsTool : public drizzled::plugin::TableFunction 00108 { 00109 public: 00110 InnodbSysColumnsTool(); 00111 class Generator : public drizzled::plugin::TableFunction::Generator 00112 { 00113 public: 00114 Generator(drizzled::Field **arg); 00115 00116 bool populate(); 00117 private: 00118 btr_pcur_t pcur; 00119 const rec_t* rec; 00120 mem_heap_t* heap; 00121 mtr_t mtr; 00122 }; 00123 00124 Generator *generator(drizzled::Field **arg) 00125 { 00126 return new Generator(arg); 00127 } 00128 }; 00129 00130 class InnodbSysFieldsTool : public drizzled::plugin::TableFunction 00131 { 00132 public: 00133 InnodbSysFieldsTool(); 00134 class Generator : public drizzled::plugin::TableFunction::Generator 00135 { 00136 public: 00137 Generator(drizzled::Field **arg); 00138 00139 bool populate(); 00140 private: 00141 btr_pcur_t pcur; 00142 const rec_t* rec; 00143 mem_heap_t* heap; 00144 index_id_t last_id; 00145 mtr_t mtr; 00146 }; 00147 00148 Generator *generator(drizzled::Field **arg) 00149 { 00150 return new Generator(arg); 00151 } 00152 }; 00153 00154 class InnodbSysForeignTool : public drizzled::plugin::TableFunction 00155 { 00156 public: 00157 InnodbSysForeignTool(); 00158 class Generator : public drizzled::plugin::TableFunction::Generator 00159 { 00160 public: 00161 Generator(drizzled::Field **arg); 00162 00163 bool populate(); 00164 private: 00165 btr_pcur_t pcur; 00166 const rec_t* rec; 00167 mem_heap_t* heap; 00168 mtr_t mtr; 00169 }; 00170 00171 Generator *generator(drizzled::Field **arg) 00172 { 00173 return new Generator(arg); 00174 } 00175 }; 00176 00177 class InnodbSysForeignColsTool : public drizzled::plugin::TableFunction 00178 { 00179 public: 00180 InnodbSysForeignColsTool(); 00181 class Generator : public drizzled::plugin::TableFunction::Generator 00182 { 00183 public: 00184 Generator(drizzled::Field **arg); 00185 00186 bool populate(); 00187 private: 00188 btr_pcur_t pcur; 00189 const rec_t* rec; 00190 mem_heap_t* heap; 00191 mtr_t mtr; 00192 }; 00193 00194 Generator *generator(drizzled::Field **arg) 00195 { 00196 return new Generator(arg); 00197 } 00198 }; 00199 00200 class CmpTool : public drizzled::plugin::TableFunction 00201 { 00202 public: 00203 00204 CmpTool(bool reset); 00205 00206 class Generator : public drizzled::plugin::TableFunction::Generator 00207 { 00208 public: 00209 Generator(drizzled::Field **arg, bool outer_reset); 00210 00211 bool populate(); 00212 private: 00213 uint32_t record_number; 00214 bool inner_reset; 00215 }; 00216 00217 Generator *generator(drizzled::Field **arg) 00218 { 00219 return new Generator(arg, outer_reset); 00220 } 00221 private: 00222 bool outer_reset; 00223 }; 00224 00225 class CmpmemTool : public drizzled::plugin::TableFunction 00226 { 00227 public: 00228 00229 CmpmemTool(bool reset); 00230 00231 class Generator : public drizzled::plugin::TableFunction::Generator 00232 { 00233 public: 00234 Generator(drizzled::Field **arg, bool outer_reset); 00235 00236 ~Generator(); 00237 00238 bool populate(); 00239 private: 00240 uint32_t record_number; 00241 bool inner_reset; 00242 }; 00243 00244 Generator *generator(drizzled::Field **arg) 00245 { 00246 return new Generator(arg, outer_reset); 00247 } 00248 private: 00249 bool outer_reset; 00250 }; 00251 00252 class InnodbTrxTool : public drizzled::plugin::TableFunction 00253 { 00254 public: 00255 00256 InnodbTrxTool(const char* in_table_name); 00257 00258 class Generator : public drizzled::plugin::TableFunction::Generator 00259 { 00260 public: 00261 Generator(drizzled::Field **arg, const char* in_table_name); 00262 00263 ~Generator(); 00264 00265 bool populate(); 00266 private: 00267 void populate_innodb_trx(); 00268 void populate_innodb_locks(); 00269 void populate_innodb_lock_waits(); 00270 00271 private: 00272 uint32_t record_number; 00273 uint32_t number_rows; 00274 const char* table_name; 00275 }; 00276 00277 Generator *generator(drizzled::Field **arg) 00278 { 00279 return new Generator(arg, table_name); 00280 } 00281 private: 00282 const char* table_name; 00283 }; 00284