summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2018-02-09 19:49:19 +0400
committerAlexander Barkov <bar@mariadb.org>2018-02-10 00:06:10 +0400
commite07451f71f3b4cd474b1fd8b3395a8cc1a844e1f (patch)
treeb6a57a502eae60e2c69b2ffa5492d3686043e335
parent564891c5328c20089ba7d1ab450143a3abe3e0d9 (diff)
parentb0a92333c00f8facd20c55cf7a8dfaf896b7f24d (diff)
downloadmariadb-git-e07451f71f3b4cd474b1fd8b3395a8cc1a844e1f.tar.gz
Merge remote-tracking branch 'origin/10.0' into 10.1
-rw-r--r--mysql-test/r/type_time_6065.result44
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff2
-rw-r--r--mysql-test/t/type_time_6065.test23
-rw-r--r--sql/field.cc7
-rw-r--r--storage/xtradb/include/univ.i2
5 files changed, 76 insertions, 2 deletions
diff --git a/mysql-test/r/type_time_6065.result b/mysql-test/r/type_time_6065.result
index a61c658d50e..067fe9b89fc 100644
--- a/mysql-test/r/type_time_6065.result
+++ b/mysql-test/r/type_time_6065.result
@@ -2308,3 +2308,47 @@ col_int_nokey
1
DROP TABLE t1,t2,t3;
SET TIMESTAMP=0;
+#
+# MDEV-15262 Wrong results for SELECT..WHERE non_indexed_datetime_column=indexed_time_column
+#
+SET TIMESTAMP=UNIX_TIMESTAMP('2012-01-31 10:14:35');
+CREATE TABLE t1 (col_time_key TIME, KEY(col_time_key));
+CREATE TABLE t2 (col_datetime_key DATETIME);
+INSERT INTO t1 VALUES ('-760:00:00'),('760:00:00');
+INSERT INTO t1 VALUES ('-770:00:00'),('770:00:00');
+INSERT INTO t2 SELECT * FROM t1;
+SELECT * FROM t2 STRAIGHT_JOIN t1 IGNORE INDEX(col_time_key) WHERE col_time_key = col_datetime_key;
+col_datetime_key col_time_key
+2011-12-30 08:00:00 -760:00:00
+2012-03-02 16:00:00 760:00:00
+2011-12-29 22:00:00 -770:00:00
+2012-03-03 02:00:00 770:00:00
+SELECT * FROM t2 STRAIGHT_JOIN t1 FORCE INDEX (col_time_key) WHERE col_time_key = col_datetime_key;
+col_datetime_key col_time_key
+2011-12-29 22:00:00 -770:00:00
+2011-12-30 08:00:00 -760:00:00
+2012-03-02 16:00:00 760:00:00
+2012-03-03 02:00:00 770:00:00
+INSERT INTO t1 VALUES ('-838:59:59'),('838:59:59');
+INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '-838:59:59' HOUR_SECOND));
+INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '838:59:59' HOUR_SECOND));
+INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '-839:00:00' HOUR_SECOND));
+INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '839:00:00' HOUR_SECOND));
+SELECT * FROM t2 STRAIGHT_JOIN t1 IGNORE INDEX(col_time_key) WHERE col_time_key = col_datetime_key;
+col_datetime_key col_time_key
+2011-12-30 08:00:00 -760:00:00
+2012-03-02 16:00:00 760:00:00
+2011-12-29 22:00:00 -770:00:00
+2012-03-03 02:00:00 770:00:00
+2011-12-27 01:00:01 -838:59:59
+2012-03-05 22:59:59 838:59:59
+SELECT * FROM t2 STRAIGHT_JOIN t1 FORCE INDEX (col_time_key) WHERE col_time_key = col_datetime_key;
+col_datetime_key col_time_key
+2011-12-29 22:00:00 -770:00:00
+2011-12-30 08:00:00 -760:00:00
+2012-03-02 16:00:00 760:00:00
+2012-03-03 02:00:00 770:00:00
+2011-12-27 01:00:01 -838:59:59
+2012-03-05 22:59:59 838:59:59
+DROP TABLE t1, t2;
+SET TIMESTAMP=DEFAULT;
diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff b/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff
index 0a2757c5138..313be8f99f6 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff
+++ b/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff
@@ -676,7 +676,7 @@
VARIABLE_NAME INNODB_VERSION
SESSION_VALUE NULL
-GLOBAL_VALUE 5.6.37
-+GLOBAL_VALUE 5.6.36-83.0
++GLOBAL_VALUE 5.6.38-83.0
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE NULL
VARIABLE_SCOPE GLOBAL
diff --git a/mysql-test/t/type_time_6065.test b/mysql-test/t/type_time_6065.test
index 6e29b849be5..fc91c530760 100644
--- a/mysql-test/t/type_time_6065.test
+++ b/mysql-test/t/type_time_6065.test
@@ -172,6 +172,29 @@ eval $query;
DROP TABLE t1,t2,t3;
SET TIMESTAMP=0; # back to current time
+
+--echo #
+--echo # MDEV-15262 Wrong results for SELECT..WHERE non_indexed_datetime_column=indexed_time_column
+--echo #
+
+SET TIMESTAMP=UNIX_TIMESTAMP('2012-01-31 10:14:35');
+CREATE TABLE t1 (col_time_key TIME, KEY(col_time_key));
+CREATE TABLE t2 (col_datetime_key DATETIME);
+INSERT INTO t1 VALUES ('-760:00:00'),('760:00:00');
+INSERT INTO t1 VALUES ('-770:00:00'),('770:00:00');
+INSERT INTO t2 SELECT * FROM t1;
+SELECT * FROM t2 STRAIGHT_JOIN t1 IGNORE INDEX(col_time_key) WHERE col_time_key = col_datetime_key;
+SELECT * FROM t2 STRAIGHT_JOIN t1 FORCE INDEX (col_time_key) WHERE col_time_key = col_datetime_key;
+INSERT INTO t1 VALUES ('-838:59:59'),('838:59:59');
+INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '-838:59:59' HOUR_SECOND));
+INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '838:59:59' HOUR_SECOND));
+INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '-839:00:00' HOUR_SECOND));
+INSERT INTO t2 VALUES (DATE_ADD(CURRENT_DATE, INTERVAL '839:00:00' HOUR_SECOND));
+SELECT * FROM t2 STRAIGHT_JOIN t1 IGNORE INDEX(col_time_key) WHERE col_time_key = col_datetime_key;
+SELECT * FROM t2 STRAIGHT_JOIN t1 FORCE INDEX (col_time_key) WHERE col_time_key = col_datetime_key;
+DROP TABLE t1, t2;
+SET TIMESTAMP=DEFAULT;
+
#
# End of 10.0 tests
#
diff --git a/sql/field.cc b/sql/field.cc
index 9bc1fcbffe8..64c51677c0f 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -5788,6 +5788,13 @@ static void calc_datetime_days_diff(MYSQL_TIME *ltime, long days)
ltime->second) * 1000000LL +
ltime->second_part);
unpack_time(timediff, ltime);
+ /*
+ unpack_time() broke down hours into ltime members hour,day,month.
+ Mix them back to ltime->hour using the same factors
+ that pack_time()/unpack_time() use (i.e. 32 for month).
+ */
+ ltime->hour+= (ltime->month * 32 + ltime->day) * 24;
+ ltime->month= ltime->day= 0;
}
ltime->time_type= MYSQL_TIMESTAMP_TIME;
}
diff --git a/storage/xtradb/include/univ.i b/storage/xtradb/include/univ.i
index 93ab71bf46c..e6c4917f532 100644
--- a/storage/xtradb/include/univ.i
+++ b/storage/xtradb/include/univ.i
@@ -45,7 +45,7 @@ Created 1/20/1994 Heikki Tuuri
#define INNODB_VERSION_MAJOR 5
#define INNODB_VERSION_MINOR 6
-#define INNODB_VERSION_BUGFIX 36
+#define INNODB_VERSION_BUGFIX 38
#ifndef PERCONA_INNODB_VERSION
#define PERCONA_INNODB_VERSION 83.0