~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/show_schema_proto/show_schema_proto.cc

  • Committer: Stewart Smith
  • Date: 2009-12-08 04:23:00 UTC
  • mto: (1240.3.5 build)
  • mto: This revision was merged to the branch mainline in revision 1241.
  • Revision ID: stewart@flamingspork.com-20091208042300-1etig1dsnfig2qwr
small SHOW_SCHEMA_PROTO() function (like SHOW_TABLE_PROTO()) to show content of Schema proto message in db.opt to test what we're storing.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* vim: expandtab:shiftwidth=2:tabstop=2:smarttab:
 
2
   Copyright (C) 2009 Sun Microsystems
 
3
 
 
4
   This program is free software; you can redistribute it and/or modify
 
5
   it under the terms of the GNU General Public License as published by
 
6
   the Free Software Foundation; version 2 of the License.
 
7
 
 
8
   This program is distributed in the hope that it will be useful,
 
9
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
   GNU General Public License for more details.
 
12
 
 
13
   You should have received a copy of the GNU General Public License
 
14
   along with this program; if not, write to the Free Software
 
15
   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */
 
16
 
 
17
#include <drizzled/server_includes.h>
 
18
#include <drizzled/plugin/function.h>
 
19
#include <drizzled/item/func.h>
 
20
#include <drizzled/function/str/strfunc.h>
 
21
#include <drizzled/error.h>
 
22
#include <drizzled/current_session.h>
 
23
#include <drizzled/db.h>
 
24
 
 
25
#include <stdio.h>
 
26
#include <iostream>
 
27
#include <string>
 
28
#include <drizzled/message/schema.pb.h>
 
29
#include <google/protobuf/io/zero_copy_stream.h>
 
30
#include <google/protobuf/io/zero_copy_stream_impl.h>
 
31
#include <google/protobuf/text_format.h>
 
32
 
 
33
using namespace std;
 
34
using namespace drizzled;
 
35
using namespace google;
 
36
 
 
37
class ShowSchemaProtoFunction : public Item_str_func
 
38
{
 
39
public:
 
40
  ShowSchemaProtoFunction() : Item_str_func() {}
 
41
  String *val_str(String*);
 
42
 
 
43
  void fix_length_and_dec()
 
44
  {
 
45
    max_length= 16384; /* Guesswork? */
 
46
    args[0]->collation.set(
 
47
      get_charset_by_csname(args[0]->collation.collation->csname,
 
48
                            MY_CS_BINSORT), DERIVATION_COERCIBLE);
 
49
  }
 
50
 
 
51
  const char *func_name() const
 
52
  {
 
53
    return "show_schema_proto";
 
54
  }
 
55
 
 
56
  bool check_argument_count(int n)
 
57
  {
 
58
    return (n == 1);
 
59
  }
 
60
};
 
61
 
 
62
 
 
63
String *ShowSchemaProtoFunction::val_str(String *str)
 
64
{
 
65
  assert(fixed == true);
 
66
 
 
67
  String *db_sptr= args[0]->val_str(str);
 
68
 
 
69
  if (db_sptr == NULL)
 
70
  {
 
71
    null_value= true;
 
72
    return NULL;
 
73
  }
 
74
 
 
75
  null_value= false;
 
76
 
 
77
  const char* db= db_sptr->c_ptr_safe();
 
78
 
 
79
  string proto_as_text("");
 
80
  message::Schema proto;
 
81
 
 
82
  int err= get_database_metadata(db, &proto);
 
83
 
 
84
  if (err != 0)
 
85
  {
 
86
    my_error(ER_BAD_DB_ERROR, MYF(0), db);
 
87
    return NULL;
 
88
  }
 
89
 
 
90
  protobuf::TextFormat::PrintToString(proto, &proto_as_text);
 
91
 
 
92
  if (str->alloc(proto_as_text.length()))
 
93
  {
 
94
    null_value= true;
 
95
    return NULL;
 
96
  }
 
97
 
 
98
  str->length(proto_as_text.length());
 
99
 
 
100
  strncpy(str->ptr(),proto_as_text.c_str(), proto_as_text.length());
 
101
 
 
102
  return str;
 
103
}
 
104
 
 
105
plugin::Create_function<ShowSchemaProtoFunction> *show_schema_proto_func= NULL;
 
106
 
 
107
static int initialize(plugin::Registry &registry)
 
108
{
 
109
  show_schema_proto_func= new plugin::Create_function<ShowSchemaProtoFunction>("show_schema_proto");
 
110
  registry.add(show_schema_proto_func);
 
111
  return 0;
 
112
}
 
113
 
 
114
static int finalize(plugin::Registry &registry)
 
115
{
 
116
  registry.remove(show_schema_proto_func);
 
117
  delete show_schema_proto_func;
 
118
  return 0;
 
119
}
 
120
 
 
121
DRIZZLE_DECLARE_PLUGIN
 
122
{
 
123
  "show_schema_proto",
 
124
  "1.0",
 
125
  "Stewart Smith",
 
126
  "Shows text representation of schema definition proto",
 
127
  PLUGIN_LICENSE_GPL,
 
128
  initialize, /* Plugin Init */
 
129
  finalize,   /* Plugin Deinit */
 
130
  NULL,   /* status variables */
 
131
  NULL,   /* system variables */
 
132
  NULL    /* config options */
 
133
}
 
134
DRIZZLE_DECLARE_PLUGIN_END;