137
137
** List all table types supported
138
138
***************************************************************************/
140
class ShowPlugins : public unary_function<st_plugin_int *, bool>
145
ShowPlugins(Session *session_arg, Table *table_arg)
146
: session(session_arg), table(table_arg) {}
148
result_type operator() (argument_type plugin)
150
struct drizzled_plugin_manifest *plug= plugin_decl(plugin);
151
const CHARSET_INFO * const cs= system_charset_info;
153
table->restoreRecordAsDefault();
155
table->field[0]->store(plugin_name(plugin)->str,
156
plugin_name(plugin)->length, cs);
160
table->field[1]->store(plug->version, strlen(plug->version), cs);
161
table->field[1]->set_notnull();
164
table->field[1]->set_null();
166
if (plugin->isInited)
167
table->field[2]->store(STRING_WITH_LEN("ACTIVE"), cs);
169
table->field[2]->store(STRING_WITH_LEN("INACTIVE"), cs);
173
table->field[3]->store(plug->author, strlen(plug->author), cs);
174
table->field[3]->set_notnull();
177
table->field[3]->set_null();
181
table->field[4]->store(plug->descr, strlen(plug->descr), cs);
182
table->field[4]->set_notnull();
185
table->field[4]->set_null();
187
switch (plug->license) {
188
case PLUGIN_LICENSE_GPL:
189
table->field[5]->store(PLUGIN_LICENSE_GPL_STRING,
190
strlen(PLUGIN_LICENSE_GPL_STRING), cs);
192
case PLUGIN_LICENSE_BSD:
193
table->field[5]->store(PLUGIN_LICENSE_BSD_STRING,
194
strlen(PLUGIN_LICENSE_BSD_STRING), cs);
196
case PLUGIN_LICENSE_LGPL:
197
table->field[5]->store(PLUGIN_LICENSE_LGPL_STRING,
198
strlen(PLUGIN_LICENSE_LGPL_STRING), cs);
201
table->field[5]->store(PLUGIN_LICENSE_PROPRIETARY_STRING,
202
strlen(PLUGIN_LICENSE_PROPRIETARY_STRING), cs);
205
table->field[5]->set_notnull();
207
return schema_table_store_record(session, table);
212
int PluginsISMethods::fillTable(Session *session, TableList *tables, COND *)
214
Table *table= tables->table;
216
PluginRegistry ®istry= PluginRegistry::getPluginRegistry();
217
vector<st_plugin_int *> plugins= registry.get_list(true);
218
vector<st_plugin_int *>::iterator iter=
219
find_if(plugins.begin(), plugins.end(), ShowPlugins(session, table));
220
if (iter != plugins.end())
227
141
find_files() - find files in a given directory.
3056
bool store_constraints(Session *session, Table *table, LEX_STRING *db_name,
3057
LEX_STRING *table_name, const char *key_name,
3058
uint32_t key_len, const char *con_type, uint32_t con_len)
3060
const CHARSET_INFO * const cs= system_charset_info;
3061
table->restoreRecordAsDefault();
3062
table->field[1]->store(db_name->str, db_name->length, cs);
3063
table->field[2]->store(key_name, key_len, cs);
3064
table->field[3]->store(db_name->str, db_name->length, cs);
3065
table->field[4]->store(table_name->str, table_name->length, cs);
3066
table->field[5]->store(con_type, con_len, cs);
3067
return schema_table_store_record(session, table);
3071
int TabConstraintsISMethods::processTable(Session *session, TableList *tables,
3072
Table *table, bool res,
3073
LEX_STRING *db_name,
3074
LEX_STRING *table_name) const
3078
if (session->is_error())
3079
push_warning(session, DRIZZLE_ERROR::WARN_LEVEL_WARN,
3080
session->main_da.sql_errno(), session->main_da.message());
3081
session->clear_error();
3086
List<FOREIGN_KEY_INFO> f_key_list;
3087
Table *show_table= tables->table;
3088
KEY *key_info=show_table->key_info;
3089
uint32_t primary_key= show_table->s->primary_key;
3090
show_table->file->info(HA_STATUS_VARIABLE |
3093
for (uint32_t i=0 ; i < show_table->s->keys ; i++, key_info++)
3095
if (i != primary_key && !(key_info->flags & HA_NOSAME))
3098
if (i == primary_key && is_primary_key(key_info))
3100
if (store_constraints(session, table, db_name, table_name, key_info->name,
3101
strlen(key_info->name),
3102
STRING_WITH_LEN("PRIMARY KEY")))
3105
else if (key_info->flags & HA_NOSAME)
3107
if (store_constraints(session, table, db_name, table_name, key_info->name,
3108
strlen(key_info->name),
3109
STRING_WITH_LEN("UNIQUE")))
3114
show_table->file->get_foreign_key_list(session, &f_key_list);
3115
FOREIGN_KEY_INFO *f_key_info;
3116
List_iterator_fast<FOREIGN_KEY_INFO> it(f_key_list);
3117
while ((f_key_info=it++))
3119
if (store_constraints(session, table, db_name, table_name,
3120
f_key_info->forein_id->str,
3121
strlen(f_key_info->forein_id->str),
3130
void store_key_column_usage(Table *table, LEX_STRING *db_name,
3131
LEX_STRING *table_name, const char *key_name,
3132
uint32_t key_len, const char *con_type, uint32_t con_len,
3135
const CHARSET_INFO * const cs= system_charset_info;
3136
table->field[1]->store(db_name->str, db_name->length, cs);
3137
table->field[2]->store(key_name, key_len, cs);
3138
table->field[4]->store(db_name->str, db_name->length, cs);
3139
table->field[5]->store(table_name->str, table_name->length, cs);
3140
table->field[6]->store(con_type, con_len, cs);
3141
table->field[7]->store((int64_t) idx, true);
3145
int KeyColUsageISMethods::processTable(Session *session,
3147
Table *table, bool res,
3148
LEX_STRING *db_name,
3149
LEX_STRING *table_name) const
3153
if (session->is_error())
3154
push_warning(session, DRIZZLE_ERROR::WARN_LEVEL_WARN,
3155
session->main_da.sql_errno(), session->main_da.message());
3156
session->clear_error();
3161
List<FOREIGN_KEY_INFO> f_key_list;
3162
Table *show_table= tables->table;
3163
KEY *key_info=show_table->key_info;
3164
uint32_t primary_key= show_table->s->primary_key;
3165
show_table->file->info(HA_STATUS_VARIABLE |
3168
for (uint32_t i=0 ; i < show_table->s->keys ; i++, key_info++)
3170
if (i != primary_key && !(key_info->flags & HA_NOSAME))
3173
KEY_PART_INFO *key_part= key_info->key_part;
3174
for (uint32_t j=0 ; j < key_info->key_parts ; j++,key_part++)
3176
if (key_part->field)
3179
table->restoreRecordAsDefault();
3180
store_key_column_usage(table, db_name, table_name,
3182
strlen(key_info->name),
3183
key_part->field->field_name,
3184
strlen(key_part->field->field_name),
3186
if (schema_table_store_record(session, table))
3192
show_table->file->get_foreign_key_list(session, &f_key_list);
3193
FOREIGN_KEY_INFO *f_key_info;
3194
List_iterator_fast<FOREIGN_KEY_INFO> fkey_it(f_key_list);
3195
while ((f_key_info= fkey_it++))
3199
List_iterator_fast<LEX_STRING> it(f_key_info->foreign_fields),
3200
it1(f_key_info->referenced_fields);
3202
while ((f_info= it++))
3206
table->restoreRecordAsDefault();
3207
store_key_column_usage(table, db_name, table_name,
3208
f_key_info->forein_id->str,
3209
f_key_info->forein_id->length,
3210
f_info->str, f_info->length,
3212
table->field[8]->store((int64_t) f_idx, true);
3213
table->field[8]->set_notnull();
3214
table->field[9]->store(f_key_info->referenced_db->str,
3215
f_key_info->referenced_db->length,
3216
system_charset_info);
3217
table->field[9]->set_notnull();
3218
table->field[10]->store(f_key_info->referenced_table->str,
3219
f_key_info->referenced_table->length,
3220
system_charset_info);
3221
table->field[10]->set_notnull();
3222
table->field[11]->store(r_info->str, r_info->length,
3223
system_charset_info);
3224
table->field[11]->set_notnull();
3225
if (schema_table_store_record(session, table))
3234
2963
int OpenTablesISMethods::fillTable(Session *session, TableList *tables, COND *)
3236
2965
const char *wild= session->lex->wild ? session->lex->wild->ptr() : NULL;
3324
Fill and store records into I_S.referential_constraints table
3327
RefConstraintsISMethods::processTable()
3328
session thread handle
3329
tables table list struct(processed table)
3331
res 1 means the error during opening of the processed table
3332
0 means processed table is opened without error
3334
file_name table name
3342
RefConstraintsISMethods::processTable(Session *session, TableList *tables,
3343
Table *table, bool res,
3344
LEX_STRING *db_name, LEX_STRING *table_name)
3347
const CHARSET_INFO * const cs= system_charset_info;
3351
if (session->is_error())
3352
push_warning(session, DRIZZLE_ERROR::WARN_LEVEL_WARN,
3353
session->main_da.sql_errno(), session->main_da.message());
3354
session->clear_error();
3359
List<FOREIGN_KEY_INFO> f_key_list;
3360
Table *show_table= tables->table;
3361
show_table->file->info(HA_STATUS_VARIABLE |
3365
show_table->file->get_foreign_key_list(session, &f_key_list);
3366
FOREIGN_KEY_INFO *f_key_info;
3367
List_iterator_fast<FOREIGN_KEY_INFO> it(f_key_list);
3368
while ((f_key_info= it++))
3370
table->restoreRecordAsDefault();
3371
table->field[1]->store(db_name->str, db_name->length, cs);
3372
table->field[9]->store(table_name->str, table_name->length, cs);
3373
table->field[2]->store(f_key_info->forein_id->str,
3374
f_key_info->forein_id->length, cs);
3375
table->field[4]->store(f_key_info->referenced_db->str,
3376
f_key_info->referenced_db->length, cs);
3377
table->field[10]->store(f_key_info->referenced_table->str,
3378
f_key_info->referenced_table->length, cs);
3379
if (f_key_info->referenced_key_name)
3381
table->field[5]->store(f_key_info->referenced_key_name->str,
3382
f_key_info->referenced_key_name->length, cs);
3383
table->field[5]->set_notnull();
3386
table->field[5]->set_null();
3387
table->field[6]->store(STRING_WITH_LEN("NONE"), cs);
3388
table->field[7]->store(f_key_info->update_method->str,
3389
f_key_info->update_method->length, cs);
3390
table->field[8]->store(f_key_info->delete_method->str,
3391
f_key_info->delete_method->length, cs);
3392
if (schema_table_store_record(session, table))
3400
3052
class FindSchemaTableByName : public unary_function<InfoSchemaTable *, bool>
3402
3054
const char *table_name;
4013
ColumnInfo table_constraints_fields_info[]=
4015
ColumnInfo("CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FULL_TABLE),
4016
ColumnInfo("CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4017
"", OPEN_FULL_TABLE),
4018
ColumnInfo("CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4019
"", OPEN_FULL_TABLE),
4020
ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4021
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4022
ColumnInfo("CONSTRAINT_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4023
"", OPEN_FULL_TABLE),
4028
ColumnInfo key_column_usage_fields_info[]=
4030
ColumnInfo("CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FULL_TABLE),
4031
ColumnInfo("CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4032
"", OPEN_FULL_TABLE),
4033
ColumnInfo("CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4034
"", OPEN_FULL_TABLE),
4035
ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FULL_TABLE),
4036
ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4037
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4038
"", OPEN_FULL_TABLE),
4039
ColumnInfo("COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4040
ColumnInfo("ORDINAL_POSITION", 10 ,DRIZZLE_TYPE_LONGLONG, 0, 0, "", OPEN_FULL_TABLE),
4041
ColumnInfo("POSITION_IN_UNIQUE_CONSTRAINT", 10 ,DRIZZLE_TYPE_LONGLONG, 0, 1,
4042
"", OPEN_FULL_TABLE),
4043
ColumnInfo("REFERENCED_TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1,
4044
"", OPEN_FULL_TABLE),
4045
ColumnInfo("REFERENCED_TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1,
4046
"", OPEN_FULL_TABLE),
4047
ColumnInfo("REFERENCED_COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1,
4048
"", OPEN_FULL_TABLE),
4053
3659
ColumnInfo table_names_fields_info[]=
4055
3661
ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", SKIP_OPEN_TABLE),
4085
ColumnInfo plugin_fields_info[]=
4087
ColumnInfo("PLUGIN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Name",
4089
ColumnInfo("PLUGIN_VERSION", 20, DRIZZLE_TYPE_VARCHAR, 0, 0, "", SKIP_OPEN_TABLE),
4090
ColumnInfo("PLUGIN_STATUS", 10, DRIZZLE_TYPE_VARCHAR, 0, 0, "Status", SKIP_OPEN_TABLE),
4091
ColumnInfo("PLUGIN_AUTHOR", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", SKIP_OPEN_TABLE),
4092
ColumnInfo("PLUGIN_DESCRIPTION", 65535, DRIZZLE_TYPE_VARCHAR, 0, 1, "", SKIP_OPEN_TABLE),
4093
ColumnInfo("PLUGIN_LICENSE", 80, DRIZZLE_TYPE_VARCHAR, 0, 1, "License", SKIP_OPEN_TABLE),
4097
ColumnInfo referential_constraints_fields_info[]=
4099
ColumnInfo("CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FULL_TABLE),
4100
ColumnInfo("CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4101
"", OPEN_FULL_TABLE),
4102
ColumnInfo("CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4103
"", OPEN_FULL_TABLE),
4104
ColumnInfo("UNIQUE_CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1,
4105
"", OPEN_FULL_TABLE),
4106
ColumnInfo("UNIQUE_CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4107
"", OPEN_FULL_TABLE),
4108
ColumnInfo("UNIQUE_CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0,
4109
MY_I_S_MAYBE_NULL, "", OPEN_FULL_TABLE),
4110
ColumnInfo("MATCH_OPTION", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4111
ColumnInfo("UPDATE_RULE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4112
ColumnInfo("DELETE_RULE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4113
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4114
ColumnInfo("REFERENCED_TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4115
"", OPEN_FULL_TABLE),
4119
3691
static ColumnsISMethods columns_methods;
4120
3692
static StatusISMethods status_methods;
4121
3693
static VariablesISMethods variables_methods;
4122
static KeyColUsageISMethods key_col_usage_methods;
4123
3694
static OpenTablesISMethods open_tables_methods;
4124
static PluginsISMethods plugins_methods;
4125
static RefConstraintsISMethods ref_constraints_methods;
4126
3695
static SchemataISMethods schemata_methods;
4127
3696
static StatsISMethods stats_methods;
4128
3697
static TablesISMethods tables_methods;
4129
static TabConstraintsISMethods tab_constraints_methods;
4130
3698
static TabNamesISMethods tab_names_methods;
4132
3700
static InfoSchemaTable columns_table("COLUMNS",