22 #include <plugin/slave/replication_schema.h>
23 #include <drizzled/execute.h>
24 #include <drizzled/sql/result_set.h>
27 #include <boost/lexical_cast.hpp>
30 using namespace drizzled;
31 using namespace boost;
36 bool ReplicationSchema::create()
40 sql.push_back(
"COMMIT");
41 sql.push_back(
"CREATE SCHEMA IF NOT EXISTS `sys_replication` REPLICATE=FALSE");
43 if (not executeSQL(sql))
58 sql.push_back(
"COMMIT");
59 sql.push_back(
"CREATE TABLE IF NOT EXISTS `sys_replication`.`io_state` ("
60 " `master_id` BIGINT NOT NULL,"
61 " `status` VARCHAR(20) NOT NULL,"
62 " `error_msg` VARCHAR(250))"
63 " COMMENT = 'VERSION 1.1'");
65 if (not executeSQL(sql))
80 sql.push_back(
"COMMIT");
81 sql.push_back(
"CREATE TABLE IF NOT EXISTS `sys_replication`.`applier_state`"
82 " (`master_id` BIGINT NOT NULL,"
83 " `last_applied_commit_id` BIGINT NOT NULL,"
84 " `originating_server_uuid` VARCHAR(36) NOT NULL,"
85 " `originating_commit_id` BIGINT NOT NULL,"
86 " `status` VARCHAR(20) NOT NULL,"
87 " `error_msg` VARCHAR(250))"
88 " COMMENT = 'VERSION 1.2'");
90 if (not executeSQL(sql))
101 sql.push_back(
"COMMIT");
102 sql.push_back(
"CREATE TABLE IF NOT EXISTS `sys_replication`.`queue`"
103 " (`trx_id` BIGINT NOT NULL, `seg_id` INT NOT NULL,"
104 " `commit_order` BIGINT,"
105 " `originating_server_uuid` VARCHAR(36) NOT NULL,"
106 " `originating_commit_id` BIGINT NOT NULL,"
108 " `master_id` BIGINT NOT NULL,"
109 " PRIMARY KEY(`master_id`, `trx_id`, `seg_id`))"
110 " COMMENT = 'VERSION 1.2'");
111 if (not executeSQL(sql))
117 bool ReplicationSchema::createInitialIORow(uint32_t master_id)
121 sql.push_back(
"SELECT COUNT(*) FROM `sys_replication`.`io_state` WHERE `master_id` = " + boost::lexical_cast<string>(master_id));
124 Execute execute(*(_session.get()),
true);
125 execute.run(sql[0], result_set);
127 string count= result_set.getString(0);
132 sql.push_back(
"INSERT INTO `sys_replication`.`io_state` (`master_id`, `status`) VALUES ("
133 + boost::lexical_cast<string>(master_id)
135 if (not executeSQL(sql))
142 bool ReplicationSchema::createInitialApplierRow(uint32_t master_id)
146 sql.push_back(
"SELECT COUNT(*) FROM `sys_replication`.`applier_state` WHERE `master_id` = " + boost::lexical_cast<string>(master_id));
149 Execute execute(*(_session.get()),
true);
150 execute.run(sql[0], result_set);
152 string count= result_set.getString(0);
157 sql.push_back(
"INSERT INTO `sys_replication`.`applier_state`"
158 " (`master_id`, `last_applied_commit_id`,"
159 " `originating_server_uuid`, `originating_commit_id`,"
160 " `status`) VALUES ("
161 + boost::lexical_cast<string>(master_id)
163 +
"'" + _session.get()->getServerUUID() +
"'"
166 if (not executeSQL(sql))
174 bool ReplicationSchema::setInitialMaxCommitId(uint32_t master_id, uint64_t value)
178 sql.push_back(
"UPDATE `sys_replication`.`applier_state`"
179 " SET `last_applied_commit_id` = "
180 + lexical_cast<string>(value)
181 +
" WHERE `master_id` = "
182 + lexical_cast<string>(master_id));
184 return executeSQL(sql);