1778
1779
return("BTREE");
1781
static ib_err_t write_row_to_haildb_tuple(Field **fields, ib_tpl_t tuple)
1782
static ib_err_t write_row_to_haildb_tuple(const unsigned char* buf,
1783
Field **fields, ib_tpl_t tuple)
1784
1786
ib_err_t err= DB_ERROR;
1787
ptrdiff_t row_offset= buf - (*fields)->getTable()->getInsertRecord();
1786
1789
for (Field **field= fields; *field; field++, colnr++)
1791
(**field).move_field_offset(row_offset);
1788
1793
if (! (**field).isWriteSet() && (**field).is_null())
1795
(**field).move_field_offset(-row_offset);
1791
1799
if ((**field).is_null())
1793
1801
err= ib_col_set_value(tuple, colnr, NULL, IB_SQL_NULL);
1794
1802
assert(err == DB_SUCCESS);
1803
(**field).move_field_offset(-row_offset);
1939
write_row_to_haildb_tuple(getTable()->getFields(), tuple);
1950
write_row_to_haildb_tuple(record, getTable()->getFields(), tuple);
1941
1952
if (share->has_hidden_primary_key)
1969
1980
err= ib_cursor_first(cursor);
1970
1981
assert(err == DB_SUCCESS || err == DB_END_OF_INDEX);
1972
write_row_to_haildb_tuple(getTable()->getFields(), tuple);
1983
write_row_to_haildb_tuple(record, getTable()->getFields(), tuple);
1974
1985
err= ib_cursor_insert_row(cursor, tuple);
1975
1986
assert(err==DB_SUCCESS); // probably be nice and process errors
1983
1994
tuple= ib_tuple_clear(tuple);
1984
1995
ib_tuple_delete(tuple);
1985
1997
err= ib_cursor_reset(cursor);
1990
int HailDBCursor::doUpdateRecord(const unsigned char *,
2002
int HailDBCursor::doUpdateRecord(const unsigned char *old_data,
2003
unsigned char *new_data)
1993
2005
ib_tpl_t update_tuple;
2007
bool created_tuple= false;
1996
2009
update_tuple= ib_clust_read_tuple_create(cursor);
2013
ib_trx_t transaction= *get_trx(getTable()->in_use);
2014
ib_cursor_attach_trx(cursor, transaction);
2016
store_key_value_from_haildb(getTable()->key_info + getTable()->getShare()->getPrimaryKey(),
2017
ref, ref_length, old_data);
2019
ib_tpl_t search_tuple= ib_clust_search_tuple_create(cursor);
2021
fill_ib_search_tpl_from_drizzle_key(search_tuple,
2022
getTable()->key_info + 0,
2025
err= ib_cursor_set_lock_mode(cursor, IB_LOCK_X);
2026
assert(err == DB_SUCCESS);
2029
err= ib_cursor_moveto(cursor, search_tuple, IB_CUR_GE, &res);
2030
assert(err == DB_SUCCESS);
2032
tuple= ib_clust_read_tuple_create(cursor);
2034
err= ib_cursor_read_row(cursor, tuple);
2035
assert(err == DB_SUCCESS);// FIXME
2037
created_tuple= true;
1998
2040
err= ib_tuple_copy(update_tuple, tuple);
1999
2041
assert(err == DB_SUCCESS);
2001
write_row_to_haildb_tuple(getTable()->getFields(), update_tuple);
2043
write_row_to_haildb_tuple(new_data, getTable()->getFields(), update_tuple);
2003
2045
err= ib_cursor_update_row(cursor, tuple, update_tuple);
2005
2047
ib_tuple_delete(update_tuple);
2051
ib_err_t ib_err= ib_cursor_reset(cursor); //fixme check error
2052
assert(ib_err == DB_SUCCESS);
2053
tuple= ib_tuple_clear(tuple);
2054
ib_tuple_delete(tuple);
2007
2058
advance_cursor= true;
2009
2060
if (err == DB_SUCCESS)
2382
2435
if (flag & HA_STATUS_AUTO)
2383
2436
stats.auto_increment_value= 1;
2438
if (flag & HA_STATUS_ERRKEY) {
2439
const char *err_table_name;
2440
const char *err_index_name;
2442
ib_trx_t transaction= *get_trx(getTable()->in_use);
2444
err= ib_get_duplicate_key(transaction, &err_table_name, &err_index_name);
2448
for (unsigned int i = 0; i < getTable()->getShare()->keys; i++)
2450
if (strcmp(err_index_name, getTable()->key_info[i].name) == 0)