diff options
author | Aleksey Midenkov <midenok@gmail.com> | 2018-07-30 19:50:42 +0300 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2019-03-29 12:51:19 +0100 |
commit | 8df04fb894bd06706ee6292d4dd991aacfc1989a (patch) | |
tree | 2e42848d4515f9e0fec94705e4f05386d17ee8f7 | |
parent | 5c0bb0766d46840bf96555ecd5cb2ed17028c847 (diff) | |
download | mariadb-git-8df04fb894bd06706ee6292d4dd991aacfc1989a.tar.gz |
MDEV-15412 For any non-existing transaction ID, AS OF provides the current table contents without a warning
Fail with error on non-existing TRX_ID.
Closes #832
-rw-r--r-- | mysql-test/suite/versioning/r/trx_id.result | 14 | ||||
-rw-r--r-- | mysql-test/suite/versioning/t/trx_id.test | 10 | ||||
-rw-r--r-- | sql/item_vers.cc | 3 | ||||
-rw-r--r-- | sql/table.cc | 4 |
4 files changed, 16 insertions, 15 deletions
diff --git a/mysql-test/suite/versioning/r/trx_id.result b/mysql-test/suite/versioning/r/trx_id.result index 7d5e908b85a..fbcabf9673b 100644 --- a/mysql-test/suite/versioning/r/trx_id.result +++ b/mysql-test/suite/versioning/r/trx_id.result @@ -334,18 +334,16 @@ x # # HEX hybrids resolve to TRANSACTION # -SELECT * FROM t1 FOR SYSTEM_TIME AS OF (0x60); -x -1 -SELECT * FROM t2 FOR SYSTEM_TIME AS OF (0x60); +SELECT * FROM t1 FOR SYSTEM_TIME AS OF (0xFFFFFFFF); +ERROR HY000: TRX_ID 4294967295 not found in `mysql.transaction_registry` +SELECT * FROM t2 FOR SYSTEM_TIME AS OF (0xFFFFFFFF); ERROR HY000: Transaction system versioning for `t2` is not supported # # BIT literals resolve to TRANSACTION # -SELECT * FROM t1 FOR SYSTEM_TIME AS OF (b'1100000'); -x -1 -SELECT * FROM t2 FOR SYSTEM_TIME AS OF (b'1100000'); +SELECT * FROM t1 FOR SYSTEM_TIME AS OF (b'11111111111111111111111111111111'); +ERROR HY000: TRX_ID 4294967295 not found in `mysql.transaction_registry` +SELECT * FROM t2 FOR SYSTEM_TIME AS OF (b'11111111111111111111111111111111'); ERROR HY000: Transaction system versioning for `t2` is not supported DROP TABLE t1, t2; # diff --git a/mysql-test/suite/versioning/t/trx_id.test b/mysql-test/suite/versioning/t/trx_id.test index 885455a6977..b0691e4580c 100644 --- a/mysql-test/suite/versioning/t/trx_id.test +++ b/mysql-test/suite/versioning/t/trx_id.test @@ -361,18 +361,20 @@ SELECT * FROM t2 FOR SYSTEM_TIME AS OF '2038-12-30 00:00:00'; --echo # HEX hybrids resolve to TRANSACTION --echo # -SELECT * FROM t1 FOR SYSTEM_TIME AS OF (0x60); +--error ER_VERS_NO_TRX_ID +SELECT * FROM t1 FOR SYSTEM_TIME AS OF (0xFFFFFFFF); --error ER_VERS_ENGINE_UNSUPPORTED -SELECT * FROM t2 FOR SYSTEM_TIME AS OF (0x60); +SELECT * FROM t2 FOR SYSTEM_TIME AS OF (0xFFFFFFFF); --echo # --echo # BIT literals resolve to TRANSACTION --echo # -SELECT * FROM t1 FOR SYSTEM_TIME AS OF (b'1100000'); +--error ER_VERS_NO_TRX_ID +SELECT * FROM t1 FOR SYSTEM_TIME AS OF (b'11111111111111111111111111111111'); --error ER_VERS_ENGINE_UNSUPPORTED -SELECT * FROM t2 FOR SYSTEM_TIME AS OF (b'1100000'); +SELECT * FROM t2 FOR SYSTEM_TIME AS OF (b'11111111111111111111111111111111'); DROP TABLE t1, t2; diff --git a/sql/item_vers.cc b/sql/item_vers.cc index d7361f687f9..cfedc6b0f81 100644 --- a/sql/item_vers.cc +++ b/sql/item_vers.cc @@ -62,10 +62,7 @@ Item_func_trt_ts::get_date(MYSQL_TIME *res, ulonglong fuzzy_date) null_value= !trt.query(trx_id); if (null_value) - { - my_error(ER_VERS_NO_TRX_ID, MYF(0), (longlong) trx_id); return true; - } return trt[trt_field]->get_date(res, fuzzy_date); } diff --git a/sql/table.cc b/sql/table.cc index 4c61cba83cd..d99dc771ee5 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -8822,7 +8822,10 @@ bool TR_table::query(ulonglong trx_id) return false; select= make_select(table, 0, 0, conds, NULL, 0, &error); if (unlikely(error || !select)) + { + my_error(ER_OUT_OF_RESOURCES, MYF(0)); return false; + } // FIXME: (performance) force index 'transaction_id' error= init_read_record(&info, thd, table, select, NULL, 1 /* use_record_cache */, true /* print_error */, @@ -8832,6 +8835,7 @@ bool TR_table::query(ulonglong trx_id) if (select->skip_record(thd) > 0) return true; } + my_error(ER_VERS_NO_TRX_ID, MYF(0), (longlong) trx_id); return false; } |