169
170
switch(proto_field_type)
171
case drizzled::message::Table::Field::TINYINT:
172
case message::Table::Field::TINYINT:
172
173
field_type= DRIZZLE_TYPE_TINY;
174
case drizzled::message::Table::Field::INTEGER:
175
case message::Table::Field::INTEGER:
175
176
field_type= DRIZZLE_TYPE_LONG;
177
case drizzled::message::Table::Field::DOUBLE:
178
case message::Table::Field::DOUBLE:
178
179
field_type= DRIZZLE_TYPE_DOUBLE;
180
case drizzled::message::Table::Field::TIMESTAMP:
181
case message::Table::Field::TIMESTAMP:
181
182
field_type= DRIZZLE_TYPE_TIMESTAMP;
183
case drizzled::message::Table::Field::BIGINT:
184
case message::Table::Field::BIGINT:
184
185
field_type= DRIZZLE_TYPE_LONGLONG;
186
case drizzled::message::Table::Field::DATETIME:
187
case message::Table::Field::DATETIME:
187
188
field_type= DRIZZLE_TYPE_DATETIME;
189
case drizzled::message::Table::Field::DATE:
190
case message::Table::Field::DATE:
190
191
field_type= DRIZZLE_TYPE_DATE;
192
case drizzled::message::Table::Field::VARCHAR:
193
case message::Table::Field::VARCHAR:
193
194
field_type= DRIZZLE_TYPE_VARCHAR;
195
case drizzled::message::Table::Field::DECIMAL:
196
case message::Table::Field::DECIMAL:
196
197
field_type= DRIZZLE_TYPE_NEWDECIMAL;
198
case drizzled::message::Table::Field::ENUM:
199
case message::Table::Field::ENUM:
199
200
field_type= DRIZZLE_TYPE_ENUM;
201
case drizzled::message::Table::Field::BLOB:
202
case message::Table::Field::BLOB:
202
203
field_type= DRIZZLE_TYPE_BLOB;
277
278
int parse_table_proto(Session *session,
278
drizzled::message::Table &table,
279
message::Table &table,
279
280
TableShare *share)
282
283
handler *handler_file= NULL;
285
share->storage_engine= ha_resolve_by_name(session, table.engine().name());
288
drizzled::message::Table::TableOptions table_options;
285
share->setTableProto(new(std::nothrow) message::Table(table));
287
share->storage_engine= ha_resolve_by_name(session, table.engine().name());
289
message::Table::TableOptions table_options;
290
291
if (table.has_options())
291
292
table_options= table.options();
293
uint32_t db_create_options= HA_OPTION_LONG_BLOB_PTR;
294
uint32_t db_create_options= 0;
295
296
if (table_options.has_pack_keys())
303
304
if (table_options.pack_record())
304
305
db_create_options|= HA_OPTION_PACK_RECORD;
306
if (table_options.has_checksum())
308
if (table_options.checksum())
309
db_create_options|= HA_OPTION_CHECKSUM;
311
db_create_options|= HA_OPTION_NO_CHECKSUM;
314
if (table_options.has_delay_key_write())
316
if (table_options.delay_key_write())
317
db_create_options|= HA_OPTION_DELAY_KEY_WRITE;
319
db_create_options|= HA_OPTION_NO_DELAY_KEY_WRITE;
322
307
/* db_create_options was stored as 2 bytes in FRM
323
308
Any HA_OPTION_ that doesn't fit into 2 bytes was silently truncated away.
325
310
share->db_create_options= (db_create_options & 0x0000FFFF);
326
311
share->db_options_in_use= share->db_create_options;
329
share->avg_row_length= table_options.has_avg_row_length() ?
330
table_options.avg_row_length() : 0;
332
share->page_checksum= table_options.has_page_checksum() ?
333
(table_options.page_checksum()?HA_CHOICE_YES:HA_CHOICE_NO)
336
313
share->row_type= table_options.has_row_type() ?
337
314
(enum row_type) table_options.row_type() : ROW_TYPE_DEFAULT;
364
341
share->db_low_byte_first= true;
366
share->max_rows= table_options.has_max_rows() ?
367
table_options.max_rows() : 0;
369
share->min_rows= table_options.has_min_rows() ?
370
table_options.min_rows() : 0;
372
343
share->keys= table.indexes_size();
374
345
share->key_parts= 0;
403
374
KEY* keyinfo= share->key_info;
404
375
for (int keynr= 0; keynr < table.indexes_size(); keynr++, keyinfo++)
406
drizzled::message::Table::Index indx= table.indexes(keynr);
377
message::Table::Index indx= table.indexes(keynr);
408
379
keyinfo->table= 0;
409
380
keyinfo->flags= 0;
447
418
switch(indx.type())
449
case drizzled::message::Table::Index::UNKNOWN_INDEX:
420
case message::Table::Index::UNKNOWN_INDEX:
450
421
keyinfo->algorithm= HA_KEY_ALG_UNDEF;
452
case drizzled::message::Table::Index::BTREE:
423
case message::Table::Index::BTREE:
453
424
keyinfo->algorithm= HA_KEY_ALG_BTREE;
455
case drizzled::message::Table::Index::RTREE:
426
case message::Table::Index::RTREE:
456
427
keyinfo->algorithm= HA_KEY_ALG_RTREE;
458
case drizzled::message::Table::Index::HASH:
429
case message::Table::Index::HASH:
459
430
keyinfo->algorithm= HA_KEY_ALG_HASH;
461
case drizzled::message::Table::Index::FULLTEXT:
432
case message::Table::Index::FULLTEXT:
462
433
keyinfo->algorithm= HA_KEY_ALG_FULLTEXT;
536
507
share->connect_string.str= strmake_root(&share->mem_root, str, len);
539
if (table_options.has_comment())
541
size_t len= table_options.comment().length();
542
const char* str= table_options.comment().c_str();
544
share->comment.length= len;
545
share->comment.str= strmake_root(&share->mem_root, str, len);
548
510
share->key_block_size= table_options.has_key_block_size() ?
549
511
table_options.key_block_size() : 0;
570
532
for (unsigned int fieldnr= 0; fieldnr < share->fields; fieldnr++)
572
drizzled::message::Table::Field pfield= table.field(fieldnr);
534
message::Table::Field pfield= table.field(fieldnr);
573
535
if (pfield.has_constraints() && pfield.constraints().is_nullable())
587
549
case DRIZZLE_TYPE_BLOB:
588
550
case DRIZZLE_TYPE_VARCHAR:
590
drizzled::message::Table::Field::StringFieldOptions field_options=
552
message::Table::Field::StringFieldOptions field_options=
591
553
pfield.string_options();
593
555
const CHARSET_INFO *cs= get_charset(field_options.has_collation_id()?
617
579
case DRIZZLE_TYPE_NEWDECIMAL:
619
drizzled::message::Table::Field::NumericFieldOptions fo= pfield.numeric_options();
581
message::Table::Field::NumericFieldOptions fo= pfield.numeric_options();
621
582
field_pack_length[fieldnr]=
622
583
my_decimal_get_binary_size(fo.precision(), fo.scale());
697
658
for (unsigned int fieldnr= 0; fieldnr < share->fields; fieldnr++)
699
drizzled::message::Table::Field pfield= table.field(fieldnr);
660
message::Table::Field pfield= table.field(fieldnr);
701
662
/* field names */
702
663
share->fieldnames.type_names[fieldnr]= strmake_root(&share->mem_root,
706
667
share->fieldnames.type_lengths[fieldnr]= pfield.name().length();
708
669
/* enum typelibs */
709
if (pfield.type() != drizzled::message::Table::Field::ENUM)
670
if (pfield.type() != message::Table::Field::ENUM)
712
drizzled::message::Table::Field::SetFieldOptions field_options=
713
pfield.set_options();
673
message::Table::Field::SetFieldOptions field_options= pfield.set_options();
715
675
const CHARSET_INFO *charset= get_charset(field_options.has_collation_id()?
716
676
field_options.collation_id() : 0);
767
727
for (unsigned int fieldnr= 0; fieldnr < share->fields; fieldnr++)
769
drizzled::message::Table::Field pfield= table.field(fieldnr);
729
message::Table::Field pfield= table.field(fieldnr);
771
731
enum column_format_type column_format= COLUMN_FORMAT_TYPE_DEFAULT;
773
733
switch(pfield.format())
775
case drizzled::message::Table::Field::DefaultFormat:
735
case message::Table::Field::DefaultFormat:
776
736
column_format= COLUMN_FORMAT_TYPE_DEFAULT;
778
case drizzled::message::Table::Field::FixedFormat:
738
case message::Table::Field::FixedFormat:
779
739
column_format= COLUMN_FORMAT_TYPE_FIXED;
781
case drizzled::message::Table::Field::DynamicFormat:
741
case message::Table::Field::DynamicFormat:
782
742
column_format= COLUMN_FORMAT_TYPE_DYNAMIC;
840
800
if (field_type==DRIZZLE_TYPE_BLOB
841
801
|| field_type==DRIZZLE_TYPE_VARCHAR)
843
drizzled::message::Table::Field::StringFieldOptions field_options=
803
message::Table::Field::StringFieldOptions field_options=
844
804
pfield.string_options();
846
806
charset= get_charset(field_options.has_collation_id()?
854
814
if (field_type==DRIZZLE_TYPE_ENUM)
856
drizzled::message::Table::Field::SetFieldOptions field_options=
816
message::Table::Field::SetFieldOptions field_options=
857
817
pfield.set_options();
859
819
charset= get_charset(field_options.has_collation_id()?
1183
1143
if (!(bitmaps= (my_bitmap_map*) alloc_root(&share->mem_root,
1184
1144
share->column_bitmap_size)))
1186
bitmap_init(&share->all_set, bitmaps, share->fields);
1187
bitmap_set_all(&share->all_set);
1146
share->all_set.init(bitmaps, share->fields);
1147
share->all_set.setAll();
1189
1149
if (handler_file)
1190
1150
delete handler_file;
1450
1410
bitmap_size= share->column_bitmap_size;
1451
1411
if (!(bitmaps= (unsigned char*) alloc_root(&outparam->mem_root, bitmap_size*3)))
1453
bitmap_init(&outparam->def_read_set,
1454
(my_bitmap_map*) bitmaps, share->fields);
1455
bitmap_init(&outparam->def_write_set,
1456
(my_bitmap_map*) (bitmaps+bitmap_size), share->fields);
1457
bitmap_init(&outparam->tmp_set,
1458
(my_bitmap_map*) (bitmaps+bitmap_size*2), share->fields);
1413
outparam->def_read_set.init((my_bitmap_map*) bitmaps, share->fields);
1414
outparam->def_write_set.init((my_bitmap_map*) (bitmaps+bitmap_size), share->fields);
1415
outparam->tmp_set.init((my_bitmap_map*) (bitmaps+bitmap_size*2), share->fields);
1459
1416
outparam->default_column_bitmaps();
1461
1418
/* The table struct is now initialized; Open the table */
1774
1731
uint32_t field_count= s->fields;
1776
bitmap_init(&this->def_read_set, (my_bitmap_map*) bitmaps, field_count);
1777
bitmap_init(&this->tmp_set, (my_bitmap_map*) (bitmaps+ bitmap_buffer_size(field_count)), field_count);
1733
this->def_read_set.init((my_bitmap_map*) bitmaps, field_count);
1734
this->tmp_set.init((my_bitmap_map*) (bitmaps+ bitmap_buffer_size(field_count)), field_count);
1779
1736
/* write_set and all_set are copies of read_set */
1780
1737
def_write_set= def_read_set;
1781
1738
s->all_set= def_read_set;
1782
bitmap_set_all(&this->s->all_set);
1739
this->s->all_set.setAll();
1783
1740
default_column_bitmaps();
1788
void Table::updateCreateInfo(HA_CREATE_INFO *create_info)
1745
void Table::updateCreateInfo(HA_CREATE_INFO *create_info,
1746
message::Table *table_proto)
1790
create_info->max_rows= s->max_rows;
1791
create_info->min_rows= s->min_rows;
1748
message::Table::TableOptions *table_options= table_proto->mutable_options();
1792
1749
create_info->table_options= s->db_create_options;
1793
create_info->avg_row_length= s->avg_row_length;
1794
1750
create_info->block_size= s->block_size;
1795
1751
create_info->row_type= s->row_type;
1796
1752
create_info->default_table_charset= s->table_charset;
1797
1753
create_info->table_charset= 0;
1798
create_info->comment= s->comment;
1754
table_options->set_comment(s->getComment());
1803
1757
int rename_file_ext(const char * from,const char * to,const char * ext)
1934
1888
bitmap_clear_all(&table->def_read_set);
1935
1889
bitmap_clear_all(&table->def_write_set);
1937
memset(def_read_set.bitmap, 0, s->column_bitmap_size*2);
1891
def_read_set.clearAll();
1892
def_write_set.clearAll();
1938
1893
column_bitmaps_set(&def_read_set, &def_write_set);
1973
1928
void Table::mark_columns_used_by_index(uint32_t index)
1975
MY_BITMAP *bitmap= &tmp_set;
1930
MyBitmap *bitmap= &tmp_set;
1977
1932
(void) file->extra(HA_EXTRA_KEYREAD);
1978
bitmap_clear_all(bitmap);
1979
1934
mark_columns_used_by_index_no_reset(index, bitmap);
1980
1935
column_bitmaps_set(bitmap, bitmap);
2015
1970
void Table::mark_columns_used_by_index_no_reset(uint32_t index,
2018
1973
KEY_PART_INFO *key_part= key_info[index].key_part;
2019
1974
KEY_PART_INFO *key_part_end= (key_part +
2020
1975
key_info[index].key_parts);
2021
1976
for (;key_part != key_part_end; key_part++)
2022
bitmap_set_bit(bitmap, key_part->fieldnr-1);
1977
bitmap->setBit(key_part->fieldnr-1);
2769
2725
table->storeRecordAsDefault(); // Make empty default record
2771
2727
if (session->variables.tmp_table_size == ~ (uint64_t) 0) // No limit
2772
share->max_rows= ~(ha_rows) 0;
2728
max_rows= ~(uint64_t) 0;
2774
share->max_rows= (ha_rows) (((share->db_type() == heap_engine) ?
2775
min(session->variables.tmp_table_size,
2776
session->variables.max_heap_table_size) :
2777
session->variables.tmp_table_size) /
2730
max_rows= (uint64_t) (((share->db_type() == heap_engine) ?
2731
min(session->variables.tmp_table_size,
2732
session->variables.max_heap_table_size) :
2733
session->variables.tmp_table_size) /
2780
set_if_bigger(share->max_rows,(ha_rows)1); // For dummy start options
2736
set_if_bigger(max_rows, (uint64_t)1); // For dummy start options
2782
2738
Push the LIMIT clause to the temporary table creation, so that we
2783
2739
materialize only up to 'rows_limit' records instead of all result records.
2785
set_if_smaller(share->max_rows, rows_limit);
2741
set_if_smaller(max_rows, rows_limit);
2743
share->setMaxRows(max_rows);
2786
2745
param->end_write_records= rows_limit;
2788
2747
keyinfo= param->keyinfo;
3383
my_bitmap_map *Table::use_all_columns(MY_BITMAP *bitmap)
3342
my_bitmap_map *Table::use_all_columns(MyBitmap *bitmap)
3385
my_bitmap_map *old= bitmap->bitmap;
3386
bitmap->bitmap= s->all_set.bitmap;
3344
my_bitmap_map *old= bitmap->getBitmap();
3345
bitmap->setBitmap(s->all_set.getBitmap());
3390
3349
void Table::restore_column_map(my_bitmap_map *old)
3392
read_set->bitmap= old;
3351
read_set->setBitmap(old);
3395
3354
uint32_t Table::find_shortest_key(const key_map *usable_keys)