2140
2178
ADD DATAFILE 'file'
2141
2179
USE LOGFILE GROUP logfile_group
2142
2180
[EXTENT_SIZE [=] extent_size]
2143
INITIAL_SIZE [=] initial_size
2181
[INITIAL_SIZE [=] initial_size]
2182
[AUTOEXTEND_SIZE [=] autoextend_size]
2183
[MAX_SIZE [=] max_size]
2184
[NODEGROUP [=] nodegroup_id]
2186
[COMMENT [=] comment_text]
2144
2187
ENGINE [=] engine
2189
if (ts_info->data_file_name)
2191
char buff[FN_REFLEN];
2192
size_t dirname_part_length;
2193
dirname_part(buff, ts_info->data_file_name, &dirname_part_length);
2194
fn_format(buff, buff, mysql_real_data_home, "",
2195
MY_RELATIVE_PATH | MY_UNPACK_FILENAME);
2196
if (test_if_data_home_dir(buff))
2198
my_error(ER_WRONG_ARGUMENTS, MYF(0), "DATAFILE");
2147
2203
switch (ts_info->ts_cmd_type)
2149
2205
case CREATE_TABLESPACE:
2150
ret = storageHandler->createTablespace(ts_info->tablespace_name, ts_info->data_file_name);
2206
ret = storageHandler->createTablespace( ts_info->tablespace_name,
2207
ts_info->data_file_name,
2208
ts_info->initial_size,
2209
ts_info->extent_size,
2210
ts_info->autoextend_size,
2212
ts_info->nodegroup_id,
2213
ts_info->wait_until_completed,
2214
ts_info->ts_comment);
2153
2217
case DROP_TABLESPACE:
2161
2225
DBUG_RETURN(getMySqlError(ret));
2228
int StorageInterface::check_if_supported_alter(TABLE *altered_table, HA_CREATE_INFO *create_info, HA_ALTER_FLAGS *alter_flags, uint table_changes)
2230
DBUG_ENTER("StorageInterface::check_if_supported_alter");
2231
tempTable = (create_info->options & HA_LEX_CREATE_TMP_TABLE) ? true : false;
2232
HA_ALTER_FLAGS supported;
2233
supported = supported | HA_ADD_INDEX | HA_DROP_INDEX;
2235
| HA_ADD_COLUMN | HA_ADD_UNIQUE_INDEX | HA_DROP_UNIQUE_INDEX
2236
| HA_COLUMN_STORAGE | HA_COLUMN_FORMAT;
2238
HA_ALTER_FLAGS notSupported = ~(supported);
2240
#ifndef ONLINE_ALTER
2241
DBUG_RETURN(HA_ALTER_NOT_SUPPORTED);
2244
if (tempTable || (*alter_flags & notSupported).is_set())
2245
DBUG_RETURN(HA_ALTER_NOT_SUPPORTED);
2248
// 1. Check for supported ALTER combinations
2249
// 2. Check for explicit default (altered_table->s->default_values)
2251
if (alter_flags->is_set(HA_ADD_COLUMN))
2253
Field *field = NULL;
2255
for (uint i = 0; i < altered_table->s->fields; i++)
2257
field = altered_table->s->field[i];
2260
for (uint n = 0; n < table->s->fields; n++)
2261
if (found = (strcmp(table->s->field[n]->field_name, field->field_name) == 0))
2264
if (field && !found)
2265
if (!field->real_maybe_null())
2267
DBUG_PRINT("info",("Online add column must be nullable"));
2268
DBUG_RETURN(HA_ALTER_NOT_SUPPORTED);
2273
// TODO for Add Index:
2274
// 1. Check for supported ALTER combinations
2275
// 2. Can error message be improved for non-null columns?
2277
if (alter_flags->is_set(HA_ADD_INDEX))
2279
for (unsigned int n = 0; n < altered_table->s->keys; n++)
2281
if (n != altered_table->s->primary_key)
2283
KEY *key = altered_table->key_info + n;
2284
KEY *tableEnd = table->key_info + table->s->keys;
2287
// Determine if this is a new index
2289
for (tableKey = table->key_info; tableKey < tableEnd; tableKey++)
2290
if (!strcmp(tableKey->name, key->name))
2293
// Verify that each part is nullable
2295
if (tableKey >= tableEnd)
2296
for (uint p = 0; p < key->key_parts; p++)
2298
KEY_PART_INFO *keyPart = key->key_part + p;
2299
if (keyPart && !keyPart->field->real_maybe_null())
2301
DBUG_PRINT("info",("Online add index columns must be nullable"));
2302
DBUG_RETURN(HA_ALTER_NOT_SUPPORTED);
2309
if (alter_flags->is_set(HA_DROP_INDEX))
2313
DBUG_RETURN(HA_ALTER_SUPPORTED_NO_LOCK);
2316
int StorageInterface::alter_table_phase1(THD* thd, TABLE* altered_table, HA_CREATE_INFO* create_info, HA_ALTER_INFO* alter_info, HA_ALTER_FLAGS* alter_flags)
2318
DBUG_ENTER("StorageInterface::alter_table_phase1");
2321
if (alter_flags->is_set(HA_ADD_COLUMN))
2322
ret = addColumn(thd, altered_table, create_info, alter_info, alter_flags);
2324
if (alter_flags->is_set(HA_ADD_INDEX) && !ret)
2325
ret = addIndex(thd, altered_table, create_info, alter_info, alter_flags);
2327
if (alter_flags->is_set(HA_DROP_INDEX) && !ret)
2328
ret = dropIndex(thd, altered_table, create_info, alter_info, alter_flags);
2333
int StorageInterface::alter_table_phase2(THD* thd, TABLE* altered_table, HA_CREATE_INFO* create_info, HA_ALTER_INFO* alter_info, HA_ALTER_FLAGS* alter_flags)
2335
DBUG_ENTER("StorageInterface::alter_table_phase2");
2340
int StorageInterface::alter_table_phase3(THD* thd, TABLE* altered_table)
2342
DBUG_ENTER("StorageInterface::alter_table_phase3");
2347
int StorageInterface::addColumn(THD* thd, TABLE* alteredTable, HA_CREATE_INFO* createInfo, HA_ALTER_INFO* alterInfo, HA_ALTER_FLAGS* alterFlags)
2350
int64 incrementValue = 0;
2352
const char *tableName = storageTable->getName();
2353
const char *schemaName = storageTable->getSchemaName();
2356
genTable(alteredTable, &gen);
2359
if (alteredTable->found_next_number_field)
2361
incrementValue = alterInfo->auto_increment_value;
2363
if (incrementValue == 0)
2369
if (alteredTable->s->primary_key < alteredTable->s->keys)
2371
KEY *key = alteredTable->key_info + alteredTable->s->primary_key;
2372
gen.gen(",\n primary key ");
2373
genKeyFields(key, &gen);
2379
if ((ret = storageTable->upgrade(gen.getString(), incrementValue)))
2380
return (error(ret));
2385
int StorageInterface::addIndex(THD* thd, TABLE* alteredTable, HA_CREATE_INFO* createInfo, HA_ALTER_INFO* alterInfo, HA_ALTER_FLAGS* alterFlags)
2388
const char *tableName = storageTable->getName();
2389
const char *schemaName = storageTable->getSchemaName();
2391
// Find indexes to be added by comparing table and alteredTable
2393
for (unsigned int n = 0; n < alteredTable->s->keys; n++)
2395
if (n != alteredTable->s->primary_key)
2397
KEY *key = alteredTable->key_info + n;
2398
KEY *tableEnd = table->key_info + table->s->keys;
2401
for (tableKey = table->key_info; tableKey < tableEnd; tableKey++)
2402
if (!strcmp(tableKey->name, key->name))
2405
if (tableKey >= tableEnd)
2406
if ((ret = createIndex(schemaName, tableName, key, n)))
2407
return (error(ret));
2413
int StorageInterface::dropIndex(THD* thd, TABLE* alteredTable, HA_CREATE_INFO* createInfo, HA_ALTER_INFO* alterInfo, HA_ALTER_FLAGS* alterFlags)
2416
const char *tableName = storageTable->getName();
2417
const char *schemaName = storageTable->getSchemaName();
2419
// Find indexes to be dropped by comparing table and alteredTable
2421
for (unsigned int n = 0; n < table->s->keys; n++)
2423
if (n != table->s->primary_key)
2425
KEY *key = table->key_info + n;
2426
KEY *alterEnd = alteredTable->key_info + alteredTable->s->keys;
2429
for (alterKey = alteredTable->key_info; alterKey < alterEnd; alterKey++)
2430
if (!strcmp(alterKey->name, key->name))
2433
if (alterKey >= alterEnd)
2434
if ((ret = dropIndex(schemaName, tableName, key, n)))
2435
return (error(ret));
2164
2442
uint StorageInterface::max_supported_key_length(void) const
2166
2444
// Assume 4K page unless proven otherwise.
2505
int StorageInterface::genTable(TABLE* table, CmdGen* gen)
2507
const char *tableName = storageTable->getName();
2508
const char *schemaName = storageTable->getSchemaName();
2509
gen->gen("upgrade table \"%s\".\"%s\" (\n", schemaName, tableName);
2510
const char *sep = "";
2511
char nameBuffer[129];
2513
for (uint n = 0; n < table->s->fields; ++n)
2515
Field *field = table->field[n];
2516
CHARSET_INFO *charset = field->charset();
2519
storageShare->registerCollation(charset->name, charset);
2521
storageShare->cleanupFieldName(field->field_name, nameBuffer, sizeof(nameBuffer));
2522
gen->gen("%s \"%s\" ", sep, nameBuffer);
2523
int ret = genType(field, gen);
2528
if (!field->maybe_null())
2529
gen->gen(" not null");
2534
if (table->s->primary_key < table->s->keys)
2536
KEY *key = table->key_info + table->s->primary_key;
2537
gen->gen(",\n primary key ");
2538
genKeyFields(key, gen);
2229
2546
int StorageInterface::genType(Field* field, CmdGen* gen)
2752
3109
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
2755
int NfsPluginHandler::initSystemMemoryDetail(void *p)
3112
int NfsPluginHandler::initSystemMemoryDetailInfo(void *p)
2757
DBUG_ENTER("initSystemMemoryDetail");
3114
DBUG_ENTER("initSystemMemoryDetailInfo");
2758
3115
ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE*) p;
2759
3116
schema->fields_info = memoryDetailFieldInfo;
2760
schema->fill_table = NfsPluginHandler::call_fillSystemMemoryDetailTable;
3117
schema->fill_table = NfsPluginHandler::getSystemMemoryDetailInfo;
2761
3118
DBUG_RETURN(0);
2764
int NfsPluginHandler::deinitSystemMemoryDetail(void *p)
3121
int NfsPluginHandler::deinitSystemMemoryDetailInfo(void *p)
2766
DBUG_ENTER("deinitSystemMemoryDetail");
3123
DBUG_ENTER("deinitSystemMemoryDetailInfo");
2767
3124
DBUG_RETURN(0);
2770
3127
//*****************************************************************************
2772
// System memory usage summary
3129
// FALCON_SYSTEM_MEMORY_SUMMARY
2774
3131
//*****************************************************************************
2776
int NfsPluginHandler::call_fillSystemMemorySummaryTable(THD *thd, TABLE_LIST *tables, COND *cond)
3133
int NfsPluginHandler::getSystemMemorySummaryInfo(THD *thd, TABLE_LIST *tables, COND *cond)
2778
3135
//return(pluginHandler->fillSystemMemorySummaryTable(thd, tables, cond));
2779
3136
InfoTableImpl infoTable(thd, tables, system_charset_info);
2795
3152
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
2798
int NfsPluginHandler::initSystemMemorySummary(void *p)
3155
int NfsPluginHandler::initSystemMemorySummaryInfo(void *p)
2800
DBUG_ENTER("initSystemMemorySummary");
3157
DBUG_ENTER("initSystemMemorySummaryInfo");
2801
3158
ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE *)p;
2802
3159
schema->fields_info = memorySummaryFieldInfo;
2803
schema->fill_table = NfsPluginHandler::call_fillSystemMemorySummaryTable;
3160
schema->fill_table = NfsPluginHandler::getSystemMemorySummaryInfo;
2805
3162
DBUG_RETURN(0);
2808
int NfsPluginHandler::deinitSystemMemorySummary(void *p)
3165
int NfsPluginHandler::deinitSystemMemorySummaryInfo(void *p)
2810
DBUG_ENTER("deinitSystemMemorySummary");
3167
DBUG_ENTER("deinitSystemMemorySummaryInfo");
2811
3168
DBUG_RETURN(0);
2814
3171
//*****************************************************************************
2816
// Record cache usage detail
3173
// FALCON_RECORD_CACHE_DETAIL
2818
3175
//*****************************************************************************
2820
int NfsPluginHandler::call_fillRecordCacheDetailTable(THD *thd, TABLE_LIST *tables, COND *cond)
3177
int NfsPluginHandler::getRecordCacheDetailInfo(THD *thd, TABLE_LIST *tables, COND *cond)
2822
3179
InfoTableImpl infoTable(thd, tables, system_charset_info);
2838
3195
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
2841
int NfsPluginHandler::initRecordCacheDetail(void *p)
3198
int NfsPluginHandler::initRecordCacheDetailInfo(void *p)
2843
DBUG_ENTER("initRecordCacheDetail");
3200
DBUG_ENTER("initRecordCacheDetailInfo");
2844
3201
ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE *)p;
2845
3202
schema->fields_info = recordDetailFieldInfo;
2846
schema->fill_table = NfsPluginHandler::call_fillRecordCacheDetailTable;
3203
schema->fill_table = NfsPluginHandler::getRecordCacheDetailInfo;
2848
3205
DBUG_RETURN(0);
2851
int NfsPluginHandler::deinitRecordCacheDetail(void *p)
3208
int NfsPluginHandler::deinitRecordCacheDetailInfo(void *p)
2853
DBUG_ENTER("deinitRecordCacheDetail");
3210
DBUG_ENTER("deinitRecordCacheDetailInfo");
2854
3211
DBUG_RETURN(0);
2857
3214
//*****************************************************************************
2859
// Record cache usage summary
3216
// FALCON_RECORD_CACHE_SUMMARY
2861
3218
//*****************************************************************************
2863
int NfsPluginHandler::call_fillRecordCacheSummaryTable(THD *thd, TABLE_LIST *tables, COND *cond)
3220
int NfsPluginHandler::getRecordCacheSummaryInfo(THD *thd, TABLE_LIST *tables, COND *cond)
2865
3222
InfoTableImpl infoTable(thd, tables, system_charset_info);
2881
3238
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
2884
int NfsPluginHandler::initRecordCacheSummary(void *p)
3241
int NfsPluginHandler::initRecordCacheSummaryInfo(void *p)
2886
DBUG_ENTER("initRecordCacheSummary");
3243
DBUG_ENTER("initRecordCacheSummaryInfo");
2887
3244
ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE *)p;
2888
3245
schema->fields_info = recordSummaryFieldInfo;
2889
schema->fill_table = NfsPluginHandler::call_fillRecordCacheSummaryTable;
3246
schema->fill_table = NfsPluginHandler::getRecordCacheSummaryInfo;
2891
3248
DBUG_RETURN(0);
2894
int NfsPluginHandler::deinitRecordCacheSummary(void *p)
3251
int NfsPluginHandler::deinitRecordCacheSummaryInfo(void *p)
2896
DBUG_ENTER("deinitRecordCacheSummary");
3253
DBUG_ENTER("deinitRecordCacheSummaryInfo");
2897
3254
DBUG_RETURN(0);
2900
3257
//*****************************************************************************
3259
// FALCON_TABLESPACE_IO
2904
3261
//*****************************************************************************
2906
int NfsPluginHandler::call_fillDatabaseIOTable(THD *thd, TABLE_LIST *tables, COND *cond)
3263
int NfsPluginHandler::getTableSpaceIOInfo(THD *thd, TABLE_LIST *tables, COND *cond)
2908
3265
InfoTableImpl infoTable(thd, tables, system_charset_info);
2925
3282
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
2928
int NfsPluginHandler::initDatabaseIO(void *p)
2930
DBUG_ENTER("initDatabaseIO");
2931
ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE *)p;
2932
schema->fields_info = databaseIOFieldInfo;
2933
schema->fill_table = NfsPluginHandler::call_fillDatabaseIOTable;
2938
int NfsPluginHandler::deinitDatabaseIO(void *p)
2940
DBUG_ENTER("deinitDatabaseIO");
2944
int NfsPluginHandler::callTablesInfo(THD *thd, TABLE_LIST *tables, COND *cond)
3285
int NfsPluginHandler::initTableSpaceIOInfo(void *p)
3287
DBUG_ENTER("initTableSpaceIOInfo");
3288
ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE *)p;
3289
schema->fields_info = tableSpaceIOFieldInfo;
3290
schema->fill_table = NfsPluginHandler::getTableSpaceIOInfo;
3295
int NfsPluginHandler::deinitTableSpaceIOInfo(void *p)
3297
DBUG_ENTER("deinitTableSpaceIOInfo");
3301
//*****************************************************************************
3303
// FALCON_TABLESPACES
3305
//*****************************************************************************
3307
int NfsPluginHandler::getTableSpaceInfo(THD *thd, TABLE_LIST *tables, COND *cond)
3309
InfoTableImpl infoTableSpace(thd, tables, system_charset_info);
3312
storageHandler->getTableSpaceInfo(&infoTableSpace);
3314
return infoTableSpace.error;
3317
ST_FIELD_INFO tableSpaceFieldInfo[]=
3319
{"TABLESPACE_NAME", 127, MYSQL_TYPE_STRING, 0, 0, "TableSpace Name", SKIP_OPEN_TABLE},
3320
{"TYPE", 127, MYSQL_TYPE_STRING, 0, 0, "Type", SKIP_OPEN_TABLE},
3321
{"COMMENT", 127, MYSQL_TYPE_STRING, 0, 0, "Comment", SKIP_OPEN_TABLE},
3322
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
3325
int NfsPluginHandler::initTableSpaceInfo(void *p)
3327
DBUG_ENTER("initTableSpaceInfo");
3328
ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE *)p;
3329
schema->fields_info = tableSpaceFieldInfo;
3330
schema->fill_table = NfsPluginHandler::getTableSpaceInfo;
3335
int NfsPluginHandler::deinitTableSpaceInfo(void *p)
3337
DBUG_ENTER("deinitTableSpaceInfo");
3341
//*****************************************************************************
3343
// FALCON_TABLESPACE_FILES
3345
//*****************************************************************************
3347
int NfsPluginHandler::getTableSpaceFilesInfo(THD *thd, TABLE_LIST *tables, COND *cond)
3349
InfoTableImpl infoTableSpace(thd, tables, system_charset_info);
3352
storageHandler->getTableSpaceFilesInfo(&infoTableSpace);
3354
return infoTableSpace.error;
3357
ST_FIELD_INFO tableSpaceFilesFieldInfo[]=
3359
{"TABLESPACE_NAME", 127, MYSQL_TYPE_STRING, 0, 0, "TableSpace Name", SKIP_OPEN_TABLE},
3360
{"TYPE", 127, MYSQL_TYPE_STRING, 0, 0, "Type", SKIP_OPEN_TABLE},
3361
{"FILE_ID", 127, MYSQL_TYPE_LONG, 0, 0, "File ID", SKIP_OPEN_TABLE},
3362
{"FILE_NAME", 127, MYSQL_TYPE_STRING, 0, 0, "File Name", SKIP_OPEN_TABLE},
3363
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
3366
int NfsPluginHandler::initTableSpaceFilesInfo(void *p)
3368
DBUG_ENTER("initTableSpaceFilesInfo");
3369
ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE *)p;
3370
schema->fields_info = tableSpaceFilesFieldInfo;
3371
schema->fill_table = NfsPluginHandler::getTableSpaceFilesInfo;
3376
int NfsPluginHandler::deinitTableSpaceFilesInfo(void *p)
3378
DBUG_ENTER("deinitTableSpaceFilesInfo");
3382
//*****************************************************************************
3386
//*****************************************************************************
3388
int NfsPluginHandler::getTablesInfo(THD *thd, TABLE_LIST *tables, COND *cond)
2946
3390
InfoTableImpl infoTable(thd, tables, system_charset_info);
3351
3828
static st_mysql_information_schema falcon_system_memory_summary = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3352
3829
static st_mysql_information_schema falcon_record_cache_detail = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3353
3830
static st_mysql_information_schema falcon_record_cache_summary = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3354
static st_mysql_information_schema falcon_database_io = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3355
static st_mysql_information_schema falcon_transaction_info = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3356
static st_mysql_information_schema falcon_transaction_summary_info= { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3357
static st_mysql_information_schema falcon_sync_info = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3831
static st_mysql_information_schema falcon_tablespace_io = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3832
static st_mysql_information_schema falcon_transactions = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3833
static st_mysql_information_schema falcon_transaction_summary = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3834
static st_mysql_information_schema falcon_syncobjects = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3358
3835
static st_mysql_information_schema falcon_serial_log_info = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3836
static st_mysql_information_schema falcon_tablespaces = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3837
static st_mysql_information_schema falcon_tablespace_files = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3359
3838
static st_mysql_information_schema falcon_tables = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3360
3839
static st_mysql_information_schema falcon_version = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
3529
4008
MYSQL_INFORMATION_SCHEMA_PLUGIN,
4009
&falcon_tablespaces,
4010
"FALCON_TABLESPACES",
4012
"Falcon TableSpaces.",
4014
NfsPluginHandler::initTableSpaceInfo, /* plugin init */
4015
NfsPluginHandler::deinitTableSpaceInfo, /* plugin deinit */
4017
NULL, /* status variables */
4018
NULL, /* system variables */
4019
NULL /* config options */
4023
MYSQL_INFORMATION_SCHEMA_PLUGIN,
4024
&falcon_tablespace_files,
4025
"FALCON_TABLESPACE_FILES",
4027
"Falcon TableSpace Files.",
4029
NfsPluginHandler::initTableSpaceFilesInfo, /* plugin init */
4030
NfsPluginHandler::deinitTableSpaceFilesInfo,/* plugin deinit */
4032
NULL, /* status variables */
4033
NULL, /* system variables */
4034
NULL /* config options */
4038
MYSQL_INFORMATION_SCHEMA_PLUGIN,
3530
4039
&falcon_tables,
3531
4040
"FALCON_TABLES",