summaryrefslogtreecommitdiff
path: root/mysql-test/suite/innodb
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2019-09-09 13:06:33 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2019-09-09 13:06:33 +0300
commit7591a24fa6e2ccff998fdfd119e883d3dddb22a2 (patch)
treef85cf5b495663c1d3efd0e80523a7b747c484de7 /mysql-test/suite/innodb
parentf9f968557f9c632a083acabb3578631ce0d1c4f6 (diff)
downloadmariadb-git-7591a24fa6e2ccff998fdfd119e883d3dddb22a2.tar.gz
MDEV-20531: innodb.temporary_table_optimisation fails
Try to use more deterministic floating-point operations. Apparently, 2.2 > 2.2 wrongly holds on many platforms, but not ppc64le on the compiler used on Red Had Enterprise Linux 8. The reason could be an infinite binary presentation: 2.2 = 0b10.001100110011… With t1_f = 2.5 = 0b10.1, t1_f > 2.5 would no longer hold on AMD64. Let us replace the 2.2 with 2.5 and compare t1_f >= 2.5 in order to get more consistent results across all platforms.
Diffstat (limited to 'mysql-test/suite/innodb')
-rw-r--r--mysql-test/suite/innodb/r/temporary_table_optimization.result18
-rw-r--r--mysql-test/suite/innodb/t/temporary_table_optimization.test8
2 files changed, 13 insertions, 13 deletions
diff --git a/mysql-test/suite/innodb/r/temporary_table_optimization.result b/mysql-test/suite/innodb/r/temporary_table_optimization.result
index 63c4f388bf7..c3325d86386 100644
--- a/mysql-test/suite/innodb/r/temporary_table_optimization.result
+++ b/mysql-test/suite/innodb/r/temporary_table_optimization.result
@@ -112,7 +112,7 @@ count(*)
drop table t1;
drop procedure populate_t1;
create temporary table t1 (t1_i int, t1_f float) engine = innodb;
-insert into t1 values (1, 1.1), (2, 2.2), (3, 2.2), (4, 4.4);
+insert into t1 values (1, 1.1), (2, 2.5), (3, 2.5), (4, 4.4);
explain select * from t1 where t1_i = 1;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
@@ -124,22 +124,22 @@ select * from t1 where t1_i = 1;
t1_i t1_f
1 1.1
alter table t1 add unique index sec_index(t1_f);
-ERROR 23000: Duplicate entry '2.2' for key 'sec_index'
+ERROR 23000: Duplicate entry '2.5' for key 'sec_index'
alter table t1 add index sec_index(t1_f);
-explain select * from t1 where t1_f > 2.2;
+explain select * from t1 where t1_f >= 2.5;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL sec_index NULL NULL NULL 4 Using where
-select * from t1 where t1_f > 2.2;
+select * from t1 where t1_f >= 2.5;
t1_i t1_f
-2 2.2
-3 2.2
+2 2.5
+3 2.5
4 4.4
alter table t1 add column (t1_c char(10));
select * from t1;
t1_i t1_f t1_c
1 1.1 NULL
-2 2.2 NULL
-3 2.2 NULL
+2 2.5 NULL
+3 2.5 NULL
4 4.4 NULL
insert into t1 values (5, 5.5, 'krunal');
alter table t1 drop column t1_f;
@@ -150,7 +150,7 @@ t1 CREATE TEMPORARY TABLE `t1` (
`t1_c` char(10) DEFAULT NULL,
UNIQUE KEY `pri_index` (`t1_i`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
-select * from t1 where t1_f > 2.2;
+select * from t1 where t1_f >= 2.5;
ERROR 42S22: Unknown column 't1_f' in 'where clause'
alter table t1 add index sec_index2(t1_c), algorithm=inplace;
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY
diff --git a/mysql-test/suite/innodb/t/temporary_table_optimization.test b/mysql-test/suite/innodb/t/temporary_table_optimization.test
index ae41c87839b..967965f9998 100644
--- a/mysql-test/suite/innodb/t/temporary_table_optimization.test
+++ b/mysql-test/suite/innodb/t/temporary_table_optimization.test
@@ -100,7 +100,7 @@ drop procedure populate_t1;
# 3. Alter of temp-table.
#
create temporary table t1 (t1_i int, t1_f float) engine = innodb;
-insert into t1 values (1, 1.1), (2, 2.2), (3, 2.2), (4, 4.4);
+insert into t1 values (1, 1.1), (2, 2.5), (3, 2.5), (4, 4.4);
#
explain select * from t1 where t1_i = 1;
alter table t1 add unique index pri_index(t1_i);
@@ -110,8 +110,8 @@ select * from t1 where t1_i = 1;
--error ER_DUP_ENTRY
alter table t1 add unique index sec_index(t1_f);
alter table t1 add index sec_index(t1_f);
-explain select * from t1 where t1_f > 2.2;
-select * from t1 where t1_f > 2.2;
+explain select * from t1 where t1_f >= 2.5;
+select * from t1 where t1_f >= 2.5;
#
alter table t1 add column (t1_c char(10));
select * from t1;
@@ -120,7 +120,7 @@ insert into t1 values (5, 5.5, 'krunal');
alter table t1 drop column t1_f;
show create table t1;
--error ER_BAD_FIELD_ERROR
-select * from t1 where t1_f > 2.2;
+select * from t1 where t1_f >= 2.5;
#
--error ER_ALTER_OPERATION_NOT_SUPPORTED
alter table t1 add index sec_index2(t1_c), algorithm=inplace;