~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/debug/module.cc

  • Committer: Monty Taylor
  • Date: 2009-05-19 21:30:11 UTC
  • mto: (1022.4.2 update-to-gcc-44)
  • mto: This revision was merged to the branch mainline in revision 1031.
  • Revision ID: mordred@inaugust.com-20090519213011-4tpejk7l2f1q7wrh
Added support for using gnutls instead of openssl for the md5 plugin. On Debian,
linking openssl against GPL software is sort of frowned on because it's one
of those murky areas. In this case, we can support gnutls by just changing a
header, so it saves us an argument with someone down the road.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 
 *
4
 
 * Copyright (C) 2010 Brian Aker
5
 
 * All rights reserved.
6
 
 *
7
 
 * Redistribution and use in source and binary forms, with or without
8
 
 * modification, are permitted provided that the following conditions are
9
 
 * met:
10
 
 *
11
 
 *     * Redistributions of source code must retain the above copyright
12
 
 * notice, this list of conditions and the following disclaimer.
13
 
 *
14
 
 *     * Redistributions in binary form must reproduce the above
15
 
 * copyright notice, this list of conditions and the following disclaimer
16
 
 * in the documentation and/or other materials provided with the
17
 
 * distribution.
18
 
 *
19
 
 *     * The names of its contributors may not be used to endorse or
20
 
 * promote products derived from this software without specific prior
21
 
 * written permission.
22
 
 *
23
 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
 
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
 
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26
 
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27
 
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28
 
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
 
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30
 
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31
 
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32
 
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
 
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
 
 *
35
 
 */
36
 
 
37
 
#include "config.h"
38
 
 
39
 
#include <signal.h>
40
 
 
41
 
#include <drizzled/util/backtrace.h>
42
 
#include <drizzled/function/func.h>
43
 
#include <drizzled/item/cmpfunc.h>
44
 
 
45
 
using namespace drizzled;
46
 
 
47
 
namespace debug {
48
 
 
49
 
class Assert :public Item_bool_func
50
 
{
51
 
public:
52
 
  Assert() :
53
 
    Item_bool_func()
54
 
  {
55
 
    unsigned_flag= true;
56
 
  }
57
 
 
58
 
  const char *func_name() const { return "assert"; }
59
 
  const char *fully_qualified_func_name() const { return "assert()"; }
60
 
 
61
 
  bool val_bool()
62
 
  {
63
 
    drizzled::String _res;
64
 
    drizzled::String *res= args[0]->val_str(&_res);
65
 
 
66
 
    null_value= false;
67
 
 
68
 
    if (not res or not res->length())
69
 
    {
70
 
      assert(0);
71
 
      return true;
72
 
    }
73
 
 
74
 
    return false;
75
 
  }
76
 
 
77
 
  int64_t val_int()
78
 
  {
79
 
    return val_bool();
80
 
  }
81
 
 
82
 
  bool check_argument_count(int n)
83
 
  {
84
 
    return (n == 1);
85
 
  }
86
 
};
87
 
 
88
 
class Backtrace :public Item_bool_func
89
 
{
90
 
public:
91
 
  Backtrace() :
92
 
    Item_bool_func()
93
 
  {
94
 
    unsigned_flag= true;
95
 
  }
96
 
 
97
 
  const char *func_name() const { return "backtrace"; }
98
 
  const char *fully_qualified_func_name() const { return "backtrace()"; }
99
 
 
100
 
  bool val_bool()
101
 
  {
102
 
    drizzled::util::custom_backtrace();
103
 
    return true;
104
 
  }
105
 
 
106
 
  int64_t val_int()
107
 
  {
108
 
    return val_bool();
109
 
  }
110
 
};
111
 
 
112
 
class Crash :public Item_bool_func
113
 
{
114
 
public:
115
 
  Crash() :
116
 
    Item_bool_func()
117
 
  { }
118
 
 
119
 
  const char *func_name() const { return "crash"; }
120
 
  const char *fully_qualified_func_name() const { return "crash()"; }
121
 
 
122
 
  bool val_bool()
123
 
  {
124
 
    raise(SIGSEGV);
125
 
 
126
 
    return true;
127
 
  }
128
 
 
129
 
  int64_t val_int()
130
 
  {
131
 
    return val_bool();
132
 
  }
133
 
};
134
 
 
135
 
} // namespace debug
136
 
 
137
 
static int initialize(drizzled::module::Context &context)
138
 
{
139
 
  context.add(new drizzled::plugin::Create_function<debug::Assert>("assert"));
140
 
  context.add(new drizzled::plugin::Create_function<debug::Backtrace>("backtrace"));
141
 
  context.add(new drizzled::plugin::Create_function<debug::Crash>("crash"));
142
 
 
143
 
  return 0;
144
 
}
145
 
 
146
 
DRIZZLE_DECLARE_PLUGIN
147
 
{
148
 
  DRIZZLE_VERSION_ID,
149
 
  "debug",
150
 
  "1.1",
151
 
  "Brian Aker",
152
 
  "Useful functions for programmers to debug the server.",
153
 
  PLUGIN_LICENSE_BSD,
154
 
  initialize, /* Plugin Init */
155
 
  NULL,   /* system variables */
156
 
  NULL    /* config options */
157
 
}
158
 
DRIZZLE_DECLARE_PLUGIN_END;