~ubuntu-branches/ubuntu/trusty/drizzle/trusty

« back to all changes in this revision

Viewing changes to drizzled/foreign_key.h

  • Committer: Bazaar Package Importer
  • Author(s): Monty Taylor
  • Date: 2010-03-18 12:12:31 UTC
  • Revision ID: james.westby@ubuntu.com-20100318121231-k6g1xe6cshbwa0f8
Tags: upstream-2010.03.1347
ImportĀ upstreamĀ versionĀ 2010.03.1347

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) 2008 Sun Microsystems
 
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
 
 
20
 
 
21
#ifndef DRIZZLED_FOREIGN_KEY_H
 
22
#define DRIZZLED_FOREIGN_KEY_H
 
23
 
 
24
#include "drizzled/memory/sql_alloc.h"
 
25
#include "drizzled/key.h"
 
26
#include "drizzled/key_part_spec.h"
 
27
#include "drizzled/sql_list.h"
 
28
#include "drizzled/cursor.h" /* for default_key_create_info */
 
29
 
 
30
namespace drizzled
 
31
{
 
32
 
 
33
class Item;
 
34
class Table_ident;
 
35
 
 
36
namespace memory { class Root; }
 
37
 
 
38
class Foreign_key: public Key 
 
39
{
 
40
public:
 
41
  enum fk_match_opt 
 
42
  {
 
43
    FK_MATCH_UNDEF, 
 
44
    FK_MATCH_FULL, 
 
45
    FK_MATCH_PARTIAL, 
 
46
    FK_MATCH_SIMPLE
 
47
  };
 
48
  enum fk_option 
 
49
  {
 
50
    FK_OPTION_UNDEF, 
 
51
    FK_OPTION_RESTRICT, 
 
52
    FK_OPTION_CASCADE, 
 
53
    FK_OPTION_SET_NULL, 
 
54
    FK_OPTION_NO_ACTION, 
 
55
    FK_OPTION_DEFAULT
 
56
  };
 
57
 
 
58
  Table_ident *ref_table;
 
59
  List<Key_part_spec> ref_columns;
 
60
  uint32_t delete_opt, update_opt, match_opt;
 
61
  Foreign_key(const LEX_STRING &name_arg,
 
62
              List<Key_part_spec> &cols,
 
63
              Table_ident *table,
 
64
              List<Key_part_spec> &ref_cols,
 
65
              uint32_t delete_opt_arg,
 
66
              uint32_t update_opt_arg,
 
67
              uint32_t match_opt_arg) :
 
68
    Key(FOREIGN_KEY, name_arg, &default_key_create_info, 0, cols), ref_table(table),
 
69
    ref_columns(ref_cols),
 
70
    delete_opt(delete_opt_arg),
 
71
    update_opt(update_opt_arg),
 
72
    match_opt(match_opt_arg)
 
73
  { }
 
74
 
 
75
 
 
76
  /**
 
77
   * Constructs an (almost) deep copy of this foreign key. Only those
 
78
   * elements that are known to never change are not copied.
 
79
   * If out of memory, a partial copy is returned and an error is set
 
80
   * in Session.
 
81
   */
 
82
  Foreign_key(const Foreign_key &rhs, memory::Root *mem_root);
 
83
 
 
84
 
 
85
  /**
 
86
   * Used to make a clone of this object for ALTER/CREATE TABLE
 
87
   * 
 
88
   * @see comment for Key_part_spec::clone
 
89
   */
 
90
  virtual Key *clone(memory::Root *mem_root) const
 
91
  {
 
92
    return new (mem_root) Foreign_key(*this, mem_root);
 
93
  }
 
94
 
 
95
 
 
96
  /* Used to validate foreign key options */
 
97
  bool validate(List<CreateField> &table_fields);
 
98
};
 
99
 
 
100
} /* namespace drizzled */
 
101
 
 
102
#endif /* DRIZZLED_FOREIGN_KEY_H */