225
237
Discrete_interval auto_inc_interval_for_cur_row;
227
Cursor(plugin::StorageEngine &engine_arg, Table &share_arg);
228
virtual ~Cursor(void);
229
virtual Cursor *clone(memory::Root *mem_root);
239
handler(StorageEngine *engine_arg, TableShare *share_arg)
240
:table_share(share_arg), table(0),
241
estimation_rows_to_insert(0), engine(engine_arg),
242
ref(0), in_range_check_pushed_down(false),
243
key_used_on_scan(MAX_KEY), active_index(MAX_KEY),
244
ref_length(sizeof(my_off_t)),
246
locked(false), implicit_emptied(0),
247
pushed_cond(0), pushed_idx_cond(NULL), pushed_idx_cond_keyno(MAX_KEY),
248
next_insert_id(0), insert_id_for_cur_row(0)
250
virtual ~handler(void);
251
virtual handler *clone(MEM_ROOT *mem_root);
252
/** This is called after create to allow us to set up cached variables */
255
cached_table_flags= table_flags();
231
258
/* ha_ methods: pubilc wrappers for private virtual API */
233
int ha_open(const TableIdentifier &identifier, int mode, int test_if_locked);
234
int startIndexScan(uint32_t idx, bool sorted);
236
int startTableScan(bool scan);
260
int ha_open(Table *table, const char *name, int mode, int test_if_locked);
261
int ha_index_init(uint32_t idx, bool sorted);
263
int ha_rnd_init(bool scan);
240
267
/* this is necessary in many places, e.g. in HANDLER command */
241
268
int ha_index_or_rnd_end();
269
Table_flags ha_table_flags() const;
244
272
These functions represent the public interface to *users* of the
245
Cursor class, hence they are *not* virtual. For the inheritance
246
interface, see the (private) functions doInsertRecord(), doUpdateRecord(),
247
and doDeleteRecord() below.
273
handler class, hence they are *not* virtual. For the inheritance
274
interface, see the (private) functions write_row(), update_row(),
275
and delete_row() below.
249
277
int ha_external_lock(Session *session, int lock_type);
250
int insertRecord(unsigned char * buf);
251
int updateRecord(const unsigned char * old_data, unsigned char * new_data);
252
int deleteRecord(const unsigned char * buf);
278
int ha_write_row(unsigned char * buf);
279
int ha_update_row(const unsigned char * old_data, unsigned char * new_data);
280
int ha_delete_row(const unsigned char * buf);
253
281
void ha_release_auto_increment();
255
283
/** to be actually called to get 'check()' functionality*/
256
284
int ha_check(Session *session, HA_CHECK_OPT *check_opt);
285
int ha_repair(Session* session, HA_CHECK_OPT* check_opt);
258
286
void ha_start_bulk_insert(ha_rows rows);
259
287
int ha_end_bulk_insert();
288
int ha_bulk_update_row(const unsigned char *old_data, unsigned char *new_data,
289
uint32_t *dup_key_found);
260
290
int ha_delete_all_rows();
261
291
int ha_reset_auto_increment(uint64_t value);
292
int ha_optimize(Session* session, HA_CHECK_OPT* check_opt);
262
293
int ha_analyze(Session* session, HA_CHECK_OPT* check_opt);
294
bool ha_check_and_repair(Session *session);
264
295
int ha_disable_indexes(uint32_t mode);
265
296
int ha_enable_indexes(uint32_t mode);
266
297
int ha_discard_or_import_tablespace(bool discard);
267
void closeMarkForDelete(const char *name);
298
void ha_prepare_for_alter();
299
int ha_rename_table(const char *from, const char *to);
300
int ha_delete_table(const char *name);
301
void ha_drop_table(const char *name);
303
int ha_create(const char *name, Table *form, HA_CREATE_INFO *info);
269
305
void adjust_next_insert_id_after_explicit_value(uint64_t nr);
270
306
int update_auto_increment();
307
void print_keydup_error(uint32_t key_nr, const char *msg);
308
virtual void print_error(int error, myf errflag);
309
virtual bool get_error_message(int error, String *buf);
310
uint32_t get_dup_key(int error);
311
virtual void change_table_ptr(Table *table_arg, TableShare *share);
272
313
/* Estimates calculation */
273
314
virtual double scan_time(void)
464
570
virtual bool can_switch_engines(void) { return true; }
465
571
/** used in REPLACE; is > 0 if table is referred by a FOREIGN KEY */
466
virtual int get_foreign_key_list(Session *, List<ForeignKeyInfo> *)
572
virtual int get_foreign_key_list(Session *, List<FOREIGN_KEY_INFO> *)
468
574
virtual uint32_t referenced_by_foreign_key() { return 0;}
575
virtual void init_table_handle_for_HANDLER()
576
{ return; } /* prepare InnoDB for HANDLER */
469
577
virtual void free_foreign_key_create_info(char *) {}
578
/** The following can be called without an open handler */
581
If frm_error() is called then we will use this to find out what file
582
extentions exist for the storage engine. This is also used by the default
583
rename_table and delete_table method in handler.cc.
585
For engines that have two file name extentions (separate meta/index file
586
and data file), the order of elements is relevant. First element of engine
587
file name extentions array should be meta/index file extention. Second
588
element - data file extention. This order is assumed by
589
prepare_for_repair() when REPAIR Table ... USE_FRM is issued.
591
virtual const char **bas_ext() const =0;
593
virtual uint32_t index_flags(uint32_t idx, uint32_t part, bool all_parts) const =0;
595
virtual int add_index(Table *, KEY *, uint32_t)
596
{ return (HA_ERR_WRONG_COMMAND); }
597
virtual int prepare_drop_index(Table *, uint32_t *, uint32_t)
598
{ return (HA_ERR_WRONG_COMMAND); }
599
virtual int final_drop_index(Table *)
600
{ return (HA_ERR_WRONG_COMMAND); }
602
uint32_t max_record_length() const
603
{ return cmin((unsigned int)HA_MAX_REC_LENGTH, max_supported_record_length()); }
604
uint32_t max_keys() const
605
{ return cmin((unsigned int)MAX_KEY, max_supported_keys()); }
606
uint32_t max_key_parts() const
607
{ return cmin((unsigned int)MAX_REF_PARTS, max_supported_key_parts()); }
608
uint32_t max_key_length() const
609
{ return cmin((unsigned int)MAX_KEY_LENGTH, max_supported_key_length()); }
610
uint32_t max_key_part_length(void) const
611
{ return cmin((unsigned int)MAX_KEY_LENGTH, max_supported_key_part_length()); }
613
virtual uint32_t max_supported_record_length(void) const
614
{ return HA_MAX_REC_LENGTH; }
615
virtual uint32_t max_supported_keys(void) const { return 0; }
616
virtual uint32_t max_supported_key_parts(void) const { return MAX_REF_PARTS; }
617
virtual uint32_t max_supported_key_length(void) const { return MAX_KEY_LENGTH; }
618
virtual uint32_t max_supported_key_part_length(void) const { return 255; }
620
virtual bool low_byte_first(void) const { return 1; }
621
virtual uint32_t checksum(void) const { return 0; }
622
virtual bool is_crashed(void) const { return 0; }
623
virtual bool auto_repair(void) const { return 0; }
626
@note lock_count() can return > 1 if the table is MERGE or partitioned.
628
virtual uint32_t lock_count(void) const { return 1; }
472
630
Is not invoked for non-transactional temporary tables.
501
654
return memcmp(ref1, ref2, ref_length);
504
virtual bool isOrdered(void)
658
Condition pushdown to storage engines
662
Push condition down to the table handler.
664
@param cond Condition to be pushed. The condition tree must not be
665
modified by the by the caller.
668
The 'remainder' condition that caller must use to filter out records.
669
NULL means the handler will not return rows that do not match the
673
The pushed conditions form a stack (from which one can remove the
674
last pushed condition using cond_pop).
675
The table handler filters out rows using (pushed_cond1 AND pushed_cond2
676
AND ... AND pushed_condN)
677
or less restrictive condition, depending on handler's capabilities.
679
handler->ha_reset() call empties the condition stack.
680
Calls to rnd_init/rnd_end, index_init/index_end etc do not affect the
683
virtual const COND *cond_push(const COND *cond) { return cond; }
686
Pop the top condition from the condition stack of the handler instance.
688
Pops the top if condition stack, if stack is not empty.
690
virtual void cond_pop(void) { return; }
692
virtual Item *idx_cond_push(uint32_t, Item *idx_cond)
698
@param session Thread handle
699
@param lock_type HA_LOCK_IN_SHARE_MODE (F_RDLCK)
700
HA_LOCK_IN_EXCLUSIVE_MODE (F_WRLCK)
701
@param lock_timeout -1 default timeout
703
>0 wait timeout in milliseconds.
706
lock_timeout >0 is not used by MySQL currently. If the storage
707
engine does not support NOWAIT (lock_timeout == 0) it should
708
return an error. But if it does not support WAIT X (lock_timeout
709
>0) it should treat it as lock_timeout == -1 and wait a default
710
(or even hard-coded) timeout.
712
@retval HA_ERR_WRONG_COMMAND Storage engine does not support
714
@retval HA_ERR_UNSUPPORTED Storage engine does not support NOWAIT
715
@retval HA_ERR_LOCK_WAIT_TIMEOUT Lock request timed out or
716
lock conflict with NOWAIT option
717
@retval HA_ERR_LOCK_DEADLOCK Deadlock detected
719
virtual int lock_table(Session *, int, int)
721
return HA_ERR_WRONG_COMMAND;
511
725
/* Service methods for use by storage engines. */
512
void ha_statistic_increment(uint64_t system_status_var::*offset) const;
726
void ha_statistic_increment(ulong SSV::*offset) const;
513
727
void **ha_data(Session *) const;
728
Session *ha_session(void) const;
731
Default rename_table() and delete_table() rename/delete files with a
732
given name and extensions from bas_ext().
734
These methods can be overridden, but their default implementation
735
provide useful functionality.
737
virtual int rename_table(const char *from, const char *to);
739
Delete a table in the engine. Called for base as well as temporary
742
virtual int delete_table(const char *name);
516
745
/* Private helpers */
517
inline void setTransactionReadWrite();
746
inline void mark_trx_read_write();
520
749
Low-level primitives for storage engines. These should be
613
869
virtual int reset_auto_increment(uint64_t)
614
870
{ return HA_ERR_WRONG_COMMAND; }
616
virtual int analyze(Session *)
617
{ return HA_ADMIN_NOT_IMPLEMENTED; }
871
virtual int optimize(Session *, HA_CHECK_OPT *)
872
{ return HA_ADMIN_NOT_IMPLEMENTED; }
873
virtual int analyze(Session *, HA_CHECK_OPT *)
874
{ return HA_ADMIN_NOT_IMPLEMENTED; }
875
virtual bool check_and_repair(Session *)
619
877
virtual int disable_indexes(uint32_t)
620
878
{ return HA_ERR_WRONG_COMMAND; }
622
879
virtual int enable_indexes(uint32_t)
623
880
{ return HA_ERR_WRONG_COMMAND; }
625
881
virtual int discard_or_import_tablespace(bool)
626
{ return (errno=HA_ERR_WRONG_COMMAND); }
629
@todo this is just for the HEAP engine, it should
630
be removed at some point in the future (and
631
no new engine should ever use it). Right
632
now HEAP does rely on it, so we cannot remove it.
882
{ return (my_errno=HA_ERR_WRONG_COMMAND); }
883
virtual void prepare_for_alter(void) { return; }
634
884
virtual void drop_table(const char *name);
885
virtual int create(const char *, Table *, HA_CREATE_INFO *)=0;
891
A Disk-Sweep MRR interface implementation
893
This implementation makes range (and, in the future, 'ref') scans to read
894
table rows in disk sweeps.
896
Currently it is used by MyISAM and InnoDB. Potentially it can be used with
897
any table handler that has non-clustered indexes and on-disk rows.
903
typedef void (handler::*range_check_toggle_func_t)(bool on);
908
handler *h; /* The "owner" handler object. It is used for scanning the index */
909
Table *table; /* Always equal to h->table */
912
Secondary handler object. It is used to retrieve full table rows by
917
/* Buffer to store rowids, or (rowid, range_id) pairs */
918
unsigned char *rowids_buf;
919
unsigned char *rowids_buf_cur; /* Current position when reading/writing */
920
unsigned char *rowids_buf_last; /* When reading: end of used buffer space */
921
unsigned char *rowids_buf_end; /* End of the buffer */
923
bool dsmrr_eof; /* true <=> We have reached EOF when reading index tuples */
925
/* true <=> need range association, buffer holds {rowid, range_id} pairs */
928
bool use_default_impl; /* true <=> shortcut all calls to default MRR impl */
930
void init(handler *h_arg, Table *table_arg)
935
int dsmrr_init(handler *h, KEY *key, RANGE_SEQ_IF *seq_funcs,
936
void *seq_init_param, uint32_t n_ranges, uint32_t mode,
937
HANDLER_BUFFER *buf);
939
int dsmrr_fill_buffer(handler *h);
940
int dsmrr_next(handler *h, char **range_info);
942
int dsmrr_info(uint32_t keyno, uint32_t n_ranges, uint32_t keys, uint32_t *bufsz,
943
uint32_t *flags, COST_VECT *cost);
945
ha_rows dsmrr_info_const(uint32_t keyno, RANGE_SEQ_IF *seq,
946
void *seq_init_param, uint32_t n_ranges, uint32_t *bufsz,
947
uint32_t *flags, COST_VECT *cost);
949
bool key_uses_partial_cols(uint32_t keyno);
950
bool choose_mrr_impl(uint32_t keyno, ha_rows rows, uint32_t *flags, uint32_t *bufsz,
952
bool get_disk_sweep_mrr_cost(uint32_t keynr, ha_rows rows, uint32_t flags,
953
uint32_t *buffer_size, COST_VECT *cost);
637
956
extern const char *ha_row_type[];
957
extern const char *tx_isolation_names[];
958
extern const char *binlog_format_names[];
959
extern TYPELIB tx_isolation_typelib;
960
extern TYPELIB myisam_stats_method_typelib;
961
extern uint32_t total_ha, total_ha_2pc;
963
/* Wrapper functions */
964
#define ha_commit(session) (ha_commit_trans((session), true))
965
#define ha_rollback(session) (ha_rollback_trans((session), true))
639
967
/* basic stuff */
640
void ha_init_errors(void);
643
SortField *make_unireg_sortorder(Order *order, uint32_t *length,
644
SortField *sortorder);
968
int ha_init_errors(void);
972
void add_storage_engine(StorageEngine *engine);
973
void remove_storage_engine(StorageEngine *engine);
975
void ha_close_connection(Session* session);
976
bool ha_flush_logs(StorageEngine *db_type);
977
void ha_drop_database(char* path);
978
int ha_create_table(Session *session, const char *path,
979
const char *db, const char *table_name,
980
HA_CREATE_INFO *create_info,
981
bool update_create_info);
982
int ha_delete_table(Session *session, const char *path,
983
const char *db, const char *alias, bool generate_warning);
985
/* statistics and info */
986
bool ha_show_status(Session *session, StorageEngine *db_type, enum ha_stat_type stat);
988
int ha_find_files(Session *session,const char *db,const char *path,
989
const char *wild, bool dir, List<LEX_STRING>* files);
990
int ha_table_exists_in_engine(Session* session, const char* db, const char* name, StorageEngine **engine= NULL);
993
extern "C" int ha_init_key_cache(const char *name, KEY_CACHE *key_cache);
994
int ha_resize_key_cache(KEY_CACHE *key_cache);
995
int ha_change_key_cache_param(KEY_CACHE *key_cache);
996
int ha_change_key_cache(KEY_CACHE *old_key_cache, KEY_CACHE *new_key_cache);
997
int ha_end_key_cache(KEY_CACHE *key_cache);
999
/* report to InnoDB that control passes to the client */
1000
int ha_release_temporary_latches(Session *session);
1002
/* transactions: interface to StorageEngine functions */
1003
int ha_start_consistent_snapshot(Session *session);
1004
int ha_commit_or_rollback_by_xid(XID *xid, bool commit);
1005
int ha_commit_one_phase(Session *session, bool all);
1006
int ha_rollback_trans(Session *session, bool all);
1007
int ha_prepare(Session *session);
1008
int ha_recover(HASH *commit_list);
1010
/* transactions: these functions never call StorageEngine functions directly */
1011
int ha_commit_trans(Session *session, bool all);
1012
int ha_autocommit_or_rollback(Session *session, int error);
1013
int ha_enable_transaction(Session *session, bool on);
1016
int ha_rollback_to_savepoint(Session *session, SAVEPOINT *sv);
1017
int ha_savepoint(Session *session, SAVEPOINT *sv);
1018
int ha_release_savepoint(Session *session, SAVEPOINT *sv);
1020
/* these are called by storage engines */
1021
void trans_register_ha(Session *session, bool all, StorageEngine *engine);
1023
uint32_t filename_to_tablename(const char *from, char *to, uint32_t to_length);
1024
uint32_t tablename_to_filename(const char *from, char *to, uint32_t to_length);
1027
bool mysql_ha_open(Session *session, TableList *tables, bool reopen);
1028
bool mysql_ha_close(Session *session, TableList *tables);
1029
bool mysql_ha_read(Session *, TableList *,enum enum_ha_read_modes,char *,
1030
List<Item> *,enum ha_rkey_function,Item *,ha_rows,ha_rows);
1031
void mysql_ha_flush(Session *session);
1032
void mysql_ha_rm_tables(Session *session, TableList *tables, bool is_locked);
1033
void mysql_ha_cleanup(Session *session);
1036
Storage engine has to assume the transaction will end up with 2pc if
1037
- there is more than one 2pc-capable storage engine available
1038
- in the current transaction 2pc was not disabled yet
1040
#define trans_need_2pc(session, all) ((total_ha_2pc > 1) && \
1041
!((all ? &session->transaction.all : &session->transaction.stmt)->no_2pc))
1044
bool mysql_xa_recover(Session *session);
1046
SORT_FIELD * make_unireg_sortorder(order_st *order, uint32_t *length,
1047
SORT_FIELD *sortorder);
645
1048
int setup_order(Session *session, Item **ref_pointer_array, TableList *tables,
646
List<Item> &fields, List <Item> &all_fields, Order *order);
1049
List<Item> &fields, List <Item> &all_fields, order_st *order);
647
1050
int setup_group(Session *session, Item **ref_pointer_array, TableList *tables,
648
List<Item> &fields, List<Item> &all_fields, Order *order,
1051
List<Item> &fields, List<Item> &all_fields, order_st *order,
649
1052
bool *hidden_group_fields);
650
1053
bool fix_inner_refs(Session *session, List<Item> &all_fields, Select_Lex *select,
651
1054
Item **ref_pointer_array);
653
1056
bool handle_select(Session *session, LEX *lex, select_result *result,
654
1057
uint64_t setup_tables_done_option);
1058
bool mysql_select(Session *session, Item ***rref_pointer_array,
1059
TableList *tables, uint32_t wild_num, List<Item> &list,
1060
COND *conds, uint32_t og_num, order_st *order, order_st *group,
1061
Item *having, uint64_t select_type,
1062
select_result *result, Select_Lex_Unit *unit,
1063
Select_Lex *select_lex);
655
1064
void free_underlaid_joins(Session *session, Select_Lex *select);
1065
bool mysql_explain_union(Session *session, Select_Lex_Unit *unit,
1066
select_result *result);
1067
int mysql_explain_select(Session *session, Select_Lex *sl, char const *type,
1068
select_result *result);
657
1070
bool mysql_handle_derived(LEX *lex, bool (*processor)(Session *session,
659
1072
TableList *table));
660
1073
bool mysql_derived_prepare(Session *session, LEX *lex, TableList *t);
661
1074
bool mysql_derived_filling(Session *session, LEX *lex, TableList *t);
662
int prepare_create_field(CreateField *sql_field,
1075
void sp_prepare_create_field(Session *session, Create_field *sql_field);
1076
int prepare_create_field(Create_field *sql_field,
663
1077
uint32_t *blob_columns,
664
int *timestamps, int *timestamps_with_niladic);
666
bool mysql_create_table(Session *session,
667
const TableIdentifier &identifier,
1078
int *timestamps, int *timestamps_with_niladic,
1079
int64_t table_flags);
1080
bool mysql_create_table(Session *session,const char *db, const char *table_name,
668
1081
HA_CREATE_INFO *create_info,
669
message::Table &table_proto,
670
AlterInfo *alter_info,
671
bool tmp_table, uint32_t select_field_count,
672
bool is_if_not_exists);
674
bool mysql_create_table_no_lock(Session *session,
675
const TableIdentifier &identifier,
1082
drizzled::message::Table *table_proto,
1083
Alter_info *alter_info,
1084
bool tmp_table, uint32_t select_field_count);
1085
bool mysql_create_table_no_lock(Session *session, const char *db,
1086
const char *table_name,
676
1087
HA_CREATE_INFO *create_info,
677
message::Table &table_proto,
678
AlterInfo *alter_info,
679
bool tmp_table, uint32_t select_field_count,
680
bool is_if_not_exists);
682
bool mysql_create_like_table(Session* session,
683
const TableIdentifier &destination_identifier,
684
TableList* table, TableList* src_table,
685
message::Table &create_table_proto,
686
bool is_if_not_exists,
689
bool mysql_rename_table(Session &session,
690
plugin::StorageEngine *base,
691
const TableIdentifier &old_identifier,
692
const TableIdentifier &new_identifier);
1088
drizzled::message::Table *table_proto,
1089
Alter_info *alter_info,
1090
bool tmp_table, uint32_t select_field_count);
1092
bool mysql_alter_table(Session *session, char *new_db, char *new_name,
1093
HA_CREATE_INFO *create_info,
1094
TableList *table_list,
1095
Alter_info *alter_info,
1096
uint32_t order_num, order_st *order, bool ignore);
1097
bool mysql_recreate_table(Session *session, TableList *table_list);
1098
bool mysql_create_like_table(Session *session, TableList *table,
1099
TableList *src_table,
1100
HA_CREATE_INFO *create_info);
1101
bool mysql_rename_table(StorageEngine *base, const char *old_db,
1102
const char * old_name, const char *new_db,
1103
const char * new_name, uint32_t flags);
694
1104
bool mysql_prepare_update(Session *session, TableList *table_list,
695
Item **conds, uint32_t order_num, Order *order);
1105
Item **conds, uint32_t order_num, order_st *order);
696
1106
int mysql_update(Session *session,TableList *tables,List<Item> &fields,
697
1107
List<Item> &values,COND *conds,
698
uint32_t order_num, Order *order, ha_rows limit,
1108
uint32_t order_num, order_st *order, ha_rows limit,
699
1109
enum enum_duplicates handle_duplicates, bool ignore);
1110
bool mysql_multi_update(Session *session, TableList *table_list,
1111
List<Item> *fields, List<Item> *values,
1112
COND *conds, uint64_t options,
1113
enum enum_duplicates handle_duplicates, bool ignore,
1114
Select_Lex_Unit *unit, Select_Lex *select_lex);
700
1115
bool mysql_prepare_insert(Session *session, TableList *table_list, Table *table,
701
1116
List<Item> &fields, List_item *values,
702
1117
List<Item> &update_fields,
713
1128
bool mysql_delete(Session *session, TableList *table_list, COND *conds,
714
1129
SQL_LIST *order, ha_rows rows, uint64_t options,
715
1130
bool reset_auto_increment);
716
bool mysql_truncate(Session& session, TableList *table_list);
1131
bool mysql_truncate(Session *session, TableList *table_list, bool dont_send_ok);
1132
uint32_t create_table_def_key(char *key, TableList *table_list);
717
1133
TableShare *get_table_share(Session *session, TableList *table_list, char *key,
718
1134
uint32_t key_length, uint32_t db_flags, int *error);
1135
void release_table_share(TableShare *share, enum release_type type);
719
1136
TableShare *get_cached_table_share(const char *db, const char *table_name);
1137
Table *open_ltable(Session *session, TableList *table_list, thr_lock_type update,
1138
uint32_t lock_flags);
1139
Table *open_table(Session *session, TableList *table_list, bool *refresh, uint32_t flags);
1140
bool name_lock_locked_table(Session *session, TableList *tables);
720
1141
bool reopen_name_locked_table(Session* session, TableList* table_list, bool link_in);
1142
Table *table_cache_insert_placeholder(Session *session, const char *key,
1143
uint32_t key_length);
1144
bool lock_table_name_if_not_cached(Session *session, const char *db,
1145
const char *table_name, Table **table);
1146
Table *find_locked_table(Session *session, const char *db,const char *table_name);
1147
void detach_merge_children(Table *table, bool clear_refs);
1148
bool fix_merge_after_open(TableList *old_child_list, TableList **old_last,
1149
TableList *new_child_list, TableList **new_last);
1150
bool reopen_table(Table *table);
721
1151
bool reopen_tables(Session *session,bool get_locks,bool in_refresh);
1152
void close_data_files_and_morph_locks(Session *session, const char *db,
1153
const char *table_name);
722
1154
void close_handle_and_leave_table_as_lock(Table *table);
1155
bool open_new_frm(Session *session, TableShare *share, const char *alias,
1156
uint32_t db_stat, uint32_t prgflag,
1157
uint32_t ha_open_flags, Table *outparam,
1158
TableList *table_desc, MEM_ROOT *mem_root);
723
1159
bool wait_for_tables(Session *session);
724
1160
bool table_is_used(Table *table, bool wait_for_name_lock);
725
Table *drop_locked_tables(Session *session, const drizzled::TableIdentifier &identifier);
726
void abort_locked_tables(Session *session, const drizzled::TableIdentifier &identifier);
1161
Table *drop_locked_tables(Session *session,const char *db, const char *table_name);
1162
void abort_locked_tables(Session *session,const char *db, const char *table_name);
727
1163
extern Field *not_found_field;
728
1164
extern Field *view_ref_found;