summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonty <monty@mariadb.org>2023-01-11 20:15:26 +0200
committerMonty <monty@mariadb.org>2023-01-11 20:15:26 +0200
commitf3d8a546e7476ddec8386eacd5c58bf1c1519377 (patch)
tree7a316ec9dfab1edc83a193d6dda836af852d713d
parentfdcfc251271c2c0d29d77c7fe7cee356f16f2db5 (diff)
downloadmariadb-git-f3d8a546e7476ddec8386eacd5c58bf1c1519377.tar.gz
MDEV-30345 DML does not find rows it is supposed to
This only happens with 'timestamp_column IN (select ...) The reason was a missing assignment in Item_cache_timestamp::cache_value()
-rw-r--r--mysql-test/main/cache_temporal_4265.result18
-rw-r--r--mysql-test/main/cache_temporal_4265.test18
-rw-r--r--sql/item.cc4
3 files changed, 38 insertions, 2 deletions
diff --git a/mysql-test/main/cache_temporal_4265.result b/mysql-test/main/cache_temporal_4265.result
index 1cda7004a6f..5c648c8de53 100644
--- a/mysql-test/main/cache_temporal_4265.result
+++ b/mysql-test/main/cache_temporal_4265.result
@@ -20,3 +20,21 @@ select (select max(m2.ut) from t1 m2 where m1.id <> 0) from t1 m1;
2001-01-01 00:00:00.200000
2001-01-01 00:00:00.200000
drop table t1;
+#
+# MDEV-30345 DML does not find rows it is supposed to
+#
+CREATE TABLE t1 (f timestamp);
+INSERT INTO t1 VALUES ('2022-01-01 00:00:00'),('2022-12-12 12:12:12');
+CREATE TABLE t2 (f timestamp);
+INSERT INTO t2 VALUES ('2022-01-01 00:00:00'),('2022-12-12 12:12:12');
+SELECT * FROM t2 WHERE f IN ( SELECT f FROM t1 ) ;
+f
+2022-01-01 00:00:00
+2022-12-12 12:12:12
+DELETE FROM t2 WHERE f IN ( SELECT f FROM t1 ) ;
+SELECT * FROM t2 WHERE f IN ( SELECT f FROM t1 ) ;
+f
+DROP TABLE t1,t2;
+#
+# End of 10.4 tests
+#
diff --git a/mysql-test/main/cache_temporal_4265.test b/mysql-test/main/cache_temporal_4265.test
index 1af683c617b..1dfd57b0c8d 100644
--- a/mysql-test/main/cache_temporal_4265.test
+++ b/mysql-test/main/cache_temporal_4265.test
@@ -20,3 +20,21 @@ select * from t1;
select (select max(m2.ut) from t1 m2 where m1.id <> 0) from t1 m1;
drop table t1;
+--echo #
+--echo # MDEV-30345 DML does not find rows it is supposed to
+--echo #
+
+CREATE TABLE t1 (f timestamp);
+INSERT INTO t1 VALUES ('2022-01-01 00:00:00'),('2022-12-12 12:12:12');
+
+CREATE TABLE t2 (f timestamp);
+INSERT INTO t2 VALUES ('2022-01-01 00:00:00'),('2022-12-12 12:12:12');
+
+SELECT * FROM t2 WHERE f IN ( SELECT f FROM t1 ) ;
+DELETE FROM t2 WHERE f IN ( SELECT f FROM t1 ) ;
+SELECT * FROM t2 WHERE f IN ( SELECT f FROM t1 ) ;
+DROP TABLE t1,t2;
+
+--echo #
+--echo # End of 10.4 tests
+--echo #
diff --git a/sql/item.cc b/sql/item.cc
index 3c1b0977843..10ad6e31dec 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -10225,8 +10225,8 @@ bool Item_cache_timestamp::cache_value()
if (!example)
return false;
value_cached= true;
- null_value= example->val_native_with_conversion_result(current_thd, &m_native,
- type_handler());
+ null_value_inside= null_value=
+ example->val_native_with_conversion_result(current_thd, &m_native, type_handler());
return true;
}