diff options
Diffstat (limited to 'sql/item_vers.h')
-rw-r--r-- | sql/item_vers.h | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/sql/item_vers.h b/sql/item_vers.h new file mode 100644 index 00000000000..39ed4ecda1f --- /dev/null +++ b/sql/item_vers.h @@ -0,0 +1,114 @@ +#ifndef ITEM_VERS_INCLUDED +#define ITEM_VERS_INCLUDED +/* Copyright (c) 2017, MariaDB Corporation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ + + +/* System Versioning items */ + +#ifdef USE_PRAGMA_INTERFACE +#pragma interface /* gcc class implementation */ +#endif + +class Item_func_vtq_ts: public Item_datetimefunc +{ + TR_table::field_id_t vtq_field; +public: + Item_func_vtq_ts(THD *thd, Item* a, TR_table::field_id_t _vtq_field); + const char *func_name() const + { + if (vtq_field == TR_table::FLD_BEGIN_TS) + { + return "vtq_begin_ts"; + } + return "vtq_commit_ts"; + } + bool get_date(MYSQL_TIME *res, ulonglong fuzzy_date); + Item *get_copy(THD *thd) + { return get_item_copy<Item_func_vtq_ts>(thd, this); } + void fix_length_and_dec() { fix_attributes_datetime(decimals); } +}; + +class Item_func_vtq_id : public Item_longlong_func +{ + TR_table::field_id_t vtq_field; + bool backwards; + + longlong get_by_trx_id(ulonglong trx_id); + longlong get_by_commit_ts(MYSQL_TIME &commit_ts, bool backwards); + +public: + Item_func_vtq_id(THD *thd, Item* a, TR_table::field_id_t _vtq_field, bool _backwards= false); + Item_func_vtq_id(THD *thd, Item* a, Item* b, TR_table::field_id_t _vtq_field); + + const char *func_name() const + { + switch (vtq_field) + { + case TR_table::FLD_TRX_ID: + return "vtq_trx_id"; + case TR_table::FLD_COMMIT_ID: + return "vtq_commit_id"; + case TR_table::FLD_ISO_LEVEL: + return "vtq_iso_level"; + default: + DBUG_ASSERT(0); + } + return NULL; + } + + void fix_length_and_dec() + { + Item_int_func::fix_length_and_dec(); + max_length= 20; + } + + longlong val_int(); + Item *get_copy(THD *thd) + { return get_item_copy<Item_func_vtq_id>(thd, this); } +}; + +class Item_func_vtq_trx_sees : public Item_bool_func +{ +protected: + bool accept_eq; + +public: + Item_func_vtq_trx_sees(THD *thd, Item* a, Item* b); + const char *func_name() const + { + return "vtq_trx_sees"; + } + longlong val_int(); + Item *get_copy(THD *thd) + { return get_item_copy<Item_func_vtq_trx_sees>(thd, this); } +}; + +class Item_func_vtq_trx_sees_eq : + public Item_func_vtq_trx_sees +{ +public: + Item_func_vtq_trx_sees_eq(THD *thd, Item* a, Item* b) : + Item_func_vtq_trx_sees(thd, a, b) + { + accept_eq= true; + } + const char *func_name() const + { + return "vtq_trx_sees_eq"; + } +}; + +#endif /* ITEM_VERS_INCLUDED */ |