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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
a998586d
Commit
a998586d
authored
Dec 03, 2010
by
Mattias Jonsson
Browse files
Options
Browse Files
Download
Plain Diff
merge of bug#58147, including rename of the new argument,
to_binlog -> binlog_stmt.
parents
3ffab566
2737a722
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
112 additions
and
6 deletions
+112
-6
mysql-test/r/partition_binlog.result
mysql-test/r/partition_binlog.result
+56
-0
mysql-test/t/partition_binlog.test
mysql-test/t/partition_binlog.test
+42
-0
sql/ha_partition.cc
sql/ha_partition.cc
+6
-1
sql/ha_partition.h
sql/ha_partition.h
+1
-1
sql/sql_partition_admin.cc
sql/sql_partition_admin.cc
+7
-4
No files found.
mysql-test/r/partition_binlog.result
0 → 100644
View file @
a998586d
DROP TABLE IF EXISTS t1;
#
# Bug#58147: ALTER TABLE w/ TRUNCATE PARTITION fails
# but the statement is written to binlog
#
CREATE TABLE t1(id INT)
PARTITION BY RANGE (id)
(PARTITION p0 VALUES LESS THAN (100),
PARTITION pmax VALUES LESS THAN (MAXVALUE));
INSERT INTO t1 VALUES (1), (10), (100), (1000);
ALTER TABLE t1 TRUNCATE PARTITION p1;
ERROR HY000: Incorrect partition name
ALTER TABLE t1 DROP PARTITION p1;
ERROR HY000: Error in list of partitions to DROP
# No error returned, output in table format instead:
ALTER TABLE t1 ANALYZE PARTITION p1;
Table Op Msg_type Msg_text
test.t1 analyze error Error in list of partitions to test.t1
ALTER TABLE t1 CHECK PARTITION p1;
Table Op Msg_type Msg_text
test.t1 check error Error in list of partitions to test.t1
ALTER TABLE t1 OPTIMIZE PARTITION p1;
Table Op Msg_type Msg_text
test.t1 optimize error Error in list of partitions to test.t1
ALTER TABLE t1 REPAIR PARTITION p1;
Table Op Msg_type Msg_text
test.t1 repair error Error in list of partitions to test.t1
ALTER TABLE t1 ANALYZE PARTITION p0;
Table Op Msg_type Msg_text
test.t1 analyze status OK
ALTER TABLE t1 CHECK PARTITION p0;
Table Op Msg_type Msg_text
test.t1 check status OK
ALTER TABLE t1 OPTIMIZE PARTITION p0;
Table Op Msg_type Msg_text
test.t1 optimize status OK
ALTER TABLE t1 REPAIR PARTITION p0;
Table Op Msg_type Msg_text
test.t1 repair status OK
ALTER TABLE t1 TRUNCATE PARTITION p0;
ALTER TABLE t1 DROP PARTITION p0;
show binlog events in 'master-bin.000001' from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # use `test`; CREATE TABLE t1(id INT)
PARTITION BY RANGE (id)
(PARTITION p0 VALUES LESS THAN (100),
PARTITION pmax VALUES LESS THAN (MAXVALUE))
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1), (10), (100), (1000)
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; ALTER TABLE t1 ANALYZE PARTITION p0
master-bin.000001 # Query # # use `test`; ALTER TABLE t1 OPTIMIZE PARTITION p0
master-bin.000001 # Query # # use `test`; ALTER TABLE t1 REPAIR PARTITION p0
master-bin.000001 # Query # # use `test`; ALTER TABLE t1 TRUNCATE PARTITION p0
master-bin.000001 # Query # # use `test`; ALTER TABLE t1 DROP PARTITION p0
DROP TABLE t1;
mysql-test/t/partition_binlog.test
0 → 100644
View file @
a998586d
--
source
include
/
have_log_bin
.
inc
--
disable_warnings
DROP
TABLE
IF
EXISTS
t1
;
--
enable_warnings
--
echo
#
--
echo
# Bug#58147: ALTER TABLE w/ TRUNCATE PARTITION fails
--
echo
# but the statement is written to binlog
--
echo
#
--
let
$binlog_file
=
query_get_value
(
SHOW
MASTER
STATUS
,
File
,
1
)
--
let
$binlog_start
=
query_get_value
(
SHOW
MASTER
STATUS
,
Position
,
1
)
CREATE
TABLE
t1
(
id
INT
)
PARTITION
BY
RANGE
(
id
)
(
PARTITION
p0
VALUES
LESS
THAN
(
100
),
PARTITION
pmax
VALUES
LESS
THAN
(
MAXVALUE
));
INSERT
INTO
t1
VALUES
(
1
),
(
10
),
(
100
),
(
1000
);
--
error
ER_WRONG_PARTITION_NAME
ALTER
TABLE
t1
TRUNCATE
PARTITION
p1
;
--
error
ER_DROP_PARTITION_NON_EXISTENT
ALTER
TABLE
t1
DROP
PARTITION
p1
;
--
echo
# No error returned, output in table format instead:
ALTER
TABLE
t1
ANALYZE
PARTITION
p1
;
ALTER
TABLE
t1
CHECK
PARTITION
p1
;
ALTER
TABLE
t1
OPTIMIZE
PARTITION
p1
;
ALTER
TABLE
t1
REPAIR
PARTITION
p1
;
ALTER
TABLE
t1
ANALYZE
PARTITION
p0
;
ALTER
TABLE
t1
CHECK
PARTITION
p0
;
ALTER
TABLE
t1
OPTIMIZE
PARTITION
p0
;
ALTER
TABLE
t1
REPAIR
PARTITION
p0
;
ALTER
TABLE
t1
TRUNCATE
PARTITION
p0
;
ALTER
TABLE
t1
DROP
PARTITION
p0
;
--
source
include
/
show_binlog_events
.
inc
DROP
TABLE
t1
;
sql/ha_partition.cc
View file @
a998586d
...
@@ -3428,7 +3428,7 @@ int ha_partition::truncate()
...
@@ -3428,7 +3428,7 @@ int ha_partition::truncate()
ALTER TABLE t TRUNCATE PARTITION ...
ALTER TABLE t TRUNCATE PARTITION ...
*/
*/
int
ha_partition
::
truncate_partition
(
Alter_info
*
alter_info
)
int
ha_partition
::
truncate_partition
(
Alter_info
*
alter_info
,
bool
*
binlog_stmt
)
{
{
int
error
=
0
;
int
error
=
0
;
List_iterator
<
partition_element
>
part_it
(
m_part_info
->
partitions
);
List_iterator
<
partition_element
>
part_it
(
m_part_info
->
partitions
);
...
@@ -3440,6 +3440,9 @@ int ha_partition::truncate_partition(Alter_info *alter_info)
...
@@ -3440,6 +3440,9 @@ int ha_partition::truncate_partition(Alter_info *alter_info)
PART_ADMIN
);
PART_ADMIN
);
DBUG_ENTER
(
"ha_partition::truncate_partition"
);
DBUG_ENTER
(
"ha_partition::truncate_partition"
);
/* Only binlog when it starts any call to the partitions handlers */
*
binlog_stmt
=
false
;
/*
/*
TRUNCATE also means resetting auto_increment. Hence, reset
TRUNCATE also means resetting auto_increment. Hence, reset
it so that it will be initialized again at the next use.
it so that it will be initialized again at the next use.
...
@@ -3453,6 +3456,8 @@ int ha_partition::truncate_partition(Alter_info *alter_info)
...
@@ -3453,6 +3456,8 @@ int ha_partition::truncate_partition(Alter_info *alter_info)
(
!
(
alter_info
->
flags
&
ALTER_ALL_PARTITION
)))
(
!
(
alter_info
->
flags
&
ALTER_ALL_PARTITION
)))
DBUG_RETURN
(
HA_ERR_NO_PARTITION_FOUND
);
DBUG_RETURN
(
HA_ERR_NO_PARTITION_FOUND
);
*
binlog_stmt
=
true
;
do
do
{
{
partition_element
*
part_elem
=
part_it
++
;
partition_element
*
part_elem
=
part_it
++
;
...
...
sql/ha_partition.h
View file @
a998586d
...
@@ -362,7 +362,7 @@ class ha_partition :public handler
...
@@ -362,7 +362,7 @@ class ha_partition :public handler
@remark This method is a partitioning-specific hook
@remark This method is a partitioning-specific hook
and thus not a member of the general SE API.
and thus not a member of the general SE API.
*/
*/
int
truncate_partition
(
Alter_info
*
);
int
truncate_partition
(
Alter_info
*
,
bool
*
binlog_stmt
);
virtual
bool
is_fatal_error
(
int
error
,
uint
flags
)
virtual
bool
is_fatal_error
(
int
error
,
uint
flags
)
{
{
...
...
sql/sql_partition_admin.cc
View file @
a998586d
...
@@ -110,6 +110,7 @@ bool Alter_table_truncate_partition_statement::execute(THD *thd)
...
@@ -110,6 +110,7 @@ bool Alter_table_truncate_partition_statement::execute(THD *thd)
ha_partition
*
partition
;
ha_partition
*
partition
;
ulong
timeout
=
thd
->
variables
.
lock_wait_timeout
;
ulong
timeout
=
thd
->
variables
.
lock_wait_timeout
;
TABLE_LIST
*
first_table
=
thd
->
lex
->
select_lex
.
table_list
.
first
;
TABLE_LIST
*
first_table
=
thd
->
lex
->
select_lex
.
table_list
.
first
;
bool
binlog_stmt
;
DBUG_ENTER
(
"Alter_table_truncate_partition_statement::execute"
);
DBUG_ENTER
(
"Alter_table_truncate_partition_statement::execute"
);
/*
/*
...
@@ -161,16 +162,18 @@ bool Alter_table_truncate_partition_statement::execute(THD *thd)
...
@@ -161,16 +162,18 @@ bool Alter_table_truncate_partition_statement::execute(THD *thd)
partition
=
(
ha_partition
*
)
first_table
->
table
->
file
;
partition
=
(
ha_partition
*
)
first_table
->
table
->
file
;
/* Invoke the handler method responsible for truncating the partition. */
/* Invoke the handler method responsible for truncating the partition. */
if
((
error
=
partition
->
truncate_partition
(
&
thd
->
lex
->
alter_info
)))
if
((
error
=
partition
->
truncate_partition
(
&
thd
->
lex
->
alter_info
,
&
binlog_stmt
)))
first_table
->
table
->
file
->
print_error
(
error
,
MYF
(
0
));
first_table
->
table
->
file
->
print_error
(
error
,
MYF
(
0
));
/*
/*
All effects of a truncate operation are committed even if the
All effects of a truncate operation are committed even if the
operation fails. Thus, the query must be written to the binary
operation fails. Thus, the query must be written to the binary
log. The only exception is a unimplemented truncate method. Also,
log. The exception is a unimplemented truncate method or failure
it is logged in statement format, regardless of the binlog format.
before any call to handler::truncate() is done.
Also, it is logged in statement format, regardless of the binlog format.
*/
*/
if
(
error
!=
HA_ERR_WRONG_COMMAND
)
if
(
error
!=
HA_ERR_WRONG_COMMAND
&&
binlog_stmt
)
error
|=
write_bin_log
(
thd
,
!
error
,
thd
->
query
(),
thd
->
query_length
());
error
|=
write_bin_log
(
thd
,
!
error
,
thd
->
query
(),
thd
->
query_length
());
/*
/*
...
...
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