Commit 6216a8bf authored by mskold@mysql.com's avatar mskold@mysql.com

Fixes after code review of WL#1791 Handler: support update of primary key

parent f08af138
...@@ -604,7 +604,7 @@ int ha_ndbcluster::pk_read(const byte *key, uint key_len, byte *buf) ...@@ -604,7 +604,7 @@ int ha_ndbcluster::pk_read(const byte *key, uint key_len, byte *buf)
DBUG_DUMP("key", (char*)key, key_len); DBUG_DUMP("key", (char*)key, key_len);
if (!(op= trans->getNdbOperation(m_tabname)) || op->readTuple() != 0) if (!(op= trans->getNdbOperation(m_tabname)) || op->readTuple() != 0)
goto err; ERR_RETURN(trans->getNdbError());
if (table->primary_key == MAX_KEY) if (table->primary_key == MAX_KEY)
{ {
...@@ -612,10 +612,11 @@ int ha_ndbcluster::pk_read(const byte *key, uint key_len, byte *buf) ...@@ -612,10 +612,11 @@ int ha_ndbcluster::pk_read(const byte *key, uint key_len, byte *buf)
DBUG_PRINT("info", ("Using hidden key")); DBUG_PRINT("info", ("Using hidden key"));
DBUG_DUMP("key", (char*)key, 8); DBUG_DUMP("key", (char*)key, 8);
if (set_hidden_key(op, no_fields, key)) if (set_hidden_key(op, no_fields, key))
goto err; ERR_RETURN(trans->getNdbError());
// Read key at the same time, for future reference // Read key at the same time, for future reference
if (get_ndb_value(op, no_fields, NULL)) if (get_ndb_value(op, no_fields, NULL))
goto err; ERR_RETURN(trans->getNdbError());
} }
else else
{ {
...@@ -632,7 +633,7 @@ int ha_ndbcluster::pk_read(const byte *key, uint key_len, byte *buf) ...@@ -632,7 +633,7 @@ int ha_ndbcluster::pk_read(const byte *key, uint key_len, byte *buf)
retrieve_all_fields) retrieve_all_fields)
{ {
if (get_ndb_value(op, i, field->ptr)) if (get_ndb_value(op, i, field->ptr))
goto err; ERR_RETURN(trans->getNdbError());
} }
else else
{ {
...@@ -651,9 +652,6 @@ int ha_ndbcluster::pk_read(const byte *key, uint key_len, byte *buf) ...@@ -651,9 +652,6 @@ int ha_ndbcluster::pk_read(const byte *key, uint key_len, byte *buf)
unpack_record(buf); unpack_record(buf);
table->status= 0; table->status= 0;
DBUG_RETURN(0); DBUG_RETURN(0);
err:
ERR_RETURN(trans->getNdbError());
} }
...@@ -674,11 +672,11 @@ int ha_ndbcluster::complemented_pk_read(const byte *old_data, byte *new_data) ...@@ -674,11 +672,11 @@ int ha_ndbcluster::complemented_pk_read(const byte *old_data, byte *new_data)
DBUG_RETURN(0); DBUG_RETURN(0);
if (!(op= trans->getNdbOperation(m_tabname)) || op->readTuple() != 0) if (!(op= trans->getNdbOperation(m_tabname)) || op->readTuple() != 0)
goto err; ERR_RETURN(trans->getNdbError());
int res; int res;
if (res= set_primary_key_from_old_data(op, old_data)) if (res= set_primary_key_from_old_data(op, old_data))
return res; ERR_RETURN(trans->getNdbError());
// Read all unreferenced non-key field(s) // Read all unreferenced non-key field(s)
for (i= 0; i < no_fields; i++) for (i= 0; i < no_fields; i++)
...@@ -688,16 +686,11 @@ int ha_ndbcluster::complemented_pk_read(const byte *old_data, byte *new_data) ...@@ -688,16 +686,11 @@ int ha_ndbcluster::complemented_pk_read(const byte *old_data, byte *new_data)
(thd->query_id != field->query_id)) (thd->query_id != field->query_id))
{ {
if (get_ndb_value(op, i, field->ptr)) if (get_ndb_value(op, i, field->ptr))
goto err; ERR_RETURN(trans->getNdbError());
}
else
{
// Attribute was not to be read
m_value[i]= NULL;
} }
} }
if (trans->execute(NoCommit, IgnoreError) != 0) if (trans->execute(NoCommit) != 0)
{ {
table->status= STATUS_NOT_FOUND; table->status= STATUS_NOT_FOUND;
DBUG_RETURN(ndb_err(trans)); DBUG_RETURN(ndb_err(trans));
...@@ -707,9 +700,6 @@ int ha_ndbcluster::complemented_pk_read(const byte *old_data, byte *new_data) ...@@ -707,9 +700,6 @@ int ha_ndbcluster::complemented_pk_read(const byte *old_data, byte *new_data)
unpack_record(new_data); unpack_record(new_data);
table->status= 0; table->status= 0;
DBUG_RETURN(0); DBUG_RETURN(0);
err:
ERR_RETURN(trans->getNdbError());
} }
...@@ -1243,6 +1233,8 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data) ...@@ -1243,6 +1233,8 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data)
DBUG_RETURN(read_res); DBUG_RETURN(read_res);
} }
// Insert new row // Insert new row
rows_inserted= 0;
rows_to_insert= 1;
int insert_res= write_row(new_data); int insert_res= write_row(new_data);
if (!insert_res) if (!insert_res)
{ {
...@@ -1344,9 +1336,9 @@ int ha_ndbcluster::delete_row(const byte *record) ...@@ -1344,9 +1336,9 @@ int ha_ndbcluster::delete_row(const byte *record)
if (cursor) if (cursor)
{ {
/* /*
We are scanning records and want to update the record We are scanning records and want to delete the record
that was just found, call deleteTuple on the cursor that was just found, call deleteTuple on the cursor
to take over the lock to a new update operation to take over the lock to a new updatedelete operation
And thus setting the primary key of the record from And thus setting the primary key of the record from
the active record in cursor the active record in cursor
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment