Commit 9d918f41 authored by Sergey Vojtovich's avatar Sergey Vojtovich

MDEV-5612 - my_rename() deletes files when it shouldn't

Ported fix for MySQL BUG#51861.
parent 6efa5efa
......@@ -5485,3 +5485,11 @@ SELECT * FROM t1;
ERROR HY000: Table 't1' is marked as crashed and should be repaired
DROP TABLE t1;
End of 5.1 tests
#
# MDEV-5612 - my_rename() deletes files when it shouldn't
#
CREATE TABLE t1(a INT NOT NULL) ENGINE=CSV;
RENAME TABLE t1 TO t2;
SELECT * FROM t2;
a
DROP TABLE t2;
......
......@@ -1917,3 +1917,12 @@ SELECT * FROM t1;
DROP TABLE t1;
--echo End of 5.1 tests
--echo #
--echo # MDEV-5612 - my_rename() deletes files when it shouldn't
--echo #
CREATE TABLE t1(a INT NOT NULL) ENGINE=CSV;
move_file $MYSQLD_DATADIR/test/t1.CSV $MYSQLD_DATADIR/test/t2.CSV;
RENAME TABLE t1 TO t2;
SELECT * FROM t2;
DROP TABLE t2;
......@@ -27,19 +27,18 @@ int my_rename(const char *from, const char *to, myf MyFlags)
DBUG_ENTER("my_rename");
DBUG_PRINT("my",("from %s to %s MyFlags %lu", from, to, MyFlags));
#if defined(HAVE_RENAME)
#if defined(__WIN__)
/*
On windows we can't rename over an existing file:
Remove any conflicting files:
*/
(void) my_delete(to, MYF(0));
#endif
if (!MoveFileEx(from, to, MOVEFILE_COPY_ALLOWED |
MOVEFILE_REPLACE_EXISTING))
{
my_osmaperr(GetLastError());
#elif defined(HAVE_RENAME)
if (rename(from,to))
{
#else
if (link(from, to) || unlink(from))
#endif
{
#endif
my_errno=errno;
error = -1;
if (MyFlags & (MY_FAE+MY_WME))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment