summaryrefslogtreecommitdiff
path: root/sql/item_timefunc.h
diff options
context:
space:
mode:
Diffstat (limited to 'sql/item_timefunc.h')
-rw-r--r--sql/item_timefunc.h101
1 files changed, 97 insertions, 4 deletions
diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h
index a8281124b38..4d7935b8506 100644
--- a/sql/item_timefunc.h
+++ b/sql/item_timefunc.h
@@ -1288,10 +1288,28 @@ public:
#include "vtq.h"
-class Item_func_vtq_ts :public Item_datetimefunc
+template <class Item_func_X>
+class VTQ_common : public Item_func_X
{
- vtq_field_t vtq_field;
+protected:
handlerton *hton;
+ void init_hton();
+public:
+ VTQ_common(THD *thd, Item* a) :
+ Item_func_X(thd, a),
+ hton(NULL) {}
+ VTQ_common(THD *thd, Item* a, Item* b) :
+ Item_func_X(thd, a, b),
+ hton(NULL) {}
+ VTQ_common(THD *thd, Item* a, handlerton* _hton) :
+ Item_func_X(thd, a),
+ hton(_hton) {}
+};
+
+class Item_func_vtq_ts :
+ public VTQ_common<Item_datetimefunc>
+{
+ vtq_field_t vtq_field;
public:
Item_func_vtq_ts(THD *thd, Item* a, vtq_field_t _vtq_field, handlerton *hton);
Item_func_vtq_ts(THD *thd, Item* a, vtq_field_t _vtq_field);
@@ -1299,13 +1317,88 @@ public:
{
if (vtq_field == VTQ_BEGIN_TS)
{
- return "begin_ts";
+ return "vtq_begin_ts";
}
- return "commit_ts";
+ return "vtq_commit_ts";
}
bool get_date(MYSQL_TIME *res, ulonglong fuzzy_date);
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
{ return get_item_copy<Item_func_vtq_ts>(thd, mem_root, this); }
};
+class Item_func_vtq_id :
+ public VTQ_common<Item_int_func>
+{
+ vtq_field_t vtq_field;
+ vtq_record_t cached_result;
+ 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, vtq_field_t _vtq_field, bool _backwards= false);
+ Item_func_vtq_id(THD *thd, Item* a, Item* b, vtq_field_t _vtq_field);
+
+ vtq_record_t *vtq_cached_result() { return &cached_result; }
+
+ const char *func_name() const
+ {
+ switch (vtq_field)
+ {
+ case VTQ_TRX_ID:
+ return "vtq_trx_id";
+ case VTQ_COMMIT_ID:
+ return "vtq_commit_id";
+ case VTQ_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, MEM_ROOT *mem_root)
+ { return get_item_copy<Item_func_vtq_id>(thd, mem_root, this); }
+};
+
+class Item_func_vtq_trx_sees :
+ public VTQ_common<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, MEM_ROOT *mem_root)
+ { return get_item_copy<Item_func_vtq_trx_sees>(thd, mem_root, 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_TIMEFUNC_INCLUDED */