Inserting rows
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...