130
boost::dynamic_bitset<> *read_set; /* Active column sets */
131
boost::dynamic_bitset<> *write_set; /* Active column sets */
133
MyBitmap *read_set; /* Active column sets */
134
MyBitmap *write_set; /* Active column sets */
133
136
uint32_t tablenr;
134
137
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... */
139
MyBitmap def_read_set; /**< Default read set of columns */
140
MyBitmap def_write_set; /**< Default write set of columns */
141
MyBitmap tmp_set; /* Not sure about this... */
140
143
Session *in_use; /**< Pointer to the current session using this object */
141
144
Session *getSession()
380
371
void resetTable(Session *session, TableShare *share, uint32_t db_stat_arg);
382
373
/* 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);
374
inline const TableShare *getShare() const { assert(s); return s; } /* Get rid of this long term */
375
inline bool hasShare() const { return s ? true : false ; } /* Get rid of this long term */
376
inline TableShare *getMutableShare() { assert(s); return s; } /* Get rid of this long term */
377
inline void setShare(TableShare *new_share) { s= new_share; } /* Get rid of this long term */
378
inline uint32_t sizeKeys() { return s->sizeKeys(); }
379
inline uint32_t sizeFields() { return s->sizeFields(); }
380
inline uint32_t getRecordLength() const { return s->getRecordLength(); }
381
inline uint32_t sizeBlobFields() { return s->blob_fields; }
382
inline uint32_t *getBlobField() { return &s->blob_field[0]; }
404
384
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. */
386
if (arg < s->blob_fields)
387
return (Field_blob*) field[s->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(); }
391
inline uint8_t getBlobPtrSize() { return s->blob_ptr_size; }
392
inline uint32_t getNullBytes() { return s->null_bytes; }
393
inline uint32_t getNullFields() { return s->null_fields; }
394
inline unsigned char *getDefaultValues() { return s->getDefaultValues(); }
395
inline const char *getSchemaName() const { return s->getSchemaName(); }
396
inline const char *getTableName() const { return s->getTableName(); }
418
inline bool isDatabaseLowByteFirst() { return getShare()->db_low_byte_first; } /* Portable row format */
419
inline bool isNameLock() const { return open_placeholder; }
398
inline bool isDatabaseLowByteFirst() { return s->db_low_byte_first; } /* Portable row format */
399
inline bool isNameLock() const { return s->isNameLock(); }
400
inline bool isReplaceWithNameLock() { return s->replace_with_name_lock; }
401
inline bool isWaitingOnCondition() const { return s->isWaitingOnCondition(); } /* Protection against free */
421
403
uint32_t index_flags(uint32_t idx) const
423
return getShare()->storage_engine->index_flags(getShare()->getKeyInfo(idx).algorithm);
405
return s->storage_engine->index_flags(s->getKeyInfo(idx).algorithm);
426
408
inline plugin::StorageEngine *getEngine() const /* table_type for handler */
428
return getShare()->storage_engine;
410
return s->storage_engine;
431
413
Cursor &getCursor() const /* table_type for handler */
419
/* For TMP tables, should be pulled out as a class */
420
void setup_tmp_table_column_bitmaps(unsigned char *bitmaps);
421
bool create_myisam_tmp_table(KeyInfo *keyinfo,
422
MI_COLUMNDEF *start_recinfo,
423
MI_COLUMNDEF **recinfo,
425
void free_tmp_table(Session *session);
426
bool open_tmp_table();
437
427
size_t max_row_length(const unsigned char *data);
438
428
uint32_t find_shortest_key(const key_map *usable_keys);
439
429
bool compare_record(Field **ptr);
440
bool records_are_comparable();
441
bool compare_records();
430
bool compare_record();
442
431
/* TODO: the (re)storeRecord's may be able to be further condensed */
443
432
void storeRecord();
444
433
void storeRecordAsInsert();
470
458
bool fill_item_list(List<Item> *item_list) const;
471
459
void clear_column_bitmaps(void);
472
460
void prepare_for_position(void);
473
void mark_columns_used_by_index_no_reset(uint32_t index, boost::dynamic_bitset<>& bitmap);
461
void mark_columns_used_by_index_no_reset(uint32_t index, MyBitmap *map);
474
462
void mark_columns_used_by_index_no_reset(uint32_t index);
475
463
void mark_columns_used_by_index(uint32_t index);
476
464
void restore_column_maps_after_mark_index();
478
466
void mark_columns_needed_for_update(void);
479
467
void mark_columns_needed_for_delete(void);
480
468
void mark_columns_needed_for_insert(void);
481
void column_bitmaps_set(boost::dynamic_bitset<>& read_set_arg,
482
boost::dynamic_bitset<>& write_set_arg);
484
void restore_column_map(const boost::dynamic_bitset<>& old);
486
const boost::dynamic_bitset<> use_all_columns(boost::dynamic_bitset<>& map);
469
inline void column_bitmaps_set(MyBitmap *read_set_arg,
470
MyBitmap *write_set_arg)
472
read_set= read_set_arg;
473
write_set= write_set_arg;
476
void restore_column_map(my_bitmap_map *old);
478
my_bitmap_map *use_all_columns(MyBitmap *bitmap);
487
479
inline void use_all_columns()
489
column_bitmaps_set(getMutableShare()->all_set, getMutableShare()->all_set);
481
column_bitmaps_set(&s->all_set, &s->all_set);
492
484
inline void default_column_bitmaps()
498
490
/* Both of the below should go away once we can move this bit to the field objects */
499
491
inline bool isReadSet(uint32_t index)
501
return read_set->test(index);
493
return read_set->isBitSet(index);
504
496
inline void setReadSet(uint32_t index)
506
read_set->set(index);
498
read_set->setBit(index);
509
501
inline void setReadSet()
514
506
inline void clearReadSet(uint32_t index)
516
read_set->reset(index);
508
read_set->clearBit(index);
519
511
inline void clearReadSet()
513
read_set->clearAll();
524
516
inline bool isWriteSet(uint32_t index)
526
return write_set->test(index);
518
return write_set->isBitSet(index);
529
521
inline void setWriteSet(uint32_t index)
531
write_set->set(index);
523
write_set->setBit(index);
534
526
inline void setWriteSet()
539
531
inline void clearWriteSet(uint32_t index)
541
write_set->reset(index);
533
write_set->clearBit(index);
544
536
inline void clearWriteSet()
538
write_set->clearAll();
549
541
/* Is table open or should be treated as such by name-locking? */
614
625
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)";
628
output << table.getShare()->getSchemaName();
630
output << table.getShare()->getTableName();
632
output << table.getShare()->getTableTypeAsString();
631
635
return output; // for multiple << operators.
639
bool is_placeholder_created;
635
virtual bool isPlaceHolder(void) const
644
return is_placeholder_created;
831
852
namespace optimizer { class SqlSelect; }
854
ha_rows filesort(Session *session,
856
st_sort_field *sortorder,
858
optimizer::SqlSelect *select,
861
ha_rows *examined_rows);
863
void filesort_free_buffers(Table *table, bool full);
833
864
void change_double_for_sort(double nr,unsigned char *to);
834
865
double my_double_round(double value, int64_t dec, bool dec_unsigned,
839
870
TYPELIB *convert_strings_to_array_type(char * *typelibs, char * *end);
840
871
TYPELIB *typelib(memory::Root *mem_root, List<String> &strings);
841
872
ulong get_form_pos(int file, unsigned char *head, TYPELIB *save_names);
873
ulong next_io_size(ulong pos);
842
874
void append_unescaped(String *res, const char *pos, uint32_t length);
844
876
int rename_file_ext(const char * from,const char * to,const char * ext);