Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
35b5cdb8
Commit
35b5cdb8
authored
Jan 31, 2011
by
Marko Mäkelä
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql-5.1-innodb to mysql-5.5-innodb.
parents
5331b947
e952ee11
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
67 additions
and
34 deletions
+67
-34
storage/innobase/btr/btr0cur.c
storage/innobase/btr/btr0cur.c
+2
-2
storage/innobase/include/row0upd.h
storage/innobase/include/row0upd.h
+18
-8
storage/innobase/row/row0purge.c
storage/innobase/row/row0purge.c
+16
-5
storage/innobase/row/row0umod.c
storage/innobase/row/row0umod.c
+3
-2
storage/innobase/row/row0upd.c
storage/innobase/row/row0upd.c
+26
-15
storage/innobase/trx/trx0roll.c
storage/innobase/trx/trx0roll.c
+2
-2
No files found.
storage/innobase/btr/btr0cur.c
View file @
35b5cdb8
...
...
@@ -1886,8 +1886,8 @@ btr_cur_update_in_place(
NOT call it if index is secondary */
if
(
!
dict_index_is_clust
(
index
)
||
row_upd_changes_ord_field_binary
(
NULL
,
NULL
,
index
,
update
))
{
||
row_upd_changes_ord_field_binary
(
index
,
update
,
thr
,
NULL
,
NULL
))
{
/* Remove possible hash index pointer to this record */
btr_search_update_hash_on_delete
(
cursor
);
...
...
storage/innobase/include/row0upd.h
View file @
35b5cdb8
...
...
@@ -280,19 +280,29 @@ NOTE: we compare the fields as binary strings!
@return TRUE if update vector changes an ordering field in the index record */
UNIV_INTERN
ibool
row_upd_changes_ord_field_binary
(
/*=============================*/
row_upd_changes_ord_field_binary_func
(
/*==================================*/
dict_index_t
*
index
,
/*!< in: index of the record */
const
upd_t
*
update
,
/*!< in: update vector for the row; NOTE: the
field numbers in this MUST be clustered index
positions! */
#ifdef UNIV_DEBUG
const
que_thr_t
*
thr
,
/*!< in: query thread */
#endif
/* UNIV_DEBUG */
const
dtuple_t
*
row
,
/*!< in: old value of row, or NULL if the
row and the data values in update are not
known when this function is called, e.g., at
compile time */
const
row_ext_t
*
ext
,
/*!< NULL, or prefixes of the externally
const
row_ext_t
*
ext
)
/*!< NULL, or prefixes of the externally
stored columns in the old row */
dict_index_t
*
index
,
/*!< in: index of the record */
const
upd_t
*
update
)
/*!< in: update vector for the row; NOTE: the
field numbers in this MUST be clustered index
positions! */
__attribute__
((
nonnull
(
3
,
4
),
warn_unused_result
));
__attribute__
((
nonnull
(
1
,
2
),
warn_unused_result
));
#ifdef UNIV_DEBUG
# define row_upd_changes_ord_field_binary(index,update,thr,row,ext) \
row_upd_changes_ord_field_binary_func(index,update,thr,row,ext)
#else
/* UNIV_DEBUG */
# define row_upd_changes_ord_field_binary(index,update,thr,row,ext) \
row_upd_changes_ord_field_binary_func(index,update,row,ext)
#endif
/* UNIV_DEBUG */
/***********************************************************//**
Checks if an update vector changes an ordering field of an index record.
This function is fast if the update vector is short or the number of ordering
...
...
storage/innobase/row/row0purge.c
View file @
35b5cdb8
...
...
@@ -489,8 +489,11 @@ Purges an update of an existing record. Also purges an update of a delete
marked record if that record contained an externally stored field. */
static
void
row_purge_upd_exist_or_extern
(
/*==========================*/
row_purge_upd_exist_or_extern_func
(
/*===============================*/
#ifdef UNIV_DEBUG
const
que_thr_t
*
thr
,
/*!< in: query thread */
#endif
/* UNIV_DEBUG */
purge_node_t
*
node
)
/*!< in: row purge node */
{
mem_heap_t
*
heap
;
...
...
@@ -515,8 +518,8 @@ row_purge_upd_exist_or_extern(
while
(
node
->
index
!=
NULL
)
{
index
=
node
->
index
;
if
(
row_upd_changes_ord_field_binary
(
NULL
,
NULL
,
node
->
index
,
node
->
update
))
{
if
(
row_upd_changes_ord_field_binary
(
node
->
index
,
node
->
update
,
thr
,
NULL
,
NULL
))
{
/* Build the older version of the index entry */
entry
=
row_build_index_entry
(
node
->
row
,
NULL
,
index
,
heap
);
...
...
@@ -598,6 +601,14 @@ skip_secondaries:
}
}
#ifdef UNIV_DEBUG
# define row_purge_upd_exist_or_extern(thr,node) \
row_purge_upd_exist_or_extern_func(thr,node)
#else
/* UNIV_DEBUG */
# define row_purge_upd_exist_or_extern(thr,node) \
row_purge_upd_exist_or_extern_func(node)
#endif
/* UNIV_DEBUG */
/***********************************************************//**
Parses the row reference and other info in a modify undo log record.
@return TRUE if purge operation required: NOTE that then the CALLER
...
...
@@ -756,7 +767,7 @@ row_purge(
}
else
if
(
updated_extern
||
node
->
rec_type
==
TRX_UNDO_UPD_EXIST_REC
)
{
row_purge_upd_exist_or_extern
(
node
);
row_purge_upd_exist_or_extern
(
thr
,
node
);
}
if
(
node
->
found_clust
)
{
...
...
storage/innobase/row/row0umod.c
View file @
35b5cdb8
...
...
@@ -693,8 +693,9 @@ row_undo_mod_upd_exist_sec(
while
(
node
->
index
!=
NULL
)
{
index
=
node
->
index
;
if
(
row_upd_changes_ord_field_binary
(
node
->
row
,
node
->
ext
,
node
->
index
,
node
->
update
))
{
if
(
row_upd_changes_ord_field_binary
(
node
->
index
,
node
->
update
,
thr
,
node
->
row
,
node
->
ext
))
{
/* Build the newest version of the index entry */
entry
=
row_build_index_entry
(
node
->
row
,
node
->
ext
,
...
...
storage/innobase/row/row0upd.c
View file @
35b5cdb8
...
...
@@ -1192,25 +1192,31 @@ NOTE: we compare the fields as binary strings!
@return TRUE if update vector changes an ordering field in the index record */
UNIV_INTERN
ibool
row_upd_changes_ord_field_binary
(
/*=============================*/
row_upd_changes_ord_field_binary_func
(
/*==================================*/
dict_index_t
*
index
,
/*!< in: index of the record */
const
upd_t
*
update
,
/*!< in: update vector for the row; NOTE: the
field numbers in this MUST be clustered index
positions! */
#ifdef UNIV_DEBUG
const
que_thr_t
*
thr
,
/*!< in: query thread */
#endif
/* UNIV_DEBUG */
const
dtuple_t
*
row
,
/*!< in: old value of row, or NULL if the
row and the data values in update are not
known when this function is called, e.g., at
compile time */
const
row_ext_t
*
ext
,
/*!< NULL, or prefixes of the externally
const
row_ext_t
*
ext
)
/*!< NULL, or prefixes of the externally
stored columns in the old row */
dict_index_t
*
index
,
/*!< in: index of the record */
const
upd_t
*
update
)
/*!< in: update vector for the row; NOTE: the
field numbers in this MUST be clustered index
positions! */
{
ulint
n_unique
;
ulint
i
;
const
dict_index_t
*
clust_index
;
ut_ad
(
update
);
ut_ad
(
index
);
ut_ad
(
update
);
ut_ad
(
thr
);
ut_ad
(
thr
->
graph
);
ut_ad
(
thr
->
graph
->
trx
);
n_unique
=
dict_index_get_n_unique
(
index
);
...
...
@@ -1263,9 +1269,14 @@ row_upd_changes_ord_field_binary(
if
(
UNIV_LIKELY_NULL
(
buf
))
{
if
(
UNIV_UNLIKELY
(
buf
==
field_ref_zero
))
{
/* This should never happen, but
we try to fail safe here. */
ut_ad
(
0
);
/* The externally stored field
was not written yet. This
record should only be seen by
recv_recovery_rollback_active(),
when the server had crashed before
storing the field. */
ut_ad
(
thr
->
graph
->
trx
->
is_recovered
);
ut_ad
(
trx_is_recv
(
thr
->
graph
->
trx
));
return
(
TRUE
);
}
...
...
@@ -1640,8 +1651,8 @@ row_upd_sec_step(
ut_ad
(
!
dict_index_is_clust
(
node
->
index
));
if
(
node
->
state
==
UPD_NODE_UPDATE_ALL_SEC
||
row_upd_changes_ord_field_binary
(
node
->
row
,
node
->
ext
,
node
->
index
,
node
->
update
))
{
||
row_upd_changes_ord_field_binary
(
node
->
index
,
node
->
update
,
thr
,
node
->
row
,
node
->
ext
))
{
return
(
row_upd_sec_index_entry
(
node
,
thr
));
}
...
...
@@ -2169,8 +2180,8 @@ exit_func:
row_upd_store_row
(
node
);
if
(
row_upd_changes_ord_field_binary
(
node
->
row
,
node
->
ext
,
index
,
node
->
update
))
{
if
(
row_upd_changes_ord_field_binary
(
index
,
node
->
update
,
thr
,
node
->
row
,
node
->
ext
))
{
/* Update causes an ordering field (ordering fields within
the B-tree) of the clustered index record to change: perform
...
...
storage/innobase/trx/trx0roll.c
View file @
35b5cdb8
...
...
@@ -47,8 +47,8 @@ Created 3/26/1996 Heikki Tuuri
rollback */
#define TRX_ROLL_TRUNC_THRESHOLD 1
/** In crash recovery, the current trx to be rolled back */
static
trx_t
*
trx_roll_crash_recv_trx
=
NULL
;
/** In crash recovery, the current trx to be rolled back
; NULL otherwise
*/
static
const
trx_t
*
trx_roll_crash_recv_trx
=
NULL
;
/** In crash recovery we set this to the undo n:o of the current trx to be
rolled back. Then we can print how many % the rollback has progressed. */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment