We have done almost everything MySQL needs to read the table data. But we do not know yet how to populate the table. No problem, we will do our write_row()
method now.
int ha_tocab::write_row(uchar *buf) { if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_INSERT) table->timestamp_field->set_time(); if (table->next_number_field && buf == table->record[0]) { int error; if ((error= update_auto_increment())) return error; }
As we know from previous chapters, the write_row()
method starts with the obligatory incantation that sets values for the TIMESTAMP
and AUTO_INCREMENT
columns.
if (pack_row(buf)) return HA_ERR_OUT_OF_MEM; int key_len = pack_key(ref, 0, buf);
Then we prepare the packed row and the primary key in the ref
buffer, and use Tokyo Cabinet's transactional features to simplify our write_row()
method significantly.
Even in non-transactional engines, MySQL expects the write_row()
method to be atomic. However, it performs a set of table...