67
TableShare *s; /**< Pointer to the shared metadata about the table */
64
68
Field **field; /**< Pointer to fields collection */
67
Field **getFields() const
72
Field *getField(uint32_t arg) const
77
void setFields(Field **arg)
82
void setFieldAt(Field *arg, uint32_t arg_pos)
87
Cursor *cursor; /**< Pointer to the storage engine's Cursor managing this table */
70
handler *file; /**< Pointer to the storage engine's handler managing this table */
91
Table *getNext() const
101
void setNext(Table *arg)
108
getNext()->setPrev(getPrev()); /* remove from used chain */
109
getPrev()->setNext(getNext());
115
Table *getPrev() const
125
void setPrev(Table *arg)
130
boost::dynamic_bitset<> *read_set; /* Active column sets */
131
boost::dynamic_bitset<> *write_set; /* Active column sets */
74
MyBitmap *read_set; /* Active column sets */
75
MyBitmap *write_set; /* Active column sets */
134
uint32_t db_stat; /**< information about the cursor as in Cursor.h */
136
boost::dynamic_bitset<> def_read_set; /**< Default read set of columns */
137
boost::dynamic_bitset<> def_write_set; /**< Default write set of columns */
138
boost::dynamic_bitset<> tmp_set; /* Not sure about this... */
140
Session *in_use; /**< Pointer to the current session using this object */
141
Session *getSession()
146
unsigned char *getInsertRecord()
151
unsigned char *getUpdateRecord()
78
uint32_t db_stat; /**< information about the file as in handler.h */
80
MyBitmap def_read_set; /**< Default read set of columns */
81
MyBitmap def_write_set; /**< Default write set of columns */
82
MyBitmap tmp_set; /* Not sure about this... */
84
Session *in_use; /**< Pointer to the current session using this object */
156
86
unsigned char *record[2]; /**< Pointer to "records" */
157
std::vector<unsigned char> insert_values; /* used by INSERT ... UPDATE */
158
KeyInfo *key_info; /**< data of keys in database */
87
unsigned char *insert_values; /* used by INSERT ... UPDATE */
88
KEY *key_info; /**< data of keys in database */
159
89
Field *next_number_field; /**< Set if next_number is activated. @TODO What the heck is the difference between this and the next member? */
160
90
Field *found_next_number_field; /**< Points to the "next-number" field (autoincrement field) */
161
91
Field_timestamp *timestamp_field; /**< Points to the auto-setting timestamp field, if any */
163
93
TableList *pos_in_table_list; /* Element referring to this table */
166
const char *getAlias() const
168
return _alias.c_str();
176
void setAlias(const char *arg)
182
std::string _alias; /**< alias or table name if no alias */
95
const char *alias; /**< alias or table name if no alias */
185
96
unsigned char *null_flags;
187
98
uint32_t lock_position; /**< Position in DRIZZLE_LOCK.table */
188
99
uint32_t lock_data_start; /**< Start pos. in DRIZZLE_LOCK.locks */
189
100
uint32_t lock_count; /**< Number of locks */
190
101
uint32_t used_fields;
191
uint32_t status; /* What's in getInsertRecord() */
102
uint32_t status; /* What's in record[0] */
192
103
/* number of select if it is derived table */
193
104
uint32_t derived_select_number;
194
int current_lock; /**< Type of lock on table */
105
int current_lock; /**< Type of lock on table */
195
106
bool copy_blobs; /**< Should blobs by copied when storing? */
325
234
uint32_t quick_key_parts[MAX_KEY];
326
235
uint32_t quick_n_ranges[MAX_KEY];
329
memory::Root mem_root;
238
filesort_info_st sort;
253
next_number_field(NULL),
254
found_next_number_field(NULL),
255
timestamp_field(NULL),
256
pos_in_table_list(NULL),
265
derived_select_number(0),
266
current_lock(F_UNLCK),
276
open_placeholder(false),
277
locked_by_name(false),
279
auto_increment_field_not_null(false),
280
alias_name_used(false),
282
quick_condition_rows(0),
283
timestamp_field_type(TIMESTAMP_NO_AUTO_SET),
286
record[0]= (unsigned char *) 0;
287
record[1]= (unsigned char *) 0;
289
covering_keys.reset();
294
keys_in_use_for_query.reset();
295
keys_in_use_for_group_by.reset();
296
keys_in_use_for_order_by.reset();
298
memset(quick_rows, 0, sizeof(query_id_t) * MAX_KEY);
299
memset(const_key_parts, 0, sizeof(ha_rows) * MAX_KEY);
301
memset(quick_key_parts, 0, sizeof(unsigned int) * MAX_KEY);
302
memset(quick_n_ranges, 0, sizeof(unsigned int) * MAX_KEY);
333
304
init_sql_alloc(&mem_root, TABLE_ALLOC_BLOCK_SIZE, 0);
336
memory::Root *getMemRoot()
338
if (not mem_root.alloc_root_inited())
346
void *alloc_root(size_t arg)
348
if (not mem_root.alloc_root_inited())
353
return mem_root.alloc_root(arg);
356
char *strmake_root(const char *str_arg, size_t len_arg)
358
if (not mem_root.alloc_root_inited())
363
return mem_root.strmake_root(str_arg, len_arg);
305
memset(&sort, 0, sizeof(filesort_info_st));
371
308
int report_error(int error);
373
* Free information allocated by openfrm
375
* @param If true if we also want to free table_share
376
* @note this should all be the destructor
378
int delete_table(bool free_share= false);
380
void resetTable(Session *session, TableShare *share, uint32_t db_stat_arg);
309
int closefrm(bool free_share);
311
void resetTable(Session *session, TableShare *share, uint32_t db_stat_arg)
324
db_stat= db_stat_arg;
327
record[0]= (unsigned char *) 0;
328
record[1]= (unsigned char *) 0;
332
next_number_field= NULL;
333
found_next_number_field= NULL;
334
timestamp_field= NULL;
336
pos_in_table_list= NULL;
346
derived_select_number= 0;
347
current_lock= F_UNLCK;
361
open_placeholder= false;
362
locked_by_name= false;
365
auto_increment_field_not_null= false;
366
alias_name_used= false;
369
quick_condition_rows= 0;
371
timestamp_field_type= TIMESTAMP_NO_AUTO_SET;
376
covering_keys.reset();
381
keys_in_use_for_query.reset();
382
keys_in_use_for_group_by.reset();
383
keys_in_use_for_order_by.reset();
385
memset(quick_rows, 0, sizeof(query_id_t) * MAX_KEY);
386
memset(const_key_parts, 0, sizeof(ha_rows) * MAX_KEY);
388
memset(quick_key_parts, 0, sizeof(unsigned int) * MAX_KEY);
389
memset(quick_n_ranges, 0, sizeof(unsigned int) * MAX_KEY);
391
init_sql_alloc(&mem_root, TABLE_ALLOC_BLOCK_SIZE, 0);
392
memset(&sort, 0, sizeof(filesort_info_st));
382
395
/* SHARE methods */
383
virtual const TableShare *getShare() const= 0; /* Get rid of this long term */
384
virtual TableShare *getMutableShare()= 0; /* Get rid of this long term */
385
virtual bool hasShare() const= 0; /* Get rid of this long term */
386
virtual void setShare(TableShare *new_share)= 0; /* Get rid of this long term */
388
virtual void release(void)= 0;
390
uint32_t sizeKeys() { return getMutableShare()->sizeKeys(); }
391
uint32_t sizeFields() { return getMutableShare()->sizeFields(); }
392
uint32_t getRecordLength() const { return getShare()->getRecordLength(); }
393
uint32_t sizeBlobFields() { return getMutableShare()->blob_fields; }
394
uint32_t *getBlobField() { return &getMutableShare()->blob_field[0]; }
397
virtual bool hasVariableWidth() const
399
return getShare()->hasVariableWidth(); // We should calculate this.
402
virtual void setVariableWidth(void);
404
Field_blob *getBlobFieldAt(uint32_t arg) const
406
if (arg < getShare()->blob_fields)
407
return (Field_blob*) field[getShare()->blob_field[arg]]; /*NOTE: Using 'Table.field' NOT SharedTable.field. */
411
inline uint8_t getBlobPtrSize() { return getShare()->blob_ptr_size; }
412
inline uint32_t getNullBytes() { return getShare()->null_bytes; }
413
inline uint32_t getNullFields() { return getShare()->null_fields; }
414
inline unsigned char *getDefaultValues() { return getMutableShare()->getDefaultValues(); }
415
inline const char *getSchemaName() const { return getShare()->getSchemaName(); }
416
inline const char *getTableName() const { return getShare()->getTableName(); }
418
inline bool isDatabaseLowByteFirst() { return getShare()->db_low_byte_first; } /* Portable row format */
419
inline bool isNameLock() const { return open_placeholder; }
421
uint32_t index_flags(uint32_t idx) const
423
return getShare()->storage_engine->index_flags(getShare()->getKeyInfo(idx).algorithm);
426
inline plugin::StorageEngine *getEngine() const /* table_type for handler */
428
return getShare()->storage_engine;
431
Cursor &getCursor() const /* table_type for handler */
396
inline TableShare *getShare() { return s; } /* Get rid of this long term */
397
inline void setShare(TableShare *new_share) { s= new_share; } /* Get rid of this long term */
398
inline uint32_t sizeKeys() { return s->keys; }
399
inline uint32_t sizeFields() { return s->fields; }
400
inline uint32_t getRecordLength() { return s->reclength; }
401
inline uint32_t sizeBlobFields() { return s->blob_fields; }
402
inline uint32_t *getBlobField() { return s->blob_field; }
403
inline uint32_t getNullBytes() { return s->null_bytes; }
404
inline uint32_t getNullFields() { return s->null_fields; }
405
inline unsigned char *getDefaultValues() { return s->default_values; }
407
inline bool isDatabaseLowByteFirst() { return s->db_low_byte_first; } /* Portable row format */
408
inline bool isCrashed() { return s->crashed; }
409
inline bool isNameLock() { return s->name_lock; }
410
inline bool isReplaceWithNameLock() { return s->replace_with_name_lock; }
411
inline bool isWaitingOnCondition() { return s->waiting_on_cond; } /* Protection against free */
413
/* For TMP tables, should be pulled out as a class */
414
void updateCreateInfo(HA_CREATE_INFO *create_info,
415
drizzled::message::Table *table_proto);
416
void setup_tmp_table_column_bitmaps(unsigned char *bitmaps);
417
bool create_myisam_tmp_table(KEY *keyinfo,
418
MI_COLUMNDEF *start_recinfo,
419
MI_COLUMNDEF **recinfo,
421
void free_tmp_table(Session *session);
422
bool open_tmp_table();
437
423
size_t max_row_length(const unsigned char *data);
438
424
uint32_t find_shortest_key(const key_map *usable_keys);
439
425
bool compare_record(Field **ptr);
440
bool records_are_comparable();
441
bool compare_records();
426
bool compare_record();
442
427
/* TODO: the (re)storeRecord's may be able to be further condensed */
443
428
void storeRecord();
444
429
void storeRecordAsInsert();
573
557
status|= STATUS_NULL_ROW;
574
memset(null_flags, 255, getShare()->null_bytes);
558
memset(null_flags, 255, s->null_bytes);
561
bool rename_temporary_table(const char *db, const char *table_name);
577
562
void free_io_cache();
578
563
void filesort_free_buffers(bool full= false);
579
564
void intern_close_table();
581
void print_error(int error, myf errflag)
583
getShare()->storage_engine->print_error(error, errflag, *this);
588
key if error because of duplicated keys
590
uint32_t get_dup_key(int error)
592
cursor->errkey = (uint32_t) -1;
593
if (error == HA_ERR_FOUND_DUPP_KEY || error == HA_ERR_FOREIGN_DUPLICATE_KEY ||
594
error == HA_ERR_FOUND_DUPP_UNIQUE ||
595
error == HA_ERR_DROP_INDEX_FK)
596
cursor->info(HA_STATUS_ERRKEY | HA_STATUS_NO_LOCK);
598
return(cursor->errkey);
602
This is a short term fix. Long term we will used the TableIdentifier to do the actual comparison.
604
bool operator<(const Table &right) const
606
return getShare()->getCacheKey() < right.getShare()->getCacheKey();
609
static bool compare(const Table *a, const Table *b)
614
friend std::ostream& operator<<(std::ostream& output, const Table &table)
616
if (table.getShare())
619
output << table.getShare()->getSchemaName();
621
output << table.getShare()->getTableName();
623
output << table.getShare()->getTableTypeAsString();
628
output << "Table:(has no share)";
631
return output; // for multiple << operators.
635
virtual bool isPlaceHolder(void) const
646
* This class defines the information for foreign keys.
567
Table *create_virtual_tmp_table(Session *session, List<CreateField> &field_list);
569
typedef struct st_foreign_key_info
653
* This is the constructor with all properties set.
655
* @param[in] in_foreign_id The id of the foreign key
656
* @param[in] in_referenced_db The referenced database name of the foreign key
657
* @param[in] in_referenced_table The referenced table name of the foreign key
658
* @param[in] in_update_method The update method of the foreign key.
659
* @param[in] in_delete_method The delete method of the foreign key.
660
* @param[in] in_referenced_key_name The name of referenced key
661
* @param[in] in_foreign_fields The foreign fields
662
* @param[in] in_referenced_fields The referenced fields
664
ForeignKeyInfo(LEX_STRING *in_foreign_id,
665
LEX_STRING *in_referenced_db,
666
LEX_STRING *in_referenced_table,
667
LEX_STRING *in_update_method,
668
LEX_STRING *in_delete_method,
669
LEX_STRING *in_referenced_key_name,
670
List<LEX_STRING> in_foreign_fields,
671
List<LEX_STRING> in_referenced_fields)
673
foreign_id(in_foreign_id),
674
referenced_db(in_referenced_db),
675
referenced_table(in_referenced_table),
676
update_method(in_update_method),
677
delete_method(in_delete_method),
678
referenced_key_name(in_referenced_key_name),
679
foreign_fields(in_foreign_fields),
680
referenced_fields(in_referenced_fields)
685
* This is the default constructor. All properties are set to default values for their types.
688
: foreign_id(NULL), referenced_db(NULL), referenced_table(NULL),
689
update_method(NULL), delete_method(NULL), referenced_key_name(NULL)
694
* Gets the foreign id.
696
* @ retval the foreign id
698
const LEX_STRING *getForeignId() const
705
* Gets the name of the referenced database.
707
* @ retval the name of the referenced database
709
const LEX_STRING *getReferencedDb() const
711
return referenced_db;
716
* Gets the name of the referenced table.
718
* @ retval the name of the referenced table
720
const LEX_STRING *getReferencedTable() const
722
return referenced_table;
727
* Gets the update method.
729
* @ retval the update method
731
const LEX_STRING *getUpdateMethod() const
733
return update_method;
738
* Gets the delete method.
740
* @ retval the delete method
742
const LEX_STRING *getDeleteMethod() const
744
return delete_method;
749
* Gets the name of the referenced key.
751
* @ retval the name of the referenced key
753
const LEX_STRING *getReferencedKeyName() const
755
return referenced_key_name;
760
* Gets the foreign fields.
762
* @ retval the foreign fields
764
const List<LEX_STRING> &getForeignFields() const
766
return foreign_fields;
771
* Gets the referenced fields.
773
* @ retval the referenced fields
775
const List<LEX_STRING> &getReferencedFields() const
777
return referenced_fields;
783
LEX_STRING *foreign_id;
785
* The name of the reference database.
787
LEX_STRING *referenced_db;
789
* The name of the reference table.
791
LEX_STRING *referenced_table;
795
LEX_STRING *update_method;
799
LEX_STRING *delete_method;
801
* The name of the referenced key.
803
LEX_STRING *referenced_key_name;
805
* The foreign fields.
807
List<LEX_STRING> foreign_fields;
809
* The referenced fields.
811
List<LEX_STRING> referenced_fields;
571
LEX_STRING *forein_id;
572
LEX_STRING *referenced_db;
573
LEX_STRING *referenced_table;
574
LEX_STRING *update_method;
575
LEX_STRING *delete_method;
576
LEX_STRING *referenced_key_name;
577
List<LEX_STRING> foreign_fields;
578
List<LEX_STRING> referenced_fields;
816
#define JOIN_TYPE_LEFT 1
817
#define JOIN_TYPE_RIGHT 2
585
#define JOIN_TYPE_LEFT 1
586
#define JOIN_TYPE_RIGHT 2
820
589
class select_union;
821
590
class Tmp_Table_Param;
823
void free_blobs(Table *table);
824
int set_zone(int nr,int min_zone,int max_zone);
825
uint32_t convert_period_to_month(uint32_t period);
826
uint32_t convert_month_to_period(uint32_t month);
828
int test_if_number(char *str,int *res,bool allow_wildcards);
829
void change_byte(unsigned char *,uint,char,char);
831
namespace optimizer { class SqlSelect; }
833
void change_double_for_sort(double nr,unsigned char *to);
834
double my_double_round(double value, int64_t dec, bool dec_unsigned,
836
int get_quick_record(optimizer::SqlSelect *select);
838
void find_date(char *pos,uint32_t *vek,uint32_t flag);
839
TYPELIB *convert_strings_to_array_type(char * *typelibs, char * *end);
840
TYPELIB *typelib(memory::Root *mem_root, List<String> &strings);
841
ulong get_form_pos(int file, unsigned char *head, TYPELIB *save_names);
842
void append_unescaped(String *res, const char *pos, uint32_t length);
844
int rename_file_ext(const char * from,const char * to,const char * ext);
845
bool check_column_name(const char *name);
846
bool check_db_name(Session *session, SchemaIdentifier &schema);
847
bool check_table_name(const char *name, uint32_t length);
849
} /* namespace drizzled */
851
#include "drizzled/table/instance.h"
852
#include "drizzled/table/concurrent.h"
592
typedef struct st_changed_table_list
594
struct st_changed_table_list *next;
599
struct open_table_list_st
606
open_table_list_st() :
854
613
#endif /* DRIZZLED_TABLE_H */