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
dbc98766
Commit
dbc98766
authored
Aug 22, 2006
by
mats@romeo.(none)
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
WL#3259 (RBR with more columns on slave than on master):
Post-merge fixes.
parent
c2d7f7c3
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
60 additions
and
57 deletions
+60
-57
mysql-test/r/rpl_row_tabledefs_3innodb.result
mysql-test/r/rpl_row_tabledefs_3innodb.result
+4
-4
mysql-test/t/disabled.def
mysql-test/t/disabled.def
+1
-0
sql/field.cc
sql/field.cc
+1
-0
sql/log_event.cc
sql/log_event.cc
+54
-53
No files found.
mysql-test/r/rpl_row_tabledefs_3innodb.result
View file @
dbc98766
...
@@ -151,7 +151,7 @@ Replicate_Do_Table
...
@@ -151,7 +151,7 @@ Replicate_Do_Table
Replicate_Ignore_Table
Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
Replicate_Wild_Ignore_Table
Last_Errno 15
14
Last_Errno 15
22
Last_Error Table width mismatch - received 2 columns, test.t2 has 1 columns
Last_Error Table width mismatch - received 2 columns, test.t2 has 1 columns
Skip_Counter 0
Skip_Counter 0
Exec_Master_Log_Pos #
Exec_Master_Log_Pos #
...
@@ -189,7 +189,7 @@ Replicate_Do_Table
...
@@ -189,7 +189,7 @@ Replicate_Do_Table
Replicate_Ignore_Table
Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
Replicate_Wild_Ignore_Table
Last_Errno 15
14
Last_Errno 15
22
Last_Error Column 0 type mismatch - received type 3, test.t4 has type 4
Last_Error Column 0 type mismatch - received type 3, test.t4 has type 4
Skip_Counter 0
Skip_Counter 0
Exec_Master_Log_Pos #
Exec_Master_Log_Pos #
...
@@ -227,7 +227,7 @@ Replicate_Do_Table
...
@@ -227,7 +227,7 @@ Replicate_Do_Table
Replicate_Ignore_Table
Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
Replicate_Wild_Ignore_Table
Last_Errno 15
14
Last_Errno 15
22
Last_Error Column 1 type mismatch - received type 3, test.t5 has type 4
Last_Error Column 1 type mismatch - received type 3, test.t5 has type 4
Skip_Counter 0
Skip_Counter 0
Exec_Master_Log_Pos #
Exec_Master_Log_Pos #
...
@@ -265,7 +265,7 @@ Replicate_Do_Table
...
@@ -265,7 +265,7 @@ Replicate_Do_Table
Replicate_Ignore_Table
Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
Replicate_Wild_Ignore_Table
Last_Errno 15
14
Last_Errno 15
22
Last_Error Column 2 type mismatch - received type 3, test.t6 has type 4
Last_Error Column 2 type mismatch - received type 3, test.t6 has type 4
Skip_Counter 0
Skip_Counter 0
Exec_Master_Log_Pos #
Exec_Master_Log_Pos #
...
...
mysql-test/t/disabled.def
View file @
dbc98766
...
@@ -36,6 +36,7 @@ rpl_row_blob_innodb : BUG#18980 2006-04-10 kent Test fails randomly
...
@@ -36,6 +36,7 @@ rpl_row_blob_innodb : BUG#18980 2006-04-10 kent Test fails randomly
rpl_row_func003 : BUG#19074 2006-13-04 andrei test failed
rpl_row_func003 : BUG#19074 2006-13-04 andrei test failed
rpl_row_inexist_tbl : BUG#18948 2006-03-09 mats Disabled since patch makes this test wait forever
rpl_row_inexist_tbl : BUG#18948 2006-03-09 mats Disabled since patch makes this test wait forever
rpl_sp : BUG#16456 2006-02-16 jmiller
rpl_sp : BUG#16456 2006-02-16 jmiller
rpl_sp_effects : BUG#19862 2006-08-22 mats Bug appear to be fixed
rpl_until : BUG#15886 2006-02-16 jmiller Unstable test case
rpl_until : BUG#15886 2006-02-16 jmiller Unstable test case
sp-goto : BUG#18949 2006-02-16 jmiller GOTO is currently is disabled - will be fixed in the future
sp-goto : BUG#18949 2006-02-16 jmiller GOTO is currently is disabled - will be fixed in the future
mysqldump : BUG#18078 2006-03-10 lars
mysqldump : BUG#18078 2006-03-10 lars
...
...
sql/field.cc
View file @
dbc98766
...
@@ -1255,6 +1255,7 @@ void Field::hash(ulong *nr, ulong *nr2)
...
@@ -1255,6 +1255,7 @@ void Field::hash(ulong *nr, ulong *nr2)
CHARSET_INFO
*
cs
=
charset
();
CHARSET_INFO
*
cs
=
charset
();
cs
->
coll
->
hash_sort
(
cs
,
(
uchar
*
)
ptr
,
len
,
nr
,
nr2
);
cs
->
coll
->
hash_sort
(
cs
,
(
uchar
*
)
ptr
,
len
,
nr
,
nr2
);
}
}
}
my_size_t
my_size_t
Field
::
do_last_null_byte
()
const
Field
::
do_last_null_byte
()
const
...
...
sql/log_event.cc
View file @
dbc98766
...
@@ -5293,21 +5293,39 @@ int Rows_log_event::do_add_row_data(byte *const row_data,
...
@@ -5293,21 +5293,39 @@ int Rows_log_event::do_add_row_data(byte *const row_data,
/*
/*
Unpack a row into a record.
Unpack a row into a record.
SYNOPSIS
unpack_row()
rli Relay log info
table Table to unpack into
colcnt Number of columns to read from record
record Record where the data should be unpacked
row Packed row data
cols Pointer to columns data to fill in
row_end Pointer to variable that will hold the value of the
one-after-end position for the row
master_reclength
Pointer to variable that will hold the length of the
record on the master side
rw_set Pointer to bitmap that holds either the read_set or the
write_set of the table
DESCRIPTION
The row is assumed to only consist of the fields for which the
The row is assumed to only consist of the fields for which the
bitset represented by 'arr' and 'bits'; the other parts of the
bitset represented by 'arr' and 'bits'; the other parts of the
record are left alone.
record are left alone.
At most 'colcnt' columns are read: if the table is larger than that,
At most 'colcnt' columns are read: if the table is larger than
the remaining fields are not filled in.
that,
the remaining fields are not filled in.
*/
*/
static
int
static
int
unpack_row
(
RELAY_LOG_INFO
*
rli
,
unpack_row
(
RELAY_LOG_INFO
*
rli
,
TABLE
*
table
,
uint
const
colcnt
,
byte
*
record
,
TABLE
*
table
,
uint
const
colcnt
,
byte
*
record
,
char
const
*
row
,
MY_BITMAP
const
*
cols
,
char
const
*
row
,
MY_BITMAP
const
*
cols
,
char
const
**
row_end
,
ulong
*
master_reclength
)
char
const
**
row_end
,
ulong
*
master_reclength
,
MY_BITMAP
*
const
rw_set
)
{
{
DBUG_ASSERT
(
record
&&
row
);
DBUG_ASSERT
(
record
&&
row
);
MY_BITMAP
*
write_set
=
table
->
write_set
;
my_ptrdiff_t
const
offset
=
record
-
(
byte
*
)
table
->
record
[
0
];
my_ptrdiff_t
const
offset
=
record
-
(
byte
*
)
table
->
record
[
0
];
my_size_t
master_null_bytes
=
table
->
s
->
null_bytes
;
my_size_t
master_null_bytes
=
table
->
s
->
null_bytes
;
...
@@ -5326,7 +5344,7 @@ unpack_row(RELAY_LOG_INFO *rli,
...
@@ -5326,7 +5344,7 @@ unpack_row(RELAY_LOG_INFO *rli,
memcpy
(
record
,
row
,
master_null_bytes
);
// [1]
memcpy
(
record
,
row
,
master_null_bytes
);
// [1]
int
error
=
0
;
int
error
=
0
;
bitmap_set_all
(
write
_set
);
bitmap_set_all
(
rw
_set
);
Field
**
const
begin_ptr
=
table
->
field
;
Field
**
const
begin_ptr
=
table
->
field
;
Field
**
field_ptr
;
Field
**
field_ptr
;
...
@@ -5339,11 +5357,12 @@ unpack_row(RELAY_LOG_INFO *rli,
...
@@ -5339,11 +5357,12 @@ unpack_row(RELAY_LOG_INFO *rli,
if
(
bitmap_is_set
(
cols
,
field_ptr
-
begin_ptr
))
if
(
bitmap_is_set
(
cols
,
field_ptr
-
begin_ptr
))
{
{
/* Field...::unpack() cannot return 0 */
ptr
=
f
->
unpack
(
f
->
ptr
+
offset
,
ptr
);
ptr
=
f
->
unpack
(
f
->
ptr
+
offset
,
ptr
);
/* Field...::unpack() cannot return 0 */
DBUG_ASSERT
(
ptr
!=
NULL
);
}
}
else
else
bitmap_clear_bit
(
write_set
,
(
field_ptr
-
begin_ptr
)
+
1
);
bitmap_clear_bit
(
rw_set
,
field_ptr
-
begin_ptr
);
}
}
*
row_end
=
ptr
;
*
row_end
=
ptr
;
...
@@ -6102,27 +6121,6 @@ void Table_map_log_event::print(FILE *file, PRINT_EVENT_INFO *print_event_info)
...
@@ -6102,27 +6121,6 @@ void Table_map_log_event::print(FILE *file, PRINT_EVENT_INFO *print_event_info)
}
}
#endif
#endif
#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
#ifndef DBUG_OFF
static
void
print_column_values
(
char
const
*
text
,
THD
*
thd
,
TABLE
*
table
)
{
THD
*
old_thd
=
table
->
in_use
;
if
(
table
->
in_use
==
NULL
)
table
->
in_use
=
thd
;
for
(
Field
**
fptr
=
table
->
field
;
*
fptr
;
++
fptr
)
{
char
buf
[
MAX_FIELD_WIDTH
];
String
str
(
buf
,
sizeof
(
buf
),
system_charset_info
);
(
*
fptr
)
->
val_str
(
&
str
);
DBUG_PRINT
(
"info"
,
(
"%s for column %d is '%s'"
,
text
,
fptr
-
table
->
field
,
str
.
c_ptr
()));
}
table
->
in_use
=
old_thd
;
}
#endif
#endif
/**************************************************************************
/**************************************************************************
Write_rows_log_event member functions
Write_rows_log_event member functions
**************************************************************************/
**************************************************************************/
...
@@ -6219,10 +6217,9 @@ int Write_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli,
...
@@ -6219,10 +6217,9 @@ int Write_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli,
int
error
;
int
error
;
error
=
unpack_row
(
rli
,
error
=
unpack_row
(
rli
,
table
,
m_width
,
table
->
record
[
0
],
table
,
m_width
,
table
->
record
[
0
],
row_start
,
&
m_cols
,
row_end
,
&
m_master_reclength
);
row_start
,
&
m_cols
,
row_end
,
&
m_master_reclength
,
#ifndef DBUG_OFF
table
->
write_set
);
print_column_values
(
"Unpacked value"
,
thd
,
table
);
bitmap_copy
(
table
->
read_set
,
table
->
write_set
);
#endif
return
error
;
return
error
;
}
}
...
@@ -6345,17 +6342,22 @@ copy_extra_record_fields(TABLE *table,
...
@@ -6345,17 +6342,22 @@ copy_extra_record_fields(TABLE *table,
/*
/*
Replace the provided record in the database.
Replace the provided record in the database.
Similar to how it is done in <code>mysql_insert()</code>, we first
SYNOPSIS
try to do a <code>ha_write_row()</code> and of that fails due to
replace_record()
duplicated keys (or indices), we do an <code>ha_update_row()</code>
thd Thread context for writing the record.
or a <code>ha_delete_row()</code> instead.
table Table to which record should be written.
master_reclength
@param thd Thread context for writing the record.
@param table Table to which record should be written.
@param master_reclength
Offset to first column that is not present on the master,
Offset to first column that is not present on the master,
alternatively the length of the record on the master side.
alternatively the length of the record on the master
@return Error code on failure, 0 on success.
side.
RETURN VALUE
Error code on failure, 0 on success.
DESCRIPTION
Similar to how it is done in mysql_insert(), we first try to do
a ha_write_row() and of that fails due to duplicated keys (or
indices), we do an ha_update_row() or a ha_delete_row() instead.
*/
*/
static
int
static
int
replace_record
(
THD
*
thd
,
TABLE
*
table
,
replace_record
(
THD
*
thd
,
TABLE
*
table
,
...
@@ -6369,10 +6371,6 @@ replace_record(THD *thd, TABLE *table,
...
@@ -6369,10 +6371,6 @@ replace_record(THD *thd, TABLE *table,
int
keynum
;
int
keynum
;
auto_afree_ptr
<
char
>
key
(
NULL
);
auto_afree_ptr
<
char
>
key
(
NULL
);
#ifndef DBUG_OFF
print_column_values
(
"Starting write value"
,
thd
,
table
);
#endif
while
((
error
=
table
->
file
->
ha_write_row
(
table
->
record
[
0
])))
while
((
error
=
table
->
file
->
ha_write_row
(
table
->
record
[
0
])))
{
{
if
((
keynum
=
table
->
file
->
get_dup_key
(
error
))
<
0
)
if
((
keynum
=
table
->
file
->
get_dup_key
(
error
))
<
0
)
...
@@ -6766,7 +6764,8 @@ int Delete_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli,
...
@@ -6766,7 +6764,8 @@ int Delete_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli,
error
=
unpack_row
(
rli
,
error
=
unpack_row
(
rli
,
table
,
m_width
,
table
->
record
[
0
],
table
,
m_width
,
table
->
record
[
0
],
row_start
,
&
m_cols
,
row_end
,
&
m_master_reclength
);
row_start
,
&
m_cols
,
row_end
,
&
m_master_reclength
,
table
->
read_set
);
/*
/*
If we will access rows using the random access method, m_key will
If we will access rows using the random access method, m_key will
be set to NULL, so we do not need to make a key copy in that case.
be set to NULL, so we do not need to make a key copy in that case.
...
@@ -6908,12 +6907,14 @@ int Update_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli,
...
@@ -6908,12 +6907,14 @@ int Update_rows_log_event::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli,
/* record[0] is the before image for the update */
/* record[0] is the before image for the update */
error
=
unpack_row
(
rli
,
error
=
unpack_row
(
rli
,
table
,
m_width
,
table
->
record
[
0
],
table
,
m_width
,
table
->
record
[
0
],
row_start
,
&
m_cols
,
row_end
,
&
m_master_reclength
);
row_start
,
&
m_cols
,
row_end
,
&
m_master_reclength
,
table
->
read_set
);
row_start
=
*
row_end
;
row_start
=
*
row_end
;
/* m_after_image is the after image for the update */
/* m_after_image is the after image for the update */
error
=
unpack_row
(
rli
,
error
=
unpack_row
(
rli
,
table
,
m_width
,
m_after_image
,
table
,
m_width
,
m_after_image
,
row_start
,
&
m_cols
,
row_end
,
&
m_master_reclength
);
row_start
,
&
m_cols
,
row_end
,
&
m_master_reclength
,
table
->
write_set
);
/*
/*
If we will access rows using the random access method, m_key will
If we will access rows using the random access method, m_key will
...
...
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