~drizzle-trunk/drizzle/development

1273.13.1 by Brian Aker
First pass through data dictionary.
1
/* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
1273.13.18 by Brian Aker
Update code, first pass through cleaner method for recursing through
4
 *  Copyright (C) 2010 Sun Microsystems
1273.13.1 by Brian Aker
First pass through data dictionary.
5
 *
6
 *  This program is free software; you can redistribute it and/or modify
7
 *  it under the terms of the GNU General Public License as published by
8
 *  the Free Software Foundation; either version 2 of the License, or
9
 *  (at your option) any later version.
10
 *
11
 *  This program is distributed in the hope that it will be useful,
12
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 *  GNU General Public License for more details.
15
 *
16
 *  You should have received a copy of the GNU General Public License
17
 *  along with this program; if not, write to the Free Software
18
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
 */
20
1273.14.5 by Monty Taylor
Merged trunk.
21
#include "config.h"
22
1273.13.55 by Brian Aker
Naming fixes.
23
#include <plugin/function_engine/function.h>
24
#include <plugin/function_engine/cursor.h>
1273.13.1 by Brian Aker
First pass through data dictionary.
25
26
#include <string>
27
28
using namespace std;
29
using namespace drizzled;
30
1415 by Brian Aker
Mass overhaul to use schema_identifier.
31
static SchemaIdentifier INFORMATION_SCHEMA_IDENTIFIER("INFORMATION_SCHEMA");
32
static SchemaIdentifier DATA_DICTIONARY_IDENTIFIER("DATA_DICTIONARY");
33
1273.13.18 by Brian Aker
Update code, first pass through cleaner method for recursing through
34
Function::Function(const std::string &name_arg) :
1273.13.1 by Brian Aker
First pass through data dictionary.
35
  drizzled::plugin::StorageEngine(name_arg,
36
                                  HTON_ALTER_NOT_SUPPORTED |
1273.19.30 by Brian Aker
Performance patch... we now only cycle through engines that actually have
37
                                  HTON_HAS_SCHEMA_DICTIONARY |
1273.13.1 by Brian Aker
First pass through data dictionary.
38
                                  HTON_SKIP_STORE_LOCK |
1273.13.32 by Brian Aker
Big ole patch. This covers moving information_schema to old_* table names
39
                                  HTON_TEMPORARY_NOT_SUPPORTED)
1273.13.1 by Brian Aker
First pass through data dictionary.
40
{
41
}
42
43
1680.6.1 by Brian Aker
Remove call for using special new for a cursor.
44
Cursor *Function::create(TableShare &table)
1273.13.1 by Brian Aker
First pass through data dictionary.
45
{
1680.6.1 by Brian Aker
Remove call for using special new for a cursor.
46
  return new FunctionCursor(*this, table);
1273.13.1 by Brian Aker
First pass through data dictionary.
47
}
48
1273.13.18 by Brian Aker
Update code, first pass through cleaner method for recursing through
49
int Function::doGetTableDefinition(Session &,
1618.1.1 by Brian Aker
Modify TableIdentifier to be const
50
                                   const TableIdentifier &identifier,
1358.1.1 by Brian Aker
Fixes regression in performance from Exists patch.
51
                                   message::Table &table_proto)
1273.13.1 by Brian Aker
First pass through data dictionary.
52
{
1669.3.3 by Brian Aker
Remove the need for tolower in retrieval of table functions.
53
  drizzled::plugin::TableFunction *function= getFunction(identifier.getPath());
1273.13.6 by Brian Aker
Updates for interface/etc.
54
1273.13.32 by Brian Aker
Big ole patch. This covers moving information_schema to old_* table names
55
  if (not function)
1273.13.6 by Brian Aker
Updates for interface/etc.
56
  {
1273.13.1 by Brian Aker
First pass through data dictionary.
57
    return ENOENT;
58
  }
59
1354.1.1 by Brian Aker
Modify ptr to reference.
60
  function->define(table_proto);
1273.13.6 by Brian Aker
Updates for interface/etc.
61
1273.13.1 by Brian Aker
First pass through data dictionary.
62
  return EEXIST;
63
}
64
65
1273.13.18 by Brian Aker
Update code, first pass through cleaner method for recursing through
66
void Function::doGetTableNames(drizzled::CachedDirectory&, 
1642 by Brian Aker
This adds const to SchemaIdentifier.
67
                               const drizzled::SchemaIdentifier &schema_identifier,
1273.13.32 by Brian Aker
Big ole patch. This covers moving information_schema to old_* table names
68
                               set<string> &set_of_names)
1273.13.1 by Brian Aker
First pass through data dictionary.
69
{
1669.3.3 by Brian Aker
Remove the need for tolower in retrieval of table functions.
70
  drizzled::plugin::TableFunction::getNames(schema_identifier.getPath(), set_of_names);
1415 by Brian Aker
Mass overhaul to use schema_identifier.
71
}
72
1643.3.3 by Brian Aker
Updated to harmonize the identifier API.
73
void Function::doGetSchemaIdentifiers(SchemaIdentifiers& schemas)
1415 by Brian Aker
Mass overhaul to use schema_identifier.
74
{
75
  schemas.push_back(INFORMATION_SCHEMA_IDENTIFIER);
76
  schemas.push_back(DATA_DICTIONARY_IDENTIFIER);
77
}
78
1642 by Brian Aker
This adds const to SchemaIdentifier.
79
bool Function::doGetSchemaDefinition(const SchemaIdentifier &schema_identifier, message::Schema &schema_message)
1415 by Brian Aker
Mass overhaul to use schema_identifier.
80
{
81
  if (schema_identifier == INFORMATION_SCHEMA_IDENTIFIER)
1273.19.23 by Brian Aker
Updated meta calls for data_dictionary
82
  {
83
    schema_message.set_name("information_schema");
84
    schema_message.set_collation("utf8_general_ci");
85
  }
1415 by Brian Aker
Mass overhaul to use schema_identifier.
86
  else if (schema_identifier == DATA_DICTIONARY_IDENTIFIER)
1273.19.23 by Brian Aker
Updated meta calls for data_dictionary
87
  {
88
    schema_message.set_name("data_dictionary");
89
    schema_message.set_collation("utf8_general_ci");
90
  }
91
  else
92
  {
93
    return false;
94
  }
95
96
  return true;
1273.19.22 by Brian Aker
Shuffled information_schema;
97
}
98
1618.1.1 by Brian Aker
Modify TableIdentifier to be const
99
bool Function::doCanCreateTable(const drizzled::TableIdentifier &table_identifier)
1320.1.8 by Brian Aker
Temporary fix for allowing engines to say "don't do this".
100
{
1618.1.1 by Brian Aker
Modify TableIdentifier to be const
101
  if (static_cast<const SchemaIdentifier&>(table_identifier) == INFORMATION_SCHEMA_IDENTIFIER)
1320.1.8 by Brian Aker
Temporary fix for allowing engines to say "don't do this".
102
  {
103
    return false;
104
  }
105
1618.1.1 by Brian Aker
Modify TableIdentifier to be const
106
  else if (static_cast<const SchemaIdentifier&>(table_identifier) == DATA_DICTIONARY_IDENTIFIER)
1320.1.8 by Brian Aker
Temporary fix for allowing engines to say "don't do this".
107
  {
108
    return false;
109
  }
110
111
  return true;
112
}
113
1618.1.1 by Brian Aker
Modify TableIdentifier to be const
114
bool Function::doDoesTableExist(Session&, const TableIdentifier &identifier)
1358.1.1 by Brian Aker
Fixes regression in performance from Exists patch.
115
{
116
  drizzled::plugin::TableFunction *function= getFunction(identifier.getPath());
117
118
  if (function)
119
    return true;
120
121
  return false;
122
}
123
1273.13.1 by Brian Aker
First pass through data dictionary.
124
1429.1.3 by Brian Aker
Merge in work for fetching a list of table identifiers.
125
void Function::doGetTableIdentifiers(drizzled::CachedDirectory&,
1642 by Brian Aker
This adds const to SchemaIdentifier.
126
                                     const drizzled::SchemaIdentifier &schema_identifier,
1429.1.3 by Brian Aker
Merge in work for fetching a list of table identifiers.
127
                                     drizzled::TableIdentifiers &set_of_identifiers)
128
{
129
  set<string> set_of_names;
130
  drizzled::plugin::TableFunction::getNames(schema_identifier.getSchemaName(), set_of_names);
131
132
  for (set<string>::iterator iter= set_of_names.begin(); iter != set_of_names.end(); iter++)
133
  {
1643.3.9 by Brian Aker
Updated to hold tables in I_S.
134
    set_of_identifiers.push_back(TableIdentifier(schema_identifier, *iter, drizzled::message::Table::FUNCTION));
1429.1.3 by Brian Aker
Merge in work for fetching a list of table identifiers.
135
  }
136
}
1273.13.32 by Brian Aker
Big ole patch. This covers moving information_schema to old_* table names
137
1530.2.6 by Monty Taylor
Moved plugin::Context to module::Context.
138
static int init(drizzled::module::Context &context)
1273.13.1 by Brian Aker
First pass through data dictionary.
139
{
1429.1.3 by Brian Aker
Merge in work for fetching a list of table identifiers.
140
  context.add(new Function("FunctionEngine"));
1273.13.36 by Brian Aker
Adding support for LOCAL_TABLE_NAMES and SCHEMA_NAMES
141
1273.13.1 by Brian Aker
First pass through data dictionary.
142
  return 0;
143
}
144
145
DRIZZLE_DECLARE_PLUGIN
146
{
147
  DRIZZLE_VERSION_ID,
1273.13.32 by Brian Aker
Big ole patch. This covers moving information_schema to old_* table names
148
  "FunctionEngine",
1273.13.1 by Brian Aker
First pass through data dictionary.
149
  "1.0",
150
  "Brian Aker",
1273.13.32 by Brian Aker
Big ole patch. This covers moving information_schema to old_* table names
151
  "Function Engine provides the infrastructure for Table Functions,etc.",
1273.13.1 by Brian Aker
First pass through data dictionary.
152
  PLUGIN_LICENSE_GPL,
153
  init,     /* Plugin Init */
154
  NULL,               /* system variables */
155
  NULL                /* config options   */
156
}
157
DRIZZLE_DECLARE_PLUGIN_END;