226
231
Discrete_interval auto_inc_interval_for_cur_row;
228
Cursor(plugin::StorageEngine &engine_arg, Table &share_arg);
229
virtual ~Cursor(void);
230
virtual Cursor *clone(memory::Root *mem_root);
233
handler(handlerton *ht_arg, TABLE_SHARE *share_arg)
234
:table_share(share_arg), table(0),
235
estimation_rows_to_insert(0), ht(ht_arg),
236
ref(0), in_range_check_pushed_down(false),
237
key_used_on_scan(MAX_KEY), active_index(MAX_KEY),
238
ref_length(sizeof(my_off_t)),
240
locked(false), implicit_emptied(0),
241
pushed_cond(0), pushed_idx_cond(NULL), pushed_idx_cond_keyno(MAX_KEY),
242
next_insert_id(0), insert_id_for_cur_row(0)
244
virtual ~handler(void)
246
assert(locked == false);
247
/* TODO: assert(inited == NONE); */
249
virtual handler *clone(MEM_ROOT *mem_root);
250
/** This is called after create to allow us to set up cached variables */
253
cached_table_flags= table_flags();
232
256
/* ha_ methods: pubilc wrappers for private virtual API */
234
int ha_open(const identifier::Table &identifier, int mode, int test_if_locked);
235
int startIndexScan(uint32_t idx, bool sorted) __attribute__ ((warn_unused_result));
237
int startTableScan(bool scan) __attribute__ ((warn_unused_result));
258
int ha_open(Table *table, const char *name, int mode, int test_if_locked);
259
int ha_index_init(uint32_t idx, bool sorted);
261
int ha_rnd_init(bool scan);
241
265
/* this is necessary in many places, e.g. in HANDLER command */
242
266
int ha_index_or_rnd_end();
267
Table_flags ha_table_flags() const;
245
270
These functions represent the public interface to *users* of the
246
Cursor class, hence they are *not* virtual. For the inheritance
247
interface, see the (private) functions doInsertRecord(), doUpdateRecord(),
248
and doDeleteRecord() below.
271
handler class, hence they are *not* virtual. For the inheritance
272
interface, see the (private) functions write_row(), update_row(),
273
and delete_row() below.
250
275
int ha_external_lock(Session *session, int lock_type);
251
int insertRecord(unsigned char * buf) __attribute__ ((warn_unused_result));
252
int updateRecord(const unsigned char * old_data, unsigned char * new_data) __attribute__ ((warn_unused_result));
253
int deleteRecord(const unsigned char * buf) __attribute__ ((warn_unused_result));
276
int ha_write_row(unsigned char * buf);
277
int ha_update_row(const unsigned char * old_data, unsigned char * new_data);
278
int ha_delete_row(const unsigned char * buf);
254
279
void ha_release_auto_increment();
281
int ha_check_for_upgrade(HA_CHECK_OPT *check_opt);
256
282
/** to be actually called to get 'check()' functionality*/
257
283
int ha_check(Session *session, HA_CHECK_OPT *check_opt);
284
int ha_repair(Session* session, HA_CHECK_OPT* check_opt);
259
285
void ha_start_bulk_insert(ha_rows rows);
260
286
int ha_end_bulk_insert();
287
int ha_bulk_update_row(const unsigned char *old_data, unsigned char *new_data,
288
uint32_t *dup_key_found);
261
289
int ha_delete_all_rows();
262
290
int ha_reset_auto_increment(uint64_t value);
291
int ha_optimize(Session* session, HA_CHECK_OPT* check_opt);
263
292
int ha_analyze(Session* session, HA_CHECK_OPT* check_opt);
293
bool ha_check_and_repair(Session *session);
265
294
int ha_disable_indexes(uint32_t mode);
266
295
int ha_enable_indexes(uint32_t mode);
267
296
int ha_discard_or_import_tablespace(bool discard);
268
void closeMarkForDelete(const char *name);
297
void ha_prepare_for_alter();
298
int ha_rename_table(const char *from, const char *to);
299
int ha_delete_table(const char *name);
300
void ha_drop_table(const char *name);
302
int ha_create(const char *name, Table *form, HA_CREATE_INFO *info);
304
int ha_create_handler_files(const char *name, const char *old_name,
305
int action_flag, HA_CREATE_INFO *info);
270
307
void adjust_next_insert_id_after_explicit_value(uint64_t nr);
271
308
int update_auto_increment();
309
void print_keydup_error(uint32_t key_nr, const char *msg);
310
virtual void print_error(int error, myf errflag);
311
virtual bool get_error_message(int error, String *buf);
312
uint32_t get_dup_key(int error);
313
virtual void change_table_ptr(Table *table_arg, TABLE_SHARE *share);
273
315
/* Estimates calculation */
274
316
virtual double scan_time(void)
275
{ return static_cast<double>(stats.data_file_length) / IO_SIZE + 2; }
317
{ return uint64_t2double(stats.data_file_length) / IO_SIZE + 2; }
276
318
virtual double read_time(uint32_t, uint32_t ranges, ha_rows rows)
277
{ return ranges + rows; }
319
{ return rows2double(ranges+rows); }
279
321
virtual double index_only_read_time(uint32_t keynr, double records);
281
323
virtual ha_rows multi_range_read_info_const(uint32_t keyno, RANGE_SEQ_IF *seq,
282
324
void *seq_init_param,
283
325
uint32_t n_ranges, uint32_t *bufsz,
284
uint32_t *flags, optimizer::CostVector *cost);
326
uint32_t *flags, COST_VECT *cost);
285
327
virtual int multi_range_read_info(uint32_t keyno, uint32_t n_ranges, uint32_t keys,
286
uint32_t *bufsz, uint32_t *flags, optimizer::CostVector *cost);
328
uint32_t *bufsz, uint32_t *flags, COST_VECT *cost);
287
329
virtual int multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param,
288
uint32_t n_ranges, uint32_t mode);
330
uint32_t n_ranges, uint32_t mode,
331
HANDLER_BUFFER *buf);
289
332
virtual int multi_range_read_next(char **range_info);
502
679
return memcmp(ref1, ref2, ref_length);
505
virtual bool isOrdered(void)
683
Condition pushdown to storage engines
687
Push condition down to the table handler.
689
@param cond Condition to be pushed. The condition tree must not be
690
modified by the by the caller.
693
The 'remainder' condition that caller must use to filter out records.
694
NULL means the handler will not return rows that do not match the
698
The pushed conditions form a stack (from which one can remove the
699
last pushed condition using cond_pop).
700
The table handler filters out rows using (pushed_cond1 AND pushed_cond2
701
AND ... AND pushed_condN)
702
or less restrictive condition, depending on handler's capabilities.
704
handler->ha_reset() call empties the condition stack.
705
Calls to rnd_init/rnd_end, index_init/index_end etc do not affect the
708
virtual const COND *cond_push(const COND *cond) { return cond; }
711
Pop the top condition from the condition stack of the handler instance.
713
Pops the top if condition stack, if stack is not empty.
715
virtual void cond_pop(void) { return; }
717
virtual Item *idx_cond_push(uint32_t, Item *idx_cond)
721
Part of old fast alter table, to be depricated
724
check_if_incompatible_data(HA_CREATE_INFO *, uint32_t)
725
{ return COMPATIBLE_DATA_NO; }
727
/* On-line ALTER Table interface */
730
Check if a storage engine supports a particular alter table on-line
732
@param altered_table A temporary table show what table is to
734
@param create_info Information from the parsing phase about new
736
@param alter_flags Bitmask that shows what will be changed
737
@param table_changes Shows if table layout has changed (for
738
backwards compatibility with
739
check_if_incompatible_data
741
@retval HA_ALTER_ERROR Unexpected error
742
@retval HA_ALTER_SUPPORTED_WAIT_LOCK Supported, but requires DDL lock
743
@retval HA_ALTER_SUPPORTED_NO_LOCK Supported
744
@retval HA_ALTER_NOT_SUPPORTED Not supported
747
The default implementation is implemented to support fast
748
alter table (storage engines that support some changes by
749
just changing the frm file) without any change in the handler
752
virtual int check_if_supported_alter(Table *, HA_CREATE_INFO *create_info,
753
HA_ALTER_FLAGS * alter_flags, uint32_t table_changes)
755
if (this->check_if_incompatible_data(create_info, table_changes)
756
== COMPATIBLE_DATA_NO)
757
return(HA_ALTER_NOT_SUPPORTED);
758
else if ((*alter_flags & HA_ALTER_STORED_VCOL).is_set())
759
return(HA_ALTER_NOT_SUPPORTED);
761
return(HA_ALTER_SUPPORTED_WAIT_LOCK);
764
Tell storage engine to prepare for the on-line alter table (pre-alter)
766
@param session The thread handle
767
@param altered_table A temporary table show what table is to
769
@param alter_info Storage place for data used during phase1
771
@param alter_flags Bitmask that shows what will be changed
774
@retval error error code passed from storage engine
776
virtual int alter_table_phase1(Session *, Table *, HA_CREATE_INFO *, HA_ALTER_INFO *,
779
return HA_ERR_UNSUPPORTED;
782
Tell storage engine to perform the on-line alter table (alter)
784
@param session The thread handle
785
@param altered_table A temporary table show what table is to
787
@param alter_info Storage place for data used during phase1
789
@param alter_flags Bitmask that shows what will be changed
792
@retval error error code passed from storage engine
795
If check_if_supported_alter returns HA_ALTER_SUPPORTED_WAIT_LOCK
796
this call is to be wrapped with a DDL lock. This is currently NOT
799
virtual int alter_table_phase2(Session *, Table *, HA_CREATE_INFO *, HA_ALTER_INFO *,
802
return HA_ERR_UNSUPPORTED;
805
Tell storage engine that changed frm file is now on disk and table
806
has been re-opened (post-alter)
808
@param session The thread handle
809
@param table The altered table, re-opened
811
virtual int alter_table_phase3(Session *, Table *)
813
return HA_ERR_UNSUPPORTED;
817
use_hidden_primary_key() is called in case of an update/delete when
818
(table_flags() and HA_PRIMARY_KEY_REQUIRED_FOR_DELETE) is defined
819
but we don't have a primary key
821
virtual void use_hidden_primary_key();
826
@param session Thread handle
827
@param lock_type HA_LOCK_IN_SHARE_MODE (F_RDLCK)
828
HA_LOCK_IN_EXCLUSIVE_MODE (F_WRLCK)
829
@param lock_timeout -1 default timeout
831
>0 wait timeout in milliseconds.
834
lock_timeout >0 is not used by MySQL currently. If the storage
835
engine does not support NOWAIT (lock_timeout == 0) it should
836
return an error. But if it does not support WAIT X (lock_timeout
837
>0) it should treat it as lock_timeout == -1 and wait a default
838
(or even hard-coded) timeout.
840
@retval HA_ERR_WRONG_COMMAND Storage engine does not support
842
@retval HA_ERR_UNSUPPORTED Storage engine does not support NOWAIT
843
@retval HA_ERR_LOCK_WAIT_TIMEOUT Lock request timed out or
844
lock conflict with NOWAIT option
845
@retval HA_ERR_LOCK_DEADLOCK Deadlock detected
847
virtual int lock_table(Session *, int, int)
849
return HA_ERR_WRONG_COMMAND;
852
This procedure defines if the storage engine supports virtual columns.
853
Default false means "not supported".
855
virtual bool check_if_supported_virtual_columns(void)
512
859
/* Service methods for use by storage engines. */
513
void ha_statistic_increment(uint64_t system_status_var::*offset) const;
860
void ha_statistic_increment(ulong SSV::*offset) const;
514
861
void **ha_data(Session *) const;
862
Session *ha_session(void) const;
865
Default rename_table() and delete_table() rename/delete files with a
866
given name and extensions from bas_ext().
868
These methods can be overridden, but their default implementation
869
provide useful functionality.
871
virtual int rename_table(const char *from, const char *to);
873
Delete a table in the engine. Called for base as well as temporary
876
virtual int delete_table(const char *name);
517
879
/* Private helpers */
518
inline void setTransactionReadWrite();
880
inline void mark_trx_read_write();
521
883
Low-level primitives for storage engines. These should be
614
1003
virtual int reset_auto_increment(uint64_t)
615
1004
{ return HA_ERR_WRONG_COMMAND; }
617
virtual int analyze(Session *)
618
{ return HA_ADMIN_NOT_IMPLEMENTED; }
1005
virtual int optimize(Session *, HA_CHECK_OPT *)
1006
{ return HA_ADMIN_NOT_IMPLEMENTED; }
1007
virtual int analyze(Session *, HA_CHECK_OPT *)
1008
{ return HA_ADMIN_NOT_IMPLEMENTED; }
1009
virtual bool check_and_repair(Session *)
620
1011
virtual int disable_indexes(uint32_t)
621
1012
{ return HA_ERR_WRONG_COMMAND; }
623
1013
virtual int enable_indexes(uint32_t)
624
1014
{ return HA_ERR_WRONG_COMMAND; }
626
1015
virtual int discard_or_import_tablespace(bool)
627
{ return (errno=HA_ERR_WRONG_COMMAND); }
630
@todo this is just for the HEAP engine, it should
631
be removed at some point in the future (and
632
no new engine should ever use it). Right
633
now HEAP does rely on it, so we cannot remove it.
1016
{ return (my_errno=HA_ERR_WRONG_COMMAND); }
1017
virtual void prepare_for_alter(void) { return; }
635
1018
virtual void drop_table(const char *name);
1019
virtual int create(const char *, Table *, HA_CREATE_INFO *)=0;
1021
virtual int create_handler_files(const char *, const char *, int, HA_CREATE_INFO *)
1028
A Disk-Sweep MRR interface implementation
1030
This implementation makes range (and, in the future, 'ref') scans to read
1031
table rows in disk sweeps.
1033
Currently it is used by MyISAM and InnoDB. Potentially it can be used with
1034
any table handler that has non-clustered indexes and on-disk rows.
1040
typedef void (handler::*range_check_toggle_func_t)(bool on);
1045
handler *h; /* The "owner" handler object. It is used for scanning the index */
1046
Table *table; /* Always equal to h->table */
1049
Secondary handler object. It is used to retrieve full table rows by
1054
/* Buffer to store rowids, or (rowid, range_id) pairs */
1055
unsigned char *rowids_buf;
1056
unsigned char *rowids_buf_cur; /* Current position when reading/writing */
1057
unsigned char *rowids_buf_last; /* When reading: end of used buffer space */
1058
unsigned char *rowids_buf_end; /* End of the buffer */
1060
bool dsmrr_eof; /* true <=> We have reached EOF when reading index tuples */
1062
/* true <=> need range association, buffer holds {rowid, range_id} pairs */
1065
bool use_default_impl; /* true <=> shortcut all calls to default MRR impl */
1067
void init(handler *h_arg, Table *table_arg)
1072
int dsmrr_init(handler *h, KEY *key, RANGE_SEQ_IF *seq_funcs,
1073
void *seq_init_param, uint32_t n_ranges, uint32_t mode,
1074
HANDLER_BUFFER *buf);
1076
int dsmrr_fill_buffer(handler *h);
1077
int dsmrr_next(handler *h, char **range_info);
1079
int dsmrr_info(uint32_t keyno, uint32_t n_ranges, uint32_t keys, uint32_t *bufsz,
1080
uint32_t *flags, COST_VECT *cost);
1082
ha_rows dsmrr_info_const(uint32_t keyno, RANGE_SEQ_IF *seq,
1083
void *seq_init_param, uint32_t n_ranges, uint32_t *bufsz,
1084
uint32_t *flags, COST_VECT *cost);
1086
bool key_uses_partial_cols(uint32_t keyno);
1087
bool choose_mrr_impl(uint32_t keyno, ha_rows rows, uint32_t *flags, uint32_t *bufsz,
1089
bool get_disk_sweep_mrr_cost(uint32_t keynr, ha_rows rows, uint32_t flags,
1090
uint32_t *buffer_size, COST_VECT *cost);
638
1093
extern const char *ha_row_type[];
1094
extern const char *tx_isolation_names[];
1095
extern const char *binlog_format_names[];
1096
extern TYPELIB tx_isolation_typelib;
1097
extern TYPELIB myisam_stats_method_typelib;
1098
extern uint32_t total_ha, total_ha_2pc;
1100
/* Wrapper functions */
1101
#define ha_commit(session) (ha_commit_trans((session), true))
1102
#define ha_rollback(session) (ha_rollback_trans((session), true))
640
1104
/* basic stuff */
641
void ha_init_errors(void);
644
SortField *make_unireg_sortorder(Order *order, uint32_t *length,
645
SortField *sortorder);
1105
int ha_init_errors(void);
1108
int ha_initialize_handlerton(st_plugin_int *plugin);
1109
int ha_finalize_handlerton(st_plugin_int *plugin);
1111
TYPELIB *ha_known_exts(void);
1112
void ha_close_connection(Session* session);
1113
bool ha_flush_logs(handlerton *db_type);
1114
void ha_drop_database(char* path);
1115
int ha_create_table(Session *session, const char *path,
1116
const char *db, const char *table_name,
1117
HA_CREATE_INFO *create_info,
1118
bool update_create_info);
1119
int ha_delete_table(Session *session, const char *path,
1120
const char *db, const char *alias, bool generate_warning);
1122
/* statistics and info */
1123
bool ha_show_status(Session *session, handlerton *db_type, enum ha_stat_type stat);
1125
int ha_find_files(Session *session,const char *db,const char *path,
1126
const char *wild, bool dir, List<LEX_STRING>* files);
1127
int ha_table_exists_in_engine(Session* session, const char* db, const char* name, handlerton **hton= NULL);
1130
extern "C" int ha_init_key_cache(const char *name, KEY_CACHE *key_cache);
1131
int ha_resize_key_cache(KEY_CACHE *key_cache);
1132
int ha_change_key_cache_param(KEY_CACHE *key_cache);
1133
int ha_change_key_cache(KEY_CACHE *old_key_cache, KEY_CACHE *new_key_cache);
1134
int ha_end_key_cache(KEY_CACHE *key_cache);
1136
/* report to InnoDB that control passes to the client */
1137
int ha_release_temporary_latches(Session *session);
1139
/* transactions: interface to handlerton functions */
1140
int ha_start_consistent_snapshot(Session *session);
1141
int ha_commit_or_rollback_by_xid(XID *xid, bool commit);
1142
int ha_commit_one_phase(Session *session, bool all);
1143
int ha_rollback_trans(Session *session, bool all);
1144
int ha_prepare(Session *session);
1145
int ha_recover(HASH *commit_list);
1147
/* transactions: these functions never call handlerton functions directly */
1148
int ha_commit_trans(Session *session, bool all);
1149
int ha_autocommit_or_rollback(Session *session, int error);
1150
int ha_enable_transaction(Session *session, bool on);
1153
int ha_rollback_to_savepoint(Session *session, SAVEPOINT *sv);
1154
int ha_savepoint(Session *session, SAVEPOINT *sv);
1155
int ha_release_savepoint(Session *session, SAVEPOINT *sv);
1157
/* these are called by storage engines */
1158
void trans_register_ha(Session *session, bool all, handlerton *ht);
1160
void table_case_convert(char * name, uint32_t length);
1161
const char *table_case_name(HA_CREATE_INFO *info, const char *name);
1163
extern char reg_ext[FN_EXTLEN];
1164
extern uint32_t reg_ext_length;
1165
extern ulong specialflag;
1166
extern uint32_t lower_case_table_names;
1167
uint32_t filename_to_tablename(const char *from, char *to, uint32_t to_length);
1168
uint32_t tablename_to_filename(const char *from, char *to, uint32_t to_length);
1171
bool mysql_ha_open(Session *session, TableList *tables, bool reopen);
1172
bool mysql_ha_close(Session *session, TableList *tables);
1173
bool mysql_ha_read(Session *, TableList *,enum enum_ha_read_modes,char *,
1174
List<Item> *,enum ha_rkey_function,Item *,ha_rows,ha_rows);
1175
void mysql_ha_flush(Session *session);
1176
void mysql_ha_rm_tables(Session *session, TableList *tables, bool is_locked);
1177
void mysql_ha_cleanup(Session *session);
1180
Storage engine has to assume the transaction will end up with 2pc if
1181
- there is more than one 2pc-capable storage engine available
1182
- in the current transaction 2pc was not disabled yet
1184
#define trans_need_2pc(session, all) ((total_ha_2pc > 1) && \
1185
!((all ? &session->transaction.all : &session->transaction.stmt)->no_2pc))
1188
bool mysql_xa_recover(Session *session);
1190
SORT_FIELD * make_unireg_sortorder(order_st *order, uint32_t *length,
1191
SORT_FIELD *sortorder);
646
1192
int setup_order(Session *session, Item **ref_pointer_array, TableList *tables,
647
List<Item> &fields, List <Item> &all_fields, Order *order);
1193
List<Item> &fields, List <Item> &all_fields, order_st *order);
648
1194
int setup_group(Session *session, Item **ref_pointer_array, TableList *tables,
649
List<Item> &fields, List<Item> &all_fields, Order *order,
1195
List<Item> &fields, List<Item> &all_fields, order_st *order,
650
1196
bool *hidden_group_fields);
651
1197
bool fix_inner_refs(Session *session, List<Item> &all_fields, Select_Lex *select,
652
1198
Item **ref_pointer_array);
654
1200
bool handle_select(Session *session, LEX *lex, select_result *result,
655
1201
uint64_t setup_tables_done_option);
1202
bool mysql_select(Session *session, Item ***rref_pointer_array,
1203
TableList *tables, uint32_t wild_num, List<Item> &list,
1204
COND *conds, uint32_t og_num, order_st *order, order_st *group,
1205
Item *having, order_st *proc_param, uint64_t select_type,
1206
select_result *result, Select_Lex_Unit *unit,
1207
Select_Lex *select_lex);
656
1208
void free_underlaid_joins(Session *session, Select_Lex *select);
658
bool handle_derived(LEX *lex, bool (*processor)(Session *session,
1209
bool mysql_explain_union(Session *session, Select_Lex_Unit *unit,
1210
select_result *result);
1211
int mysql_explain_select(Session *session, Select_Lex *sl, char const *type,
1212
select_result *result);
1213
bool mysql_union(Session *session, LEX *lex, select_result *result,
1214
Select_Lex_Unit *unit, uint64_t setup_tables_done_option);
1215
bool mysql_handle_derived(LEX *lex, bool (*processor)(Session *session,
660
1217
TableList *table));
661
bool derived_prepare(Session *session, LEX *lex, TableList *t);
662
bool derived_filling(Session *session, LEX *lex, TableList *t);
663
int prepare_create_field(CreateField *sql_field,
1218
bool mysql_derived_prepare(Session *session, LEX *lex, TableList *t);
1219
bool mysql_derived_filling(Session *session, LEX *lex, TableList *t);
1220
void sp_prepare_create_field(Session *session, Create_field *sql_field);
1221
int prepare_create_field(Create_field *sql_field,
664
1222
uint32_t *blob_columns,
665
int *timestamps, int *timestamps_with_niladic);
667
bool create_table(Session *session,
668
const identifier::Table &identifier,
669
HA_CREATE_INFO *create_info,
670
message::Table &table_proto,
671
AlterInfo *alter_info,
672
bool tmp_table, uint32_t select_field_count,
673
bool is_if_not_exists);
675
bool create_table_no_lock(Session *session,
676
const identifier::Table &identifier,
677
HA_CREATE_INFO *create_info,
678
message::Table &table_proto,
679
AlterInfo *alter_info,
680
bool tmp_table, uint32_t select_field_count,
681
bool is_if_not_exists);
683
bool create_like_table(Session* session,
684
identifier::Table::const_reference destination_identifier,
685
identifier::Table::const_reference source_identifier,
686
message::Table &create_table_proto,
687
bool is_if_not_exists,
690
bool rename_table(Session &session,
691
plugin::StorageEngine *base,
692
const identifier::Table &old_identifier,
693
const identifier::Table &new_identifier);
695
bool prepare_update(Session *session, TableList *table_list,
696
Item **conds, uint32_t order_num, Order *order);
697
int update_query(Session *session,TableList *tables,List<Item> &fields,
1223
int *timestamps, int *timestamps_with_niladic,
1224
int64_t table_flags);
1225
bool mysql_create_table(Session *session,const char *db, const char *table_name,
1226
HA_CREATE_INFO *create_info,
1227
Alter_info *alter_info,
1228
bool tmp_table, uint32_t select_field_count);
1229
bool mysql_create_table_no_lock(Session *session, const char *db,
1230
const char *table_name,
1231
HA_CREATE_INFO *create_info,
1232
Alter_info *alter_info,
1233
bool tmp_table, uint32_t select_field_count,
1234
bool lock_open_lock);
1236
bool mysql_alter_table(Session *session, char *new_db, char *new_name,
1237
HA_CREATE_INFO *create_info,
1238
TableList *table_list,
1239
Alter_info *alter_info,
1240
uint32_t order_num, order_st *order, bool ignore);
1241
bool mysql_recreate_table(Session *session, TableList *table_list);
1242
bool mysql_create_like_table(Session *session, TableList *table,
1243
TableList *src_table,
1244
HA_CREATE_INFO *create_info);
1245
bool mysql_rename_table(handlerton *base, const char *old_db,
1246
const char * old_name, const char *new_db,
1247
const char * new_name, uint32_t flags);
1248
bool mysql_prepare_update(Session *session, TableList *table_list,
1249
Item **conds, uint32_t order_num, order_st *order);
1250
int mysql_update(Session *session,TableList *tables,List<Item> &fields,
698
1251
List<Item> &values,COND *conds,
699
uint32_t order_num, Order *order, ha_rows limit,
1252
uint32_t order_num, order_st *order, ha_rows limit,
700
1253
enum enum_duplicates handle_duplicates, bool ignore);
701
bool prepare_insert(Session *session, TableList *table_list, Table *table,
1254
bool mysql_multi_update(Session *session, TableList *table_list,
1255
List<Item> *fields, List<Item> *values,
1256
COND *conds, uint64_t options,
1257
enum enum_duplicates handle_duplicates, bool ignore,
1258
Select_Lex_Unit *unit, Select_Lex *select_lex);
1259
bool mysql_prepare_insert(Session *session, TableList *table_list, Table *table,
702
1260
List<Item> &fields, List_item *values,
703
1261
List<Item> &update_fields,
704
1262
List<Item> &update_values, enum_duplicates duplic,
705
1263
COND **where, bool select_insert,
706
1264
bool check_fields, bool abort_on_warning);
707
bool insert_query(Session *session,TableList *table,List<Item> &fields,
1265
bool mysql_insert(Session *session,TableList *table,List<Item> &fields,
708
1266
List<List_item> &values, List<Item> &update_fields,
709
1267
List<Item> &update_values, enum_duplicates flag,
711
1269
int check_that_all_fields_are_given_values(Session *session, Table *entry,
712
1270
TableList *table_list);
713
int prepare_delete(Session *session, TableList *table_list, Item **conds);
714
bool delete_query(Session *session, TableList *table_list, COND *conds,
1271
int mysql_prepare_delete(Session *session, TableList *table_list, Item **conds);
1272
bool mysql_delete(Session *session, TableList *table_list, COND *conds,
715
1273
SQL_LIST *order, ha_rows rows, uint64_t options,
716
1274
bool reset_auto_increment);
717
bool truncate(Session& session, TableList *table_list);
718
TableShare *get_table_share(Session *session, TableList *table_list, char *key,
1275
bool mysql_truncate(Session *session, TableList *table_list, bool dont_send_ok);
1276
uint32_t create_table_def_key(Session *session, char *key, TableList *table_list,
1278
TABLE_SHARE *get_table_share(Session *session, TableList *table_list, char *key,
719
1279
uint32_t key_length, uint32_t db_flags, int *error);
720
TableShare *get_cached_table_share(const char *db, const char *table_name);
1280
void release_table_share(TABLE_SHARE *share, enum release_type type);
1281
TABLE_SHARE *get_cached_table_share(const char *db, const char *table_name);
1282
Table *open_ltable(Session *session, TableList *table_list, thr_lock_type update,
1283
uint32_t lock_flags);
1284
Table *open_table(Session *session, TableList *table_list, bool *refresh, uint32_t flags);
1285
bool name_lock_locked_table(Session *session, TableList *tables);
721
1286
bool reopen_name_locked_table(Session* session, TableList* table_list, bool link_in);
1287
Table *table_cache_insert_placeholder(Session *session, const char *key,
1288
uint32_t key_length);
1289
bool lock_table_name_if_not_cached(Session *session, const char *db,
1290
const char *table_name, Table **table);
1291
Table *find_locked_table(Session *session, const char *db,const char *table_name);
1292
void detach_merge_children(Table *table, bool clear_refs);
1293
bool fix_merge_after_open(TableList *old_child_list, TableList **old_last,
1294
TableList *new_child_list, TableList **new_last);
1295
bool reopen_table(Table *table);
722
1296
bool reopen_tables(Session *session,bool get_locks,bool in_refresh);
1297
void close_data_files_and_morph_locks(Session *session, const char *db,
1298
const char *table_name);
723
1299
void close_handle_and_leave_table_as_lock(Table *table);
1300
bool open_new_frm(Session *session, TABLE_SHARE *share, const char *alias,
1301
uint32_t db_stat, uint32_t prgflag,
1302
uint32_t ha_open_flags, Table *outparam,
1303
TableList *table_desc, MEM_ROOT *mem_root);
724
1304
bool wait_for_tables(Session *session);
725
1305
bool table_is_used(Table *table, bool wait_for_name_lock);
726
Table *drop_locked_tables(Session *session, const drizzled::identifier::Table &identifier);
727
void abort_locked_tables(Session *session, const drizzled::identifier::Table &identifier);
1306
Table *drop_locked_tables(Session *session,const char *db, const char *table_name);
1307
void abort_locked_tables(Session *session,const char *db, const char *table_name);
1308
void execute_init_command(Session *session, sys_var_str *init_command_var,
1309
pthread_rwlock_t *var_mutex);
728
1310
extern Field *not_found_field;
729
1311
extern Field *view_ref_found;