1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

Merge next-mr -> next-4284.

Fix Bug#50555 "handler commands crash server in my_hash_first()"
as a post-merge fix (the new handler tests are not passing 
otherwise).
- in hash.c, don't call calc_hash if ! my_hash_inited().
- add tests and results for the test case for Bug#50555


mysys/hash.c:
  Assert that the hash is initialized when it's used.
sql/set_var.cc:
  Check that the hash is initalized before using it (Bug#50555)
This commit is contained in:
Konstantin Osipov
2010-02-02 16:58:15 +03:00
118 changed files with 5130 additions and 1811 deletions

View File

@ -177,8 +177,6 @@ select cast(1.0e+300 as signed int);
CREATE TABLE t1 (f1 double);
INSERT INTO t1 SET f1 = -1.0e+30 ;
INSERT INTO t1 SET f1 = +1.0e+30 ;
# Expected result is +-1e+30, but Windows returns +-1e+030.
--replace_result 1e+030 1e+30
SELECT f1 AS double_val, CAST(f1 AS SIGNED INT) AS cast_val FROM t1;
DROP TABLE t1;

View File

@ -18,3 +18,4 @@ ssl_compress : SSL certificates expired
ssl_connect : SSL certificates expired
innodb-autoinc : Bug#49267 2009-12-02 test fails on windows because of different case mode
innodb : Bug#49396 2009-12-03 test fails in embedded mode
plugin_load : Bug#42144 2009-12-21 alik plugin_load fails

View File

@ -1,22 +0,0 @@
#
# Simple test for the example storage engine
# Taken fromm the select test
#
-- source include/have_exampledb.inc
--disable_warnings
# Clean up if event's test fails
drop database if exists events_test;
drop database if exists events_test2;
drop table if exists t1;
--enable_warnings
CREATE TABLE t1 (
Period smallint(4) unsigned zerofill DEFAULT '0000' NOT NULL,
Varor_period smallint(4) unsigned DEFAULT '0' NOT NULL
) ENGINE=example;
drop table t1;
# End of 4.1 tests

View File

@ -353,6 +353,9 @@ insert into t1 values ('85984',GeomFromText('MULTIPOLYGON(((-115.006363
36.248666,-115.263639 36.247466,-115.263839 36.252766,-115.261439
36.252666,-115.261439 36.247366,-115.247239 36.247066)))'));
# Expected result is 115.31877315203187, but IA64 returns 115.31877315203188
# due to fused multiply-add instructions.
--replace_result 115.31877315203188 115.31877315203187
select object_id, geometrytype(geo), ISSIMPLE(GEO), ASTEXT(centroid(geo)) from
t1 where object_id=85998;

View File

@ -422,9 +422,6 @@ INSERT INTO t1(a,c) VALUES (1.87e-3, 1.87e-3);
INSERT INTO t1(a,c) VALUES (-1.87e-2, -1.87e-2);
INSERT INTO t1(a,c) VALUES (5000e+0, 5000e+0);
INSERT INTO t1(a,c) VALUES (-5000e+0, -5000e+0);
# Expected results are "12.2" and "1.2e+78", but Windows returns "12.3" and
# "1.3e+78" due to different rounding rules
--replace_result 12.3 12.2 1.3e+78 1.2e+78
SELECT * FROM t1;
DROP TABLE t1;
@ -459,9 +456,6 @@ INSERT INTO t1(a,c) VALUES (-1.87e-2, -1.87e-2);
INSERT INTO t1(a,c) VALUES (5000e+0, 5000e+0);
INSERT INTO t1(a,c) VALUES (-5000e+0, -5000e+0);
# Expected results are "12.2" and "1.2e+78", but Windows returns "12.3" and
# "1.3e+78" due to different rounding rules
--replace_result 12.3 12.2 1.3e+78 1.2e+78
SELECT * FROM t1;
DROP TABLE t1;

View File

@ -46,9 +46,6 @@ DROP TABLE t1;
CREATE TABLE t1 (a double);
INSERT INTO t1 VALUES ('-9e999999');
# The following replaces is here because some systems replaces the above
# double with '-inf' and others with MAX_DOUBLE
--replace_result (-1.79769313486232e+308) (RES) (NULL) (RES)
--exec $MYSQL_DUMP --compact test t1
DROP TABLE t1;

View File

@ -31,7 +31,7 @@ ALTER TABLE t1 ENGINE Memory;
ALTER TABLE t1 ADD (new INT);
DROP TABLE t1;
--error ER_FEATURE_DISABLED
--error ER_FEATURE_DISABLED,ER_OPTION_PREVENTS_STATEMENT
CREATE TABLE t1 (
firstname VARCHAR(25) NOT NULL,
lastname VARCHAR(25) NOT NULL,
@ -42,13 +42,13 @@ CREATE TABLE t1 (
PARTITION BY KEY(joined)
PARTITIONS 6;
--error ER_FEATURE_DISABLED
--error ER_FEATURE_DISABLED,ER_OPTION_PREVENTS_STATEMENT
ALTER TABLE t1 PARTITION BY KEY(joined) PARTITIONS 2;
--error ER_BAD_TABLE_ERROR
drop table t1;
--error ER_FEATURE_DISABLED
--error ER_FEATURE_DISABLED,ER_OPTION_PREVENTS_STATEMENT
CREATE TABLE t1 (
firstname VARCHAR(25) NOT NULL,
lastname VARCHAR(25) NOT NULL,
@ -66,7 +66,7 @@ PARTITION BY RANGE( YEAR(joined) ) (
--error ER_BAD_TABLE_ERROR
drop table t1;
--error ER_FEATURE_DISABLED
--error ER_FEATURE_DISABLED,ER_OPTION_PREVENTS_STATEMENT
CREATE TABLE t1 (id INT, purchased DATE)
PARTITION BY RANGE( YEAR(purchased) )
SUBPARTITION BY HASH( TO_DAYS(purchased) )

View File

@ -646,6 +646,10 @@ select conv(255 AS p1, 10 AS p2, 16 AS p3);
# Native function with a variable number of arguments
# Bug in libm.so on Solaris:
# atan(10) from 32-bit version returns 1.4711276743037347
# atan(10) from 64-bit version returns 1.4711276743037345
--replace_result 1.4711276743037345 1.4711276743037347
select atan(10);
-- error ER_WRONG_PARAMETERS_TO_NATIVE_FCT
select atan(10 AS p1);

View File

@ -23,6 +23,23 @@ partition by range columns (a,b,c)
( partition p0 values less than (1, maxvalue, 10),
partition p1 values less than (1, maxvalue, maxvalue));
#
# BUG#48737, Search fails with ucs2
#
create table t1 (a varchar(5) character set ucs2 collate ucs2_bin)
partition by range columns (a)
(partition p0 values less than (0x0041));
insert into t1 values (0x00410000);
select hex(a) from t1 where a like 'A_';
explain partitions select hex(a) from t1 where a like 'A_';
alter table t1 remove partitioning;
select hex(a) from t1 where a like 'A_';
create index a on t1 (a);
select hex(a) from t1 where a like 'A_';
insert into t1 values ('A_');
select hex(a) from t1;
drop table t1;
#
# BUG#48161, Delivering too few records using collate syntax with partitions
#

View File

@ -0,0 +1,251 @@
# Test of key cache with partitions
--source include/have_partition.inc
--disable_warnings
DROP TABLE IF EXISTS t1, t2, v, x;
--enable_warnings
--echo # Actual test of key caches
--echo # Verifing that reads/writes use the key cache correctly
SELECT @org_key_cache_buffer_size:= @@global.default.key_buffer_size;
--echo # Minimize default key cache (almost disabled).
SET @@global.default.key_buffer_size = 1;
CREATE TABLE t1 (
a INT,
b INT,
c INT NOT NULL,
PRIMARY KEY (a),
KEY `inx_b` (b))
PARTITION BY RANGE (a)
SUBPARTITION BY HASH (a)
(PARTITION p0 VALUES LESS THAN (1167602410)
(SUBPARTITION sp0,
SUBPARTITION sp1),
PARTITION p1 VALUES LESS THAN MAXVALUE
(SUBPARTITION sp2,
SUBPARTITION sp3));
CREATE TABLE t2 (
a INT,
b INT,
c INT NOT NULL,
PRIMARY KEY (a),
KEY `inx_b` (b));
FLUSH TABLES;
FLUSH STATUS;
# Genereate 4096 rows. Idea from:
# http://datacharmer.blogspot.com/2007/12/data-from-nothing-solution-to-pop-quiz.html
SET @a:=1167602400;
CREATE VIEW v AS SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4;
CREATE VIEW x AS SELECT 1 FROM v,v a,v b;
# due to I_S performance, this was substituted with include files which
# uses SHOW STATUS
#DELIMITER |;
#CREATE PROCEDURE was_zero_reads()
#BEGIN
# SELECT IF(VARIABLE_VALUE = 0,"Yes!","No!") as 'Was zero reads?'
# FROM INFORMATION_SCHEMA.SESSION_STATUS
# WHERE VARIABLE_NAME = 'KEY_READS';
# FLUSH STATUS;
#END|
#DELIMITER ;|
FLUSH STATUS;
INSERT t1 SELECT @a, @a * (1 - ((@a % 2) * 2)) , 1167612400 - (@a:=@a+1) FROM x, x y;
--source include/check_key_req.inc
--echo # row distribution:
SELECT PARTITION_NAME, SUBPARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='test' and TABLE_NAME='t1';
DROP VIEW x;
DROP VIEW v;
FLUSH TABLES;
FLUSH STATUS;
SELECT COUNT(b) FROM t1 WHERE b >= 0;
--source include/check_key_reads.inc
INSERT t2 SELECT a,b,c FROM t1;
--source include/check_key_req.inc
FLUSH STATUS;
SELECT COUNT(b) FROM t2 WHERE b >= 0;
--source include/check_key_reads.inc
FLUSH TABLES;
--echo # Setting the default key cache to 1M
SET GLOBAL key_buffer_size = 1024*1024;
FLUSH STATUS;
--echo # All these have to read the indexes
LOAD INDEX INTO CACHE t1 PARTITION (p1);
--source include/check_key_reads.inc
SELECT COUNT(b) FROM t1 WHERE b >= 0;
--source include/check_key_reads.inc
SELECT COUNT(b) FROM t2 WHERE b >= 0;
--source include/check_key_reads.inc
--echo # All these should be able to use the key cache
SELECT COUNT(b) FROM t1 WHERE b >= 0;
--source include/check_key_reads.inc
SELECT COUNT(b) FROM t2 WHERE b >= 0;
--source include/check_key_reads.inc
FLUSH TABLES;
LOAD INDEX INTO CACHE t1 PARTITION (p1,p0);
--source include/check_key_reads.inc
--echo # should not be zero
SELECT COUNT(b) FROM t1 WHERE b >= 0;
--source include/check_key_reads.inc
LOAD INDEX INTO CACHE t2;
--source include/check_key_reads.inc
--echo # should not be zero
SELECT COUNT(b) FROM t2 WHERE b >= 0;
--source include/check_key_reads.inc
FLUSH TABLES;
LOAD INDEX INTO CACHE t1 PARTITION (p1,p0) IGNORE LEAVES;
--source include/check_key_reads.inc
--echo # should not be zero
SELECT COUNT(b) FROM t1 WHERE b >= 0;
--source include/check_key_reads.inc
LOAD INDEX INTO CACHE t2 IGNORE LEAVES;
--source include/check_key_reads.inc
--echo # should not be zero
SELECT COUNT(b) FROM t2 WHERE b >= 0;
--source include/check_key_reads.inc
TRUNCATE TABLE t2;
INSERT t2 SELECT a,b,c FROM t1;
--source include/check_key_req.inc
DROP TABLE t1,t2;
SET GLOBAL hot_cache.key_buffer_size = 1024*1024;
SET GLOBAL warm_cache.key_buffer_size = 1024*1024;
SET @@global.cold_cache.key_buffer_size = 1024*1024;
SELECT @@global.default.key_buffer_size a, @@global.default.key_cache_block_size b, @@global.default.key_cache_age_threshold c, @@global.default.key_cache_division_limit d;
SELECT @@global.hot_cache.key_buffer_size a, @@global.hot_cache.key_cache_block_size b, @@global.hot_cache.key_cache_age_threshold c, @@global.hot_cache.key_cache_division_limit d;
SELECT @@global.warm_cache.key_buffer_size a, @@global.warm_cache.key_cache_block_size b, @@global.warm_cache.key_cache_age_threshold c, @@global.warm_cache.key_cache_division_limit d;
SELECT @@global.cold_cache.key_buffer_size a, @@global.cold_cache.key_cache_block_size b, @@global.cold_cache.key_cache_age_threshold c, @@global.cold_cache.key_cache_division_limit d;
CREATE TABLE t1 (
a INT,
b VARCHAR(257),
c INT NOT NULL,
PRIMARY KEY (a),
KEY `inx_b` (b),
KEY `inx_c`(c))
PARTITION BY RANGE (a)
SUBPARTITION BY HASH (a)
(PARTITION p0 VALUES LESS THAN (10)
(SUBPARTITION sp0,
SUBPARTITION sp1),
PARTITION p1 VALUES LESS THAN MAXVALUE
(SUBPARTITION sp2,
SUBPARTITION sp3));
CREATE TABLE t2 (
a INT,
b VARCHAR(257),
c INT NOT NULL,
PRIMARY KEY (a),
KEY `inx_b` (b),
KEY `inx_c`(c));
SET @a:=1167602400;
# Genereate 4096 rows. Idea from:
# http://datacharmer.blogspot.com/2007/12/data-from-nothing-solution-to-pop-quiz.html
CREATE VIEW v AS SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4;
CREATE VIEW x AS SELECT 1 FROM v,v a,v b;
INSERT t1 SELECT @a, CONCAT('X_', @a, ' MySQL'), 1167612400 - (@a:=@a+1) FROM x, x a;
DROP VIEW x;
DROP VIEW v;
INSERT t2 SELECT a, b, c FROM t1;
SELECT COUNT(*) FROM t1;
SELECT COUNT(*) FROM t2;
FLUSH TABLES;
--echo # Restrict partitioned commands to partitioned tables only
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
CACHE INDEX t2 PARTITION (p0) KEY (`inx_b`) IN hot_cache;
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
CACHE INDEX t2 PARTITION (p0,`p1`) INDEX (`PRIMARY`) IN hot_cache;
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
CACHE INDEX t2 PARTITION (`p1`) INDEX (`PRIMARY`,`inx_b`) IN hot_cache;
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
CACHE INDEX t2 PARTITION (ALL) KEY (`inx_b`,`PRIMARY`) IN hot_cache;
--echo # Basic key cache testing
--echo # The manual correctly says: "The syntax of CACHE INDEX enables you to
--echo # specify that only particular indexes from a table should be assigned
--echo # to the cache. The current implementation assigns all the table's
--echo # indexes to the cache, so there is no reason to specify anything
--echo # other than the table name."
--echo # So the most of the test only tests the syntax
CACHE INDEX t2 INDEX (`inx_b`) IN hot_cache;
CACHE INDEX t2 KEY (`PRIMARY`) IN warm_cache;
CACHE INDEX t2 KEY (`PRIMARY`,`inx_b`) IN cold_cache;
CACHE INDEX t2 INDEX (inx_b,`PRIMARY`) IN default;
CACHE INDEX t1 PARTITION (p0) KEY (`inx_b`) IN cold_cache;
--error ER_PARSE_ERROR
CACHE INDEX t1 PARTITIONS (p0) KEY (`inx_b`) IN cold_cache;
--echo # only one table at a time if specifying partitions
--error ER_PARSE_ERROR
CACHE INDEX t1,t2 PARTITION (p0) KEY (`inx_b`) IN cold_cache;
CACHE INDEX t1 PARTITION (`p0`,p1) INDEX (`PRIMARY`) IN warm_cache;
CACHE INDEX t1 PARTITION (`p1`) INDEX (`PRIMARY`,inx_b) IN hot_cache;
CACHE INDEX t1 PARTITION (ALL) KEY (`inx_b`,`PRIMARY`) IN default;
CACHE INDEX t1 PARTITION (ALL) IN hot_cache;
CACHE INDEX t1 INDEX (`inx_b`) IN default;
CACHE INDEX t1 KEY (`PRIMARY`) IN hot_cache;
CACHE INDEX t1 KEY (`PRIMARY`,`inx_b`) IN warm_cache;
CACHE INDEX t1 INDEX (`inx_b`,`PRIMARY`) IN cold_cache;
CACHE INDEX t1 IN hot_cache;
--echo # Test of non existent key cache:
--error ER_UNKNOWN_KEY_CACHE
CACHE INDEX t1 IN non_existent_key_cache;
--echo # Basic testing of LOAD INDEX
LOAD INDEX INTO CACHE t2;
--echo # PRIMARY and secondary keys have different block sizes
LOAD INDEX INTO CACHE t2 ignore leaves;
--echo # Must have INDEX or KEY before the index list
--error ER_PARSE_ERROR
LOAD INDEX INTO CACHE t2 (`PRIMARY`);
--echo # Test of IGNORE LEAVES
LOAD INDEX INTO CACHE t2 INDEX (`PRIMARY`);
LOAD INDEX INTO CACHE t2 KEY (`PRIMARY`,`inx_b`) IGNORE LEAVES;
CACHE INDEX t2 IN warm_cache;
CACHE INDEX t1 IN cold_cache;
LOAD INDEX INTO CACHE t2 KEY (`PRIMARY`) IGNORE LEAVES;
CACHE INDEX t2 INDEX (`inx_b`, `inx_c`) IN hot_cache;
LOAD INDEX INTO CACHE t2 KEY (`inx_b`, `inx_c`) IGNORE LEAVES;
CACHE INDEX t2 IN warm_cache;
CACHE INDEX t2 INDEX (`PRIMARY`, `inx_c`) IN hot_cache;
LOAD INDEX INTO CACHE t2 KEY (`PRIMARY`,`inx_c`) IGNORE LEAVES;
CACHE INDEX t2 INDEX (`inx_b`,`PRIMARY`) IN default;
LOAD INDEX INTO CACHE t2 KEY (`PRIMARY`,`inx_b`);
CACHE INDEX t2 IN default;
LOAD INDEX INTO CACHE t2 IGNORE LEAVES;
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
LOAD INDEX INTO CACHE t2 PARTITION (p1) INDEX (`PRIMARY`);
LOAD INDEX INTO CACHE t1, t2;
--echo # only one table at a time if specifying partitions
--error ER_PARSE_ERROR
LOAD INDEX INTO CACHE t1 PARTITION (p0), t2;
LOAD INDEX INTO CACHE t1 IGNORE LEAVES;
LOAD INDEX INTO CACHE t1 INDEX (`PRIMARY`);
LOAD INDEX INTO CACHE t1 INDEX (`PRIMARY`,`inx_b`) IGNORE LEAVES;
LOAD INDEX INTO CACHE t1 INDEX (`inx_b`) IGNORE LEAVES;
LOAD INDEX INTO CACHE t1 INDEX (`PRIMARY`) IGNORE LEAVES;
LOAD INDEX INTO CACHE t1 INDEX (`PRIMARY`,`inx_b`);
LOAD INDEX INTO CACHE t1 PARTITION (p1) INDEX (`PRIMARY`);
LOAD INDEX INTO CACHE t1 PARTITION (`p1`,p0) KEY (`PRIMARY`) IGNORE LEAVES;
LOAD INDEX INTO CACHE t1 PARTITION (ALL);
--error ER_PARSE_ERROR
LOAD INDEX INTO CACHE t1 PARTITIONS ALL;
LOAD INDEX INTO CACHE t1 PARTITION (p1,`p0`) IGNORE LEAVES;
DROP INDEX `inx_b` on t1;
DROP INDEX `inx_b` on t2;
--error ER_PARTITION_MGMT_ON_NONPARTITIONED
CACHE INDEX t2 PARTITION (p0) KEY (`inx_b`) IN hot_cache;
CACHE INDEX t2 INDEX (`inx_b`) IN hot_cache;
CACHE INDEX t1 PARTITION (p0) KEY (`inx_b`) IN hot_cache;
CACHE INDEX t1 INDEX (`inx_b`) IN hot_cache;
DROP TABLE t1,t2;
SET GLOBAL hot_cache.key_buffer_size = 0;
SET GLOBAL warm_cache.key_buffer_size = 0;
SET @@global.cold_cache.key_buffer_size = 0;
SELECT @@global.default.key_buffer_size a, @@global.default.key_cache_block_size b, @@global.default.key_cache_age_threshold c, @@global.default.key_cache_division_limit d;
SELECT @@global.hot_cache.key_buffer_size a, @@global.hot_cache.key_cache_block_size b, @@global.hot_cache.key_cache_age_threshold c, @@global.hot_cache.key_cache_division_limit d;
SELECT @@global.warm_cache.key_buffer_size a, @@global.warm_cache.key_cache_block_size b, @@global.warm_cache.key_cache_age_threshold c, @@global.warm_cache.key_cache_division_limit d;
SELECT @@global.cold_cache.key_buffer_size a, @@global.cold_cache.key_cache_block_size b, @@global.cold_cache.key_cache_age_threshold c, @@global.cold_cache.key_cache_division_limit d;
--disable_warnings
SET @@global.default.key_buffer_size = @org_key_cache_buffer_size;
--enable_warnings

View File

@ -9,6 +9,16 @@
drop table if exists t1, t2;
--enable_warnings
#
#BUG#49591, Add proper version number to SHOW CREATE TABLE
#
create table t1 (a int)
partition by range (a)
subpartition by hash(to_seconds(a))
(partition p0 values less than (1));
show create table t1;
drop table t1;
--error ER_NULL_IN_VALUES_LESS_THAN
create table t1 (a int)
partition by range (a)
@ -30,6 +40,7 @@ explain partitions select * from t1 where a < '2007-03-08 00:00:01';
explain partitions select * from t1 where a <= '2007-03-08 00:00:00';
explain partitions select * from t1 where a <= '2007-03-07 23:59:59';
explain partitions select * from t1 where a < '2007-03-07 23:59:59';
show create table t1;
drop table t1;
#
# New test cases for new function to_seconds
@ -44,6 +55,7 @@ explain partitions select * from t1 where a <= '2003-12-31';
select * from t1 where a <= '2003-12-31';
explain partitions select * from t1 where a <= '2005-01-01';
select * from t1 where a <= '2005-01-01';
show create table t1;
drop table t1;
create table t1 (a datetime)
@ -56,6 +68,7 @@ explain partitions select * from t1 where a <= '2004-01-01 11:59.59';
select * from t1 where a <= '2004-01-01 11:59:59';
explain partitions select * from t1 where a <= '2005-01-01';
select * from t1 where a <= '2005-01-01';
show create table t1;
drop table t1;
#

View File

@ -94,10 +94,6 @@ select sql_cache * from t1 union select * from t1;
set query_cache_type=2;
select sql_cache * from t1 union select * from t1;
# all sql_cache statements, except for the first select, are ignored.
select * from t1 union select sql_cache * from t1;
select * from t1 where a IN (select sql_cache a from t1);
select * from t1 where a IN (select a from t1 union select sql_cache a from t1);
show status like "Qcache_hits";
show status like "Qcache_queries_in_cache";
set query_cache_type=on;
@ -110,15 +106,6 @@ show status like "Qcache_queries_in_cache";
# SELECT SQL_NO_CACHE
#
select sql_no_cache * from t1;
# sql_no_cache can occur in any nested select to turn on cacheing for the whole
# expression and it will always override a sql_cache statement.
select * from t1 union select sql_no_cache * from t1;
select * from t1 where a IN (select sql_no_cache a from t1);
select * from t1 where a IN (select a from t1 union select sql_no_cache a from t1);
select sql_cache sql_no_cache * from t1;
select sql_cache * from t1 union select sql_no_cache * from t1;
select sql_cache * from t1 where a IN (select sql_no_cache a from t1);
select sql_cache * from t1 where a IN (select a from t1 union select sql_no_cache a from t1);
show status like "Qcache_queries_in_cache";
drop table t1;
#
@ -1044,22 +1031,25 @@ set GLOBAL query_cache_size= default;
# Bug #29053 SQL_CACHE in UNION causes non-deterministic functions to be cached
#
set GLOBAL query_cache_size=1000000;
create table t1 (a char);
insert into t1 values ('c');
let $q1= `select RAND() from t1 union select sql_cache 1 from t1;`;
let $q2= `select RAND() from t1 union select sql_cache 1 from t1;`;
# This syntax is no longer allowed, therefore the test case has been commented
# out.
# See test for Bug#35020 below.
#set GLOBAL query_cache_size=1000000;
#
#create table t1 (a char);
#insert into t1 values ('c');
#
#let $q1= `select RAND() from t1 union select sql_cache 1 from t1;`;
#let $q2= `select RAND() from t1 union select sql_cache 1 from t1;`;
#
# disabling the logging of the query because the times are different each run.
--disable_query_log
eval select a from t1 where "$q1" = "$q2";
--enable_query_log
drop table t1;
set GLOBAL query_cache_size= default;
#--disable_query_log
#eval select a from t1 where "$q1" = "$q2";
#--enable_query_log
#
#drop table t1;
#
#set GLOBAL query_cache_size= default;
#
# Bug#29856: Insufficient buffer space led to a server crash.
@ -1307,5 +1297,69 @@ SELECT 1 FROM t1 GROUP BY
DROP TABLE t1;
SET GLOBAL query_cache_size= default;
--echo End of 5.1 tests
#
# Bug#35020: illegal sql_cache select syntax
#
CREATE TABLE t1( a INT );
--error ER_PARSE_ERROR
SET @v = ( SELECT SQL_CACHE 1 );
--error ER_PARSE_ERROR
SET @v = ( SELECT SQL_NO_CACHE 1 );
#
# Keywords 'SQL_CACHE' and 'SQL_NO_CACHE' are allowed as column names.
# Hence the error messages are not intuitive.
#
--error ER_BAD_FIELD_ERROR
SELECT a FROM t1 WHERE a IN ( SELECT SQL_CACHE a FROM t1 );
--error ER_BAD_FIELD_ERROR
SELECT a FROM t1 WHERE a IN ( SELECT SQL_NO_CACHE a FROM t1 );
--error ER_BAD_FIELD_ERROR
SELECT ( SELECT SQL_CACHE a FROM t1 );
--error ER_BAD_FIELD_ERROR
SELECT ( SELECT SQL_NO_CACHE a FROM t1 );
SELECT SQL_CACHE * FROM t1;
SELECT SQL_NO_CACHE * FROM t1;
# SQL_CACHE is only allowed once in first top-level select.
--error ER_CANT_USE_OPTION_HERE
SELECT * FROM t1 UNION SELECT SQL_CACHE * FROM t1;
--error ER_CANT_USE_OPTION_HERE
SELECT * FROM t1 UNION SELECT SQL_NO_CACHE * FROM t1;
--error ER_BAD_FIELD_ERROR
SELECT * FROM t1 WHERE a IN (SELECT SQL_CACHE a FROM t1);
--error ER_BAD_FIELD_ERROR
SELECT * FROM t1 WHERE a IN (SELECT a FROM t1 UNION SELECT SQL_CACHE a FROM t1);
--error ER_CANT_USE_OPTION_HERE
SELECT * FROM t1 UNION SELECT SQL_NO_CACHE * FROM t1;
--error ER_BAD_FIELD_ERROR
SELECT * FROM t1 WHERE a IN (SELECT SQL_NO_CACHE a FROM t1);
--error ER_BAD_FIELD_ERROR
SELECT * FROM t1 WHERE a IN
(SELECT a FROM t1 UNION SELECT SQL_NO_CACHE a FROM t1);
--error ER_WRONG_USAGE
SELECT SQL_CACHE SQL_NO_CACHE * FROM t1;
--error ER_WRONG_USAGE
SELECT SQL_NO_CACHE SQL_CACHE * FROM t1;
--error ER_CANT_USE_OPTION_HERE
SELECT SQL_CACHE * FROM t1 UNION SELECT SQL_CACHE * FROM t1;
--error ER_CANT_USE_OPTION_HERE
SELECT SQL_CACHE * FROM t1 UNION SELECT SQL_NO_CACHE * FROM t1;
--error ER_CANT_USE_OPTION_HERE
SELECT SQL_NO_CACHE * FROM t1 UNION SELECT SQL_CACHE * FROM t1;
--error ER_CANT_USE_OPTION_HERE
SELECT SQL_NO_CACHE * FROM t1 UNION SELECT SQL_NO_CACHE * FROM t1;
--error ER_BAD_FIELD_ERROR
SELECT SQL_CACHE * FROM t1 WHERE a IN
(SELECT SQL_NO_CACHE a FROM t1);
--error ER_BAD_FIELD_ERROR
SELECT SQL_CACHE * FROM t1 WHERE a IN
(SELECT a FROM t1 UNION SELECT SQL_NO_CACHE a FROM t1);
DROP TABLE t1;
--echo End of 5.1 tests

View File

@ -550,18 +550,14 @@ CREATE VIEW v1 AS SELECT SQL_NO_CACHE NOW();
SHOW CREATE VIEW v1;
DROP VIEW v1;
# Check that SQL_NO_CACHE always wins.
--error ER_WRONG_USAGE
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE NOW();
SHOW CREATE VIEW v1;
DROP VIEW v1;
--error ER_WRONG_USAGE
CREATE VIEW v1 AS SELECT SQL_NO_CACHE SQL_CACHE NOW();
SHOW CREATE VIEW v1;
DROP VIEW v1;
--error ER_WRONG_USAGE
CREATE VIEW v1 AS SELECT SQL_CACHE SQL_NO_CACHE SQL_CACHE NOW();
SHOW CREATE VIEW v1;
DROP VIEW v1;
# Check CREATE VIEW in a prepared statement in a procedure.
delimiter |;

View File

@ -409,6 +409,18 @@ SELECT ROUND(qty,3), dps, ROUND(qty,dps) FROM t1;
DROP TABLE t1;
#
# Bug #24541: "Data truncated..." on decimal type columns without any good reason
#
create table t1 (c1 decimal(10,6));
insert into t1 (c1) values (9.99e-4);
insert into t1 (c1) values (9.98e-4);
insert into t1 (c1) values (0.000999);
insert into t1 (c1) values (cast(9.99e-4 as decimal(10,6)));
select * from t1;
drop table t1;
#
# Bug#31019: MOD() function and operator crashes MySQL when
# divisor is very long and < 1

View File

@ -7,7 +7,7 @@ drop table if exists t1,t2;
--enable_warnings
SELECT 10,10.0,10.,.1e+2,100.0e-1;
SELECT 6e-05, -6e-05, --6e-05, -6e-05+1.000000;
SELECT 6e-16, -6e-16, --6e-16, -6e-16+1.000000;
SELECT 1e1,1.e1,1.0e1,1e+1,1.e+1,1.0e+1,1e-1,1.e-1,1.0e-1;
SELECT 0.001e+1,0.001e-1, -0.001e+01,-0.001e-01;
SELECT 123.23E+02,-123.23E-02,"123.23E+02"+0.0,"-123.23E-02"+0.0;
@ -252,6 +252,37 @@ insert into t1 values (2e30), (-2e30);
select f1 + 0e0 from t1;
drop table t1;
#
# Bug #12860 "Difference in zero padding of exponent between Unix and Windows"
#
create table t1 (c char(6));
insert into t1 values (2e6),(2e-5);
select * from t1;
drop table t1;
#
# Bug #21497 "DOUBLE truncated to unusable value"
#
CREATE TABLE d1 (d DOUBLE);
INSERT INTO d1 VALUES (1.7976931348623157E+308);
SELECT * FROM d1;
--error ER_ILLEGAL_VALUE_FOR_TYPE
INSERT INTO d1 VALUES (1.79769313486232e+308);
SELECT * FROM d1;
DROP TABLE d1;
#
# Bug #26788 "mysqld (debug) aborts when inserting specific numbers into char
# fields"
#
create table t1 (a char(20));
insert into t1 values (1.225e-05);
select a+0 from t1;
drop table t1;
#
# Bug #27483: Casting 'scientific notation type' to 'unsigned bigint' fails on
# windows.

View File

@ -1054,10 +1054,8 @@ while ($max_power)
}
SELECT my_float, my_double, my_varchar FROM t1;
# Expected result 0.000000000011754943372854760000
# On windows we get 0.000000000011754943372854770000
# use replace_result to correct it
--replace_result 0.000000000011754943372854770000 0.000000000011754943372854760000
# The following statement produces results with garbage past
# the significant digits. Improving it is a part of the WL#3977.
SELECT CAST(my_float AS DECIMAL(65,30)), my_float FROM t1;
SELECT CAST(my_double AS DECIMAL(65,30)), my_double FROM t1;
SELECT CAST(my_varchar AS DECIMAL(65,30)), my_varchar FROM t1;