diff options
author | unknown <knielsen@knielsen-hq.org> | 2013-04-15 10:55:27 +0200 |
---|---|---|
committer | unknown <knielsen@knielsen-hq.org> | 2013-04-15 10:55:27 +0200 |
commit | 665a31af2b7d0ecd66d5e54ed0544b5db3892732 (patch) | |
tree | d19eae18ae9ffff6e7b3d30b16cf7671c511700f /sql/item_strfunc.cc | |
parent | 491047a24714be57409e42656057e56f99c65513 (diff) | |
parent | e5cbefeb899f6325fc99277c515a91f0843cdcd5 (diff) | |
download | mariadb-git-665a31af2b7d0ecd66d5e54ed0544b5db3892732.tar.gz |
MDEV-26: Global transaction ID. First alpha release.
Merge of 10.0-mdev26 feature tree into 10.0-base.
Global transaction ID is prepended to each event group in the binlog.
Slave connect can request to start from GTID position instead of specifying
file name/offset of master binlog. This facilitates easy switch to a new
master.
Slave GTID state is stored in a table mysql.rpl_slave_state, which can be
InnoDB to get crash-safe slave state.
GTID includes a replication domain ID, allowing to keep track of distinct
positions for each of multiple masters.
Diffstat (limited to 'sql/item_strfunc.cc')
-rw-r--r-- | sql/item_strfunc.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index a4ca4dbe5a0..93569082d74 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -59,6 +59,7 @@ C_MODE_START #include "../mysys/my_static.h" // For soundex_map C_MODE_END #include "sql_show.h" // append_identifier +#include <sql_repl.h> /** @todo Remove this. It is not safe to use a shared String object. @@ -2668,6 +2669,46 @@ err: } +void Item_func_binlog_gtid_pos::fix_length_and_dec() +{ + collation.set(system_charset_info); + max_length= MAX_BLOB_WIDTH; + maybe_null= 1; +} + + +String *Item_func_binlog_gtid_pos::val_str(String *str) +{ + DBUG_ASSERT(fixed == 1); +#ifndef HAVE_REPLICATION + null_value= 0; + str->copy("", 0, system_charset_info); + return str; +#else + String name_str, *name; + longlong pos; + + if (args[0]->null_value || args[1]->null_value) + goto err; + + name= args[0]->val_str(&name_str); + pos= args[1]->val_int(); + + if (pos < 0 || pos > UINT_MAX32) + goto err; + + if (gtid_state_from_binlog_pos(name->c_ptr_safe(), (uint32)pos, str)) + goto err; + null_value= 0; + return str; + +err: + null_value= 1; + return NULL; +#endif /* !HAVE_REPLICATION */ +} + + void Item_func_rpad::fix_length_and_dec() { // Handle character set for args[0] and args[2]. |