mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
0da158aa2f
Bugs fixed: - Bug #20791 valgrind errors in InnoDB Remove Valgrind warning of Bug #20791 : in new database creation, we read the doublewrite buffer magic number from uninitialized memory; the code worked because it was extremely unlikely that the memory would contain the magic number - Bug #21784 DROP TABLE crashes 5.1.12-pre if concurrent queries on the table remove update_thd() in ::store_lock() Also includes numerous coding style fixes, etc. See file-level comments for details. sql/ha_innodb.cc: Applied InnoDB 5.1 snapshot ss787. r755: Merge a patch from MySQL AB (Mats Kindal): Lock and unlock prepare_commit_mutex under the same conditions. r782: Fix bug #21784 of a crash in DROP TABLE with concurrent queries on the table storage/innobase/Makefile.am: Applied InnoDB 5.1 snapshot ss787. r772: Merge changes from MySQL AB: ChangeSet 2006/08/23 13:59:16-07:00 brian@zim.(none) This patch removes need for a innodb to have its own configure. storage/innobase/btr/btr0btr.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/btr/btr0cur.c: Applied InnoDB 5.1 snapshot ss787. r761: btr_cur_search_to_nth_level(): Document where cursor is left at in PAGE_CUR_LE searches. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/btr/btr0pcur.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/btr/btr0sea.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/buf/buf0buf.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/buf/buf0flu.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/buf/buf0lru.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). storage/innobase/buf/buf0rea.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/data/data0data.c: Applied InnoDB 5.1 snapshot ss787. r743: dfield_print_raw(): Make static. Print at most 1000 bytes to avoid excessive space usage of the error log. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/data/data0type.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/dict/dict0boot.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/dict/dict0crea.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/dict/dict0dict.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. r767: Remove dict_col_t::aux, which was only used when copying an index definition to the data dictionary cache. storage/innobase/dict/dict0load.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/dict/dict0mem.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/eval/eval0eval.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/eval/eval0proc.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/fil/fil0fil.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/fsp/fsp0fsp.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/fut/fut0lst.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/ha/ha0ha.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/ibuf/ibuf0ibuf.c: Applied InnoDB 5.1 snapshot ss787. r735: Remove all traces of the obsolete concept of replicate spaces. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/include/btr0btr.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/btr0cur.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/btr0cur.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/btr0pcur.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/buf0buf.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/buf0buf.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/buf0flu.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/buf0rea.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/data0data.h: Applied InnoDB 5.1 snapshot ss787. r743: dfield_print_raw(): Make static. Print at most 1000 bytes to avoid excessive space usage of the error log. storage/innobase/include/data0data.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/data0type.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/dict0boot.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/dict0dict.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/dict0mem.h: Applied InnoDB 5.1 snapshot ss787. r767: Remove dict_col_t::aux, which was only used when copying an index definition to the data dictionary cache. storage/innobase/include/eval0eval.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/fut0lst.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/ibuf0ibuf.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/lock0lock.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/log0log.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/log0recv.h: Applied InnoDB 5.1 snapshot ss787. r735: Remove all traces of the obsolete concept of replicate spaces. storage/innobase/include/mach0data.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/mem0mem.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/include/mtr0log.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/mtr0mtr.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/os0file.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/page0cur.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/page0page.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). storage/innobase/include/que0que.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/read0read.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/rem0cmp.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/rem0rec.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/include/row0mysql.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/row0purge.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/row0row.h: Applied InnoDB 5.1 snapshot ss787. r777: Remove unused code. row_build(): Remove type==ROW_COPY_ALSO_EXTERNALS, because it is never passed. storage/innobase/include/row0row.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/row0sel.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/row0sel.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/row0undo.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/row0upd.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/sync0rw.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/sync0rw.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/sync0sync.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/sync0sync.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/trx0rec.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/trx0rseg.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/include/trx0sys.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/include/trx0trx.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/trx0trx.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/trx0undo.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/trx0undo.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/trx0xa.h: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/univ.i: Applied InnoDB 5.1 snapshot ss787. r772: Merge changes from MySQL AB: ChangeSet 2006/08/23 13:59:16-07:00 brian@zim.(none)· This patch removes need for a innodb to have its own configure.· univ.i: Replace ../ib_config.h with config.h. r777: Remove unused code. univ.i: Do not #define YYDEBUG, because it is only useful for debugging the grammar of the Bison-generated InnoDB SQL parser. storage/innobase/include/ut0byte.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/include/ut0rnd.ic: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/lock/lock0lock.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/log/log0log.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/log/log0recv.c: Applied InnoDB 5.1 snapshot ss787. r735: Remove all traces of the obsolete concept of replicate spaces. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/mem/mem0dbg.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/mem/mem0mem.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/mem/mem0pool.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/mtr/mtr0log.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/mtr/mtr0mtr.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/os/os0file.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/os/os0proc.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/os/os0sync.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/os/os0thread.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/page/page0cur.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/page/page0page.c: Applied InnoDB 5.1 snapshot ss787. r761: btr_cur_search_to_nth_level(): Document where cursor is left at in PAGE_CUR_LE searches. r762: page_validate(): Add missing space to error print, for real this time, following an error in r761. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/pars/pars0opt.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/pars/pars0pars.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/que/que0que.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/read/read0read.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/rem/rem0cmp.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/rem/rem0rec.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/row/row0ins.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/row/row0mysql.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/row/row0purge.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/row/row0row.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. r777: Remove unused code. row_build(): Remove type==ROW_COPY_ALSO_EXTERNALS, because it is never passed. storage/innobase/row/row0sel.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/row/row0uins.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/row/row0umod.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/row/row0undo.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/row/row0upd.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/row/row0vers.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/srv/srv0srv.c: Applied InnoDB 5.1 snapshot ss787. r741: srv_master_thread(): Add OS_THREAD_DUMMY_RETURN to get rid of a compiler warning "no return value from a function returning non-void". r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. r780: Add a warning comment above the place where we set srv_main_thread_op_info to "waiting for server activity" that mentions that this string should not be changed. storage/innobase/srv/srv0start.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/sync/sync0arr.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/sync/sync0rw.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/sync/sync0sync.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/thr/thr0loc.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/trx/trx0purge.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/trx/trx0rec.c: Applied InnoDB 5.1 snapshot ss787. r735: Remove all traces of the obsolete concept of replicate spaces. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/trx/trx0roll.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/trx/trx0rseg.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/trx/trx0sys.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/trx/trx0trx.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). r765: Split lines before binary operators, not after them. storage/innobase/trx/trx0undo.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/ut/ut0byte.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/ut/ut0dbg.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r764: Split lines before an opening parenthesis, not after one. Replace some printf(...) in debug builds with fprintf(stderr, ...). storage/innobase/ut/ut0mem.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/ut/ut0ut.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). r765: Split lines before binary operators, not after them. storage/innobase/ut/ut0vec.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files). storage/innobase/ut/ut0wqueue.c: Applied InnoDB 5.1 snapshot ss787. r763: Reindent the code base (except for ha_innodb.{cc,h} and generated parser and lexer files).
630 lines
16 KiB
Text
630 lines
16 KiB
Text
/******************************************************
|
|
The index tree persistent cursor
|
|
|
|
(c) 1996 Innobase Oy
|
|
|
|
Created 2/23/1996 Heikki Tuuri
|
|
*******************************************************/
|
|
|
|
|
|
/*************************************************************
|
|
Gets the rel_pos field for a cursor whose position has been stored. */
|
|
UNIV_INLINE
|
|
ulint
|
|
btr_pcur_get_rel_pos(
|
|
/*=================*/
|
|
/* out: BTR_PCUR_ON, ... */
|
|
btr_pcur_t* cursor) /* in: persistent cursor */
|
|
{
|
|
ut_ad(cursor);
|
|
ut_ad(cursor->old_rec);
|
|
ut_ad(cursor->old_stored == BTR_PCUR_OLD_STORED);
|
|
ut_ad(cursor->pos_state == BTR_PCUR_WAS_POSITIONED
|
|
|| cursor->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
|
|
return(cursor->rel_pos);
|
|
}
|
|
|
|
/*************************************************************
|
|
Sets the mtr field for a pcur. */
|
|
UNIV_INLINE
|
|
void
|
|
btr_pcur_set_mtr(
|
|
/*=============*/
|
|
btr_pcur_t* cursor, /* in: persistent cursor */
|
|
mtr_t* mtr) /* in, own: mtr */
|
|
{
|
|
ut_ad(cursor);
|
|
|
|
cursor->mtr = mtr;
|
|
}
|
|
|
|
/*************************************************************
|
|
Gets the mtr field for a pcur. */
|
|
UNIV_INLINE
|
|
mtr_t*
|
|
btr_pcur_get_mtr(
|
|
/*=============*/
|
|
/* out: mtr */
|
|
btr_pcur_t* cursor) /* in: persistent cursor */
|
|
{
|
|
ut_ad(cursor);
|
|
|
|
return(cursor->mtr);
|
|
}
|
|
|
|
/*************************************************************
|
|
Returns the btr cursor component of a persistent cursor. */
|
|
UNIV_INLINE
|
|
btr_cur_t*
|
|
btr_pcur_get_btr_cur(
|
|
/*=================*/
|
|
/* out: pointer to btr cursor component */
|
|
btr_pcur_t* cursor) /* in: persistent cursor */
|
|
{
|
|
return(&(cursor->btr_cur));
|
|
}
|
|
|
|
/*************************************************************
|
|
Returns the page cursor component of a persistent cursor. */
|
|
UNIV_INLINE
|
|
page_cur_t*
|
|
btr_pcur_get_page_cur(
|
|
/*==================*/
|
|
/* out: pointer to page cursor component */
|
|
btr_pcur_t* cursor) /* in: persistent cursor */
|
|
{
|
|
return(btr_cur_get_page_cur(&(cursor->btr_cur)));
|
|
}
|
|
|
|
/*************************************************************
|
|
Returns the page of a persistent cursor. */
|
|
UNIV_INLINE
|
|
page_t*
|
|
btr_pcur_get_page(
|
|
/*==============*/
|
|
/* out: pointer to the page */
|
|
btr_pcur_t* cursor) /* in: persistent cursor */
|
|
{
|
|
ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
|
|
return(page_cur_get_page(btr_pcur_get_page_cur(cursor)));
|
|
}
|
|
|
|
/*************************************************************
|
|
Returns the record of a persistent cursor. */
|
|
UNIV_INLINE
|
|
rec_t*
|
|
btr_pcur_get_rec(
|
|
/*=============*/
|
|
/* out: pointer to the record */
|
|
btr_pcur_t* cursor) /* in: persistent cursor */
|
|
{
|
|
ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
ut_ad(cursor->latch_mode != BTR_NO_LATCHES);
|
|
|
|
return(page_cur_get_rec(btr_pcur_get_page_cur(cursor)));
|
|
}
|
|
|
|
/******************************************************************
|
|
Gets the up_match value for a pcur after a search. */
|
|
UNIV_INLINE
|
|
ulint
|
|
btr_pcur_get_up_match(
|
|
/*==================*/
|
|
/* out: number of matched fields at the cursor
|
|
or to the right if search mode was PAGE_CUR_GE,
|
|
otherwise undefined */
|
|
btr_pcur_t* cursor) /* in: memory buffer for persistent cursor */
|
|
{
|
|
btr_cur_t* btr_cursor;
|
|
|
|
ut_ad((cursor->pos_state == BTR_PCUR_WAS_POSITIONED)
|
|
|| (cursor->pos_state == BTR_PCUR_IS_POSITIONED));
|
|
|
|
btr_cursor = btr_pcur_get_btr_cur(cursor);
|
|
|
|
ut_ad(btr_cursor->up_match != ULINT_UNDEFINED);
|
|
|
|
return(btr_cursor->up_match);
|
|
}
|
|
|
|
/******************************************************************
|
|
Gets the low_match value for a pcur after a search. */
|
|
UNIV_INLINE
|
|
ulint
|
|
btr_pcur_get_low_match(
|
|
/*===================*/
|
|
/* out: number of matched fields at the cursor
|
|
or to the right if search mode was PAGE_CUR_LE,
|
|
otherwise undefined */
|
|
btr_pcur_t* cursor) /* in: memory buffer for persistent cursor */
|
|
{
|
|
btr_cur_t* btr_cursor;
|
|
|
|
ut_ad((cursor->pos_state == BTR_PCUR_WAS_POSITIONED)
|
|
|| (cursor->pos_state == BTR_PCUR_IS_POSITIONED));
|
|
|
|
btr_cursor = btr_pcur_get_btr_cur(cursor);
|
|
ut_ad(btr_cursor->low_match != ULINT_UNDEFINED);
|
|
|
|
return(btr_cursor->low_match);
|
|
}
|
|
|
|
/*************************************************************
|
|
Checks if the persistent cursor is after the last user record on
|
|
a page. */
|
|
UNIV_INLINE
|
|
ibool
|
|
btr_pcur_is_after_last_on_page(
|
|
/*===========================*/
|
|
btr_pcur_t* cursor, /* in: persistent cursor */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
UT_NOT_USED(mtr);
|
|
ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
ut_ad(cursor->latch_mode != BTR_NO_LATCHES);
|
|
|
|
return(page_cur_is_after_last(btr_pcur_get_page_cur(cursor)));
|
|
}
|
|
|
|
/*************************************************************
|
|
Checks if the persistent cursor is before the first user record on
|
|
a page. */
|
|
UNIV_INLINE
|
|
ibool
|
|
btr_pcur_is_before_first_on_page(
|
|
/*=============================*/
|
|
btr_pcur_t* cursor, /* in: persistent cursor */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
UT_NOT_USED(mtr);
|
|
ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
ut_ad(cursor->latch_mode != BTR_NO_LATCHES);
|
|
|
|
return(page_cur_is_before_first(btr_pcur_get_page_cur(cursor)));
|
|
}
|
|
|
|
/*************************************************************
|
|
Checks if the persistent cursor is on a user record. */
|
|
UNIV_INLINE
|
|
ibool
|
|
btr_pcur_is_on_user_rec(
|
|
/*====================*/
|
|
btr_pcur_t* cursor, /* in: persistent cursor */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
ut_ad(cursor->latch_mode != BTR_NO_LATCHES);
|
|
|
|
if ((btr_pcur_is_before_first_on_page(cursor, mtr))
|
|
|| (btr_pcur_is_after_last_on_page(cursor, mtr))) {
|
|
|
|
return(FALSE);
|
|
}
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
/*************************************************************
|
|
Checks if the persistent cursor is before the first user record in
|
|
the index tree. */
|
|
UNIV_INLINE
|
|
ibool
|
|
btr_pcur_is_before_first_in_tree(
|
|
/*=============================*/
|
|
btr_pcur_t* cursor, /* in: persistent cursor */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
ut_ad(cursor->latch_mode != BTR_NO_LATCHES);
|
|
|
|
if (btr_page_get_prev(btr_pcur_get_page(cursor), mtr) != FIL_NULL) {
|
|
|
|
return(FALSE);
|
|
}
|
|
|
|
return(page_cur_is_before_first(btr_pcur_get_page_cur(cursor)));
|
|
}
|
|
|
|
/*************************************************************
|
|
Checks if the persistent cursor is after the last user record in
|
|
the index tree. */
|
|
UNIV_INLINE
|
|
ibool
|
|
btr_pcur_is_after_last_in_tree(
|
|
/*===========================*/
|
|
btr_pcur_t* cursor, /* in: persistent cursor */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
ut_ad(cursor->latch_mode != BTR_NO_LATCHES);
|
|
|
|
if (btr_page_get_next(btr_pcur_get_page(cursor), mtr) != FIL_NULL) {
|
|
|
|
return(FALSE);
|
|
}
|
|
|
|
return(page_cur_is_after_last(btr_pcur_get_page_cur(cursor)));
|
|
}
|
|
|
|
/*************************************************************
|
|
Moves the persistent cursor to the next record on the same page. */
|
|
UNIV_INLINE
|
|
void
|
|
btr_pcur_move_to_next_on_page(
|
|
/*==========================*/
|
|
btr_pcur_t* cursor, /* in: persistent cursor */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
UT_NOT_USED(mtr);
|
|
ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
ut_ad(cursor->latch_mode != BTR_NO_LATCHES);
|
|
|
|
page_cur_move_to_next(btr_pcur_get_page_cur(cursor));
|
|
|
|
cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
|
}
|
|
|
|
/*************************************************************
|
|
Moves the persistent cursor to the previous record on the same page. */
|
|
UNIV_INLINE
|
|
void
|
|
btr_pcur_move_to_prev_on_page(
|
|
/*==========================*/
|
|
btr_pcur_t* cursor, /* in: persistent cursor */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
UT_NOT_USED(mtr);
|
|
ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
ut_ad(cursor->latch_mode != BTR_NO_LATCHES);
|
|
|
|
page_cur_move_to_prev(btr_pcur_get_page_cur(cursor));
|
|
|
|
cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
|
}
|
|
|
|
/*************************************************************
|
|
Moves the persistent cursor to the last record on the same page. */
|
|
UNIV_INLINE
|
|
void
|
|
btr_pcur_move_to_last_on_page(
|
|
/*==========================*/
|
|
btr_pcur_t* cursor, /* in: persistent cursor */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
UT_NOT_USED(mtr);
|
|
ut_ad(cursor->latch_mode != BTR_NO_LATCHES);
|
|
|
|
page_cur_set_after_last(buf_frame_align(btr_pcur_get_rec(cursor)),
|
|
btr_pcur_get_page_cur(cursor));
|
|
|
|
cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
|
}
|
|
|
|
/*************************************************************
|
|
Moves the persistent cursor to the next user record in the tree. If no user
|
|
records are left, the cursor ends up 'after last in tree'. */
|
|
UNIV_INLINE
|
|
ibool
|
|
btr_pcur_move_to_next_user_rec(
|
|
/*===========================*/
|
|
/* out: TRUE if the cursor moved forward,
|
|
ending on a user record */
|
|
btr_pcur_t* cursor, /* in: persistent cursor; NOTE that the
|
|
function may release the page latch */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
ut_ad(cursor->latch_mode != BTR_NO_LATCHES);
|
|
cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
|
loop:
|
|
if (btr_pcur_is_after_last_on_page(cursor, mtr)) {
|
|
|
|
if (btr_pcur_is_after_last_in_tree(cursor, mtr)) {
|
|
|
|
return(FALSE);
|
|
}
|
|
|
|
btr_pcur_move_to_next_page(cursor, mtr);
|
|
} else {
|
|
btr_pcur_move_to_next_on_page(cursor, mtr);
|
|
}
|
|
|
|
if (btr_pcur_is_on_user_rec(cursor, mtr)) {
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
goto loop;
|
|
}
|
|
|
|
/*************************************************************
|
|
Moves the persistent cursor to the next record in the tree. If no records are
|
|
left, the cursor stays 'after last in tree'. */
|
|
UNIV_INLINE
|
|
ibool
|
|
btr_pcur_move_to_next(
|
|
/*==================*/
|
|
/* out: TRUE if the cursor was not after last
|
|
in tree */
|
|
btr_pcur_t* cursor, /* in: persistent cursor; NOTE that the
|
|
function may release the page latch */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
ut_ad(cursor->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
ut_ad(cursor->latch_mode != BTR_NO_LATCHES);
|
|
|
|
cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
|
|
|
if (btr_pcur_is_after_last_on_page(cursor, mtr)) {
|
|
|
|
if (btr_pcur_is_after_last_in_tree(cursor, mtr)) {
|
|
|
|
return(FALSE);
|
|
}
|
|
|
|
btr_pcur_move_to_next_page(cursor, mtr);
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
btr_pcur_move_to_next_on_page(cursor, mtr);
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
/******************************************************************
|
|
Commits the pcur mtr and sets the pcur latch mode to BTR_NO_LATCHES,
|
|
that is, the cursor becomes detached. If there have been modifications
|
|
to the page where pcur is positioned, this can be used instead of
|
|
btr_pcur_release_leaf. Function btr_pcur_store_position should be used
|
|
before calling this, if restoration of cursor is wanted later. */
|
|
UNIV_INLINE
|
|
void
|
|
btr_pcur_commit(
|
|
/*============*/
|
|
btr_pcur_t* pcur) /* in: persistent cursor */
|
|
{
|
|
ut_a(pcur->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
|
|
pcur->latch_mode = BTR_NO_LATCHES;
|
|
|
|
mtr_commit(pcur->mtr);
|
|
|
|
pcur->pos_state = BTR_PCUR_WAS_POSITIONED;
|
|
}
|
|
|
|
/******************************************************************
|
|
Differs from btr_pcur_commit in that we can specify the mtr to commit. */
|
|
UNIV_INLINE
|
|
void
|
|
btr_pcur_commit_specify_mtr(
|
|
/*========================*/
|
|
btr_pcur_t* pcur, /* in: persistent cursor */
|
|
mtr_t* mtr) /* in: mtr to commit */
|
|
{
|
|
ut_a(pcur->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
|
|
pcur->latch_mode = BTR_NO_LATCHES;
|
|
|
|
mtr_commit(mtr);
|
|
|
|
pcur->pos_state = BTR_PCUR_WAS_POSITIONED;
|
|
}
|
|
|
|
/******************************************************************
|
|
Sets the pcur latch mode to BTR_NO_LATCHES. */
|
|
UNIV_INLINE
|
|
void
|
|
btr_pcur_detach(
|
|
/*============*/
|
|
btr_pcur_t* pcur) /* in: persistent cursor */
|
|
{
|
|
ut_a(pcur->pos_state == BTR_PCUR_IS_POSITIONED);
|
|
|
|
pcur->latch_mode = BTR_NO_LATCHES;
|
|
|
|
pcur->pos_state = BTR_PCUR_WAS_POSITIONED;
|
|
}
|
|
|
|
/******************************************************************
|
|
Tests if a cursor is detached: that is the latch mode is BTR_NO_LATCHES. */
|
|
UNIV_INLINE
|
|
ibool
|
|
btr_pcur_is_detached(
|
|
/*=================*/
|
|
/* out: TRUE if detached */
|
|
btr_pcur_t* pcur) /* in: persistent cursor */
|
|
{
|
|
if (pcur->latch_mode == BTR_NO_LATCHES) {
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
return(FALSE);
|
|
}
|
|
|
|
/******************************************************************
|
|
Sets the old_rec_buf field to NULL. */
|
|
UNIV_INLINE
|
|
void
|
|
btr_pcur_init(
|
|
/*==========*/
|
|
btr_pcur_t* pcur) /* in: persistent cursor */
|
|
{
|
|
pcur->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
|
pcur->old_rec_buf = NULL;
|
|
pcur->old_rec = NULL;
|
|
}
|
|
|
|
/******************************************************************
|
|
Initializes and opens a persistent cursor to an index tree. It should be
|
|
closed with btr_pcur_close. */
|
|
UNIV_INLINE
|
|
void
|
|
btr_pcur_open(
|
|
/*==========*/
|
|
dict_index_t* index, /* in: index */
|
|
dtuple_t* tuple, /* in: tuple on which search done */
|
|
ulint mode, /* in: PAGE_CUR_L, ...;
|
|
NOTE that if the search is made using a unique
|
|
prefix of a record, mode should be
|
|
PAGE_CUR_LE, not PAGE_CUR_GE, as the latter
|
|
may end up on the previous page from the
|
|
record! */
|
|
ulint latch_mode,/* in: BTR_SEARCH_LEAF, ... */
|
|
btr_pcur_t* cursor, /* in: memory buffer for persistent cursor */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
btr_cur_t* btr_cursor;
|
|
|
|
/* Initialize the cursor */
|
|
|
|
btr_pcur_init(cursor);
|
|
|
|
cursor->latch_mode = latch_mode;
|
|
cursor->search_mode = mode;
|
|
|
|
/* Search with the tree cursor */
|
|
|
|
btr_cursor = btr_pcur_get_btr_cur(cursor);
|
|
|
|
btr_cur_search_to_nth_level(index, 0, tuple, mode, latch_mode,
|
|
btr_cursor, 0, mtr);
|
|
cursor->pos_state = BTR_PCUR_IS_POSITIONED;
|
|
|
|
cursor->trx_if_known = NULL;
|
|
}
|
|
|
|
/******************************************************************
|
|
Opens an persistent cursor to an index tree without initializing the
|
|
cursor. */
|
|
UNIV_INLINE
|
|
void
|
|
btr_pcur_open_with_no_init(
|
|
/*=======================*/
|
|
dict_index_t* index, /* in: index */
|
|
dtuple_t* tuple, /* in: tuple on which search done */
|
|
ulint mode, /* in: PAGE_CUR_L, ...;
|
|
NOTE that if the search is made using a unique
|
|
prefix of a record, mode should be
|
|
PAGE_CUR_LE, not PAGE_CUR_GE, as the latter
|
|
may end up on the previous page of the
|
|
record! */
|
|
ulint latch_mode,/* in: BTR_SEARCH_LEAF, ...;
|
|
NOTE that if has_search_latch != 0 then
|
|
we maybe do not acquire a latch on the cursor
|
|
page, but assume that the caller uses his
|
|
btr search latch to protect the record! */
|
|
btr_pcur_t* cursor, /* in: memory buffer for persistent cursor */
|
|
ulint has_search_latch,/* in: latch mode the caller
|
|
currently has on btr_search_latch:
|
|
RW_S_LATCH, or 0 */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
btr_cur_t* btr_cursor;
|
|
|
|
cursor->latch_mode = latch_mode;
|
|
cursor->search_mode = mode;
|
|
|
|
/* Search with the tree cursor */
|
|
|
|
btr_cursor = btr_pcur_get_btr_cur(cursor);
|
|
|
|
btr_cur_search_to_nth_level(index, 0, tuple, mode, latch_mode,
|
|
btr_cursor, has_search_latch, mtr);
|
|
cursor->pos_state = BTR_PCUR_IS_POSITIONED;
|
|
|
|
cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
|
|
|
cursor->trx_if_known = NULL;
|
|
}
|
|
|
|
/*********************************************************************
|
|
Opens a persistent cursor at either end of an index. */
|
|
UNIV_INLINE
|
|
void
|
|
btr_pcur_open_at_index_side(
|
|
/*========================*/
|
|
ibool from_left, /* in: TRUE if open to the low end,
|
|
FALSE if to the high end */
|
|
dict_index_t* index, /* in: index */
|
|
ulint latch_mode, /* in: latch mode */
|
|
btr_pcur_t* pcur, /* in: cursor */
|
|
ibool do_init, /* in: TRUE if should be initialized */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
pcur->latch_mode = latch_mode;
|
|
|
|
if (from_left) {
|
|
pcur->search_mode = PAGE_CUR_G;
|
|
} else {
|
|
pcur->search_mode = PAGE_CUR_L;
|
|
}
|
|
|
|
if (do_init) {
|
|
btr_pcur_init(pcur);
|
|
}
|
|
|
|
btr_cur_open_at_index_side(from_left, index, latch_mode,
|
|
btr_pcur_get_btr_cur(pcur), mtr);
|
|
pcur->pos_state = BTR_PCUR_IS_POSITIONED;
|
|
|
|
pcur->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
|
|
|
pcur->trx_if_known = NULL;
|
|
}
|
|
|
|
/**************************************************************************
|
|
Positions a cursor at a randomly chosen position within a B-tree. */
|
|
UNIV_INLINE
|
|
void
|
|
btr_pcur_open_at_rnd_pos(
|
|
/*=====================*/
|
|
dict_index_t* index, /* in: index */
|
|
ulint latch_mode, /* in: BTR_SEARCH_LEAF, ... */
|
|
btr_pcur_t* cursor, /* in/out: B-tree pcur */
|
|
mtr_t* mtr) /* in: mtr */
|
|
{
|
|
/* Initialize the cursor */
|
|
|
|
cursor->latch_mode = latch_mode;
|
|
cursor->search_mode = PAGE_CUR_G;
|
|
|
|
btr_pcur_init(cursor);
|
|
|
|
btr_cur_open_at_rnd_pos(index, latch_mode,
|
|
btr_pcur_get_btr_cur(cursor), mtr);
|
|
cursor->pos_state = BTR_PCUR_IS_POSITIONED;
|
|
cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
|
|
|
cursor->trx_if_known = NULL;
|
|
}
|
|
|
|
/******************************************************************
|
|
Frees the possible memory heap of a persistent cursor and sets the latch
|
|
mode of the persistent cursor to BTR_NO_LATCHES. */
|
|
UNIV_INLINE
|
|
void
|
|
btr_pcur_close(
|
|
/*===========*/
|
|
btr_pcur_t* cursor) /* in: persistent cursor */
|
|
{
|
|
if (cursor->old_rec_buf != NULL) {
|
|
|
|
mem_free(cursor->old_rec_buf);
|
|
|
|
cursor->old_rec = NULL;
|
|
cursor->old_rec_buf = NULL;
|
|
}
|
|
|
|
cursor->btr_cur.page_cur.rec = NULL;
|
|
cursor->old_rec = NULL;
|
|
cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
|
|
|
cursor->latch_mode = BTR_NO_LATCHES;
|
|
cursor->pos_state = BTR_PCUR_NOT_POSITIONED;
|
|
|
|
cursor->trx_if_known = NULL;
|
|
}
|