mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
adb703943d
Made innodb to compile more cleanly with debugging options enabled. Fixed a few bugs and found a few possible bugs, which I hope Heikki will check. Comments needs to be fixed too. Some while() functions should be changed to do ... until for documenting purposes, because some of them must and will be processed at least once, or a variable would be used uninitialized. Regards, Jani client/mysqldump.c: Added xml output. Patch originally from Gary Huntress, but needed a some clean up. innobase/btr/btr0btr.c: cleaner compiling innobase/btr/btr0cur.c: cleaner compiling innobase/btr/btr0sea.c: cleaner compiling / found a bug ?? innobase/buf/buf0buf.c: Fixed a bug. innobase/buf/buf0lru.c: Fixed a bug. innobase/data/data0data.c: cleaner compiling innobase/dict/dict0boot.c: cleaner compiling innobase/dict/dict0crea.c: cleaner compiling innobase/dict/dict0dict.c: cleaner compiling innobase/dict/dict0load.c: cleaner compiling innobase/eval/eval0eval.c: cleaner compiling / found a bug ?? innobase/fil/fil0fil.c: cleaner compiling innobase/fsp/fsp0fsp.c: cleaner compiling innobase/ibuf/ibuf0ibuf.c: cleaner compiling innobase/include/btr0btr.ic: cleaner compiling innobase/include/buf0buf.ic: cleaner compiling innobase/include/dict0dict.ic: cleaner compiling innobase/include/ha0ha.ic: cleaner compiling innobase/include/row0mysql.ic: cleaner compiling innobase/include/row0vers.ic: cleaner compiling innobase/include/sync0rw.ic: cleaner compiling innobase/lock/lock0lock.c: cleaner compiling innobase/mem/mem0dbg.c: cleaner compiling innobase/mtr/mtr0mtr.c: cleaner compiling innobase/odbc/odbc0odbc.c: cleaner compiling innobase/os/os0thread.c: cleaner compiling innobase/page/page0cur.c: cleaner compiling. while() should be changed to do ... until for documenting purposes. innobase/page/page0page.c: cleaner compiling innobase/pars/pars0opt.c: cleaner compiling. while() should be changed to do ... until, because it will and must be processed at least once (for documenting purposes) innobase/pars/pars0pars.c: cleaner compiling innobase/que/que0que.c: cleaner compiling innobase/rem/rem0cmp.c: cleaner compiling innobase/rem/rem0rec.c: cleaner compiling innobase/row/row0ins.c: cleaner compiling innobase/row/row0mysql.c: cleaner compiling innobase/row/row0purge.c: cleaner compiling innobase/row/row0sel.c: cleaner compiling innobase/row/row0uins.c: cleaner compiling innobase/row/row0umod.c: cleaner compiling innobase/row/row0upd.c: cleaner compiling innobase/srv/srv0srv.c: cleaner compiling innobase/srv/srv0start.c: cleaner compiling innobase/sync/sync0arr.c: cleaner compiling innobase/sync/sync0rw.c: cleaner compiling innobase/sync/sync0sync.c: cleaner compiling innobase/trx/trx0purge.c: cleaner compiling. in theory this could also be a bug, although probably not. But the logic needs to be checked, it could be that these variables may be used uninitialized. innobase/trx/trx0rec.c: cleaner compiling innobase/trx/trx0roll.c: cleaner compiling innobase/trx/trx0trx.c: cleaner compiling innobase/trx/trx0undo.c: cleaner compiling
83 lines
2.3 KiB
Text
83 lines
2.3 KiB
Text
/******************************************************
|
|
Row versions
|
|
|
|
(c) 1997 Innobase Oy
|
|
|
|
Created 2/6/1997 Heikki Tuuri
|
|
*******************************************************/
|
|
|
|
#include "row0row.h"
|
|
#include "dict0dict.h"
|
|
#include "read0read.h"
|
|
#include "page0page.h"
|
|
#include "log0recv.h"
|
|
|
|
/*************************************************************************
|
|
Fetches the trx id of a clustered index record or version. */
|
|
UNIV_INLINE
|
|
dulint
|
|
row_vers_get_trx_id(
|
|
/*================*/
|
|
/* out: trx id or ut_dulint_zero if the
|
|
clustered index record not found */
|
|
rec_t* rec, /* in: clustered index record, or an old
|
|
version of it */
|
|
dict_table_t* table) /* in: table */
|
|
{
|
|
return(row_get_rec_trx_id(rec, dict_table_get_first_index(table)));
|
|
}
|
|
|
|
/*************************************************************************
|
|
Checks if a consistent read can be performed immediately on the index
|
|
record, or if an older version is needed. */
|
|
UNIV_INLINE
|
|
ibool
|
|
row_vers_clust_rec_sees_older(
|
|
/*==========================*/
|
|
/* out: FALSE if can read immediately */
|
|
rec_t* rec, /* in: record which should be read or passed
|
|
over by a read cursor */
|
|
dict_index_t* index, /* in: clustered index */
|
|
read_view_t* view) /* in: read view */
|
|
{
|
|
ut_ad(index->type & DICT_CLUSTERED);
|
|
|
|
if (read_view_sees_trx_id(view, row_get_rec_trx_id(rec, index))) {
|
|
|
|
return(FALSE);
|
|
}
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
/*************************************************************************
|
|
Checks if a secondary index record can be read immediately by a consistent
|
|
read, or if an older version may be needed. To be sure, we will have to
|
|
look in the clustered index. */
|
|
UNIV_INLINE
|
|
ibool
|
|
row_vers_sec_rec_may_see_older(
|
|
/*===========================*/
|
|
/* out: FALSE if can be read immediately */
|
|
rec_t* rec, /* in: record which should be read or passed */
|
|
dict_index_t* index __attribute__((unused)),/* in: secondary index */
|
|
read_view_t* view) /* in: read view */
|
|
{
|
|
page_t* page;
|
|
|
|
ut_ad(!(index->type & DICT_CLUSTERED));
|
|
|
|
page = buf_frame_align(rec);
|
|
|
|
if ((ut_dulint_cmp(page_get_max_trx_id(page), view->up_limit_id) >= 0)
|
|
|| recv_recovery_is_on()) {
|
|
|
|
/* It may be that the record was inserted or modified by a
|
|
transaction the view should not see: we have to look in the
|
|
clustered index */
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
return(FALSE);
|
|
}
|