summaryrefslogtreecommitdiff
path: root/sql/handler.h
diff options
context:
space:
mode:
authorNikita Malyavin <nikitamalyavin@gmail.com>2019-02-22 22:17:41 +1000
committerSergei Golubchik <serg@mariadb.org>2019-03-29 12:51:19 +0100
commite6230e844c096e321294f5489d6088cfd8f0293f (patch)
treec1eb8c463db1ae4f4124c0b0427f6ef2ad6fa126 /sql/handler.h
parentf6ee132491f45dfe1856a627a686d29efbfa3034 (diff)
downloadmariadb-git-e6230e844c096e321294f5489d6088cfd8f0293f.tar.gz
MDEV-15951 system versioning by trx id doesn't work with partitioning
Fix partitioning for trx_id-versioned tables. `partition by hash`, `range` and others now work. `partition by system_time` is forbidden. Currently we cannot use row_start and row_end in `partition by`, because insertion of versioned field is done by engine's handler, as well as row_start/row_end's value set up, which is a transaction id -- so it's also forbidden. The drawback is that it's now impossible to use `partition by key()` without parameters for such tables, because it references row_start and row_end implicitly. * add handler::vers_can_native() * drop Table_scope_and_contents_source_st::vers_native() * drop partition_element::find_engine_flag as unused * forbid versioning partitioning for trx_id as not supported * adopt vers tests for trx_id partitioning * forbid any row_end referencing in `partition by` clauses,   including implicit `by key()`
Diffstat (limited to 'sql/handler.h')
-rw-r--r--sql/handler.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/sql/handler.h b/sql/handler.h
index f3401bdfc48..384166cf5c4 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -1993,7 +1993,7 @@ public:
TABLE_LIST &src_table, TABLE_LIST &table);
bool check_sys_fields(const Lex_table_name &table_name,
const Lex_table_name &db,
- Alter_info *alter_info, bool native);
+ Alter_info *alter_info);
/**
At least one field was specified 'WITH/WITHOUT SYSTEM VERSIONING'.
@@ -2077,8 +2077,6 @@ struct Table_scope_and_contents_source_pod_st // For trivial members
bool table_was_deleted;
sequence_definition *seq_create_info;
- bool vers_native(THD *thd) const;
-
void init()
{
bzero(this, sizeof(*this));
@@ -3456,6 +3454,10 @@ public:
ha_pre_index_end() :
pre_inited == RND ? ha_pre_rnd_end() : 0 );
}
+ virtual bool vers_can_native(THD *thd)
+ {
+ return ht->flags & HTON_NATIVE_SYS_VERSIONING;
+ }
/**
@brief