~drizzle-trunk/drizzle/development

390.1.2 by Monty Taylor
Fixed copyright headers in drizzled/
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
1999.6.1 by kalebral at gmail
update Copyright strings to a more common format to help with creating the master debian copyright file
4
 *  Copyright (C) 2008 Sun Microsystems, Inc.
390.1.2 by Monty Taylor
Fixed copyright headers in drizzled/
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; version 2 of the License.
9
 *
10
 *  This program is distributed in the hope that it will be useful,
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 *  GNU General Public License for more details.
14
 *
15
 *  You should have received a copy of the GNU General Public License
16
 *  along with this program; if not, write to the Free Software
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
 */
19
353 by Brian Aker
Moved Field iterator out to its own definition.
20
2234 by Brian Aker
Mass removal of ifdef/endif in favor of pragma once.
21
#pragma once
353 by Brian Aker
Moved Field iterator out to its own definition.
22
2173.2.1 by Monty Taylor
Fixes incorrect usage of include
23
#include <drizzled/memory/sql_alloc.h>
520.8.6 by Monty Taylor
Removed handler from common_includes.
24
#include <drizzled/sql_list.h>
584.1.15 by Monty Taylor
The mega-patch from hell. Renamed sql_class to session (since that's what it is) and removed it and field and table from common_includes.
25
#include <drizzled/natural_join_column.h>
2198.1.2 by Olaf van der Spek
Refactor includes
26
#include <drizzled/item/field.h>
520.8.6 by Monty Taylor
Removed handler from common_includes.
27
2198.1.2 by Olaf van der Spek
Refactor includes
28
namespace drizzled {
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
29
353 by Brian Aker
Moved Field iterator out to its own definition.
30
/*
31
  Iterator over the fields of a generic table reference.
32
*/
33
2385.2.4 by Olaf van der Spek
cppcheck
34
class Field_iterator : public memory::SqlAlloc
353 by Brian Aker
Moved Field iterator out to its own definition.
35
{
36
public:
37
  virtual ~Field_iterator() {}
38
  virtual void set(TableList *)= 0;
39
  virtual void next()= 0;
2385.2.4 by Olaf van der Spek
cppcheck
40
  virtual bool end_of_fields() const= 0;              /* Return true at end of list */
41
  virtual const char *name() const= 0;
520.1.21 by Brian Aker
THD -> Session rename
42
  virtual Item *create_item(Session *)= 0;
353 by Brian Aker
Moved Field iterator out to its own definition.
43
  virtual Field *field()= 0;
44
};
45
46
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
47
/*
353 by Brian Aker
Moved Field iterator out to its own definition.
48
  Iterator over the fields of a base table, view with temporary
49
  table, or subquery.
50
*/
51
2385.2.4 by Olaf van der Spek
cppcheck
52
class Field_iterator_table : public Field_iterator
353 by Brian Aker
Moved Field iterator out to its own definition.
53
{
54
  Field **ptr;
55
public:
56
  Field_iterator_table() :ptr(0) {}
57
  void set(TableList *table);
58
  void set_table(Table *table);
59
  void next() { ptr++; }
2385.2.4 by Olaf van der Spek
cppcheck
60
  bool end_of_fields() const { return *ptr == 0; }
61
  const char *name() const;
520.1.22 by Brian Aker
Second pass of thd cleanup
62
  Item *create_item(Session *session);
353 by Brian Aker
Moved Field iterator out to its own definition.
63
  Field *field() { return *ptr; }
64
};
65
66
67
/* Iterator over the fields of a merge view. */
68
69
/*
70
  Field_iterator interface to the list of materialized fields of a
71
  NATURAL/USING join.
72
*/
73
74
class Field_iterator_natural_join: public Field_iterator
75
{
2183.2.2 by Olaf van der Spek
x
76
  List<Natural_join_column>::iterator column_ref_it;
353 by Brian Aker
Moved Field iterator out to its own definition.
77
  Natural_join_column *cur_column_ref;
78
public:
2385.2.4 by Olaf van der Spek
cppcheck
79
  Field_iterator_natural_join() : cur_column_ref(NULL) {}
353 by Brian Aker
Moved Field iterator out to its own definition.
80
  void set(TableList *table);
81
  void next();
2385.2.4 by Olaf van der Spek
cppcheck
82
  bool end_of_fields() const { return not cur_column_ref; }
83
  const char *name() const { return cur_column_ref->name(); }
520.1.22 by Brian Aker
Second pass of thd cleanup
84
  Item *create_item(Session *session) { return cur_column_ref->create_item(session); }
353 by Brian Aker
Moved Field iterator out to its own definition.
85
  Field *field() { return cur_column_ref->field(); }
86
  Natural_join_column *column_ref() { return cur_column_ref; }
87
};
88
89
90
/*
91
  Generic iterator over the fields of an arbitrary table reference.
92
93
  DESCRIPTION
94
    This class unifies the various ways of iterating over the columns
95
    of a table reference depending on the type of SQL entity it
96
    represents. If such an entity represents a nested table reference,
97
    this iterator encapsulates the iteration over the columns of the
98
    members of the table reference.
99
100
  IMPLEMENTATION
101
    The implementation assumes that all underlying NATURAL/USING table
102
    references already contain their result columns and are linked into
103
    the list TableList::next_name_resolution_table.
104
*/
105
106
class Field_iterator_table_ref: public Field_iterator
107
{
108
  TableList *table_ref, *first_leaf, *last_leaf;
109
  Field_iterator_table        table_field_it;
110
  Field_iterator_natural_join natural_join_it;
111
  Field_iterator *field_it;
112
  void set_field_iterator();
113
public:
114
  Field_iterator_table_ref() :field_it(NULL) {}
115
  void set(TableList *table);
116
  void next();
2385.2.4 by Olaf van der Spek
cppcheck
117
  bool end_of_fields() const
353 by Brian Aker
Moved Field iterator out to its own definition.
118
  { return (table_ref == last_leaf && field_it->end_of_fields()); }
2385.2.4 by Olaf van der Spek
cppcheck
119
  const char *name() const { return field_it->name(); }
353 by Brian Aker
Moved Field iterator out to its own definition.
120
  const char *table_name();
121
  const char *db_name();
520.1.22 by Brian Aker
Second pass of thd cleanup
122
  Item *create_item(Session *session) { return field_it->create_item(session); }
353 by Brian Aker
Moved Field iterator out to its own definition.
123
  Field *field() { return field_it->field(); }
124
  Natural_join_column *get_or_create_column_ref(TableList *parent_table_ref);
125
  Natural_join_column *get_natural_column_ref();
126
};
127
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
128
} /* namespace drizzled */
353 by Brian Aker
Moved Field iterator out to its own definition.
129