~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/serialize/table_writer.cc

  • Committer: Brian Aker
  • Date: 2008-08-13 23:12:06 UTC
  • Revision ID: brian@tangent.org-20080813231206-4yx6enf40usz7bhc
Updated proto file for table (not FRM work).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <iostream>
 
2
#include <fstream>
 
3
#include <string>
 
4
#include "table.pb.h"
 
5
using namespace std;
 
6
 
 
7
/* 
 
8
  Written from Google proto example
 
9
*/
 
10
 
 
11
void updateTable(drizzle::Table *table, const char *name) 
 
12
{
 
13
  int x;
 
14
 
 
15
  table->set_name(name);
 
16
  table->set_engine("Innodb");
 
17
 
 
18
  /* Write out some random varchar */
 
19
  for (x= 0; x < 3; x++)
 
20
  {
 
21
    char buffer[1024];
 
22
    drizzle::Table::Field *field = table->add_field();
 
23
 
 
24
    sprintf(buffer, "sample%u", x);
 
25
 
 
26
    field->set_name(buffer);
 
27
    field->set_type(drizzle::Table::VARCHAR);
 
28
    if (x % 2)
 
29
      field->set_is_notnull(true);
 
30
 
 
31
    field->set_length(rand() % 100);
 
32
 
 
33
    if (x % 3)
 
34
    {
 
35
      field->set_collation("utf8_swedish_ci");
 
36
      field->set_characterset("utf8");
 
37
    }
 
38
  }
 
39
 
 
40
  /* Write out an INTEGER */
 
41
  {
 
42
    drizzle::Table::Field *field = table->add_field();
 
43
    field->set_name("number");
 
44
    field->set_type(drizzle::Table::INTEGER);
 
45
  }
 
46
  /* Write out a ENUM */
 
47
  {
 
48
    drizzle::Table::Field *field = table->add_field();
 
49
    field->set_type(drizzle::Table::ENUM);
 
50
    field->set_name("colors");
 
51
    field->add_values("red");
 
52
    field->add_values("blue");
 
53
    field->add_values("green");
 
54
  }
 
55
  /* Write out a BLOB */
 
56
  {
 
57
    drizzle::Table::Field *field = table->add_field();
 
58
    field->set_name("some_btye_string");
 
59
    field->set_type(drizzle::Table::BLOB);
 
60
  }
 
61
  /* Write out a DECIMAL */
 
62
  {
 
63
    drizzle::Table::Field *field = table->add_field();
 
64
    field->set_name("important_number");
 
65
    field->set_type(drizzle::Table::DECIMAL);
 
66
    field->set_length(8);
 
67
    field->set_scale(3);
 
68
  }
 
69
  /* Write out a VARCHAR with index */
 
70
  {
 
71
    drizzle::Table::Field *field = table->add_field();
 
72
    field->set_name("important_string");
 
73
    field->set_type(drizzle::Table::VARCHAR);
 
74
    field->set_length(20);
 
75
    field->set_unique(true);
 
76
  }
 
77
 
 
78
  {
 
79
    drizzle::Table::Index *index = table->add_index();
 
80
    index->set_name("number");
 
81
    index->set_primary(true);
 
82
  }
 
83
 
 
84
  for (x= 0; x < 2; x++)
 
85
  {
 
86
    char buffer[1024];
 
87
    drizzle::Table::Index *index = table->add_index();
 
88
    drizzle::Table::KeyPart *keypart = index->add_values();
 
89
 
 
90
    sprintf(buffer, "sample%u", x);
 
91
    index->set_name(buffer);
 
92
 
 
93
    keypart->set_name(buffer);
 
94
  }
 
95
 
 
96
}
 
97
 
 
98
int main(int argc, char* argv[]) 
 
99
{
 
100
  GOOGLE_PROTOBUF_VERIFY_VERSION;
 
101
 
 
102
  if (argc != 2) {
 
103
    cerr << "Usage:  " << argv[0] << " SCHEMA" << endl;
 
104
    return -1;
 
105
  }
 
106
 
 
107
  drizzle::Table table;
 
108
 
 
109
  updateTable(&table, "example_table");
 
110
 
 
111
  fstream output(argv[1], ios::out | ios::trunc | ios::binary);
 
112
  if (!table.SerializeToOstream(&output)) 
 
113
  {
 
114
    cerr << "Failed to write schema." << endl;
 
115
    return -1;
 
116
  }
 
117
 
 
118
  return 0;
 
119
}