~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/field_iterator.h

mergeĀ lp:~hingo/drizzle/drizzle-auth_ldap-fix-and-docs

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
3
 *
4
 
 *  Copyright (C) 2008 Sun Microsystems
 
4
 *  Copyright (C) 2008 Sun Microsystems, Inc.
5
5
 *
6
6
 *  This program is free software; you can redistribute it and/or modify
7
7
 *  it under the terms of the GNU General Public License as published by
18
18
 */
19
19
 
20
20
 
21
 
#ifndef DRIZZLED_FIELD_ITERATOR_H
22
 
#define DRIZZLED_FIELD_ITERATOR_H
 
21
#pragma once
23
22
 
24
 
#include "drizzled/memory/sql_alloc.h"
 
23
#include <drizzled/memory/sql_alloc.h>
25
24
#include <drizzled/sql_list.h>
26
25
#include <drizzled/natural_join_column.h>
27
 
 
28
 
namespace drizzled
29
 
{
30
 
 
31
 
class Table;
32
 
class TableList;
 
26
#include <drizzled/item/field.h>
 
27
 
 
28
namespace drizzled {
33
29
 
34
30
/*
35
31
  Iterator over the fields of a generic table reference.
36
32
*/
37
33
 
38
 
class Field_iterator: public memory::SqlAlloc
 
34
class Field_iterator : public memory::SqlAlloc
39
35
{
40
36
public:
41
 
  Field_iterator() {}                         /* Remove gcc warning */
42
37
  virtual ~Field_iterator() {}
43
38
  virtual void set(TableList *)= 0;
44
39
  virtual void next()= 0;
45
 
  virtual bool end_of_fields()= 0;              /* Return 1 at end of list */
46
 
  virtual const char *name()= 0;
 
40
  virtual bool end_of_fields() const= 0;              /* Return true at end of list */
 
41
  virtual const char *name() const= 0;
47
42
  virtual Item *create_item(Session *)= 0;
48
43
  virtual Field *field()= 0;
49
44
};
54
49
  table, or subquery.
55
50
*/
56
51
 
57
 
class Field_iterator_table: public Field_iterator
 
52
class Field_iterator_table : public Field_iterator
58
53
{
59
54
  Field **ptr;
60
55
public:
62
57
  void set(TableList *table);
63
58
  void set_table(Table *table);
64
59
  void next() { ptr++; }
65
 
  bool end_of_fields() { return *ptr == 0; }
66
 
  const char *name();
 
60
  bool end_of_fields() const { return *ptr == 0; }
 
61
  const char *name() const;
67
62
  Item *create_item(Session *session);
68
63
  Field *field() { return *ptr; }
69
64
};
78
73
 
79
74
class Field_iterator_natural_join: public Field_iterator
80
75
{
81
 
  List_iterator_fast<Natural_join_column> column_ref_it;
 
76
  List<Natural_join_column>::iterator column_ref_it;
82
77
  Natural_join_column *cur_column_ref;
83
78
public:
84
 
  Field_iterator_natural_join() :cur_column_ref(NULL) {}
85
 
  ~Field_iterator_natural_join() {}
 
79
  Field_iterator_natural_join() : cur_column_ref(NULL) {}
86
80
  void set(TableList *table);
87
81
  void next();
88
 
  bool end_of_fields() { return !cur_column_ref; }
89
 
  const char *name() { return cur_column_ref->name(); }
 
82
  bool end_of_fields() const { return not cur_column_ref; }
 
83
  const char *name() const { return cur_column_ref->name(); }
90
84
  Item *create_item(Session *session) { return cur_column_ref->create_item(session); }
91
85
  Field *field() { return cur_column_ref->field(); }
92
86
  Natural_join_column *column_ref() { return cur_column_ref; }
120
114
  Field_iterator_table_ref() :field_it(NULL) {}
121
115
  void set(TableList *table);
122
116
  void next();
123
 
  bool end_of_fields()
 
117
  bool end_of_fields() const
124
118
  { return (table_ref == last_leaf && field_it->end_of_fields()); }
125
 
  const char *name() { return field_it->name(); }
 
119
  const char *name() const { return field_it->name(); }
126
120
  const char *table_name();
127
121
  const char *db_name();
128
122
  Item *create_item(Session *session) { return field_it->create_item(session); }
133
127
 
134
128
} /* namespace drizzled */
135
129
 
136
 
#endif /* DRIZZLED_FIELD_ITERATOR_H */