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