mariadb/innobase/include/row0vers.ic
unknown adb703943d Added xml patch to mysqldump.
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
2001-11-05 23:48:03 +02:00

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);
}