Commit a6755acb authored by monty@mashka.mysql.fi's avatar monty@mashka.mysql.fi

Fix needed to support MERGE tables in different databases

parent 6bc7b3a6
...@@ -194,7 +194,7 @@ t5 CREATE TABLE `t5` ( ...@@ -194,7 +194,7 @@ t5 CREATE TABLE `t5` (
alter table t5 type=myisam; alter table t5 type=myisam;
drop table t5, mysqltest.t6; drop table t5, mysqltest.t6;
drop database mysqltest; drop database mysqltest;
drop table if exists t4,t3,t1,t2; drop table t4,t3,t1,t2;
create table t1 (c char(10)) type=myisam; create table t1 (c char(10)) type=myisam;
create table t2 (c char(10)) type=myisam; create table t2 (c char(10)) type=myisam;
create table t3 (c char(10)) union=(t1,t2) type=merge; create table t3 (c char(10)) union=(t1,t2) type=merge;
...@@ -540,7 +540,11 @@ a b ...@@ -540,7 +540,11 @@ a b
6 1 6 1
6 2 6 2
6 3 6 3
drop table if exists t6, t5, t4, t3, t2, t1; insert into t1 values (99,NULL);
select * from t4 where a+0 > 90;
a b
99 1
drop table t6, t5, t4, t3, t2, t1;
CREATE TABLE t1 ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', PRIMARY KEY (a,b)) TYPE=MyISAM; CREATE TABLE t1 ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', PRIMARY KEY (a,b)) TYPE=MyISAM;
INSERT INTO t1 VALUES (1,1), (2,1); INSERT INTO t1 VALUES (1,1), (2,1);
CREATE TABLE t2 ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', PRIMARY KEY (a,b)) TYPE=MyISAM; CREATE TABLE t2 ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', PRIMARY KEY (a,b)) TYPE=MyISAM;
...@@ -552,7 +556,7 @@ max(b) ...@@ -552,7 +556,7 @@ max(b)
select max(b) from t1 where a = 2; select max(b) from t1 where a = 2;
max(b) max(b)
1 1
drop table if exists t3,t1,t2; drop table t3,t1,t2;
create table t1 (a int not null); create table t1 (a int not null);
create table t2 (a int not null); create table t2 (a int not null);
insert into t1 values (1); insert into t1 values (1);
...@@ -571,7 +575,7 @@ select * from t6; ...@@ -571,7 +575,7 @@ select * from t6;
a a
1 1
2 2
drop table if exists t6, t3, t1, t2, t4, t5; drop table t6, t3, t1, t2, t4, t5;
CREATE TABLE t1 ( CREATE TABLE t1 (
fileset_id tinyint(3) unsigned NOT NULL default '0', fileset_id tinyint(3) unsigned NOT NULL default '0',
file_code varchar(32) NOT NULL default '', file_code varchar(32) NOT NULL default '',
......
...@@ -64,7 +64,7 @@ drop table t5, mysqltest.t6; ...@@ -64,7 +64,7 @@ drop table t5, mysqltest.t6;
drop database mysqltest; drop database mysqltest;
# Because of windows, it's important that we drop the merge tables first! # Because of windows, it's important that we drop the merge tables first!
drop table if exists t4,t3,t1,t2; drop table t4,t3,t1,t2;
create table t1 (c char(10)) type=myisam; create table t1 (c char(10)) type=myisam;
create table t2 (c char(10)) type=myisam; create table t2 (c char(10)) type=myisam;
...@@ -188,7 +188,9 @@ select * from t1 order by a,b; ...@@ -188,7 +188,9 @@ select * from t1 order by a,b;
select * from t2 order by a,b; select * from t2 order by a,b;
select * from t5 order by a,b; select * from t5 order by a,b;
select * from t6 order by a,b; select * from t6 order by a,b;
drop table if exists t6, t5, t4, t3, t2, t1; insert into t1 values (99,NULL);
select * from t4 where a+0 > 90;
drop table t6, t5, t4, t3, t2, t1;
CREATE TABLE t1 ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', PRIMARY KEY (a,b)) TYPE=MyISAM; CREATE TABLE t1 ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', PRIMARY KEY (a,b)) TYPE=MyISAM;
INSERT INTO t1 VALUES (1,1), (2,1); INSERT INTO t1 VALUES (1,1), (2,1);
...@@ -197,7 +199,7 @@ INSERT INTO t2 VALUES (1,2), (2,2); ...@@ -197,7 +199,7 @@ INSERT INTO t2 VALUES (1,2), (2,2);
CREATE TABLE t3 ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', KEY a (a,b)) TYPE=MRG_MyISAM UNION=(t1,t2); CREATE TABLE t3 ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', KEY a (a,b)) TYPE=MRG_MyISAM UNION=(t1,t2);
select max(b) from t3 where a = 2; select max(b) from t3 where a = 2;
select max(b) from t1 where a = 2; select max(b) from t1 where a = 2;
drop table if exists t3,t1,t2; drop table t3,t1,t2;
# #
# temporary merge tables # temporary merge tables
...@@ -214,7 +216,7 @@ insert into t4 values (1); ...@@ -214,7 +216,7 @@ insert into t4 values (1);
insert into t5 values (2); insert into t5 values (2);
create temporary table t6 (a int not null) TYPE=MERGE UNION=(t4,t5); create temporary table t6 (a int not null) TYPE=MERGE UNION=(t4,t5);
select * from t6; select * from t6;
drop table if exists t6, t3, t1, t2, t4, t5; drop table t6, t3, t1, t2, t4, t5;
# #
# testing merge::records_in_range and optimizer # testing merge::records_in_range and optimizer
......
...@@ -39,10 +39,10 @@ my_string my_load_path(my_string to, const char *path, ...@@ -39,10 +39,10 @@ my_string my_load_path(my_string to, const char *path,
(is_prefix((gptr) path,FN_PARENTDIR)) || (is_prefix((gptr) path,FN_PARENTDIR)) ||
! own_path_prefix) ! own_path_prefix)
{ {
if (! my_getwd(buff,(uint) (FN_REFLEN-strlen(path)),MYF(0))) if (! my_getwd(buff,(uint) (FN_REFLEN+2-strlen(path)),MYF(0)))
VOID(strcat(buff,path)); VOID(strcat(buff,path+2));
else else
VOID(strmov(buff,path)); VOID(strmov(buff,path)); /* Return org file name */
} }
else else
VOID(strxmov(buff,own_path_prefix,path,NullS)); VOID(strxmov(buff,own_path_prefix,path,NullS));
......
...@@ -123,20 +123,22 @@ int my_realpath(char *to, const char *filename, ...@@ -123,20 +123,22 @@ int my_realpath(char *to, const char *filename,
} }
else else
{ {
/* Realpath didn't work; Use original name */ /*
Realpath didn't work; Use my_load_path() which is a poor substitute
original name but will at least be able to resolve paths that starts
with '.'.
*/
DBUG_PRINT("error",("realpath failed with errno: %d", errno)); DBUG_PRINT("error",("realpath failed with errno: %d", errno));
my_errno=errno; my_errno=errno;
if (MyFlags & MY_WME) if (MyFlags & MY_WME)
my_error(EE_REALPATH, MYF(0), filename, my_errno); my_error(EE_REALPATH, MYF(0), filename, my_errno);
if (to != filename) my_load_path(to, filename, NullS);
strmov(to,filename);
result= -1; result= -1;
} }
} }
DBUG_RETURN(result); DBUG_RETURN(result);
#else #else
if (to != filename) my_load_path(to, filename, NullS);
strmov(to,filename);
return 0; return 0;
#endif #endif
} }
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