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
a8efaaee
Commit
a8efaaee
authored
Nov 20, 2006
by
mats@romeo.(none)
Browse files
Options
Browse Files
Download
Plain Diff
Merge romeo.(none):/home/bkroot/mysql-5.1
into romeo.(none):/home/bk/memcheck-mysql-5.1
parents
d2c45ec3
3eabde40
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
69 additions
and
19 deletions
+69
-19
sql/log_event.cc
sql/log_event.cc
+69
-19
No files found.
sql/log_event.cc
View file @
a8efaaee
...
...
@@ -140,6 +140,21 @@ static void pretty_print_str(IO_CACHE* cache, char* str, int len)
}
#endif
/* MYSQL_CLIENT */
#ifdef HAVE_purify
static
void
valgrind_check_mem
(
void
*
ptr
,
size_t
len
)
{
static
volatile
uchar
dummy
;
for
(
volatile
uchar
*
p
=
(
uchar
*
)
ptr
;
p
!=
(
uchar
*
)
ptr
+
len
;
++
p
)
{
int
const
c
=
*
p
;
if
(
c
<
128
)
dummy
=
c
+
1
;
else
dummy
=
c
-
1
;
}
}
#endif
#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
...
...
@@ -5530,6 +5545,8 @@ unpack_row(RELAY_LOG_INFO *rli,
if
(
bitmap_is_set
(
cols
,
field_ptr
-
begin_ptr
))
{
DBUG_ASSERT
(
table
->
record
[
0
]
<=
f
->
ptr
);
DBUG_ASSERT
(
f
->
ptr
<
table
->
record
[
0
]
+
table
->
s
->
reclength
+
(
f
->
pack_length_in_rec
()
==
0
));
f
->
move_field_offset
(
offset
);
ptr
=
f
->
unpack
(
f
->
ptr
,
ptr
);
f
->
move_field_offset
(
-
offset
);
...
...
@@ -5564,10 +5581,6 @@ unpack_row(RELAY_LOG_INFO *rli,
{
uint32
const
mask
=
NOT_NULL_FLAG
|
NO_DEFAULT_VALUE_FLAG
;
DBUG_PRINT
(
"debug"
,
(
"flags = 0x%x, mask = 0x%x, flags & mask = 0x%x"
,
(
*
field_ptr
)
->
flags
,
mask
,
(
*
field_ptr
)
->
flags
&
mask
));
if
(
event_type
==
WRITE_ROWS_EVENT
&&
((
*
field_ptr
)
->
flags
&
mask
)
==
mask
)
{
...
...
@@ -5690,7 +5703,6 @@ int Rows_log_event::exec_event(st_relay_log_info *rli)
We also invalidate the query cache for all the tables, since
they will now be changed.
*/
TABLE_LIST
*
ptr
;
for
(
ptr
=
rli
->
tables_to_lock
;
ptr
;
ptr
=
ptr
->
next_global
)
{
...
...
@@ -5747,7 +5759,7 @@ int Rows_log_event::exec_event(st_relay_log_info *rli)
if
((
error
=
do_prepare_row
(
thd
,
rli
,
table
,
row_start
,
&
row_end
)))
break
;
// We should perform the after-row operation even in
// the case of error
DBUG_ASSERT
(
row_end
!=
NULL
);
// cannot happen
DBUG_ASSERT
(
row_end
<=
(
const
char
*
)
m_rows_end
);
...
...
@@ -6423,8 +6435,8 @@ int Write_rows_log_event::do_after_row_operations(TABLE *table, int error)
int
Write_rows_log_event
::
do_prepare_row
(
THD
*
thd
,
RELAY_LOG_INFO
*
rli
,
TABLE
*
table
,
char
const
*
row_start
,
char
const
**
row_end
)
char
const
*
const
row_start
,
char
const
**
const
row_end
)
{
DBUG_ASSERT
(
table
!=
NULL
);
DBUG_ASSERT
(
row_start
&&
row_end
);
...
...
@@ -6495,7 +6507,7 @@ copy_extra_record_fields(TABLE *table,
my_ptrdiff_t
master_fields
)
{
DBUG_PRINT
(
"info"
,
(
"Copying to %p "
"from field %d at offset %u "
"from field %
l
d at offset %u "
"to field %d at offset %u"
,
table
->
record
[
0
],
master_fields
,
master_reclength
,
...
...
@@ -6733,8 +6745,26 @@ static bool record_compare(TABLE *table)
/*
Find the row given by 'key', if the table has keys, or else use a table scan
to find (and fetch) the row. If the engine allows random access of the
records, a combination of position() and rnd_pos() will be used.
to find (and fetch) the row.
If the engine allows random access of the records, a combination of
position() and rnd_pos() will be used.
@param table Pointer to table to search
@param key Pointer to key to use for search, if table has key
@pre <code>table->record[0]</code> shall contain the row to locate
and <code>key</code> shall contain a key to use for searching, if
the engine has a key.
@post If the return value is zero, <code>table->record[1]</code>
will contain the fetched row and the internal "cursor" will refer to
the row. If the return value is non-zero,
<code>table->record[1]</code> is undefined. In either case,
<code>table->record[0]</code> is undefined.
@return Zero if the row was successfully fetched into
<code>table->record[1]</code>, error code otherwise.
*/
static
int
find_and_fetch_row
(
TABLE
*
table
,
byte
*
key
)
...
...
@@ -6756,7 +6786,17 @@ static int find_and_fetch_row(TABLE *table, byte *key)
the "cursor" (i.e., record[0] in this case) at the correct row.
*/
table
->
file
->
position
(
table
->
record
[
0
]);
DBUG_RETURN
(
table
->
file
->
rnd_pos
(
table
->
record
[
0
],
table
->
file
->
ref
));
int
error
=
table
->
file
->
rnd_pos
(
table
->
record
[
0
],
table
->
file
->
ref
);
/*
rnd_pos() returns the record in table->record[0], so we have to
move it to table->record[1].
*/
bmove_align
(
table
->
record
[
1
],
table
->
record
[
0
],
table
->
s
->
reclength
);
#ifdef HAVE_purify
if
(
error
==
0
)
valgrind_check_mem
(
table
->
record
[
1
],
table
->
s
->
reclength
);
#endif
DBUG_RETURN
(
error
);
}
DBUG_ASSERT
(
table
->
record
[
1
]);
...
...
@@ -6770,7 +6810,7 @@ static int find_and_fetch_row(TABLE *table, byte *key)
int
error
;
/* We have a key: search the table using the index */
if
(
!
table
->
file
->
inited
&&
(
error
=
table
->
file
->
ha_index_init
(
0
,
FALSE
)))
return
error
;
DBUG_RETURN
(
error
)
;
/*
We need to set the null bytes to ensure that the filler bit are
...
...
@@ -6807,6 +6847,9 @@ static int find_and_fetch_row(TABLE *table, byte *key)
if
(
table
->
key_info
->
flags
&
HA_NOSAME
)
{
table
->
file
->
ha_index_end
();
#ifdef HAVE_purify
valgrind_check_mem
(
table
->
record
[
1
],
table
->
s
->
reclength
);
#endif
DBUG_RETURN
(
0
);
}
...
...
@@ -6883,9 +6926,16 @@ static int find_and_fetch_row(TABLE *table, byte *key)
table
->
file
->
ha_rnd_end
();
DBUG_ASSERT
(
error
==
HA_ERR_END_OF_FILE
||
error
==
0
);
#ifdef HAVE_purify
if
(
error
==
0
)
valgrind_check_mem
(
table
->
record
[
1
],
table
->
s
->
reclength
);
#endif
DBUG_RETURN
(
error
);
}
#ifdef HAVE_purify
valgrind_check_mem
(
table
->
record
[
1
],
table
->
s
->
reclength
);
#endif
DBUG_RETURN
(
0
);
}
#endif
...
...
@@ -6974,8 +7024,8 @@ int Delete_rows_log_event::do_after_row_operations(TABLE *table, int error)
int
Delete_rows_log_event
::
do_prepare_row
(
THD
*
thd
,
RELAY_LOG_INFO
*
rli
,
TABLE
*
table
,
char
const
*
row_start
,
char
const
**
row_end
)
char
const
*
const
row_start
,
char
const
**
const
row_end
)
{
int
error
;
DBUG_ASSERT
(
row_start
&&
row_end
);
...
...
@@ -7111,8 +7161,8 @@ int Update_rows_log_event::do_after_row_operations(TABLE *table, int error)
int
Update_rows_log_event
::
do_prepare_row
(
THD
*
thd
,
RELAY_LOG_INFO
*
rli
,
TABLE
*
table
,
char
const
*
row_start
,
char
const
**
row_end
)
char
const
*
const
row_start
,
char
const
**
const
row_end
)
{
int
error
;
DBUG_ASSERT
(
row_start
&&
row_end
);
...
...
@@ -7127,11 +7177,11 @@ int Update_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli,
table
,
m_width
,
table
->
record
[
0
],
row_start
,
&
m_cols
,
row_end
,
&
m_master_reclength
,
table
->
read_set
,
UPDATE_ROWS_EVENT
);
row
_start
=
*
row_end
;
char
const
*
next
_start
=
*
row_end
;
/* m_after_image is the after image for the update */
error
=
unpack_row
(
rli
,
table
,
m_width
,
m_after_image
,
row
_start
,
&
m_cols
,
row_end
,
&
m_master_reclength
,
next
_start
,
&
m_cols
,
row_end
,
&
m_master_reclength
,
table
->
write_set
,
UPDATE_ROWS_EVENT
);
DBUG_DUMP
(
"record[0]"
,
(
const
char
*
)
table
->
record
[
0
],
table
->
s
->
reclength
);
...
...
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