230
229
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);
231
handler(handlerton *ht_arg, TABLE_SHARE *share_arg)
232
:table_share(share_arg), table(0),
233
estimation_rows_to_insert(0), ht(ht_arg),
234
ref(0), in_range_check_pushed_down(false),
235
key_used_on_scan(MAX_KEY), active_index(MAX_KEY),
236
ref_length(sizeof(my_off_t)),
238
locked(false), implicit_emptied(0),
239
pushed_cond(0), pushed_idx_cond(NULL), pushed_idx_cond_keyno(MAX_KEY),
240
next_insert_id(0), insert_id_for_cur_row(0)
242
virtual ~handler(void)
244
assert(locked == false);
245
/* TODO: assert(inited == NONE); */
247
virtual handler *clone(MEM_ROOT *mem_root);
248
/** This is called after create to allow us to set up cached variables */
251
cached_table_flags= table_flags();
236
254
/* 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));
256
int ha_open(Table *table, const char *name, int mode, int test_if_locked);
257
int ha_index_init(uint32_t idx, bool sorted);
259
int ha_rnd_init(bool scan);
245
263
/* this is necessary in many places, e.g. in HANDLER command */
246
264
int ha_index_or_rnd_end();
265
Table_flags ha_table_flags() const;
249
268
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.
269
handler class, hence they are *not* virtual. For the inheritance
270
interface, see the (private) functions write_row(), update_row(),
271
and delete_row() below.
254
273
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));
274
int ha_write_row(unsigned char * buf);
275
int ha_update_row(const unsigned char * old_data, unsigned char * new_data);
276
int ha_delete_row(const unsigned char * buf);
258
277
void ha_release_auto_increment();
279
int ha_check_for_upgrade(HA_CHECK_OPT *check_opt);
260
280
/** to be actually called to get 'check()' functionality*/
261
281
int ha_check(Session *session, HA_CHECK_OPT *check_opt);
282
int ha_repair(Session* session, HA_CHECK_OPT* check_opt);
263
283
void ha_start_bulk_insert(ha_rows rows);
264
284
int ha_end_bulk_insert();
285
int ha_bulk_update_row(const unsigned char *old_data, unsigned char *new_data,
286
uint32_t *dup_key_found);
265
287
int ha_delete_all_rows();
266
288
int ha_reset_auto_increment(uint64_t value);
289
int ha_optimize(Session* session, HA_CHECK_OPT* check_opt);
267
290
int ha_analyze(Session* session, HA_CHECK_OPT* check_opt);
291
bool ha_check_and_repair(Session *session);
269
292
int ha_disable_indexes(uint32_t mode);
270
293
int ha_enable_indexes(uint32_t mode);
271
294
int ha_discard_or_import_tablespace(bool discard);
272
void closeMarkForDelete(const char *name);
295
void ha_prepare_for_alter();
296
int ha_rename_table(const char *from, const char *to);
297
int ha_delete_table(const char *name);
298
void ha_drop_table(const char *name);
300
int ha_create(const char *name, Table *form, HA_CREATE_INFO *info);
302
int ha_create_handler_files(const char *name, const char *old_name,
303
int action_flag, HA_CREATE_INFO *info);
274
305
void adjust_next_insert_id_after_explicit_value(uint64_t nr);
275
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, TABLE_SHARE *share);
277
313
/* Estimates calculation */
278
314
virtual double scan_time(void)
506
720
return memcmp(ref1, ref2, ref_length);
509
virtual bool isOrdered(void)
724
Condition pushdown to storage engines
728
Push condition down to the table handler.
730
@param cond Condition to be pushed. The condition tree must not be
731
modified by the by the caller.
734
The 'remainder' condition that caller must use to filter out records.
735
NULL means the handler will not return rows that do not match the
739
The pushed conditions form a stack (from which one can remove the
740
last pushed condition using cond_pop).
741
The table handler filters out rows using (pushed_cond1 AND pushed_cond2
742
AND ... AND pushed_condN)
743
or less restrictive condition, depending on handler's capabilities.
745
handler->ha_reset() call empties the condition stack.
746
Calls to rnd_init/rnd_end, index_init/index_end etc do not affect the
749
virtual const COND *cond_push(const COND *cond) { return cond; }
752
Pop the top condition from the condition stack of the handler instance.
754
Pops the top if condition stack, if stack is not empty.
756
virtual void cond_pop(void) { return; }
758
virtual Item *idx_cond_push(uint32_t, Item *idx_cond)
762
Part of old fast alter table, to be depricated
765
check_if_incompatible_data(HA_CREATE_INFO *, uint32_t)
766
{ return COMPATIBLE_DATA_NO; }
768
/* On-line ALTER Table interface */
771
Check if a storage engine supports a particular alter table on-line
773
@param altered_table A temporary table show what table is to
775
@param create_info Information from the parsing phase about new
777
@param alter_flags Bitmask that shows what will be changed
778
@param table_changes Shows if table layout has changed (for
779
backwards compatibility with
780
check_if_incompatible_data
782
@retval HA_ALTER_ERROR Unexpected error
783
@retval HA_ALTER_SUPPORTED_WAIT_LOCK Supported, but requires DDL lock
784
@retval HA_ALTER_SUPPORTED_NO_LOCK Supported
785
@retval HA_ALTER_NOT_SUPPORTED Not supported
788
The default implementation is implemented to support fast
789
alter table (storage engines that support some changes by
790
just changing the frm file) without any change in the handler
793
virtual int check_if_supported_alter(Table *, HA_CREATE_INFO *create_info,
794
HA_ALTER_FLAGS * alter_flags, uint32_t table_changes)
796
if (this->check_if_incompatible_data(create_info, table_changes)
797
== COMPATIBLE_DATA_NO)
798
return(HA_ALTER_NOT_SUPPORTED);
799
else if ((*alter_flags & HA_ALTER_STORED_VCOL).is_set())
800
return(HA_ALTER_NOT_SUPPORTED);
802
return(HA_ALTER_SUPPORTED_WAIT_LOCK);
805
Tell storage engine to prepare for the on-line alter table (pre-alter)
807
@param session The thread handle
808
@param altered_table A temporary table show what table is to
810
@param alter_info Storage place for data used during phase1
812
@param alter_flags Bitmask that shows what will be changed
815
@retval error error code passed from storage engine
817
virtual int alter_table_phase1(Session *, Table *, HA_CREATE_INFO *, HA_ALTER_INFO *,
820
return HA_ERR_UNSUPPORTED;
823
Tell storage engine to perform the on-line alter table (alter)
825
@param session The thread handle
826
@param altered_table A temporary table show what table is to
828
@param alter_info Storage place for data used during phase1
830
@param alter_flags Bitmask that shows what will be changed
833
@retval error error code passed from storage engine
836
If check_if_supported_alter returns HA_ALTER_SUPPORTED_WAIT_LOCK
837
this call is to be wrapped with a DDL lock. This is currently NOT
840
virtual int alter_table_phase2(Session *, Table *, HA_CREATE_INFO *, HA_ALTER_INFO *,
843
return HA_ERR_UNSUPPORTED;
846
Tell storage engine that changed frm file is now on disk and table
847
has been re-opened (post-alter)
849
@param session The thread handle
850
@param table The altered table, re-opened
852
virtual int alter_table_phase3(Session *, Table *)
854
return HA_ERR_UNSUPPORTED;
858
use_hidden_primary_key() is called in case of an update/delete when
859
(table_flags() and HA_PRIMARY_KEY_REQUIRED_FOR_DELETE) is defined
860
but we don't have a primary key
862
virtual void use_hidden_primary_key();
867
@param session Thread handle
868
@param lock_type HA_LOCK_IN_SHARE_MODE (F_RDLCK)
869
HA_LOCK_IN_EXCLUSIVE_MODE (F_WRLCK)
870
@param lock_timeout -1 default timeout
872
>0 wait timeout in milliseconds.
875
lock_timeout >0 is not used by MySQL currently. If the storage
876
engine does not support NOWAIT (lock_timeout == 0) it should
877
return an error. But if it does not support WAIT X (lock_timeout
878
>0) it should treat it as lock_timeout == -1 and wait a default
879
(or even hard-coded) timeout.
881
@retval HA_ERR_WRONG_COMMAND Storage engine does not support
883
@retval HA_ERR_UNSUPPORTED Storage engine does not support NOWAIT
884
@retval HA_ERR_LOCK_WAIT_TIMEOUT Lock request timed out or
885
lock conflict with NOWAIT option
886
@retval HA_ERR_LOCK_DEADLOCK Deadlock detected
888
virtual int lock_table(Session *, int, int)
890
return HA_ERR_WRONG_COMMAND;
893
This procedure defines if the storage engine supports virtual columns.
894
Default false means "not supported".
896
virtual bool check_if_supported_virtual_columns(void)
516
900
/* Service methods for use by storage engines. */
517
void ha_statistic_increment(uint64_t system_status_var::*offset) const;
901
void ha_statistic_increment(ulong SSV::*offset) const;
518
902
void **ha_data(Session *) const;
903
Session *ha_session(void) const;
906
Default rename_table() and delete_table() rename/delete files with a
907
given name and extensions from bas_ext().
909
These methods can be overridden, but their default implementation
910
provide useful functionality.
912
virtual int rename_table(const char *from, const char *to);
914
Delete a table in the engine. Called for base as well as temporary
917
virtual int delete_table(const char *name);
521
920
/* Private helpers */
522
inline void setTransactionReadWrite();
921
inline void mark_trx_read_write();
525
924
Low-level primitives for storage engines. These should be
618
1044
virtual int reset_auto_increment(uint64_t)
619
1045
{ return HA_ERR_WRONG_COMMAND; }
621
virtual int analyze(Session *)
622
{ return HA_ADMIN_NOT_IMPLEMENTED; }
1046
virtual int optimize(Session *, HA_CHECK_OPT *)
1047
{ return HA_ADMIN_NOT_IMPLEMENTED; }
1048
virtual int analyze(Session *, HA_CHECK_OPT *)
1049
{ return HA_ADMIN_NOT_IMPLEMENTED; }
1050
virtual bool check_and_repair(Session *)
624
1052
virtual int disable_indexes(uint32_t)
625
1053
{ return HA_ERR_WRONG_COMMAND; }
627
1054
virtual int enable_indexes(uint32_t)
628
1055
{ return HA_ERR_WRONG_COMMAND; }
630
1056
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.
1057
{ return (my_errno=HA_ERR_WRONG_COMMAND); }
1058
virtual void prepare_for_alter(void) { return; }
639
1059
virtual void drop_table(const char *name);
1060
virtual int create(const char *, Table *, HA_CREATE_INFO *)=0;
1062
virtual int create_handler_files(const char *, const char *, int, HA_CREATE_INFO *)
1069
A Disk-Sweep MRR interface implementation
1071
This implementation makes range (and, in the future, 'ref') scans to read
1072
table rows in disk sweeps.
1074
Currently it is used by MyISAM and InnoDB. Potentially it can be used with
1075
any table handler that has non-clustered indexes and on-disk rows.
1081
typedef void (handler::*range_check_toggle_func_t)(bool on);
1086
handler *h; /* The "owner" handler object. It is used for scanning the index */
1087
Table *table; /* Always equal to h->table */
1090
Secondary handler object. It is used to retrieve full table rows by
1095
/* Buffer to store rowids, or (rowid, range_id) pairs */
1096
unsigned char *rowids_buf;
1097
unsigned char *rowids_buf_cur; /* Current position when reading/writing */
1098
unsigned char *rowids_buf_last; /* When reading: end of used buffer space */
1099
unsigned char *rowids_buf_end; /* End of the buffer */
1101
bool dsmrr_eof; /* true <=> We have reached EOF when reading index tuples */
1103
/* true <=> need range association, buffer holds {rowid, range_id} pairs */
1106
bool use_default_impl; /* true <=> shortcut all calls to default MRR impl */
1108
void init(handler *h_arg, Table *table_arg)
1113
int dsmrr_init(handler *h, KEY *key, RANGE_SEQ_IF *seq_funcs,
1114
void *seq_init_param, uint32_t n_ranges, uint32_t mode,
1115
HANDLER_BUFFER *buf);
1117
int dsmrr_fill_buffer(handler *h);
1118
int dsmrr_next(handler *h, char **range_info);
1120
int dsmrr_info(uint32_t keyno, uint32_t n_ranges, uint32_t keys, uint32_t *bufsz,
1121
uint32_t *flags, COST_VECT *cost);
1123
ha_rows dsmrr_info_const(uint32_t keyno, RANGE_SEQ_IF *seq,
1124
void *seq_init_param, uint32_t n_ranges, uint32_t *bufsz,
1125
uint32_t *flags, COST_VECT *cost);
1127
bool key_uses_partial_cols(uint32_t keyno);
1128
bool choose_mrr_impl(uint32_t keyno, ha_rows rows, uint32_t *flags, uint32_t *bufsz,
1130
bool get_disk_sweep_mrr_cost(uint32_t keynr, ha_rows rows, uint32_t flags,
1131
uint32_t *buffer_size, COST_VECT *cost);
642
1134
extern const char *ha_row_type[];
1135
extern const char *tx_isolation_names[];
1136
extern const char *binlog_format_names[];
1137
extern TYPELIB tx_isolation_typelib;
1138
extern TYPELIB myisam_stats_method_typelib;
1139
extern uint32_t total_ha, total_ha_2pc;
1141
/* Wrapper functions */
1142
#define ha_commit(session) (ha_commit_trans((session), true))
1143
#define ha_rollback(session) (ha_rollback_trans((session), true))
644
1145
/* basic stuff */
645
void ha_init_errors(void);
648
SortField *make_unireg_sortorder(Order *order, uint32_t *length,
649
SortField *sortorder);
1146
int ha_init_errors(void);
1149
int ha_initialize_handlerton(st_plugin_int *plugin);
1150
int ha_finalize_handlerton(st_plugin_int *plugin);
1152
TYPELIB *ha_known_exts(void);
1153
void ha_close_connection(Session* session);
1154
bool ha_flush_logs(handlerton *db_type);
1155
void ha_drop_database(char* path);
1156
int ha_create_table(Session *session, const char *path,
1157
const char *db, const char *table_name,
1158
HA_CREATE_INFO *create_info,
1159
bool update_create_info);
1160
int ha_delete_table(Session *session, const char *path,
1161
const char *db, const char *alias, bool generate_warning);
1163
/* statistics and info */
1164
bool ha_show_status(Session *session, handlerton *db_type, enum ha_stat_type stat);
1166
int ha_find_files(Session *session,const char *db,const char *path,
1167
const char *wild, bool dir, List<LEX_STRING>* files);
1168
int ha_table_exists_in_engine(Session* session, const char* db, const char* name);
1171
extern "C" int ha_init_key_cache(const char *name, KEY_CACHE *key_cache);
1172
int ha_resize_key_cache(KEY_CACHE *key_cache);
1173
int ha_change_key_cache_param(KEY_CACHE *key_cache);
1174
int ha_change_key_cache(KEY_CACHE *old_key_cache, KEY_CACHE *new_key_cache);
1175
int ha_end_key_cache(KEY_CACHE *key_cache);
1177
/* report to InnoDB that control passes to the client */
1178
int ha_release_temporary_latches(Session *session);
1180
/* transactions: interface to handlerton functions */
1181
int ha_start_consistent_snapshot(Session *session);
1182
int ha_commit_or_rollback_by_xid(XID *xid, bool commit);
1183
int ha_commit_one_phase(Session *session, bool all);
1184
int ha_rollback_trans(Session *session, bool all);
1185
int ha_prepare(Session *session);
1186
int ha_recover(HASH *commit_list);
1188
/* transactions: these functions never call handlerton functions directly */
1189
int ha_commit_trans(Session *session, bool all);
1190
int ha_autocommit_or_rollback(Session *session, int error);
1191
int ha_enable_transaction(Session *session, bool on);
1194
int ha_rollback_to_savepoint(Session *session, SAVEPOINT *sv);
1195
int ha_savepoint(Session *session, SAVEPOINT *sv);
1196
int ha_release_savepoint(Session *session, SAVEPOINT *sv);
1198
/* these are called by storage engines */
1199
void trans_register_ha(Session *session, bool all, handlerton *ht);
1201
void table_case_convert(char * name, uint32_t length);
1202
const char *table_case_name(HA_CREATE_INFO *info, const char *name);
1204
extern char reg_ext[FN_EXTLEN];
1205
extern uint32_t reg_ext_length;
1206
extern ulong specialflag;
1207
extern uint32_t lower_case_table_names;
1208
uint32_t filename_to_tablename(const char *from, char *to, uint32_t to_length);
1209
uint32_t tablename_to_filename(const char *from, char *to, uint32_t to_length);
1212
bool mysql_ha_open(Session *session, TableList *tables, bool reopen);
1213
bool mysql_ha_close(Session *session, TableList *tables);
1214
bool mysql_ha_read(Session *, TableList *,enum enum_ha_read_modes,char *,
1215
List<Item> *,enum ha_rkey_function,Item *,ha_rows,ha_rows);
1216
void mysql_ha_flush(Session *session);
1217
void mysql_ha_rm_tables(Session *session, TableList *tables, bool is_locked);
1218
void mysql_ha_cleanup(Session *session);
1221
Storage engine has to assume the transaction will end up with 2pc if
1222
- there is more than one 2pc-capable storage engine available
1223
- in the current transaction 2pc was not disabled yet
1225
#define trans_need_2pc(session, all) ((total_ha_2pc > 1) && \
1226
!((all ? &session->transaction.all : &session->transaction.stmt)->no_2pc))
1229
bool mysql_xa_recover(Session *session);
1231
SORT_FIELD * make_unireg_sortorder(order_st *order, uint32_t *length,
1232
SORT_FIELD *sortorder);
650
1233
int setup_order(Session *session, Item **ref_pointer_array, TableList *tables,
651
List<Item> &fields, List <Item> &all_fields, Order *order);
1234
List<Item> &fields, List <Item> &all_fields, order_st *order);
652
1235
int setup_group(Session *session, Item **ref_pointer_array, TableList *tables,
653
List<Item> &fields, List<Item> &all_fields, Order *order,
1236
List<Item> &fields, List<Item> &all_fields, order_st *order,
654
1237
bool *hidden_group_fields);
655
bool fix_inner_refs(Session *session, List<Item> &all_fields, Select_Lex *select,
1238
bool fix_inner_refs(Session *session, List<Item> &all_fields, SELECT_LEX *select,
656
1239
Item **ref_pointer_array);
658
1241
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,
1242
ulong setup_tables_done_option);
1243
bool mysql_select(Session *session, Item ***rref_pointer_array,
1244
TableList *tables, uint32_t wild_num, List<Item> &list,
1245
COND *conds, uint32_t og_num, order_st *order, order_st *group,
1246
Item *having, order_st *proc_param, uint64_t select_type,
1247
select_result *result, SELECT_LEX_UNIT *unit,
1248
SELECT_LEX *select_lex);
1249
void free_underlaid_joins(Session *session, SELECT_LEX *select);
1250
bool mysql_explain_union(Session *session, SELECT_LEX_UNIT *unit,
1251
select_result *result);
1252
int mysql_explain_select(Session *session, SELECT_LEX *sl, char const *type,
1253
select_result *result);
1254
bool mysql_union(Session *session, LEX *lex, select_result *result,
1255
SELECT_LEX_UNIT *unit, ulong setup_tables_done_option);
1256
bool mysql_handle_derived(LEX *lex, bool (*processor)(Session *session,
664
1258
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,
1259
bool mysql_derived_prepare(Session *session, LEX *lex, TableList *t);
1260
bool mysql_derived_filling(Session *session, LEX *lex, TableList *t);
1261
void sp_prepare_create_field(Session *session, Create_field *sql_field);
1262
int prepare_create_field(Create_field *sql_field,
668
1263
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,
1264
int *timestamps, int *timestamps_with_niladic,
1265
int64_t table_flags);
1266
bool mysql_create_table(Session *session,const char *db, const char *table_name,
1267
HA_CREATE_INFO *create_info,
1268
Alter_info *alter_info,
1269
bool tmp_table, uint32_t select_field_count);
1270
bool mysql_create_table_no_lock(Session *session, const char *db,
1271
const char *table_name,
1272
HA_CREATE_INFO *create_info,
1273
Alter_info *alter_info,
1274
bool tmp_table, uint32_t select_field_count,
1275
bool lock_open_lock);
1277
bool mysql_alter_table(Session *session, char *new_db, char *new_name,
1278
HA_CREATE_INFO *create_info,
1279
TableList *table_list,
1280
Alter_info *alter_info,
1281
uint32_t order_num, order_st *order, bool ignore);
1282
bool mysql_recreate_table(Session *session, TableList *table_list);
1283
bool mysql_create_like_table(Session *session, TableList *table,
1284
TableList *src_table,
1285
HA_CREATE_INFO *create_info);
1286
bool mysql_rename_table(handlerton *base, const char *old_db,
1287
const char * old_name, const char *new_db,
1288
const char * new_name, uint32_t flags);
1289
bool mysql_prepare_update(Session *session, TableList *table_list,
1290
Item **conds, uint32_t order_num, order_st *order);
1291
int mysql_update(Session *session,TableList *tables,List<Item> &fields,
702
1292
List<Item> &values,COND *conds,
703
uint32_t order_num, Order *order, ha_rows limit,
1293
uint32_t order_num, order_st *order, ha_rows limit,
704
1294
enum enum_duplicates handle_duplicates, bool ignore);
705
bool prepare_insert(Session *session, TableList *table_list, Table *table,
1295
bool mysql_multi_update(Session *session, TableList *table_list,
1296
List<Item> *fields, List<Item> *values,
1297
COND *conds, uint64_t options,
1298
enum enum_duplicates handle_duplicates, bool ignore,
1299
SELECT_LEX_UNIT *unit, SELECT_LEX *select_lex);
1300
bool mysql_prepare_insert(Session *session, TableList *table_list, Table *table,
706
1301
List<Item> &fields, List_item *values,
707
1302
List<Item> &update_fields,
708
1303
List<Item> &update_values, enum_duplicates duplic,
709
1304
COND **where, bool select_insert,
710
1305
bool check_fields, bool abort_on_warning);
711
bool insert_query(Session *session,TableList *table,List<Item> &fields,
1306
bool mysql_insert(Session *session,TableList *table,List<Item> &fields,
712
1307
List<List_item> &values, List<Item> &update_fields,
713
1308
List<Item> &update_values, enum_duplicates flag,
715
1310
int check_that_all_fields_are_given_values(Session *session, Table *entry,
716
1311
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,
1312
void prepare_triggers_for_insert_stmt(Table *table);
1313
int mysql_prepare_delete(Session *session, TableList *table_list, Item **conds);
1314
bool mysql_delete(Session *session, TableList *table_list, COND *conds,
719
1315
SQL_LIST *order, ha_rows rows, uint64_t options,
720
1316
bool reset_auto_increment);
721
bool truncate(Session& session, TableList *table_list);
722
TableShare *get_table_share(Session *session, TableList *table_list, char *key,
1317
bool mysql_truncate(Session *session, TableList *table_list, bool dont_send_ok);
1318
uint32_t create_table_def_key(Session *session, char *key, TableList *table_list,
1320
TABLE_SHARE *get_table_share(Session *session, TableList *table_list, char *key,
723
1321
uint32_t key_length, uint32_t db_flags, int *error);
724
TableShare *get_cached_table_share(const char *db, const char *table_name);
1322
void release_table_share(TABLE_SHARE *share, enum release_type type);
1323
TABLE_SHARE *get_cached_table_share(const char *db, const char *table_name);
1324
Table *open_ltable(Session *session, TableList *table_list, thr_lock_type update,
1325
uint32_t lock_flags);
1326
Table *open_table(Session *session, TableList *table_list, bool *refresh, uint32_t flags);
1327
bool name_lock_locked_table(Session *session, TableList *tables);
725
1328
bool reopen_name_locked_table(Session* session, TableList* table_list, bool link_in);
1329
Table *table_cache_insert_placeholder(Session *session, const char *key,
1330
uint32_t key_length);
1331
bool lock_table_name_if_not_cached(Session *session, const char *db,
1332
const char *table_name, Table **table);
1333
Table *find_locked_table(Session *session, const char *db,const char *table_name);
1334
void detach_merge_children(Table *table, bool clear_refs);
1335
bool fix_merge_after_open(TableList *old_child_list, TableList **old_last,
1336
TableList *new_child_list, TableList **new_last);
1337
bool reopen_table(Table *table);
726
1338
bool reopen_tables(Session *session,bool get_locks,bool in_refresh);
1339
void close_data_files_and_morph_locks(Session *session, const char *db,
1340
const char *table_name);
727
1341
void close_handle_and_leave_table_as_lock(Table *table);
1342
bool open_new_frm(Session *session, TABLE_SHARE *share, const char *alias,
1343
uint32_t db_stat, uint32_t prgflag,
1344
uint32_t ha_open_flags, Table *outparam,
1345
TableList *table_desc, MEM_ROOT *mem_root);
728
1346
bool wait_for_tables(Session *session);
729
1347
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);
1348
Table *drop_locked_tables(Session *session,const char *db, const char *table_name);
1349
void abort_locked_tables(Session *session,const char *db, const char *table_name);
1350
void execute_init_command(Session *session, sys_var_str *init_command_var,
1351
pthread_rwlock_t *var_mutex);
732
1352
extern Field *not_found_field;
733
1353
extern Field *view_ref_found;