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; ...@@ -5485,3 +5485,11 @@ SELECT * FROM t1;
ERROR HY000: Table 't1' is marked as crashed and should be repaired ERROR HY000: Table 't1' is marked as crashed and should be repaired
DROP TABLE t1; DROP TABLE t1;
End of 5.1 tests 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; ...@@ -1917,3 +1917,12 @@ SELECT * FROM t1;
DROP TABLE t1; DROP TABLE t1;
--echo End of 5.1 tests --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) ...@@ -27,19 +27,18 @@ int my_rename(const char *from, const char *to, myf MyFlags)
DBUG_ENTER("my_rename"); DBUG_ENTER("my_rename");
DBUG_PRINT("my",("from %s to %s MyFlags %lu", from, to, MyFlags)); DBUG_PRINT("my",("from %s to %s MyFlags %lu", from, to, MyFlags));
#if defined(HAVE_RENAME)
#if defined(__WIN__) #if defined(__WIN__)
/* if (!MoveFileEx(from, to, MOVEFILE_COPY_ALLOWED |
On windows we can't rename over an existing file: MOVEFILE_REPLACE_EXISTING))
Remove any conflicting files: {
*/ my_osmaperr(GetLastError());
(void) my_delete(to, MYF(0)); #elif defined(HAVE_RENAME)
#endif
if (rename(from,to)) if (rename(from,to))
{
#else #else
if (link(from, to) || unlink(from)) if (link(from, to) || unlink(from))
#endif
{ {
#endif
my_errno=errno; my_errno=errno;
error = -1; error = -1;
if (MyFlags & (MY_FAE+MY_WME)) 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