MCPcopy Create free account
hub / github.com/MariaDB/server / delete_row

Method delete_row

sql/sql_delete.cc:308–375  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

306*/
307template <bool replace>
308int TABLE::delete_row(bool treat_versioned)
309{
310 int err= 0;
311 bool remembered_pos= false;
312 uchar *del_buf= record[replace ? 1 : 0];
313 bool delete_row= !treat_versioned
314 || in_use->lex->vers_conditions.delete_history
315 || versioned(VERS_TRX_ID)
316 || !vers_end_field()->is_max(
317 vers_end_field()->ptr_in_record(del_buf));
318
319 if (!delete_row)
320 {
321 if ((err= file->extra(HA_EXTRA_REMEMBER_POS)))
322 return err;
323 remembered_pos= true;
324
325 if (replace)
326 {
327 store_record(this, record[2]);
328 restore_record(this, record[1]);
329 }
330 else
331 {
332 store_record(this, record[1]);
333 }
334 vers_update_end();
335
336 Field *row_start= vers_start_field();
337 Field *row_end= vers_end_field();
338 // Don't make history row with negative lifetime
339 delete_row= row_start->cmp(row_start->ptr, row_end->ptr) > 0;
340
341 if (likely(!delete_row))
342 err= file->ha_update_row(record[1], record[0]);
343 if (unlikely(err))
344 {
345 /*
346 MDEV-23644: we get HA_ERR_FOREIGN_DUPLICATE_KEY iff we already got
347 history row with same trx_id which is the result of foreign key
348 action, so we don't need one more history row.
349
350 Additionally, delete the row if versioned record already exists.
351 This happens on replace, a very fast sequence of inserts and deletes,
352 or if timestamp is frozen.
353 */
354 delete_row= err == HA_ERR_FOUND_DUPP_KEY
355 || err == HA_ERR_FOUND_DUPP_UNIQUE
356 || err == HA_ERR_FOREIGN_DUPLICATE_KEY;
357 if (!delete_row)
358 return err;
359 }
360
361 if (delete_row)
362 del_buf= record[1];
363
364 if (replace)
365 restore_record(this, record[2]);

Callers 3

send_dataMethod · 0.45
rowid_table_deletesMethod · 0.45

Calls 6

ptr_in_recordMethod · 0.80
ha_update_rowMethod · 0.80
ha_delete_rowMethod · 0.80
is_maxMethod · 0.45
extraMethod · 0.45
cmpMethod · 0.45

Tested by

no test coverage detected