~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/schema_dictionary/show_tables.cc

  • Committer: Eric Day
  • Date: 2010-03-25 19:28:37 UTC
  • mfrom: (1405 staging)
  • mto: This revision was merged to the branch mainline in revision 1409.
  • Revision ID: eday@oddments.org-20100325192837-4exmacbrywjovsqp
Merged trunk, rsolved conflicts.

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
 *
 
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
 
 
21
 
 
22
#include "config.h"
 
23
#include "plugin/schema_dictionary/dictionary.h"
 
24
#include "drizzled/table_identifier.h"
 
25
 
 
26
using namespace std;
 
27
using namespace drizzled;
 
28
 
 
29
ShowTables::ShowTables() :
 
30
  plugin::TableFunction("DATA_DICTIONARY", "SHOW_TABLES")
 
31
{
 
32
  add_field("TABLE_NAME");
 
33
}
 
34
 
 
35
ShowTables::Generator::Generator(drizzled::Field **arg) :
 
36
  drizzled::plugin::TableFunction::Generator(arg),
 
37
  is_primed(false)
 
38
{
 
39
  Session *session= current_session;
 
40
  statement::Select *select= static_cast<statement::Select *>(session->lex->statement);
 
41
 
 
42
  schema_name.append(select->getShowSchema());
 
43
  assert(not schema_name.empty());
 
44
}
 
45
 
 
46
bool ShowTables::Generator::nextCore()
 
47
{
 
48
  if (is_primed)
 
49
  {
 
50
    table_iterator++;
 
51
  }
 
52
  else
 
53
  {
 
54
    plugin::StorageEngine::getTableNames(schema_name, table_names);
 
55
    table_iterator= table_names.begin();
 
56
    is_primed= true;
 
57
  }
 
58
 
 
59
  if (table_iterator == table_names.end())
 
60
    return false;
 
61
 
 
62
  table_message.Clear();
 
63
  {
 
64
    Session *session= current_session;
 
65
    TableIdentifier identifier(schema_name, *table_iterator);
 
66
 
 
67
    if (not plugin::StorageEngine::getTableDefinition(*session,
 
68
                                                      identifier,
 
69
                                                      table_message))
 
70
    {
 
71
      return false;
 
72
    }
 
73
  }
 
74
 
 
75
  if (isWild(*table_iterator))
 
76
    return false;
 
77
 
 
78
  return true;
 
79
}
 
80
 
 
81
bool ShowTables::Generator::next()
 
82
{
 
83
  while (not nextCore())
 
84
  {
 
85
    if (table_iterator != table_names.end())
 
86
      continue;
 
87
 
 
88
    return false;
 
89
  }
 
90
 
 
91
  return true;
 
92
}
 
93
 
 
94
bool ShowTables::Generator::populate()
 
95
{
 
96
  if (not next())
 
97
    return false;
 
98
  
 
99
  fill();
 
100
 
 
101
  return true;
 
102
}
 
103
 
 
104
void ShowTables::Generator::fill()
 
105
{
 
106
  /* TABLE_NAME */
 
107
  push(*table_iterator);
 
108
}