10
#include <drizzled/serialize/replication_event.pb.h>
13
using namespace drizzle;
15
static uint64_t query_id= 0;
16
char transaction_id[37];
19
Example script for reader a Drizzle master replication list.
22
void write_ddl(::drizzle::Event *record, const char *sql)
26
uuid_generate_time(uu);
27
uuid_unparse(uu, transaction_id);
29
record->set_type(Event::DDL);
30
record->set_autocommit(true);
31
record->set_server_id("localhost");
32
record->set_query_id(query_id++);
33
record->set_transaction_id(transaction_id);
34
record->set_schema("test");
38
void write_insert(::drizzle::Event *record, const char *trx)
42
record->set_type(Event::INSERT);
43
record->set_autocommit(true);
44
record->set_server_id("localhost");
45
record->set_query_id(query_id++);
46
record->set_transaction_id(trx);
47
record->set_schema("test");
48
record->set_table("t1");
49
record->set_sql("INSERT INTO t1 (a) VALUES (1) (2)");
52
record->add_field_names("a");
54
/* Add values (first row) */
55
value= record->add_values();
58
/* Add values (second row) */
59
value= record->add_values();
63
void write_delete(::drizzle::Event *record, const char *trx)
67
record->set_type(Event::DELETE);
68
record->set_autocommit(true);
69
record->set_server_id("localhost");
70
record->set_query_id(query_id++);
71
record->set_transaction_id(trx);
72
record->set_schema("test");
73
record->set_table("t1");
74
record->set_sql("DELETE FROM t1 WHERE a IN (1, 2)");
77
record->set_primary_key("a");
79
/* Add values for IN() */
80
value= record->add_values();
85
void write_update(::drizzle::Event *record, const char *trx)
89
record->set_type(Event::UPDATE);
90
record->set_autocommit(true);
91
record->set_server_id("localhost");
92
record->set_query_id(query_id++);
93
record->set_transaction_id(trx);
94
record->set_schema("test");
95
record->set_table("t1");
96
record->set_sql("UPDATE t1 SET a=5 WHERE a = 1 ");
97
record->set_primary_key("a");
100
record->add_field_names("a");
102
/* Add values (first row) */
103
value= record->add_values();
104
value->add_val("1"); // The first value is always the primary key comparison value
107
/* Add values (second row) */
108
value= record->add_values();
113
void write_to_disk(int file, ::drizzle::EventList *list)
119
list->SerializePartialToString(&buffer);
121
length= buffer.length();
123
cout << "Writing record of " << length << "." << endl;
125
if ((written= write(file, &length, sizeof(uint64_t))) != sizeof(uint64_t))
127
cerr << "Only wrote " << written << " out of " << length << "." << endl;
131
if ((written= write(file, buffer.c_str(), length)) != length)
133
cerr << "Only wrote " << written << " out of " << length << "." << endl;
139
int main(int argc, char* argv[])
141
GOOGLE_PROTOBUF_VERIFY_VERSION;
146
cerr << "Usage: " << argv[0] << " REPLICATION_EVENT_LOG " << endl;
150
if ((file= open(argv[1], O_APPEND|O_CREAT|O_SYNC|O_WRONLY, S_IRWXU)) == -1)
152
cerr << "Can not open file: " << argv[0] << endl;
158
/* Write first set of records */
159
write_ddl(list.add_event(), "CREATE TABLE A (a int) ENGINE=innodb");
160
write_insert(list.add_event(), transaction_id);
162
write_to_disk(file, &list);
164
/* Write Second set of records */
165
write_ddl(list.add_event(), "CREATE TABLE A (a int) ENGINE=innodb");
166
write_delete(list.add_event(), transaction_id);
167
write_update(list.add_event(), transaction_id);
169
write_to_disk(file, &list);