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
e469cedf
Commit
e469cedf
authored
Sep 20, 2006
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge kpettersson@bk-internal:/home/bk/mysql-5.1-maint
into naruto.:C:/cpp/mysql-5.1-maint
parents
54886b08
b5b7840b
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
25 additions
and
74 deletions
+25
-74
mysql-test/r/windows.result
mysql-test/r/windows.result
+0
-28
mysql-test/t/windows.test
mysql-test/t/windows.test
+0
-39
storage/myisam/mi_locking.c
storage/myisam/mi_locking.c
+10
-6
storage/myisam/myisamdef.h
storage/myisam/myisamdef.h
+3
-0
storage/myisammrg/myrg_locking.c
storage/myisammrg/myrg_locking.c
+12
-1
No files found.
mysql-test/r/windows.result
View file @
e469cedf
...
...
@@ -6,31 +6,3 @@ use prn;
ERROR 42000: Unknown database 'prn'
create table nu (a int);
drop table nu;
CREATE TABLE `t1` (
`TIM` datetime NOT NULL,
`VAL` double default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `t2` (
`TIM` datetime NOT NULL,
`VAL` double default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `mt` (
`TIM` datetime NOT NULL,
`VAL` double default NULL
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 INSERT_METHOD=LAST
UNION=(`t1`,`t2`);
INSERT INTO mt VALUES ('2006-01-01',0);
ALTER TABLE `t2` RENAME TO `t`;
INSERT INTO mt VALUES ('2006-01-01',0);
ERROR HY000: Can't lock file (errno: 155)
select * from mt;
ERROR HY000: Can't lock file (errno: 155)
FLUSH TABLES;
select * from mt;
ERROR HY000: Can't find file: 'mt' (errno: 2)
ALTER TABLE `t` RENAME TO `t2`;
INSERT INTO mt VALUES ('2006-01-01',0);
select * from mt;
TIM VAL
2006-01-01 00:00:00 0
2006-01-01 00:00:00 0
mysql-test/t/windows.test
View file @
e469cedf
...
...
@@ -18,42 +18,3 @@ create table nu (a int);
drop
table
nu
;
# End of 4.1 tests
#
# Bug #20789: Merge Subtable Rename Causes Crash
#
CREATE
TABLE
`t1`
(
`TIM`
datetime
NOT
NULL
,
`VAL`
double
default
NULL
)
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
latin1
;
CREATE
TABLE
`t2`
(
`TIM`
datetime
NOT
NULL
,
`VAL`
double
default
NULL
)
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
latin1
;
CREATE
TABLE
`mt`
(
`TIM`
datetime
NOT
NULL
,
`VAL`
double
default
NULL
)
ENGINE
=
MRG_MyISAM
DEFAULT
CHARSET
=
latin1
INSERT_METHOD
=
LAST
UNION
=
(
`t1`
,
`t2`
);
# insert into the merge table and thus open it.
INSERT
INTO
mt
VALUES
(
'2006-01-01'
,
0
);
# Alter one of the tables that are part of the merge table
ALTER
TABLE
`t2`
RENAME
TO
`t`
;
# Insert into the merge table that has just been altered
--
error
1015
INSERT
INTO
mt
VALUES
(
'2006-01-01'
,
0
);
--
error
1015
select
*
from
mt
;
FLUSH
TABLES
;
--
error
1017
select
*
from
mt
;
# Alter one of the tables that are part of the merge table
ALTER
TABLE
`t`
RENAME
TO
`t2`
;
INSERT
INTO
mt
VALUES
(
'2006-01-01'
,
0
);
select
*
from
mt
;
storage/myisam/mi_locking.c
View file @
e469cedf
...
...
@@ -241,11 +241,15 @@ int mi_lock_database(MI_INFO *info, int lock_type)
else
{
/*
The file has been closed and kfile is -1.
See mi_extra.c about implementation of
HA_EXTRA_PREPARE_FOR_DELETE.
Check for bad file descriptors if this table is part
of a merge union. Failing to capture this may cause
a crash on windows if the table is renamed and
later on referenced by the merge table.
*/
error
=
HA_ERR_NO_SUCH_TABLE
;
if
(
info
->
owned_by_merge
&&
(
info
->
s
)
->
kfile
<
0
)
{
error
=
HA_ERR_NO_SUCH_TABLE
;
}
}
#endif
pthread_mutex_unlock
(
&
share
->
intern_lock
);
...
...
storage/myisam/myisamdef.h
View file @
e469cedf
...
...
@@ -291,6 +291,9 @@ struct st_myisam_info {
my_bool
page_changed
;
/* If info->buff can't be used for rnext */
my_bool
buff_used
;
/* If info->buff has to be reread for rnext */
my_bool
once_flags
;
/* For MYISAMMRG */
#ifdef __WIN__
my_bool
owned_by_merge
;
/* This MyISAM table is part of a merge union */
#endif
#ifdef THREAD
THR_LOCK_DATA
lock
;
#endif
...
...
storage/myisammrg/myrg_locking.c
View file @
e469cedf
...
...
@@ -27,7 +27,18 @@ int myrg_lock_database(MYRG_INFO *info, int lock_type)
error
=
0
;
for
(
file
=
info
->
open_tables
;
file
!=
info
->
end_table
;
file
++
)
{
#ifdef __WIN__
/*
Make sure this table is marked as owned by a merge table.
The semaphore is never released as long as table remains
in memory. This should be refactored into a more generic
approach (observer pattern)
*/
(
file
->
table
)
->
owned_by_merge
=
TRUE
;
#endif
if
((
new_error
=
mi_lock_database
(
file
->
table
,
lock_type
)))
error
=
new_error
;
}
return
(
error
);
}
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