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
3373a7ed
Commit
3373a7ed
authored
Jun 14, 2013
by
Aditya A
Browse files
Options
Browse Files
Download
Plain Diff
Bug#13548704 ALGORITHM USED FOR DROPPING PARTITIONED TABLE CAN LEAD
TO INCONSISTENCY [Merge from 5.1]
parents
9f3ceb97
5f3c0a45
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
35 additions
and
20 deletions
+35
-20
mysql-test/r/partition_myisam.result
mysql-test/r/partition_myisam.result
+2
-2
mysql-test/t/partition_myisam.test
mysql-test/t/partition_myisam.test
+2
-3
sql/ha_partition.cc
sql/ha_partition.cc
+30
-14
sql/ha_partition.h
sql/ha_partition.h
+1
-1
No files found.
mysql-test/r/partition_myisam.result
View file @
3373a7ed
...
...
@@ -106,8 +106,8 @@ test.t1 check Error Incorrect information in file: './test/t1.frm'
test.t1 check error Corrupt
SELECT * FROM t1;
ERROR HY000: Failed to read from the .par file
# Note that
it is currently impossible to drop a partitioned table
#
without the .par file
# Note that
we will remove the frm file when we detect that
#
.par file has been deleted.
DROP TABLE t1;
ERROR 42S02: Unknown table 't1'
#
...
...
mysql-test/t/partition_myisam.test
View file @
3373a7ed
...
...
@@ -86,11 +86,10 @@ FLUSH TABLES;
CHECK
TABLE
t1
;
--
error
ER_FAILED_READ_FROM_PAR_FILE
SELECT
*
FROM
t1
;
--
echo
# Note that
it is currently impossible to drop a partitioned table
--
echo
#
without the .par file
--
echo
# Note that
we will remove the frm file when we detect that
--
echo
#
.par file has been deleted.
--
error
ER_BAD_TABLE_ERROR
DROP
TABLE
t1
;
--
remove_file
$MYSQLD_DATADIR
/
test
/
t1
.
frm
--
remove_file
$MYSQLD_DATADIR
/
test
/
t1
#P#p0.MYI
--
remove_file
$MYSQLD_DATADIR
/
test
/
t1
#P#p0.MYD
...
...
sql/ha_partition.cc
View file @
3373a7ed
...
...
@@ -1930,15 +1930,15 @@ char *ha_partition::update_table_comment(const char *comment)
names of the partitions and the underlying storage engines.
*/
u
int
ha_partition
::
del_ren_cre_table
(
const
char
*
from
,
int
ha_partition
::
del_ren_cre_table
(
const
char
*
from
,
const
char
*
to
,
TABLE
*
table_arg
,
HA_CREATE_INFO
*
create_info
)
{
int
save_error
=
0
;
int
error
;
int
error
=
HA_ERR_INTERNAL_ERROR
;
char
from_buff
[
FN_REFLEN
],
to_buff
[
FN_REFLEN
],
from_lc_buff
[
FN_REFLEN
],
to_lc_buff
[
FN_REFLEN
];
to_lc_buff
[
FN_REFLEN
]
,
buff
[
FN_REFLEN
]
;
char
*
name_buffer_ptr
;
const
char
*
from_path
;
const
char
*
to_path
=
NULL
;
...
...
@@ -1950,24 +1950,28 @@ uint ha_partition::del_ren_cre_table(const char *from,
if
(
create_info
&&
create_info
->
options
&
HA_LEX_CREATE_TMP_TABLE
)
{
my_error
(
ER_PARTITION_NO_TEMPORARY
,
MYF
(
0
));
DBUG_RETURN
(
TRUE
);
DBUG_RETURN
(
error
);
}
if
(
get_from_handler_file
(
from
,
ha_thd
()
->
mem_root
,
false
))
DBUG_RETURN
(
TRUE
);
DBUG_ASSERT
(
m_file_buffer
);
DBUG_PRINT
(
"enter"
,
(
"from: (%s) to: (%s)"
,
from
,
to
?
to
:
"(nil)"
));
name_buffer_ptr
=
m_name_buffer_ptr
;
file
=
m_file
;
if
(
to
==
NULL
&&
table_arg
==
NULL
)
fn_format
(
buff
,
from
,
""
,
ha_par_ext
,
MY_APPEND_EXT
);
/* Check if the par file exists */
if
(
my_access
(
buff
,
F_OK
))
{
/*
Delete table, start by delete the .par file. If error, break, otherwise
delete as much as possible.
If the .par file does not exist, return HA_ERR_NO_SUCH_TABLE,
This will signal to the caller that it can remove the .frm
file.
*/
if
((
error
=
handler
::
delete_table
(
from
)))
error
=
HA_ERR_NO_SUCH_TABLE
;
DBUG_RETURN
(
error
);
}
if
(
get_from_handler_file
(
from
,
ha_thd
()
->
mem_root
,
false
))
DBUG_RETURN
(
error
);
DBUG_ASSERT
(
m_file_buffer
);
DBUG_PRINT
(
"enter"
,
(
"from: (%s) to: (%s)"
,
from
,
to
?
to
:
"(nil)"
));
name_buffer_ptr
=
m_name_buffer_ptr
;
file
=
m_file
;
/*
Since ha_partition has HA_FILE_BASED, it must alter underlying table names
if they do not have HA_FILE_BASED and lower_case_table_names == 2.
...
...
@@ -2006,6 +2010,18 @@ uint ha_partition::del_ren_cre_table(const char *from,
save_error
=
error
;
i
++
;
}
while
(
*
(
++
file
));
if
(
to
==
NULL
&&
table_arg
==
NULL
)
{
DBUG_EXECUTE_IF
(
"crash_before_deleting_par_file"
,
DBUG_SUICIDE
(););
/* Delete the .par file. If error, break.*/
if
((
error
=
handler
::
delete_table
(
from
)))
DBUG_RETURN
(
error
);
DBUG_EXECUTE_IF
(
"crash_after_deleting_par_file"
,
DBUG_SUICIDE
(););
}
if
(
to
!=
NULL
)
{
if
((
error
=
handler
::
rename_table
(
from
,
to
)))
...
...
sql/ha_partition.h
View file @
3373a7ed
...
...
@@ -275,7 +275,7 @@ private:
delete_table, rename_table and create uses very similar logic which
is packed into this routine.
*/
u
int
del_ren_cre_table
(
const
char
*
from
,
const
char
*
to
,
int
del_ren_cre_table
(
const
char
*
from
,
const
char
*
to
,
TABLE
*
table_arg
,
HA_CREATE_INFO
*
create_info
);
/*
One method to create the table_name.par file containing the names of the
...
...
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