~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/serialize/binlog_writer.cc

  • Committer: Brian Aker
  • Date: 2008-11-03 21:00:47 UTC
  • mfrom: (520.9.5 devel)
  • Revision ID: brian@tangent.org-20081103210047-wfkeyyefrfl2vh4l
Merge from Monty

Show diffs side-by-side

added added

removed removed

Lines of Context:
9
9
#include <google/protobuf/io/coded_stream.h>
10
10
 
11
11
#include <iostream>
 
12
#include <fstream>
12
13
#include <sstream>
13
14
#include <string>
14
15
#include <map>
17
18
#include <sys/stat.h>
18
19
#include <fcntl.h>
19
20
 
 
21
using namespace std;
20
22
using namespace google::protobuf::io;
21
23
 
22
24
typedef std::map<std::string,std::string> Assign;
33
35
       << "    --output name    Append query to file <name> (default: 'log.bin')\n"
34
36
       << "    --set var=val    Set value of user variable for query\n"
35
37
       << "    --trans-id <id>  Set transaction id to <id>\n"
36
 
       << std::flush;
 
38
       << flush;
37
39
  exit(1);
38
40
}
39
41
 
41
43
void
42
44
write_query(CodedOutputStream* out,
43
45
            unsigned long trans_id,
44
 
            const std::string& query,
 
46
            const string& query,
45
47
            const Assign& assign)
46
48
{
47
49
  BinaryLog::Query *message = new BinaryLog::Query;
70
72
 
71
73
int main(int argc, char *argv[])
72
74
{
73
 
  using std::ios;
74
75
  GOOGLE_PROTOBUF_VERIFY_VERSION;
75
76
 
76
77
  static struct option options[] = {
97
98
      char *pos= strchr(optarg, '=');
98
99
      if (!pos)
99
100
        pos= end;
100
 
      const std::string key(optarg, pos);
101
 
      const std::string value(pos == end ? end : pos+1, end);
 
101
      const string key(optarg, pos);
 
102
      const string value(pos == end ? end : pos+1, end);
102
103
      assign[key]= value;
103
104
    }
104
105
 
115
116
  if (optind >= argc)
116
117
    print_usage_and_exit(argv[0]);
117
118
 
118
 
  int outfd= open(file_name, O_WRONLY | O_CREAT | O_APPEND, 0644);
119
 
  if (outfd < 0)
120
 
  {
121
 
    perror("open");
122
 
    exit(1);
123
 
  }
124
 
 
125
 
  ZeroCopyOutputStream* raw_output = new FileOutputStream(outfd);
 
119
  filebuf fb;
 
120
 
 
121
  fb.open(file_name, ios::app | ios::out);
 
122
 
 
123
  ostream os(&fb);
 
124
 
 
125
  ZeroCopyOutputStream* raw_output = new OstreamOutputStream(&os);
126
126
  CodedOutputStream* coded_output = new CodedOutputStream(raw_output);
127
127
 
128
 
  std::stringstream sout;
 
128
  stringstream sout;
129
129
  sout << ioutil::join(" ", &argv[optind], &argv[argc]);
130
130
 
131
131
  write_query(coded_output, trans_id, sout.str(), assign);
132
132
 
133
133
  delete coded_output;
134
134
  delete raw_output;
135
 
  close(outfd);
 
135
  fb.close();
136
136
  exit(0);
137
137
}