merge 5.5 -> 10.0-base

This commit is contained in:
unknown 2013-08-20 14:48:29 +03:00
commit 35b2883643
60 changed files with 730 additions and 246 deletions

View File

@ -3510,6 +3510,7 @@ print_table_data(MYSQL_RES *result)
if (length < 4 && !IS_NOT_NULL(field->flags)) if (length < 4 && !IS_NOT_NULL(field->flags))
length=4; // Room for "NULL" length=4; // Room for "NULL"
field->max_length=length; field->max_length=length;
num_flag[mysql_field_tell(result) - 1]= IS_NUM(field->type);
separator.fill(separator.length()+length+2,'-'); separator.fill(separator.length()+length+2,'-');
separator.append('+'); separator.append('+');
} }
@ -3529,7 +3530,6 @@ print_table_data(MYSQL_RES *result)
tee_fprintf(PAGER, " %-*s |",(int) min(display_length, tee_fprintf(PAGER, " %-*s |",(int) min(display_length,
MAX_COLUMN_LENGTH), MAX_COLUMN_LENGTH),
field->name); field->name);
num_flag[off]= IS_NUM(field->type);
} }
(void) tee_fputs("\n", PAGER); (void) tee_fputs("\n", PAGER);
tee_puts((char*) separator.ptr(), PAGER); tee_puts((char*) separator.ptr(), PAGER);

View File

@ -1642,6 +1642,7 @@ void _db_end_()
cs->stack= &init_settings; cs->stack= &init_settings;
FreeState(cs, 0); FreeState(cs, 0);
init_done= 0;
} }

View File

@ -1404,6 +1404,27 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
drop view v1; drop view v1;
drop table t1; drop table t1;
# #
# MDEV-4811: Assertion `offset < 0x1f' fails in type_and_offset_store
# on COLUMN_ADD
#
CREATE TABLE t1 (dyn TINYBLOB) ENGINE=MyISAM;
INSERT INTO t1 SET dyn = COLUMN_CREATE( 40, REPEAT('a', 233), 4, REPEAT('b', 322) );
Warnings:
Warning 1265 Data truncated for column 'dyn' at row 1
SELECT COLUMN_ADD( dyn, 6, REPEAT('x',80), 4, REPEAT('y',215) AS INTEGER ) FROM t1;
ERROR HY000: Encountered illegal format of dynamic column string
DROP table t1;
#
# MDEV-4812: Valgrind warnings (Invalid write) in
# dynamic_column_update_many on COLUMN_ADD
#
CREATE TABLE t1 (dyncol TINYBLOB) ENGINE=MyISAM;
INSERT INTO t1 SET dyncol = COLUMN_CREATE( 7, REPEAT('k',487), 209, REPEAT('x',464) );
Warnings:
Warning 1265 Data truncated for column 'dyncol' at row 1
SELECT COLUMN_ADD( dyncol, 7, '22:22:22', 8, REPEAT('x',270) AS CHAR ) FROM t1;
DROP table t1;
#
# end of 5.3 tests # end of 5.3 tests
# #
# #

View File

@ -1971,6 +1971,7 @@ MIN(t2.pk)
NULL NULL
Warnings: Warnings:
Warning 1292 Truncated incorrect INTEGER value: 'j' Warning 1292 Truncated incorrect INTEGER value: 'j'
Warning 1292 Truncated incorrect INTEGER value: 'j'
EXPLAIN EXPLAIN
SELECT MIN(t2.pk) SELECT MIN(t2.pk)
@ -1984,6 +1985,7 @@ id select_type table type possible_keys key key_len ref rows Extra
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 2 2 MATERIALIZED t2 ALL NULL NULL NULL NULL 2
Warnings: Warnings:
Warning 1292 Truncated incorrect INTEGER value: 'j' Warning 1292 Truncated incorrect INTEGER value: 'j'
Warning 1292 Truncated incorrect INTEGER value: 'j'
# #
# 2) Test that subquery materialization is setup for query with # 2) Test that subquery materialization is setup for query with

View File

@ -160,6 +160,25 @@ CONVERT( a USING latin1 )
DROP TABLE t1, t2; DROP TABLE t1, t2;
# #
# Start of 5.3 tests
#
#
# MDEV-4512 Valgrind warnings in my_long10_to_str_8bit on INTERVAL and DATE_ADD with incorrect types
#
CREATE TABLE t1 (pk INT PRIMARY KEY);
INSERT INTO t1 VALUES (10),(11);
SELECT INTERVAL( 9, 1, DATE_ADD( pk, INTERVAL pk MINUTE_SECOND ), 9, 8, 3, 5, 2, 1 ) FROM t1;
INTERVAL( 9, 1, DATE_ADD( pk, INTERVAL pk MINUTE_SECOND ), 9, 8, 3, 5, 2, 1 )
8
8
Warnings:
Warning 1292 Incorrect datetime value: '10'
Warning 1292 Incorrect datetime value: '11'
DROP TABLE t1;
#
# End of 5.3 tests
#
#
# BUG#59405: FIND_IN_SET won't work normaly after upgrade from 5.1 to 5.5 # BUG#59405: FIND_IN_SET won't work normaly after upgrade from 5.1 to 5.5
# #
CREATE TABLE t1(days set('1','2','3','4','5','6','7')); CREATE TABLE t1(days set('1','2','3','4','5','6','7'));

View File

@ -663,9 +663,10 @@ Warning 1365 Division by 0
Warning 1048 Column 'data' cannot be null Warning 1048 Column 'data' cannot be null
update t1 set data='envelope' where 1/0 or 1; update t1 set data='envelope' where 1/0 or 1;
affected rows: 2 affected rows: 2
info: Rows matched: 2 Changed: 2 Warnings: 3 info: Rows matched: 2 Changed: 2 Warnings: 4
Warnings: Warnings:
Warning 1365 Division by 0 Warning 1365 Division by 0
Warning 1365 Division by 0
Warning 1265 Data truncated for column 'data' at row 1 Warning 1265 Data truncated for column 'data' at row 1
Warning 1265 Data truncated for column 'data' at row 2 Warning 1265 Data truncated for column 'data' at row 2
insert t1 (data) values (default), (1/0), ('dead beef'); insert t1 (data) values (default), (1/0), ('dead beef');

View File

@ -2117,4 +2117,25 @@ SELECT a.* FROM t1 a LEFT JOIN t1 b ON a.id = b.id
WHERE a.modified > b.modified or b.modified IS NULL; WHERE a.modified > b.modified or b.modified IS NULL;
id modified id modified
DROP TABLE t1; DROP TABLE t1;
#
# MDEV-4817: Optimizer fails to optimize expression of the form 'FOO' IS NULL
#
create table t0 (a int not null);
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
alter table t0 add person_id varchar(255) not null;
create table t1 (pk int not null primary key);
insert into t1 select A.a + 10*B.a from t0 A, t0 B;
explain select * from t1 left join t0 on t0.a=t1.pk where t0.person_id='fooo' or 'xyz' IS NULL;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t0 ALL NULL NULL NULL NULL 10 Using where
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 Using index
explain select * from t1 left join t0 on t0.a=t1.pk where t0.person_id='fooo';
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t0 ALL NULL NULL NULL NULL 10 Using where
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 Using index
explain select * from t1 left join t0 on t0.a=t1.pk where t0.person_id='fooo' or t0.person_id='bar';
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t0 ALL NULL NULL NULL NULL 10 Using where
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 Using index
drop table t0, t1;
SET optimizer_switch=@save_optimizer_switch; SET optimizer_switch=@save_optimizer_switch;

View File

@ -14,8 +14,8 @@ EXPLAIN
SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id
WHERE t1.name LIKE 'A%' OR FALSE; WHERE t1.name LIKE 'A%' OR FALSE;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 index NULL fkey 5 NULL 5 Using index 1 SIMPLE t1 index PRIMARY,name name 23 NULL 3 Using where; Using index
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.fkey 1 Using where 1 SIMPLE t2 ref fkey fkey 5 test.t1.id 1 Using index
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
# BUG#58456: Assertion 0 in QUICK_INDEX_MERGE_SELECT::need_sorted_output # BUG#58456: Assertion 0 in QUICK_INDEX_MERGE_SELECT::need_sorted_output

View File

@ -2128,6 +2128,27 @@ SELECT a.* FROM t1 a LEFT JOIN t1 b ON a.id = b.id
WHERE a.modified > b.modified or b.modified IS NULL; WHERE a.modified > b.modified or b.modified IS NULL;
id modified id modified
DROP TABLE t1; DROP TABLE t1;
#
# MDEV-4817: Optimizer fails to optimize expression of the form 'FOO' IS NULL
#
create table t0 (a int not null);
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
alter table t0 add person_id varchar(255) not null;
create table t1 (pk int not null primary key);
insert into t1 select A.a + 10*B.a from t0 A, t0 B;
explain select * from t1 left join t0 on t0.a=t1.pk where t0.person_id='fooo' or 'xyz' IS NULL;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t0 ALL NULL NULL NULL NULL 10 Using where
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 Using index
explain select * from t1 left join t0 on t0.a=t1.pk where t0.person_id='fooo';
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t0 ALL NULL NULL NULL NULL 10 Using where
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 Using index
explain select * from t1 left join t0 on t0.a=t1.pk where t0.person_id='fooo' or t0.person_id='bar';
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t0 ALL NULL NULL NULL NULL 10 Using where
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t0.a 1 Using index
drop table t0, t1;
SET optimizer_switch=@save_optimizer_switch; SET optimizer_switch=@save_optimizer_switch;
set join_cache_level=default; set join_cache_level=default;
show variables like 'join_cache_level'; show variables like 'join_cache_level';

View File

@ -18,7 +18,7 @@ n
4 4
drop table t1; drop table t1;
create table t1(n int); create table t1(n int);
insert into t1 values (1); insert into t1 values (1),(2);
select get_lock("mysqltest_lock", 100); select get_lock("mysqltest_lock", 100);
get_lock("mysqltest_lock", 100) get_lock("mysqltest_lock", 100)
1 1
@ -27,11 +27,13 @@ update low_priority t1 set n = 4;
select n from t1; select n from t1;
n n
1 1
2
select release_lock("mysqltest_lock"); select release_lock("mysqltest_lock");
release_lock("mysqltest_lock") release_lock("mysqltest_lock")
1 1
n n
1 1
2
select release_lock("mysqltest_lock"); select release_lock("mysqltest_lock");
release_lock("mysqltest_lock") release_lock("mysqltest_lock")
1 1

View File

@ -515,5 +515,9 @@ aa`bb``cc
drop database `aa``bb````cc`; drop database `aa``bb````cc`;
a a
>>\ndelimiter\n<< >>\ndelimiter\n<<
+-------------------+
| a |
| aaaaaaaaaaaaaaaaa |
+-------------------+
End of tests End of tests

View File

@ -1590,6 +1590,8 @@ NULL
Warnings: Warnings:
Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date
Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date
Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date
Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date
SELECT str_to_date('2007-10-00', '%Y-%m-%d') BETWEEN '' AND '2007/10/20'; SELECT str_to_date('2007-10-00', '%Y-%m-%d') BETWEEN '' AND '2007/10/20';
str_to_date('2007-10-00', '%Y-%m-%d') BETWEEN '' AND '2007/10/20' str_to_date('2007-10-00', '%Y-%m-%d') BETWEEN '' AND '2007/10/20'
1 1

View File

@ -1592,6 +1592,8 @@ NULL
Warnings: Warnings:
Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date
Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date
Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date
Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date
SELECT str_to_date('2007-10-00', '%Y-%m-%d') BETWEEN '' AND '2007/10/20'; SELECT str_to_date('2007-10-00', '%Y-%m-%d') BETWEEN '' AND '2007/10/20';
str_to_date('2007-10-00', '%Y-%m-%d') BETWEEN '' AND '2007/10/20' str_to_date('2007-10-00', '%Y-%m-%d') BETWEEN '' AND '2007/10/20'
1 1

View File

@ -5358,3 +5358,38 @@ WHERE c = a AND
a b c a b c
DROP TABLE t1, t2; DROP TABLE t1, t2;
End of 5.3 tests End of 5.3 tests
#
# mysql BUG#1271 Undefined variable in PASSWORD()
# function is not handled correctly
#
create table t1 (
name VARCHAR(50) NOT NULL PRIMARY KEY,
pw VARCHAR(41) NOT NULL);
INSERT INTO t1 (name, pw)
VALUES ('tom', PASSWORD('my_pw'));
SET @pass='my_pw';
SET @wrong='incorrect';
select * from t1;
name pw
tom *F305E8EC27734F687F2EB6EC03CF0F7AF27C18E1
select length(PASSWORD(@pass));
length(PASSWORD(@pass))
41
SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@pass);
name
tom
SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@wrong);
name
SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@undefined);
name
select (SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@pass));
(SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@pass))
tom
select (SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@wrong));
(SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@wrong))
NULL
select (SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@undefined));
(SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@undefined))
NULL
drop table t1;
End of 10.0 tests

View File

@ -5369,6 +5369,41 @@ WHERE c = a AND
a b c a b c
DROP TABLE t1, t2; DROP TABLE t1, t2;
End of 5.3 tests End of 5.3 tests
#
# mysql BUG#1271 Undefined variable in PASSWORD()
# function is not handled correctly
#
create table t1 (
name VARCHAR(50) NOT NULL PRIMARY KEY,
pw VARCHAR(41) NOT NULL);
INSERT INTO t1 (name, pw)
VALUES ('tom', PASSWORD('my_pw'));
SET @pass='my_pw';
SET @wrong='incorrect';
select * from t1;
name pw
tom *F305E8EC27734F687F2EB6EC03CF0F7AF27C18E1
select length(PASSWORD(@pass));
length(PASSWORD(@pass))
41
SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@pass);
name
tom
SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@wrong);
name
SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@undefined);
name
select (SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@pass));
(SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@pass))
tom
select (SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@wrong));
(SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@wrong))
NULL
select (SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@undefined));
(SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@undefined))
NULL
drop table t1;
End of 10.0 tests
set join_cache_level=default; set join_cache_level=default;
show variables like 'join_cache_level'; show variables like 'join_cache_level';
Variable_name Value Variable_name Value

View File

@ -5358,3 +5358,38 @@ WHERE c = a AND
a b c a b c
DROP TABLE t1, t2; DROP TABLE t1, t2;
End of 5.3 tests End of 5.3 tests
#
# mysql BUG#1271 Undefined variable in PASSWORD()
# function is not handled correctly
#
create table t1 (
name VARCHAR(50) NOT NULL PRIMARY KEY,
pw VARCHAR(41) NOT NULL);
INSERT INTO t1 (name, pw)
VALUES ('tom', PASSWORD('my_pw'));
SET @pass='my_pw';
SET @wrong='incorrect';
select * from t1;
name pw
tom *F305E8EC27734F687F2EB6EC03CF0F7AF27C18E1
select length(PASSWORD(@pass));
length(PASSWORD(@pass))
41
SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@pass);
name
tom
SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@wrong);
name
SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@undefined);
name
select (SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@pass));
(SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@pass))
tom
select (SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@wrong));
(SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@wrong))
NULL
select (SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@undefined));
(SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@undefined))
NULL
drop table t1;
End of 10.0 tests

View File

@ -169,7 +169,7 @@ drop procedure if exists p1;
create table t1 (value varchar(15)); create table t1 (value varchar(15));
create procedure p1() update t1 set value='updated' where value='old'; create procedure p1() update t1 set value='updated' where value='old';
call p1(); call p1();
insert into t1 (value) values ("old"); insert into t1 (value) values ("old"),("irrelevant");
select get_lock('b26162',120); select get_lock('b26162',120);
get_lock('b26162',120) get_lock('b26162',120)
1 1
@ -179,11 +179,13 @@ call p1();;
select 'rl_contender', value from t1; select 'rl_contender', value from t1;
rl_contender value rl_contender value
rl_contender old rl_contender old
rl_contender irrelevant
select release_lock('b26162'); select release_lock('b26162');
release_lock('b26162') release_lock('b26162')
1 1
rl_acquirer value rl_acquirer value
rl_acquirer old rl_acquirer old
rl_acquirer irrelevant
drop procedure p1; drop procedure p1;
drop table t1; drop table t1;
set session low_priority_updates=default; set session low_priority_updates=default;

View File

@ -3129,6 +3129,7 @@ WHERE table1 .`col_varchar_key` ) field10
1 NULL f 1 NULL f
Warnings: Warnings:
Warning 1292 Truncated incorrect DOUBLE value: 'f' Warning 1292 Truncated incorrect DOUBLE value: 'f'
Warning 1292 Truncated incorrect DOUBLE value: 'f'
SET @@optimizer_switch = 'subquery_cache=on'; SET @@optimizer_switch = 'subquery_cache=on';
/* cache is on */ SELECT COUNT( DISTINCT table2 .`col_int_key` ) , ( /* cache is on */ SELECT COUNT( DISTINCT table2 .`col_int_key` ) , (
SELECT SUBQUERY2_t1 .`col_int_key` SELECT SUBQUERY2_t1 .`col_int_key`
@ -3144,6 +3145,7 @@ WHERE table1 .`col_varchar_key` ) field10
1 NULL f 1 NULL f
Warnings: Warnings:
Warning 1292 Truncated incorrect DOUBLE value: 'f' Warning 1292 Truncated incorrect DOUBLE value: 'f'
Warning 1292 Truncated incorrect DOUBLE value: 'f'
drop table t1,t2,t3,t4; drop table t1,t2,t3,t4;
set @@optimizer_switch= default; set @@optimizer_switch= default;
#launchpad BUG#611625 #launchpad BUG#611625

View File

@ -309,3 +309,22 @@ CONVERT_TZ(1, 1, a)
NULL NULL
DROP TABLE t1; DROP TABLE t1;
End of 5.1 tests End of 5.1 tests
#
# Start of 5.3 tests
#
#
# MDEV-4653 Wrong result for CONVERT_TZ(TIME('00:00:00'),'+00:00','+7:5')
#
SELECT CONVERT_TZ(TIME('00:00:00'),'+00:00','+7:5');
CONVERT_TZ(TIME('00:00:00'),'+00:00','+7:5')
NULL
Warnings:
Warning 1292 Incorrect datetime value: '00:00:00'
SELECT CONVERT_TZ(TIME('2010-01-01 00:00:00'),'+00:00','+7:5');
CONVERT_TZ(TIME('2010-01-01 00:00:00'),'+00:00','+7:5')
NULL
Warnings:
Warning 1292 Incorrect datetime value: '00:00:00'
#
# End of 5.3 tests
#

View File

@ -183,6 +183,15 @@ NULL
Warnings: Warnings:
Warning 1292 Incorrect datetime value: '0000-00-00 00:00:00' Warning 1292 Incorrect datetime value: '0000-00-00 00:00:00'
# #
# MDEV-4652 Wrong result for CONCAT(GREATEST(TIME('00:00:01'),TIME('00:00:00')))
#
SELECT CONCAT(GREATEST(TIME('00:00:01'),TIME('00:00:00')));
CONCAT(GREATEST(TIME('00:00:01'),TIME('00:00:00')))
00:00:01.000000
SELECT CONCAT(GREATEST(TIME('32 00:00:01'),TIME('00:00:00')));
CONCAT(GREATEST(TIME('32 00:00:01'),TIME('00:00:00')))
768:00:01.000000
#
# End of 5.3 tests # End of 5.3 tests
# #
CREATE TABLE t1 (f1 TIME); CREATE TABLE t1 (f1 TIME);

View File

@ -126,14 +126,14 @@ select @a+0, @a:=@a+0+count(*), count(*), @a+0 from t1 group by i;
set @a=0; set @a=0;
select @a,@a:="hello",@a,@a:=3,@a,@a:="hello again" from t1 group by i; select @a,@a:="hello",@a,@a:=3,@a,@a:="hello again" from t1 group by i;
@a @a:="hello" @a @a:=3 @a @a:="hello again" @a @a:="hello" @a @a:=3 @a @a:="hello again"
0 hello 0 3 0 hello again 0 hello 0 3 3 hello again
0 hello 0 3 0 hello again 0 hello 0 3 3 hello again
0 hello 0 3 0 hello again 0 hello 0 3 3 hello again
select @a,@a:="hello",@a,@a:=3,@a,@a:="hello again" from t1 group by i; select @a,@a:="hello",@a,@a:=3,@a,@a:="hello again" from t1 group by i;
@a @a:="hello" @a @a:=3 @a @a:="hello again" @a @a:="hello" @a @a:=3 @a @a:="hello again"
hello again hello hello again 3 hello again hello again hello again hello hello 3 3 hello again
hello again hello hello again 3 hello again hello again hello again hello hello 3 3 hello again
hello again hello hello again 3 hello again hello again hello again hello hello 3 3 hello again
drop table t1; drop table t1;
set @a=_latin2'test'; set @a=_latin2'test';
select charset(@a),collation(@a),coercibility(@a); select charset(@a),collation(@a),coercibility(@a);

View File

@ -1549,7 +1549,7 @@ one
1 1
explain SELECT 1 as 'one' FROM t1 GROUP BY @a:= (SELECT ROUND(f1) FROM t1 WHERE f1 = 0); explain SELECT 1 as 'one' FROM t1 GROUP BY @a:= (SELECT ROUND(f1) FROM t1 WHERE f1 = 0);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
2 SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using where 2 SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using where
SELECT 1 as 'one' FROM t1 GROUP BY @a:= (SELECT ROUND(f1) FROM t1 WHERE f1 = 0); SELECT 1 as 'one' FROM t1 GROUP BY @a:= (SELECT ROUND(f1) FROM t1 WHERE f1 = 0);
one one
@ -1560,7 +1560,7 @@ one
set sql_buffer_result=1; set sql_buffer_result=1;
explain SELECT 1 as 'one' FROM t1 GROUP BY @a:= (SELECT ROUND(f1) FROM t1 WHERE f1 = 0); explain SELECT 1 as 'one' FROM t1 GROUP BY @a:= (SELECT ROUND(f1) FROM t1 WHERE f1 = 0);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using temporary 1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
2 SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using where 2 SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using where
SELECT 1 as 'one' FROM t1 GROUP BY @a:= (SELECT ROUND(f1) FROM t1 WHERE f1 = 0); SELECT 1 as 'one' FROM t1 GROUP BY @a:= (SELECT ROUND(f1) FROM t1 WHERE f1 = 0);
one one

View File

@ -361,8 +361,8 @@ EXPLAIN
SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id
WHERE t1.name LIKE 'A%' OR FALSE; WHERE t1.name LIKE 'A%' OR FALSE;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 index NULL fkey 5 NULL 5 Using index 1 SIMPLE t1 index PRIMARY,name name 23 NULL 3 Using where; Using index
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t2.fkey 1 Using where 1 SIMPLE t2 ref fkey fkey 5 test.t1.id 1 Using index
DROP TABLE t1,t2; DROP TABLE t1,t2;
CREATE TABLE t1 ( CREATE TABLE t1 (
id int NOT NULL, id int NOT NULL,

View File

@ -74,8 +74,8 @@ Variable_name Value
cassandra_insert_batch_size 100 cassandra_insert_batch_size 100
show status like 'cassandra_row_insert%'; show status like 'cassandra_row_insert%';
Variable_name Value Variable_name Value
Cassandra_row_insert_batches 7
Cassandra_row_inserts 8 Cassandra_row_inserts 8
Cassandra_row_insert_batches 7
CREATE TABLE t1 (rowkey BIGINT PRIMARY KEY, a BIGINT) ENGINE=CASSANDRA CREATE TABLE t1 (rowkey BIGINT PRIMARY KEY, a BIGINT) ENGINE=CASSANDRA
thrift_host='localhost' keyspace='mariadbtest2' column_family = 'cf2'; thrift_host='localhost' keyspace='mariadbtest2' column_family = 'cf2';
delete from t1; delete from t1;
@ -84,14 +84,14 @@ DELETE FROM t1 ORDER BY a LIMIT 1;
DROP TABLE t1; DROP TABLE t1;
show status like 'cassandra_row_insert%'; show status like 'cassandra_row_insert%';
Variable_name Value Variable_name Value
Cassandra_row_insert_batches 8
Cassandra_row_inserts 10 Cassandra_row_inserts 10
Cassandra_row_insert_batches 8
# FLUSH STATUS doesn't work for our variables, just like with InnoDB. # FLUSH STATUS doesn't work for our variables, just like with InnoDB.
flush status; flush status;
show status like 'cassandra_row_insert%'; show status like 'cassandra_row_insert%';
Variable_name Value Variable_name Value
Cassandra_row_insert_batches 0 Cassandra_row_inserts 10
Cassandra_row_inserts 0 Cassandra_row_insert_batches 8
# #
# Batched Key Access # Batched Key Access
# #

View File

@ -112,7 +112,7 @@ if ($mysql_errname!=ER_CANT_DO_ONLINE)
--let $alter_definition = MODIFY b BIGINT $default_col_opts --let $alter_definition = MODIFY b BIGINT $default_col_opts
--source alter_table.inc --source alter_table.inc
--let $alternative_engine = `SELECT engine FROM information_schema.engines WHERE engine != '$storage_engine' AND support IN ('YES','DEFAULT')` --let $alternative_engine = `SELECT engine FROM information_schema.engines WHERE engine IN ('MEMORY','MyISAM') AND engine != '$storage_engine' ORDER BY engine LIMIT 1`
--let $error_codes = ER_CANT_DO_ONLINE --let $error_codes = ER_CANT_DO_ONLINE
--let $online = 1 --let $online = 1

View File

@ -414,20 +414,20 @@ FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second
first second w c o e d t i r first second w c o e d t i r
120 120 1 1 0 1 0 1 1 0 120 120 1 1 0 1 0 1 1 0
120 121 0 0 1 0 0 0 1 0 120 121 0 0 1 0 0 0 1 0
120 122 0 1 NULL 0 NULL 0 NULL 0 120 122 NULL NULL NULL NULL NULL NULL NULL NULL
120 123 0 1 NULL 0 NULL 0 NULL 0 120 123 NULL NULL NULL NULL NULL NULL NULL NULL
121 120 0 0 1 0 0 0 1 0 121 120 0 0 1 0 0 0 1 0
121 121 1 1 0 1 0 1 1 0 121 121 1 1 0 1 0 1 1 0
121 122 0 1 NULL 0 NULL 0 NULL 0 121 122 NULL NULL NULL NULL NULL NULL NULL NULL
121 123 0 1 NULL 0 NULL 0 NULL 0 121 123 NULL NULL NULL NULL NULL NULL NULL NULL
122 120 1 0 NULL 0 NULL 0 NULL 0 122 120 NULL NULL NULL NULL NULL NULL NULL NULL
122 121 1 0 NULL 0 NULL 0 NULL 0 122 121 NULL NULL NULL NULL NULL NULL NULL NULL
122 122 1 1 NULL 1 NULL 0 NULL 0 122 122 NULL NULL NULL NULL NULL NULL NULL NULL
122 123 1 1 NULL 1 NULL 0 NULL 0 122 123 NULL NULL NULL NULL NULL NULL NULL NULL
123 120 1 0 NULL 0 NULL 0 NULL 0 123 120 NULL NULL NULL NULL NULL NULL NULL NULL
123 121 1 0 NULL 0 NULL 0 NULL 0 123 121 NULL NULL NULL NULL NULL NULL NULL NULL
123 122 1 1 NULL 1 NULL 0 NULL 0 123 122 NULL NULL NULL NULL NULL NULL NULL NULL
123 123 1 1 NULL 1 NULL 0 NULL 0 123 123 NULL NULL NULL NULL NULL NULL NULL NULL
DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry; DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
USE gis_ogs; USE gis_ogs;
# Lakes # Lakes

View File

@ -414,20 +414,20 @@ FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second
first second w c o e d t i r first second w c o e d t i r
120 120 1 1 0 1 0 1 1 0 120 120 1 1 0 1 0 1 1 0
120 121 0 0 1 0 0 0 1 0 120 121 0 0 1 0 0 0 1 0
120 122 0 1 NULL 0 NULL 0 NULL 0 120 122 NULL NULL NULL NULL NULL NULL NULL NULL
120 123 0 1 NULL 0 NULL 0 NULL 0 120 123 NULL NULL NULL NULL NULL NULL NULL NULL
121 120 0 0 1 0 0 0 1 0 121 120 0 0 1 0 0 0 1 0
121 121 1 1 0 1 0 1 1 0 121 121 1 1 0 1 0 1 1 0
121 122 0 1 NULL 0 NULL 0 NULL 0 121 122 NULL NULL NULL NULL NULL NULL NULL NULL
121 123 0 1 NULL 0 NULL 0 NULL 0 121 123 NULL NULL NULL NULL NULL NULL NULL NULL
122 120 1 0 NULL 0 NULL 0 NULL 0 122 120 NULL NULL NULL NULL NULL NULL NULL NULL
122 121 1 0 NULL 0 NULL 0 NULL 0 122 121 NULL NULL NULL NULL NULL NULL NULL NULL
122 122 1 1 NULL 1 NULL 0 NULL 0 122 122 NULL NULL NULL NULL NULL NULL NULL NULL
122 123 1 1 NULL 1 NULL 0 NULL 0 122 123 NULL NULL NULL NULL NULL NULL NULL NULL
123 120 1 0 NULL 0 NULL 0 NULL 0 123 120 NULL NULL NULL NULL NULL NULL NULL NULL
123 121 1 0 NULL 0 NULL 0 NULL 0 123 121 NULL NULL NULL NULL NULL NULL NULL NULL
123 122 1 1 NULL 1 NULL 0 NULL 0 123 122 NULL NULL NULL NULL NULL NULL NULL NULL
123 123 1 1 NULL 1 NULL 0 NULL 0 123 123 NULL NULL NULL NULL NULL NULL NULL NULL
DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry; DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
USE gis_ogs; USE gis_ogs;
# Lakes # Lakes
@ -1114,20 +1114,20 @@ FROM gis_geometrycollection g1, gis_geometrycollection g2 ORDER BY first, second
first second w c o e d t i r first second w c o e d t i r
120 120 1 1 0 1 0 1 1 0 120 120 1 1 0 1 0 1 1 0
120 121 0 0 1 0 0 0 1 0 120 121 0 0 1 0 0 0 1 0
120 122 0 1 NULL 0 NULL 0 NULL 0 120 122 NULL NULL NULL NULL NULL NULL NULL NULL
120 123 0 1 NULL 0 NULL 0 NULL 0 120 123 NULL NULL NULL NULL NULL NULL NULL NULL
121 120 0 0 1 0 0 0 1 0 121 120 0 0 1 0 0 0 1 0
121 121 1 1 0 1 0 1 1 0 121 121 1 1 0 1 0 1 1 0
121 122 0 1 NULL 0 NULL 0 NULL 0 121 122 NULL NULL NULL NULL NULL NULL NULL NULL
121 123 0 1 NULL 0 NULL 0 NULL 0 121 123 NULL NULL NULL NULL NULL NULL NULL NULL
122 120 1 0 NULL 0 NULL 0 NULL 0 122 120 NULL NULL NULL NULL NULL NULL NULL NULL
122 121 1 0 NULL 0 NULL 0 NULL 0 122 121 NULL NULL NULL NULL NULL NULL NULL NULL
122 122 1 1 NULL 1 NULL 0 NULL 0 122 122 NULL NULL NULL NULL NULL NULL NULL NULL
122 123 1 1 NULL 1 NULL 0 NULL 0 122 123 NULL NULL NULL NULL NULL NULL NULL NULL
123 120 1 0 NULL 0 NULL 0 NULL 0 123 120 NULL NULL NULL NULL NULL NULL NULL NULL
123 121 1 0 NULL 0 NULL 0 NULL 0 123 121 NULL NULL NULL NULL NULL NULL NULL NULL
123 122 1 1 NULL 1 NULL 0 NULL 0 123 122 NULL NULL NULL NULL NULL NULL NULL NULL
123 123 1 1 NULL 1 NULL 0 NULL 0 123 123 NULL NULL NULL NULL NULL NULL NULL NULL
DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry; DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
USE gis_ogs; USE gis_ogs;
# Lakes # Lakes

View File

@ -603,6 +603,29 @@ drop view v1;
drop table t1; drop table t1;
--echo #
--echo # MDEV-4811: Assertion `offset < 0x1f' fails in type_and_offset_store
--echo # on COLUMN_ADD
--echo #
CREATE TABLE t1 (dyn TINYBLOB) ENGINE=MyISAM;
INSERT INTO t1 SET dyn = COLUMN_CREATE( 40, REPEAT('a', 233), 4, REPEAT('b', 322) );
--error ER_DYN_COL_WRONG_FORMAT
SELECT COLUMN_ADD( dyn, 6, REPEAT('x',80), 4, REPEAT('y',215) AS INTEGER ) FROM t1;
DROP table t1;
--echo #
--echo # MDEV-4812: Valgrind warnings (Invalid write) in
--echo # dynamic_column_update_many on COLUMN_ADD
--echo #
CREATE TABLE t1 (dyncol TINYBLOB) ENGINE=MyISAM;
INSERT INTO t1 SET dyncol = COLUMN_CREATE( 7, REPEAT('k',487), 209, REPEAT('x',464) );
--error 0,ER_DYN_COL_WRONG_FORMAT
SELECT COLUMN_ADD( dyncol, 7, '22:22:22', 8, REPEAT('x',270) AS CHAR ) FROM t1;
DROP table t1;
--echo # --echo #
--echo # end of 5.3 tests --echo # end of 5.3 tests
--echo # --echo #

View File

@ -98,6 +98,23 @@ SELECT CONVERT( a USING latin1 ) FROM t2;
DROP TABLE t1, t2; DROP TABLE t1, t2;
--echo #
--echo # Start of 5.3 tests
--echo #
--echo #
--echo # MDEV-4512 Valgrind warnings in my_long10_to_str_8bit on INTERVAL and DATE_ADD with incorrect types
--echo #
CREATE TABLE t1 (pk INT PRIMARY KEY);
INSERT INTO t1 VALUES (10),(11);
SELECT INTERVAL( 9, 1, DATE_ADD( pk, INTERVAL pk MINUTE_SECOND ), 9, 8, 3, 5, 2, 1 ) FROM t1;
DROP TABLE t1;
--echo #
--echo # End of 5.3 tests
--echo #
--echo # --echo #
--echo # BUG#59405: FIND_IN_SET won't work normaly after upgrade from 5.1 to 5.5 --echo # BUG#59405: FIND_IN_SET won't work normaly after upgrade from 5.1 to 5.5
--echo # --echo #

View File

@ -1670,4 +1670,21 @@ SELECT a.* FROM t1 a LEFT JOIN t1 b ON a.id = b.id
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # MDEV-4817: Optimizer fails to optimize expression of the form 'FOO' IS NULL
--echo #
create table t0 (a int not null);
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
alter table t0 add person_id varchar(255) not null;
create table t1 (pk int not null primary key);
insert into t1 select A.a + 10*B.a from t0 A, t0 B;
explain select * from t1 left join t0 on t0.a=t1.pk where t0.person_id='fooo' or 'xyz' IS NULL;
explain select * from t1 left join t0 on t0.a=t1.pk where t0.person_id='fooo';
explain select * from t1 left join t0 on t0.a=t1.pk where t0.person_id='fooo' or t0.person_id='bar';
drop table t0, t1;
SET optimizer_switch=@save_optimizer_switch; SET optimizer_switch=@save_optimizer_switch;

View File

@ -57,7 +57,7 @@ drop table t1;
connection locker; connection locker;
create table t1(n int); create table t1(n int);
insert into t1 values (1); insert into t1 values (1),(2);
connection locker2; connection locker2;
select get_lock("mysqltest_lock", 100); select get_lock("mysqltest_lock", 100);
connection locker; connection locker;

View File

@ -603,5 +603,10 @@ delimiter
EOF EOF
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/13639125.sql --exec $MYSQL < $MYSQLTEST_VARDIR/tmp/13639125.sql
#
# --skip-column-names and alignment
#
--exec $MYSQL -t -N -e "SELECT 'a' union select 'aaaaaaaaaaaaaaaaa'"
--echo --echo
--echo End of tests --echo End of tests

View File

@ -4518,3 +4518,34 @@ DROP TABLE t1, t2;
--echo End of 5.3 tests --echo End of 5.3 tests
--echo #
--echo # mysql BUG#1271 Undefined variable in PASSWORD()
--echo # function is not handled correctly
--echo #
create table t1 (
name VARCHAR(50) NOT NULL PRIMARY KEY,
pw VARCHAR(41) NOT NULL);
INSERT INTO t1 (name, pw)
VALUES ('tom', PASSWORD('my_pw'));
SET @pass='my_pw';
SET @wrong='incorrect';
select * from t1;
select length(PASSWORD(@pass));
SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@pass);
SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@wrong);
SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@undefined);
select (SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@pass));
select (SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@wrong));
select (SELECT name FROM t1 WHERE name='tom' AND pw=PASSWORD(@undefined));
drop table t1;
--echo End of 10.0 tests

View File

@ -248,7 +248,7 @@ create procedure p1() update t1 set value='updated' where value='old';
# load the procedure into sp cache and execute once # load the procedure into sp cache and execute once
call p1(); call p1();
insert into t1 (value) values ("old"); insert into t1 (value) values ("old"),("irrelevant");
connect (rl_holder, localhost, root,,); connect (rl_holder, localhost, root,,);
connect (rl_acquirer, localhost, root,,); connect (rl_acquirer, localhost, root,,);

View File

@ -284,3 +284,19 @@ SELECT CONVERT_TZ(1, 1, a) FROM t1;
DROP TABLE t1; DROP TABLE t1;
--echo End of 5.1 tests --echo End of 5.1 tests
--echo #
--echo # Start of 5.3 tests
--echo #
--echo #
--echo # MDEV-4653 Wrong result for CONVERT_TZ(TIME('00:00:00'),'+00:00','+7:5')
--echo #
SELECT CONVERT_TZ(TIME('00:00:00'),'+00:00','+7:5');
SELECT CONVERT_TZ(TIME('2010-01-01 00:00:00'),'+00:00','+7:5');
--echo #
--echo # End of 5.3 tests
--echo #

View File

@ -128,6 +128,12 @@ drop table t1;
--echo # --echo #
SELECT CONVERT_TZ(GREATEST(TIME('00:00:00'),TIME('00:00:00')),'+00:00','+7:5'); SELECT CONVERT_TZ(GREATEST(TIME('00:00:00'),TIME('00:00:00')),'+00:00','+7:5');
--echo #
--echo # MDEV-4652 Wrong result for CONCAT(GREATEST(TIME('00:00:01'),TIME('00:00:00')))
--echo #
SELECT CONCAT(GREATEST(TIME('00:00:01'),TIME('00:00:00')));
SELECT CONCAT(GREATEST(TIME('32 00:00:01'),TIME('00:00:00')));
--echo # --echo #
--echo # End of 5.3 tests --echo # End of 5.3 tests
--echo # --echo #

View File

@ -1913,7 +1913,8 @@ static size_t get_length_interval(uchar *entry, uchar *entry_next,
if (entry_next >= header_end) if (entry_next >= header_end)
return (last_offset - offset); return (last_offset - offset);
if (type_and_offset_read_num(&type_next, &offset_next, if (type_and_offset_read_num(&type_next, &offset_next,
entry_next + COLUMN_NUMBER_SIZE, offset_size)) entry_next + COLUMN_NUMBER_SIZE, offset_size) ||
(offset_next > last_offset))
return DYNCOL_OFFSET_ERROR; return DYNCOL_OFFSET_ERROR;
return (offset_next - offset); return (offset_next - offset);
} }

View File

@ -476,6 +476,7 @@ void wt_end()
my_atomic_rwlock_destroy(&cycle_stats_lock); my_atomic_rwlock_destroy(&cycle_stats_lock);
my_atomic_rwlock_destroy(&success_stats_lock); my_atomic_rwlock_destroy(&success_stats_lock);
my_atomic_rwlock_destroy(&wait_stats_lock); my_atomic_rwlock_destroy(&wait_stats_lock);
reshash.alloc.constructor= NULL;
wt_init_done= 0; wt_init_done= 0;
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }

View File

@ -297,7 +297,8 @@ String *Item::val_string_from_decimal(String *str)
String *Item::val_string_from_date(String *str) String *Item::val_string_from_date(String *str)
{ {
MYSQL_TIME ltime; MYSQL_TIME ltime;
if (get_date(&ltime, 0) || if (get_date(&ltime,
field_type() == MYSQL_TYPE_TIME ? TIME_TIME_ONLY : 0) ||
str->alloc(MAX_DATE_STRING_REP_LENGTH)) str->alloc(MAX_DATE_STRING_REP_LENGTH))
{ {
null_value= 1; null_value= 1;

View File

@ -4341,12 +4341,40 @@ Item_cond::fix_fields(THD *thd, Item **ref)
return TRUE; /* purecov: inspected */ return TRUE; /* purecov: inspected */
used_tables_cache|= item->used_tables(); used_tables_cache|= item->used_tables();
if (item->const_item()) if (item->const_item())
and_tables_cache= (table_map) 0; {
if (!item->is_expensive() && item->val_int() == 0)
{
/*
This is "... OR false_cond OR ..."
In this case, false_cond has no effect on cond_or->not_null_tables()
*/
}
else else
{
/*
This is "... OR const_cond OR ..."
In this case, cond_or->not_null_tables()=0, because the condition
some_cond_or might be true regardless of what tables are
NULL-complemented.
*/
and_tables_cache= (table_map) 0;
}
}
else
{
/*
If an item is a
- constant
- inexpensive
- its value is 0
then we don't need to account it in not_null_tables_cache
*/
//if (!(item->const_item() && !item->is_expensive() ))
{ {
table_map tmp_table_map= item->not_null_tables(); table_map tmp_table_map= item->not_null_tables();
not_null_tables_cache|= tmp_table_map; not_null_tables_cache|= tmp_table_map;
and_tables_cache&= tmp_table_map; and_tables_cache&= tmp_table_map;
}
const_item_cache= FALSE; const_item_cache= FALSE;
} }
@ -4374,7 +4402,25 @@ Item_cond::eval_not_null_tables(uchar *opt_arg)
{ {
table_map tmp_table_map; table_map tmp_table_map;
if (item->const_item()) if (item->const_item())
{
if (!item->is_expensive() && item->val_int() == 0)
{
/*
This is "... OR false_cond OR ..."
In this case, false_cond has no effect on cond_or->not_null_tables()
*/
}
else
{
/*
This is "... OR const_cond OR ..."
In this case, cond_or->not_null_tables()=0, because the condition
some_cond_or might be true regardless of what tables are
NULL-complemented.
*/
and_tables_cache= (table_map) 0; and_tables_cache= (table_map) 0;
}
}
else else
{ {
tmp_table_map= item->not_null_tables(); tmp_table_map= item->not_null_tables();

View File

@ -2791,6 +2791,13 @@ bool Item_func_min_max::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
ltime->time_type= MYSQL_TIMESTAMP_DATE; ltime->time_type= MYSQL_TIMESTAMP_DATE;
ltime->hour= ltime->minute= ltime->second= ltime->second_part= 0; ltime->hour= ltime->minute= ltime->second= ltime->second_part= 0;
} }
else if (compare_as_dates->field_type() == MYSQL_TYPE_TIME)
{
ltime->time_type= MYSQL_TIMESTAMP_TIME;
ltime->hour+= (ltime->month * 32 + ltime->day) * 24;
ltime->month= ltime->day= 0;
}
return (null_value= 0); return (null_value= 0);
} }
@ -4067,9 +4074,7 @@ longlong Item_func_get_lock::val_int()
if (!ull_name_ok(res)) if (!ull_name_ok(res))
DBUG_RETURN(0); DBUG_RETURN(0);
DBUG_PRINT("enter", ("lock: %.*s", res->length(), res->ptr()));
DBUG_PRINT("info", ("lock %.*s, thd=%ld", res->length(), res->ptr(),
(long) thd->real_id));
/* HASH entries are of type User_level_lock. */ /* HASH entries are of type User_level_lock. */
if (! my_hash_inited(&thd->ull_hash) && if (! my_hash_inited(&thd->ull_hash) &&
my_hash_init(&thd->ull_hash, &my_charset_bin, my_hash_init(&thd->ull_hash, &my_charset_bin,
@ -4090,6 +4095,7 @@ longlong Item_func_get_lock::val_int()
/* Recursive lock */ /* Recursive lock */
ull->refs++; ull->refs++;
null_value = 0; null_value = 0;
DBUG_PRINT("info", ("recursive lock, ref-count: %d", (int) ull->refs));
DBUG_RETURN(1); DBUG_RETURN(1);
} }
@ -4146,7 +4152,7 @@ longlong Item_func_release_lock::val_int()
if (!ull_name_ok(res)) if (!ull_name_ok(res))
DBUG_RETURN(0); DBUG_RETURN(0);
DBUG_PRINT("info", ("lock %.*s", res->length(), res->ptr())); DBUG_PRINT("enter", ("lock: %.*s", res->length(), res->ptr()));
MDL_key ull_key; MDL_key ull_key;
ull_key.mdl_key_init(MDL_key::USER_LOCK, res->c_ptr_safe(), ""); ull_key.mdl_key_init(MDL_key::USER_LOCK, res->c_ptr_safe(), "");
@ -4160,6 +4166,7 @@ longlong Item_func_release_lock::val_int()
null_value= thd->mdl_context.get_lock_owner(&ull_key) == 0; null_value= thd->mdl_context.get_lock_owner(&ull_key) == 0;
DBUG_RETURN(0); DBUG_RETURN(0);
} }
DBUG_PRINT("info", ("ref count: %d", (int) ull->refs));
null_value= 0; null_value= 0;
if (--ull->refs == 0) if (--ull->refs == 0)
{ {

View File

@ -43,7 +43,14 @@ protected:
bool persistent_maybe_null; bool persistent_maybe_null;
public: public:
uint arg_count; uint arg_count;
table_map used_tables_cache, not_null_tables_cache; /*
In some cases used_tables_cache is not what used_tables() return
so the method should be used where one need used tables bit map
(even internally in Item_func_* code).
*/
table_map used_tables_cache;
table_map not_null_tables_cache;
bool const_item_cache; bool const_item_cache;
enum Functype { UNKNOWN_FUNC,EQ_FUNC,EQUAL_FUNC,NE_FUNC,LT_FUNC,LE_FUNC, enum Functype { UNKNOWN_FUNC,EQ_FUNC,EQUAL_FUNC,NE_FUNC,LT_FUNC,LE_FUNC,
GE_FUNC,GT_FUNC,FT_FUNC, GE_FUNC,GT_FUNC,FT_FUNC,
@ -1269,11 +1276,11 @@ public:
Item_func_sleep(Item *a) :Item_int_func(a) {} Item_func_sleep(Item *a) :Item_int_func(a) {}
bool const_item() const { return 0; } bool const_item() const { return 0; }
const char *func_name() const { return "sleep"; } const char *func_name() const { return "sleep"; }
void update_used_tables() table_map used_tables() const
{ {
Item_int_func::update_used_tables(); return Item_int_func::used_tables() | RAND_TABLE_BIT;
used_tables_cache|= RAND_TABLE_BIT;
} }
bool is_expensive() { return 1; }
longlong val_int(); longlong val_int();
bool check_vcol_func_processor(uchar *int_arg) bool check_vcol_func_processor(uchar *int_arg)
{ {
@ -1523,6 +1530,12 @@ class Item_func_get_lock :public Item_int_func
longlong val_int(); longlong val_int();
const char *func_name() const { return "get_lock"; } const char *func_name() const { return "get_lock"; }
void fix_length_and_dec() { max_length=1; set_persist_maybe_null(1);} void fix_length_and_dec() { max_length=1; set_persist_maybe_null(1);}
table_map used_tables() const
{
return Item_int_func::used_tables() | RAND_TABLE_BIT;
}
bool const_item() const { return 0; }
bool is_expensive() { return 1; }
bool check_vcol_func_processor(uchar *int_arg) bool check_vcol_func_processor(uchar *int_arg)
{ {
return trace_unsupported_by_check_vcol_func_processor(func_name()); return trace_unsupported_by_check_vcol_func_processor(func_name());
@ -1537,6 +1550,12 @@ public:
longlong val_int(); longlong val_int();
const char *func_name() const { return "release_lock"; } const char *func_name() const { return "release_lock"; }
void fix_length_and_dec() { max_length=1; set_persist_maybe_null(1);} void fix_length_and_dec() { max_length=1; set_persist_maybe_null(1);}
table_map used_tables() const
{
return Item_int_func::used_tables() | RAND_TABLE_BIT;
}
bool const_item() const { return 0; }
bool is_expensive() { return 1; }
bool check_vcol_func_processor(uchar *int_arg) bool check_vcol_func_processor(uchar *int_arg)
{ {
return trace_unsupported_by_check_vcol_func_processor(func_name()); return trace_unsupported_by_check_vcol_func_processor(func_name());
@ -1629,6 +1648,12 @@ public:
enum Item_result result_type () const { return cached_result_type; } enum Item_result result_type () const { return cached_result_type; }
bool fix_fields(THD *thd, Item **ref); bool fix_fields(THD *thd, Item **ref);
void fix_length_and_dec(); void fix_length_and_dec();
table_map used_tables() const
{
return Item_func::used_tables() | RAND_TABLE_BIT;
}
bool const_item() const { return 0; }
bool is_expensive() { return 1; }
virtual void print(String *str, enum_query_type query_type); virtual void print(String *str, enum_query_type query_type);
void print_as_stmt(String *str, enum_query_type query_type); void print_as_stmt(String *str, enum_query_type query_type);
const char *func_name() const { return "set_user_var"; } const char *func_name() const { return "set_user_var"; }

View File

@ -2032,7 +2032,9 @@ bool Item_date_add_interval::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
{ {
INTERVAL interval; INTERVAL interval;
if (args[0]->get_date(ltime, 0) || if (args[0]->get_date(ltime,
cached_field_type == MYSQL_TYPE_TIME ?
TIME_TIME_ONLY : 0) ||
get_interval_value(args[1], int_type, &interval)) get_interval_value(args[1], int_type, &interval))
return (null_value=1); return (null_value=1);
@ -2423,7 +2425,9 @@ bool Item_time_typecast::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
if (ltime->time_type != MYSQL_TIMESTAMP_TIME) if (ltime->time_type != MYSQL_TIMESTAMP_TIME)
ltime->year= ltime->month= ltime->day= 0; ltime->year= ltime->month= ltime->day= 0;
ltime->time_type= MYSQL_TIMESTAMP_TIME; ltime->time_type= MYSQL_TIMESTAMP_TIME;
return 0; return (fuzzy_date & TIME_TIME_ONLY) ? 0 :
(null_value= check_date_with_warn(ltime, fuzzy_date,
MYSQL_TIMESTAMP_ERROR));
} }

View File

@ -1312,7 +1312,7 @@ ulong Query_cache::resize(ulong query_cache_size_arg)
{ {
BLOCK_LOCK_WR(block); BLOCK_LOCK_WR(block);
Query_cache_query *query= block->query(); Query_cache_query *query= block->query();
if (query && query->writer()) if (query->writer())
{ {
/* /*
Drop the writer; this will cancel any attempts to store Drop the writer; this will cancel any attempts to store
@ -1322,7 +1322,7 @@ ulong Query_cache::resize(ulong query_cache_size_arg)
query->writer(0); query->writer(0);
refused++; refused++;
} }
BLOCK_UNLOCK_WR(block); query->unlock_n_destroy();
block= block->next; block= block->next;
} while (block != queries_blocks); } while (block != queries_blocks);
} }
@ -4247,11 +4247,11 @@ my_bool Query_cache::move_by_type(uchar **border,
size_t key_length; size_t key_length;
key=query_cache_query_get_key((uchar*) block, &key_length, 0); key=query_cache_query_get_key((uchar*) block, &key_length, 0);
my_hash_first(&queries, (uchar*) key, key_length, &record_idx); my_hash_first(&queries, (uchar*) key, key_length, &record_idx);
block->query()->unlock_n_destroy();
block->destroy();
// Move table of used tables // Move table of used tables
memmove((char*) new_block->table(0), (char*) block->table(0), memmove((char*) new_block->table(0), (char*) block->table(0),
ALIGN_SIZE(n_tables*sizeof(Query_cache_block_table))); ALIGN_SIZE(n_tables*sizeof(Query_cache_block_table)));
block->query()->unlock_n_destroy();
block->destroy();
new_block->init(len); new_block->init(len);
new_block->type=Query_cache_block::QUERY; new_block->type=Query_cache_block::QUERY;
new_block->used=used; new_block->used=used;

View File

@ -8957,10 +8957,6 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
{ /* there may be a select without a cond. */ { /* there may be a select without a cond. */
if (join->table_count > 1) if (join->table_count > 1)
cond->update_used_tables(); // Tablenr may have changed cond->update_used_tables(); // Tablenr may have changed
if (join->const_tables == join->table_count &&
thd->lex->current_select->master_unit() ==
&thd->lex->unit) // not upper level SELECT
join->const_table_map|=RAND_TABLE_BIT;
/* /*
Extract expressions that depend on constant tables Extract expressions that depend on constant tables
@ -16171,6 +16167,8 @@ create_internal_tmp_table_from_heap2(THD *thd, TABLE *table,
const char *save_proc_info; const char *save_proc_info;
int write_err= 0; int write_err= 0;
DBUG_ENTER("create_internal_tmp_table_from_heap2"); DBUG_ENTER("create_internal_tmp_table_from_heap2");
if (is_duplicate)
*is_duplicate= FALSE;
if (table->s->db_type() != heap_hton || if (table->s->db_type() != heap_hton ||
error != HA_ERR_RECORD_FILE_FULL) error != HA_ERR_RECORD_FILE_FULL)

View File

@ -83,7 +83,7 @@ int select_union::send_data(List<Item> &values)
*/ */
return -1; return -1;
} }
bool is_duplicate; bool is_duplicate= FALSE;
/* create_internal_tmp_table_from_heap will generate error if needed */ /* create_internal_tmp_table_from_heap will generate error if needed */
if (table->file->is_fatal_error(write_err, HA_CHECK_DUP) && if (table->file->is_fatal_error(write_err, HA_CHECK_DUP) &&
create_internal_tmp_table_from_heap(thd, table, create_internal_tmp_table_from_heap(thd, table,

View File

@ -428,7 +428,10 @@ public:
void cleanup() void cleanup()
{ {
if (flags & ALLOCATED) if (flags & ALLOCATED)
{
my_free(global_var(char*)); my_free(global_var(char*));
global_var(char *)= NULL;
}
flags&= ~ALLOCATED; flags&= ~ALLOCATED;
} }
static bool do_string_check(THD *thd, set_var *var, CHARSET_INFO *charset) static bool do_string_check(THD *thd, set_var *var, CHARSET_INFO *charset)

View File

@ -1,25 +1,25 @@
--- suite/storage_engine/parts/optimize_table.result 2012-07-12 22:16:39.343572304 +0400 --- suite/storage_engine/parts/optimize_table.result 2013-07-18 22:55:38.000000000 +0400
+++ suite/storage_engine/parts/optimize_table.reject 2012-07-15 20:07:01.632130348 +0400 +++ suite/storage_engine/parts/optimize_table.reject 2013-08-05 19:45:19.000000000 +0400
@@ -9,18 +9,22 @@ @@ -9,18 +9,22 @@
INSERT INTO t1 (a,b) VALUES (3,'c'),(4,'d'); INSERT INTO t1 (a,b) VALUES (3,'c'),(4,'d');
ALTER TABLE t1 OPTIMIZE PARTITION p1; ALTER TABLE t1 OPTIMIZE PARTITION p1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
+test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed.
test.t1 optimize status OK test.t1 optimize status OK
INSERT INTO t2 (a,b) VALUES (4,'d'); INSERT INTO t2 (a,b) VALUES (4,'d');
ALTER TABLE t2 OPTIMIZE PARTITION p0 NO_WRITE_TO_BINLOG; ALTER TABLE t2 OPTIMIZE PARTITION p0 NO_WRITE_TO_BINLOG;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
+test.t2 optimize note Table does not support optimize, doing recreate + analyze instead +test.t2 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed.
test.t2 optimize status OK test.t2 optimize status OK
INSERT INTO t1 (a,b) VALUES (6,'f'); INSERT INTO t1 (a,b) VALUES (6,'f');
ALTER TABLE t1 OPTIMIZE PARTITION ALL LOCAL; ALTER TABLE t1 OPTIMIZE PARTITION ALL LOCAL;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
+test.t1 optimize note Table does not support optimize, doing recreate + analyze instead +test.t1 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed.
test.t1 optimize status OK test.t1 optimize status OK
INSERT INTO t2 (a,b) VALUES (5,'e'); INSERT INTO t2 (a,b) VALUES (5,'e');
ALTER TABLE t2 OPTIMIZE PARTITION p1,p0; ALTER TABLE t2 OPTIMIZE PARTITION p1,p0;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
+test.t2 optimize note Table does not support optimize, doing recreate + analyze instead +test.t2 optimize note Table does not support optimize on partitions. All partitions will be rebuilt and analyzed.
test.t2 optimize status OK test.t2 optimize status OK
DROP TABLE t1, t2; DROP TABLE t1, t2;
DROP TABLE IF EXISTS t1,t2; DROP TABLE IF EXISTS t1,t2;

View File

@ -1,26 +1,6 @@
--- suite/storage_engine/parts/repair_table.result 2013-01-23 01:35:44.388267080 +0400 --- suite/storage_engine/parts/repair_table.result 2013-07-18 22:55:38.000000000 +0400
+++ suite/storage_engine/parts/repair_table.reject 2013-01-23 01:44:40.337529283 +0400 +++ suite/storage_engine/parts/repair_table.reject 2013-08-05 19:54:09.000000000 +0400
@@ -9,27 +9,27 @@ @@ -25,7 +25,7 @@
INSERT INTO t2 (a,b) SELECT a, b FROM t1;
ALTER TABLE t1 REPAIR PARTITION p0;
Table Op Msg_type Msg_text
-test.t1 repair status OK
+test.t1 repair note The storage engine for the table doesn't support repair
INSERT INTO t1 (a,b) VALUES (3,'c');
ALTER TABLE t1 REPAIR PARTITION NO_WRITE_TO_BINLOG p0, p1;
Table Op Msg_type Msg_text
-test.t1 repair status OK
+test.t1 repair note The storage engine for the table doesn't support repair
INSERT INTO t2 (a,b) VALUES (5,'e'),(6,'f');
ALTER TABLE t2 REPAIR PARTITION LOCAL p1;
Table Op Msg_type Msg_text
-test.t2 repair status OK
+test.t2 repair note The storage engine for the table doesn't support repair
INSERT INTO t1 (a,b) VALUES (7,'g'),(8,'h');
ALTER TABLE t1 REPAIR PARTITION LOCAL ALL EXTENDED;
Table Op Msg_type Msg_text
-test.t1 repair status OK
+test.t1 repair note The storage engine for the table doesn't support repair
INSERT INTO t1 (a,b) VALUES (10,'j'); INSERT INTO t1 (a,b) VALUES (10,'j');
ALTER TABLE t1 REPAIR PARTITION p1 QUICK USE_FRM; ALTER TABLE t1 REPAIR PARTITION p1 QUICK USE_FRM;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
@ -29,39 +9,7 @@
INSERT INTO t2 (a,b) VALUES (12,'l'); INSERT INTO t2 (a,b) VALUES (12,'l');
ALTER TABLE t2 REPAIR PARTITION NO_WRITE_TO_BINLOG ALL QUICK EXTENDED USE_FRM; ALTER TABLE t2 REPAIR PARTITION NO_WRITE_TO_BINLOG ALL QUICK EXTENDED USE_FRM;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
-test.t2 repair status OK @@ -58,8 +58,8 @@
+test.t2 repair note The storage engine for the table doesn't support repair
DROP TABLE t1, t2;
DROP TABLE IF EXISTS t1,t2;
CREATE TABLE t1 (a <INT_COLUMN>, b <CHAR_COLUMN>) ENGINE=<STORAGE_ENGINE> <CUSTOM_TABLE_OPTIONS> PARTITION BY HASH(a) PARTITIONS 2;
@@ -37,35 +37,35 @@
CREATE TABLE t2 (a <INT_COLUMN>, b <CHAR_COLUMN>) ENGINE=<STORAGE_ENGINE> <CUSTOM_TABLE_OPTIONS> PARTITION BY HASH(a) PARTITIONS 2;
REPAIR TABLE t1;
Table Op Msg_type Msg_text
-test.t1 repair status OK
+test.t1 repair note The storage engine for the table doesn't support repair
INSERT INTO t1 (a,b) VALUES (3,'c');
INSERT INTO t2 (a,b) VALUES (4,'d');
REPAIR NO_WRITE_TO_BINLOG TABLE t1, t2;
Table Op Msg_type Msg_text
-test.t1 repair status OK
-test.t2 repair status OK
+test.t1 repair note The storage engine for the table doesn't support repair
+test.t2 repair note The storage engine for the table doesn't support repair
INSERT INTO t2 (a,b) VALUES (5,'e'),(6,'f');
REPAIR LOCAL TABLE t2;
Table Op Msg_type Msg_text
-test.t2 repair status OK
+test.t2 repair note The storage engine for the table doesn't support repair
INSERT INTO t1 (a,b) VALUES (7,'g'),(8,'h');
INSERT INTO t2 (a,b) VALUES (9,'i');
REPAIR LOCAL TABLE t2, t1 EXTENDED;
Table Op Msg_type Msg_text
-test.t2 repair status OK
-test.t1 repair status OK
+test.t2 repair note The storage engine for the table doesn't support repair
+test.t1 repair note The storage engine for the table doesn't support repair
INSERT INTO t1 (a,b) VALUES (10,'j');
INSERT INTO t2 (a,b) VALUES (11,'k'); INSERT INTO t2 (a,b) VALUES (11,'k');
REPAIR TABLE t1, t2 QUICK USE_FRM; REPAIR TABLE t1, t2 QUICK USE_FRM;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
@ -72,25 +20,7 @@
INSERT INTO t1 (a,b) VALUES (12,'l'); INSERT INTO t1 (a,b) VALUES (12,'l');
INSERT INTO t2 (a,b) VALUES (13,'m'); INSERT INTO t2 (a,b) VALUES (13,'m');
REPAIR NO_WRITE_TO_BINLOG TABLE t1, t2 QUICK EXTENDED USE_FRM; REPAIR NO_WRITE_TO_BINLOG TABLE t1, t2 QUICK EXTENDED USE_FRM;
Table Op Msg_type Msg_text @@ -101,119 +101,13 @@
-test.t1 repair status OK
-test.t2 repair status OK
+test.t1 repair note The storage engine for the table doesn't support repair
+test.t2 repair note The storage engine for the table doesn't support repair
FLUSH TABLE t1;
INSERT INTO t1 (a,b) VALUES (14,'n');
ERROR HY000: Failed to read from the .par file
@@ -93,127 +93,21 @@
CREATE TABLE t1 (a <INT_COLUMN>, b <CHAR_COLUMN>, <CUSTOM_INDEX> (a)) ENGINE=<STORAGE_ENGINE> <CUSTOM_TABLE_OPTIONS> PARTITION BY HASH(a) PARTITIONS 2;
REPAIR TABLE t1;
Table Op Msg_type Msg_text
-test.t1 repair status OK
+test.t1 repair note The storage engine for the table doesn't support repair
INSERT INTO t1 (a,b) VALUES (7,'g'),(8,'h');
REPAIR TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
-test.t1 repair status OK
+test.t1 repair note The storage engine for the table doesn't support repair
INSERT INTO t1 (a,b) VALUES (10,'j'); INSERT INTO t1 (a,b) VALUES (10,'j');
REPAIR TABLE t1 USE_FRM; REPAIR TABLE t1 USE_FRM;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text

View File

@ -1,5 +1,5 @@
--- suite/storage_engine/type_spatial_indexes.result 2013-01-23 01:25:45.367797786 +0400 --- suite/storage_engine/type_spatial_indexes.result 2013-08-05 18:08:49.000000000 +0400
+++ suite/storage_engine/type_spatial_indexes.reject 2013-01-23 01:46:17.560307029 +0400 +++ suite/storage_engine/type_spatial_indexes.reject 2013-08-05 18:25:24.000000000 +0400
@@ -702,699 +702,15 @@ @@ -702,699 +702,15 @@
DROP DATABASE IF EXISTS gis_ogs; DROP DATABASE IF EXISTS gis_ogs;
CREATE DATABASE gis_ogs; CREATE DATABASE gis_ogs;
@ -416,20 +416,20 @@
-first second w c o e d t i r -first second w c o e d t i r
-120 120 1 1 0 1 0 1 1 0 -120 120 1 1 0 1 0 1 1 0
-120 121 0 0 1 0 0 0 1 0 -120 121 0 0 1 0 0 0 1 0
-120 122 0 1 NULL 0 NULL 0 NULL 0 -120 122 NULL NULL NULL NULL NULL NULL NULL NULL
-120 123 0 1 NULL 0 NULL 0 NULL 0 -120 123 NULL NULL NULL NULL NULL NULL NULL NULL
-121 120 0 0 1 0 0 0 1 0 -121 120 0 0 1 0 0 0 1 0
-121 121 1 1 0 1 0 1 1 0 -121 121 1 1 0 1 0 1 1 0
-121 122 0 1 NULL 0 NULL 0 NULL 0 -121 122 NULL NULL NULL NULL NULL NULL NULL NULL
-121 123 0 1 NULL 0 NULL 0 NULL 0 -121 123 NULL NULL NULL NULL NULL NULL NULL NULL
-122 120 1 0 NULL 0 NULL 0 NULL 0 -122 120 NULL NULL NULL NULL NULL NULL NULL NULL
-122 121 1 0 NULL 0 NULL 0 NULL 0 -122 121 NULL NULL NULL NULL NULL NULL NULL NULL
-122 122 1 1 NULL 1 NULL 0 NULL 0 -122 122 NULL NULL NULL NULL NULL NULL NULL NULL
-122 123 1 1 NULL 1 NULL 0 NULL 0 -122 123 NULL NULL NULL NULL NULL NULL NULL NULL
-123 120 1 0 NULL 0 NULL 0 NULL 0 -123 120 NULL NULL NULL NULL NULL NULL NULL NULL
-123 121 1 0 NULL 0 NULL 0 NULL 0 -123 121 NULL NULL NULL NULL NULL NULL NULL NULL
-123 122 1 1 NULL 1 NULL 0 NULL 0 -123 122 NULL NULL NULL NULL NULL NULL NULL NULL
-123 123 1 1 NULL 1 NULL 0 NULL 0 -123 123 NULL NULL NULL NULL NULL NULL NULL NULL
-DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry; -DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
-USE gis_ogs; -USE gis_ogs;
-# Lakes -# Lakes

View File

@ -145,6 +145,10 @@ static ha_rows _ma_record_pos(MARIA_HA *info, const uchar *key_data,
DBUG_EXECUTE("key", _ma_print_key(DBUG_FILE, &key);); DBUG_EXECUTE("key", _ma_print_key(DBUG_FILE, &key););
nextflag=maria_read_vec[search_flag]; nextflag=maria_read_vec[search_flag];
/* Indicate if we're doing a search on a key prefix */
if (((((key_part_map)1) << key.keyinfo->keysegs) - 1) != keypart_map)
nextflag |= SEARCH_PART_KEY;
/* /*
my_handler.c:ha_compare_text() has a flag 'skip_end_space'. my_handler.c:ha_compare_text() has a flag 'skip_end_space'.
This is set in my_handler.c:ha_key_cmp() in dependence on the This is set in my_handler.c:ha_key_cmp() in dependence on the

View File

@ -1,5 +1,5 @@
--- type_spatial.result 2013-01-23 01:25:39.143876032 +0400 --- suite/storage_engine/type_spatial.result 2013-08-05 17:52:53.000000000 +0400
+++ type_spatial.reject 2013-01-23 02:51:14.535315418 +0400 +++ suite/storage_engine/type_spatial.reject 2013-08-05 17:56:37.000000000 +0400
@@ -2,699 +2,15 @@ @@ -2,699 +2,15 @@
DROP DATABASE IF EXISTS gis_ogs; DROP DATABASE IF EXISTS gis_ogs;
CREATE DATABASE gis_ogs; CREATE DATABASE gis_ogs;
@ -416,20 +416,20 @@
-first second w c o e d t i r -first second w c o e d t i r
-120 120 1 1 0 1 0 1 1 0 -120 120 1 1 0 1 0 1 1 0
-120 121 0 0 1 0 0 0 1 0 -120 121 0 0 1 0 0 0 1 0
-120 122 0 1 NULL 0 NULL 0 NULL 0 -120 122 NULL NULL NULL NULL NULL NULL NULL NULL
-120 123 0 1 NULL 0 NULL 0 NULL 0 -120 123 NULL NULL NULL NULL NULL NULL NULL NULL
-121 120 0 0 1 0 0 0 1 0 -121 120 0 0 1 0 0 0 1 0
-121 121 1 1 0 1 0 1 1 0 -121 121 1 1 0 1 0 1 1 0
-121 122 0 1 NULL 0 NULL 0 NULL 0 -121 122 NULL NULL NULL NULL NULL NULL NULL NULL
-121 123 0 1 NULL 0 NULL 0 NULL 0 -121 123 NULL NULL NULL NULL NULL NULL NULL NULL
-122 120 1 0 NULL 0 NULL 0 NULL 0 -122 120 NULL NULL NULL NULL NULL NULL NULL NULL
-122 121 1 0 NULL 0 NULL 0 NULL 0 -122 121 NULL NULL NULL NULL NULL NULL NULL NULL
-122 122 1 1 NULL 1 NULL 0 NULL 0 -122 122 NULL NULL NULL NULL NULL NULL NULL NULL
-122 123 1 1 NULL 1 NULL 0 NULL 0 -122 123 NULL NULL NULL NULL NULL NULL NULL NULL
-123 120 1 0 NULL 0 NULL 0 NULL 0 -123 120 NULL NULL NULL NULL NULL NULL NULL NULL
-123 121 1 0 NULL 0 NULL 0 NULL 0 -123 121 NULL NULL NULL NULL NULL NULL NULL NULL
-123 122 1 1 NULL 1 NULL 0 NULL 0 -123 122 NULL NULL NULL NULL NULL NULL NULL NULL
-123 123 1 1 NULL 1 NULL 0 NULL 0 -123 123 NULL NULL NULL NULL NULL NULL NULL NULL
-DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry; -DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
-USE gis_ogs; -USE gis_ogs;
-# Lakes -# Lakes

View File

@ -1,5 +1,5 @@
--- type_spatial_indexes.result 2013-01-23 01:25:45.367797786 +0400 --- suite/storage_engine/type_spatial_indexes.result 2013-08-05 18:08:49.000000000 +0400
+++ type_spatial_indexes.reject 2013-01-23 02:51:15.247306467 +0400 +++ suite/storage_engine/type_spatial_indexes.reject 2013-08-05 18:27:47.000000000 +0400
@@ -2,1399 +2,31 @@ @@ -2,1399 +2,31 @@
DROP DATABASE IF EXISTS gis_ogs; DROP DATABASE IF EXISTS gis_ogs;
CREATE DATABASE gis_ogs; CREATE DATABASE gis_ogs;
@ -416,20 +416,20 @@
-first second w c o e d t i r -first second w c o e d t i r
-120 120 1 1 0 1 0 1 1 0 -120 120 1 1 0 1 0 1 1 0
-120 121 0 0 1 0 0 0 1 0 -120 121 0 0 1 0 0 0 1 0
-120 122 0 1 NULL 0 NULL 0 NULL 0 -120 122 NULL NULL NULL NULL NULL NULL NULL NULL
-120 123 0 1 NULL 0 NULL 0 NULL 0 -120 123 NULL NULL NULL NULL NULL NULL NULL NULL
-121 120 0 0 1 0 0 0 1 0 -121 120 0 0 1 0 0 0 1 0
-121 121 1 1 0 1 0 1 1 0 -121 121 1 1 0 1 0 1 1 0
-121 122 0 1 NULL 0 NULL 0 NULL 0 -121 122 NULL NULL NULL NULL NULL NULL NULL NULL
-121 123 0 1 NULL 0 NULL 0 NULL 0 -121 123 NULL NULL NULL NULL NULL NULL NULL NULL
-122 120 1 0 NULL 0 NULL 0 NULL 0 -122 120 NULL NULL NULL NULL NULL NULL NULL NULL
-122 121 1 0 NULL 0 NULL 0 NULL 0 -122 121 NULL NULL NULL NULL NULL NULL NULL NULL
-122 122 1 1 NULL 1 NULL 0 NULL 0 -122 122 NULL NULL NULL NULL NULL NULL NULL NULL
-122 123 1 1 NULL 1 NULL 0 NULL 0 -122 123 NULL NULL NULL NULL NULL NULL NULL NULL
-123 120 1 0 NULL 0 NULL 0 NULL 0 -123 120 NULL NULL NULL NULL NULL NULL NULL NULL
-123 121 1 0 NULL 0 NULL 0 NULL 0 -123 121 NULL NULL NULL NULL NULL NULL NULL NULL
-123 122 1 1 NULL 1 NULL 0 NULL 0 -123 122 NULL NULL NULL NULL NULL NULL NULL NULL
-123 123 1 1 NULL 1 NULL 0 NULL 0 -123 123 NULL NULL NULL NULL NULL NULL NULL NULL
-DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry; -DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
-USE gis_ogs; -USE gis_ogs;
-# Lakes -# Lakes
@ -1126,20 +1126,20 @@
-first second w c o e d t i r -first second w c o e d t i r
-120 120 1 1 0 1 0 1 1 0 -120 120 1 1 0 1 0 1 1 0
-120 121 0 0 1 0 0 0 1 0 -120 121 0 0 1 0 0 0 1 0
-120 122 0 1 NULL 0 NULL 0 NULL 0 -120 122 NULL NULL NULL NULL NULL NULL NULL NULL
-120 123 0 1 NULL 0 NULL 0 NULL 0 -120 123 NULL NULL NULL NULL NULL NULL NULL NULL
-121 120 0 0 1 0 0 0 1 0 -121 120 0 0 1 0 0 0 1 0
-121 121 1 1 0 1 0 1 1 0 -121 121 1 1 0 1 0 1 1 0
-121 122 0 1 NULL 0 NULL 0 NULL 0 -121 122 NULL NULL NULL NULL NULL NULL NULL NULL
-121 123 0 1 NULL 0 NULL 0 NULL 0 -121 123 NULL NULL NULL NULL NULL NULL NULL NULL
-122 120 1 0 NULL 0 NULL 0 NULL 0 -122 120 NULL NULL NULL NULL NULL NULL NULL NULL
-122 121 1 0 NULL 0 NULL 0 NULL 0 -122 121 NULL NULL NULL NULL NULL NULL NULL NULL
-122 122 1 1 NULL 1 NULL 0 NULL 0 -122 122 NULL NULL NULL NULL NULL NULL NULL NULL
-122 123 1 1 NULL 1 NULL 0 NULL 0 -122 123 NULL NULL NULL NULL NULL NULL NULL NULL
-123 120 1 0 NULL 0 NULL 0 NULL 0 -123 120 NULL NULL NULL NULL NULL NULL NULL NULL
-123 121 1 0 NULL 0 NULL 0 NULL 0 -123 121 NULL NULL NULL NULL NULL NULL NULL NULL
-123 122 1 1 NULL 1 NULL 0 NULL 0 -123 122 NULL NULL NULL NULL NULL NULL NULL NULL
-123 123 1 1 NULL 1 NULL 0 NULL 0 -123 123 NULL NULL NULL NULL NULL NULL NULL NULL
-DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry; -DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
-USE gis_ogs; -USE gis_ogs;
-# Lakes -# Lakes

View File

@ -581,6 +581,8 @@ UNIV_INTERN
ibool ibool
buf_page_is_corrupted( buf_page_is_corrupted(
/*==================*/ /*==================*/
ibool check_lsn, /*!< in: TRUE if we need to check
and complain about the LSN */
const byte* read_buf, /*!< in: a database page */ const byte* read_buf, /*!< in: a database page */
ulint zip_size) /*!< in: size of compressed page; ulint zip_size) /*!< in: size of compressed page;
0 for uncompressed pages */ 0 for uncompressed pages */
@ -600,7 +602,7 @@ buf_page_is_corrupted(
} }
#ifndef UNIV_HOTBACKUP #ifndef UNIV_HOTBACKUP
if (recv_lsn_checks_on) { if (check_lsn && recv_lsn_checks_on) {
ib_uint64_t current_lsn; ib_uint64_t current_lsn;
if (log_peek_lsn(&current_lsn) if (log_peek_lsn(&current_lsn)
@ -3945,7 +3947,7 @@ buf_page_io_complete(
/* From version 3.23.38 up we store the page checksum /* From version 3.23.38 up we store the page checksum
to the 4 first bytes of the page end lsn field */ to the 4 first bytes of the page end lsn field */
if (buf_page_is_corrupted(frame, if (buf_page_is_corrupted(TRUE, frame,
buf_page_get_zip_size(bpage))) { buf_page_get_zip_size(bpage))) {
corrupt: corrupt:
fprintf(stderr, fprintf(stderr,

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 1995, 2010, Innobase Oy. All Rights Reserved. Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
@ -1883,11 +1883,63 @@ fil_write_flushed_lsn_to_data_files(
return(DB_SUCCESS); return(DB_SUCCESS);
} }
/*******************************************************************//**
Checks the consistency of the first data page of a data file
at database startup.
@retval NULL on success, or if innodb_force_recovery is set
@return pointer to an error message string */
static __attribute__((warn_unused_result))
const char*
fil_check_first_page(
/*=================*/
const page_t* page, /*!< in: data page */
ibool first_page) /*!< in: TRUE if this is the
first page of the tablespace */
{
ulint space_id;
ulint flags;
if (srv_force_recovery >= SRV_FORCE_IGNORE_CORRUPT) {
return(NULL);
}
space_id = mach_read_from_4(FSP_HEADER_OFFSET + FSP_SPACE_ID + page);
flags = mach_read_from_4(FSP_HEADER_OFFSET + FSP_SPACE_FLAGS + page);
if (first_page && !space_id && !flags) {
ulint nonzero_bytes = UNIV_PAGE_SIZE;
const byte* b = page;
while (!*b && --nonzero_bytes) {
b++;
}
if (!nonzero_bytes) {
return("space header page consists of zero bytes");
}
}
if (buf_page_is_corrupted(
FALSE, page, dict_table_flags_to_zip_size(flags))) {
return("checksum mismatch");
}
if (!first_page
|| (page_get_space_id(page) == space_id
&& page_get_page_no(page) == 0)) {
return(NULL);
}
return("inconsistent data in space header");
}
/*******************************************************************//** /*******************************************************************//**
Reads the flushed lsn, arch no, and tablespace flag fields from a data Reads the flushed lsn, arch no, and tablespace flag fields from a data
file at database startup. */ file at database startup.
@retval NULL on success, or if innodb_force_recovery is set
@return pointer to an error message string */
UNIV_INTERN UNIV_INTERN
void const char*
fil_read_first_page( fil_read_first_page(
/*================*/ /*================*/
os_file_t data_file, /*!< in: open data file */ os_file_t data_file, /*!< in: open data file */
@ -1909,6 +1961,7 @@ fil_read_first_page(
byte* buf; byte* buf;
page_t* page; page_t* page;
ib_uint64_t flushed_lsn; ib_uint64_t flushed_lsn;
const char* check_msg;
buf = ut_malloc(2 * UNIV_PAGE_SIZE); buf = ut_malloc(2 * UNIV_PAGE_SIZE);
/* Align the memory for a possible read from a raw device */ /* Align the memory for a possible read from a raw device */
@ -1916,13 +1969,18 @@ fil_read_first_page(
os_file_read(data_file, page, 0, 0, UNIV_PAGE_SIZE); os_file_read(data_file, page, 0, 0, UNIV_PAGE_SIZE);
*flags = mach_read_from_4(page + *flags = mach_read_from_4(FSP_HEADER_OFFSET + FSP_SPACE_FLAGS + page);
FSP_HEADER_OFFSET + FSP_SPACE_FLAGS);
flushed_lsn = mach_read_from_8(page + FIL_PAGE_FILE_FLUSH_LSN); flushed_lsn = mach_read_from_8(page + FIL_PAGE_FILE_FLUSH_LSN);
check_msg = fil_check_first_page(page, !one_read_already);
ut_free(buf); ut_free(buf);
if (check_msg) {
return(check_msg);
}
if (!one_read_already) { if (!one_read_already) {
*min_flushed_lsn = flushed_lsn; *min_flushed_lsn = flushed_lsn;
*max_flushed_lsn = flushed_lsn; *max_flushed_lsn = flushed_lsn;
@ -1930,7 +1988,7 @@ fil_read_first_page(
*min_arch_log_no = arch_log_no; *min_arch_log_no = arch_log_no;
*max_arch_log_no = arch_log_no; *max_arch_log_no = arch_log_no;
#endif /* UNIV_LOG_ARCHIVE */ #endif /* UNIV_LOG_ARCHIVE */
return; return(NULL);
} }
if (*min_flushed_lsn > flushed_lsn) { if (*min_flushed_lsn > flushed_lsn) {
@ -1947,6 +2005,8 @@ fil_read_first_page(
*max_arch_log_no = arch_log_no; *max_arch_log_no = arch_log_no;
} }
#endif /* UNIV_LOG_ARCHIVE */ #endif /* UNIV_LOG_ARCHIVE */
return(NULL);
} }
/*================ SINGLE-TABLE TABLESPACES ==========================*/ /*================ SINGLE-TABLE TABLESPACES ==========================*/
@ -3271,6 +3331,7 @@ fil_open_single_table_tablespace(
os_file_t file; os_file_t file;
char* filepath; char* filepath;
ibool success; ibool success;
const char* check_msg;
byte* buf2; byte* buf2;
byte* page; byte* page;
ulint space_id; ulint space_id;
@ -3331,6 +3392,8 @@ fil_open_single_table_tablespace(
success = os_file_read(file, page, 0, 0, UNIV_PAGE_SIZE); success = os_file_read(file, page, 0, 0, UNIV_PAGE_SIZE);
check_msg = fil_check_first_page(page, TRUE);
/* We have to read the tablespace id and flags from the file. */ /* We have to read the tablespace id and flags from the file. */
space_id = fsp_header_get_space_id(page); space_id = fsp_header_get_space_id(page);
@ -3366,7 +3429,7 @@ fil_open_single_table_tablespace(
current_lsn = log_get_lsn(); current_lsn = log_get_lsn();
/* check the header page's consistency */ /* check the header page's consistency */
if (buf_page_is_corrupted(page, if (buf_page_is_corrupted(TRUE, page,
dict_table_flags_to_zip_size(space_flags))) { dict_table_flags_to_zip_size(space_flags))) {
fprintf(stderr, "InnoDB: page 0 of %s seems corrupt.\n", filepath); fprintf(stderr, "InnoDB: page 0 of %s seems corrupt.\n", filepath);
file_is_corrupt = TRUE; file_is_corrupt = TRUE;
@ -3788,8 +3851,20 @@ skip_write:
ut_free(buf2); ut_free(buf2);
if (UNIV_UNLIKELY(space_id != id if (check_msg) {
|| space_flags != (flags & ~(~0 << DICT_TF_BITS)))) { ut_print_timestamp(stderr);
fprintf(stderr, " InnoDB: Error: %s in file ", check_msg);
ut_print_filename(stderr, filepath);
fprintf(stderr, " (tablespace id=%lu, flags=%lu)\n"
"InnoDB: Please refer to " REFMAN
"innodb-troubleshooting-datadict.html\n",
(ulong) id, (ulong) flags);
success = FALSE;
goto func_exit;
}
if (space_id != id
|| space_flags != (flags & ~(~0 << DICT_TF_BITS))) {
ut_print_timestamp(stderr); ut_print_timestamp(stderr);
fputs(" InnoDB: Error: tablespace id and flags in file ", fputs(" InnoDB: Error: tablespace id and flags in file ",
@ -4280,11 +4355,21 @@ fil_load_single_table_tablespace(
page = ut_align(buf2, UNIV_PAGE_SIZE); page = ut_align(buf2, UNIV_PAGE_SIZE);
if (size >= FIL_IBD_FILE_INITIAL_SIZE * (lint)UNIV_PAGE_SIZE) { if (size >= FIL_IBD_FILE_INITIAL_SIZE * (lint)UNIV_PAGE_SIZE) {
const char* check_msg;
success = os_file_read(file, page, 0, 0, UNIV_PAGE_SIZE); success = os_file_read(file, page, 0, 0, UNIV_PAGE_SIZE);
/* We have to read the tablespace id from the file */ /* We have to read the tablespace id from the file */
check_msg = fil_check_first_page(page, TRUE);
if (check_msg) {
fprintf(stderr,
"InnoDB: Error: %s in file %s",
check_msg, filepath);
goto func_exit;
}
space_id = fsp_header_get_space_id(page); space_id = fsp_header_get_space_id(page);
flags = fsp_header_get_flags(page); flags = fsp_header_get_flags(page);
} else { } else {

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
@ -684,9 +684,12 @@ UNIV_INTERN
ibool ibool
buf_page_is_corrupted( buf_page_is_corrupted(
/*==================*/ /*==================*/
ibool check_lsn, /*!< in: TRUE if we need to check
and complain about the LSN */
const byte* read_buf, /*!< in: a database page */ const byte* read_buf, /*!< in: a database page */
ulint zip_size); /*!< in: size of compressed page; ulint zip_size) /*!< in: size of compressed page;
0 for uncompressed pages */ 0 for uncompressed pages */
__attribute__((warn_unused_result));
#ifndef UNIV_HOTBACKUP #ifndef UNIV_HOTBACKUP
/**********************************************************************//** /**********************************************************************//**
Gets the space id, page offset, and byte offset within page of a Gets the space id, page offset, and byte offset within page of a

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 1995, 2010, Innobase Oy. All Rights Reserved. Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
@ -328,10 +328,12 @@ fil_write_flushed_lsn_to_data_files(
ulint arch_log_no); /*!< in: latest archived log ulint arch_log_no); /*!< in: latest archived log
file number */ file number */
/*******************************************************************//** /*******************************************************************//**
Reads the flushed lsn and arch no fields from a data file at database Reads the flushed lsn, arch no, and tablespace flag fields from a data
startup. */ file at database startup.
@retval NULL on success, or if innodb_force_recovery is set
@return pointer to an error message string */
UNIV_INTERN UNIV_INTERN
void const char*
fil_read_first_page( fil_read_first_page(
/*================*/ /*================*/
os_file_t data_file, /*!< in: open data file */ os_file_t data_file, /*!< in: open data file */
@ -347,8 +349,9 @@ fil_read_first_page(
#endif /* UNIV_LOG_ARCHIVE */ #endif /* UNIV_LOG_ARCHIVE */
ib_uint64_t* min_flushed_lsn, /*!< out: min of flushed ib_uint64_t* min_flushed_lsn, /*!< out: min of flushed
lsn values in data files */ lsn values in data files */
ib_uint64_t* max_flushed_lsn); /*!< out: max of flushed ib_uint64_t* max_flushed_lsn) /*!< out: max of flushed
lsn values in data files */ lsn values in data files */
__attribute__((warn_unused_result));
/*******************************************************************//** /*******************************************************************//**
Increments the count of pending operation, if space is not being deleted. Increments the count of pending operation, if space is not being deleted.
@return TRUE if being deleted, and operation should be skipped */ @return TRUE if being deleted, and operation should be skipped */

View File

@ -3773,6 +3773,10 @@ os_aio_free(void)
ut_free(os_aio_segment_wait_events); ut_free(os_aio_segment_wait_events);
os_aio_segment_wait_events = 0; os_aio_segment_wait_events = 0;
os_aio_n_segments = 0; os_aio_n_segments = 0;
#ifdef _WIN32
completion_port = 0;
read_completion_port = 0;
#endif
} }
#ifdef WIN_ASYNC_IO #ifdef WIN_ASYNC_IO

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 1996, 2010, Innobase Oy. All Rights Reserved. Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2008, Google Inc. Copyright (c) 2008, Google Inc.
Copyright (c) 2009, Percona Inc. Copyright (c) 2009, Percona Inc.
@ -817,6 +817,7 @@ open_or_create_data_files(
} }
if (ret == FALSE) { if (ret == FALSE) {
const char* check_msg;
/* We open the data file */ /* We open the data file */
if (one_created) { if (one_created) {
@ -914,13 +915,20 @@ open_or_create_data_files(
return(DB_ERROR); return(DB_ERROR);
} }
skip_size_check: skip_size_check:
fil_read_first_page( check_msg = fil_read_first_page(
files[i], one_opened, &flags, files[i], one_opened, &flags,
#ifdef UNIV_LOG_ARCHIVE #ifdef UNIV_LOG_ARCHIVE
min_arch_log_no, max_arch_log_no, min_arch_log_no, max_arch_log_no,
#endif /* UNIV_LOG_ARCHIVE */ #endif /* UNIV_LOG_ARCHIVE */
min_flushed_lsn, max_flushed_lsn); min_flushed_lsn, max_flushed_lsn);
if (check_msg) {
fprintf(stderr,
"InnoDB: Error: %s in data file %s\n",
check_msg, name);
return(DB_ERROR);
}
if (!one_opened if (!one_opened
&& UNIV_PAGE_SIZE && UNIV_PAGE_SIZE
!= fsp_flags_get_page_size(flags)) { != fsp_flags_get_page_size(flags)) {
@ -1042,6 +1050,8 @@ skip_size_check:
if (ret == FALSE) { if (ret == FALSE) {
const char* check_msg;
/* We open the data file */ /* We open the data file */
files[i] = os_file_create(innodb_file_data_key, files[i] = os_file_create(innodb_file_data_key,
@ -1078,13 +1088,20 @@ skip_size_check:
(ulong) TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * 9); (ulong) TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * 9);
} }
fil_read_first_page( check_msg = fil_read_first_page(
files[i], one_opened, &flags, files[i], one_opened, &flags,
#ifdef UNIV_LOG_ARCHIVE #ifdef UNIV_LOG_ARCHIVE
min_arch_log_no, max_arch_log_no, min_arch_log_no, max_arch_log_no,
#endif /* UNIV_LOG_ARCHIVE */ #endif /* UNIV_LOG_ARCHIVE */
min_flushed_lsn, max_flushed_lsn); min_flushed_lsn, max_flushed_lsn);
if (check_msg) {
fprintf(stderr,
"InnoDB: Error: %s in doublewrite "
"buffer file %s\n", check_msg, name);
return(DB_ERROR);
}
one_opened = TRUE; one_opened = TRUE;
} else { } else {
/* We created the data file and now write it full of /* We created the data file and now write it full of

View File

@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
@ -726,7 +726,8 @@ trx_sys_doublewrite_init_or_restore_pages(
/* Check if the page is corrupt */ /* Check if the page is corrupt */
if (UNIV_UNLIKELY if (UNIV_UNLIKELY
(buf_page_is_corrupted(read_buf, zip_size))) { (buf_page_is_corrupted(
TRUE, read_buf, zip_size))) {
fprintf(stderr, fprintf(stderr,
"InnoDB: Warning: database page" "InnoDB: Warning: database page"
@ -737,7 +738,8 @@ trx_sys_doublewrite_init_or_restore_pages(
" the doublewrite buffer.\n", " the doublewrite buffer.\n",
(ulong) space_id, (ulong) page_no); (ulong) space_id, (ulong) page_no);
if (buf_page_is_corrupted(page, zip_size)) { if (buf_page_is_corrupted(
TRUE, page, zip_size)) {
fprintf(stderr, fprintf(stderr,
"InnoDB: Dump of the page:\n"); "InnoDB: Dump of the page:\n");
buf_page_print( buf_page_print(