110
class Key_part_spec :public Sql_alloc {
112
LEX_STRING field_name;
114
Key_part_spec(const LEX_STRING &name, uint32_t len)
115
: field_name(name), length(len)
117
Key_part_spec(const char *name, const size_t name_len, uint32_t len)
119
{ field_name.str= (char *)name; field_name.length= name_len; }
120
bool operator==(const Key_part_spec& other) const;
122
Construct a copy of this Key_part_spec. field_name is copied
123
by-pointer as it is known to never change. At the same time
124
'length' may be reset in mysql_prepare_create_table, and this
125
is why we supply it with a copy.
127
@return If out of memory, 0 is returned and an error is set in
130
Key_part_spec *clone(MEM_ROOT *mem_root) const
131
{ return new (mem_root) Key_part_spec(*this); }
135
class Alter_drop :public Sql_alloc {
137
enum drop_type {KEY, COLUMN };
140
Alter_drop(enum drop_type par_type,const char *par_name)
141
:name(par_name), type(par_type) {}
143
Used to make a clone of this object for ALTER/CREATE TABLE
144
@sa comment for Key_part_spec::clone
146
Alter_drop *clone(MEM_ROOT *mem_root) const
147
{ return new (mem_root) Alter_drop(*this); }
151
class Alter_column :public Sql_alloc {
155
Alter_column(const char *par_name,Item *literal)
156
:name(par_name), def(literal) {}
158
Used to make a clone of this object for ALTER/CREATE TABLE
159
@sa comment for Key_part_spec::clone
161
Alter_column *clone(MEM_ROOT *mem_root) const
162
{ return new (mem_root) Alter_column(*this); }
166
class Key :public Sql_alloc {
168
enum Keytype { PRIMARY, UNIQUE, MULTIPLE, FOREIGN_KEY};
170
KEY_CREATE_INFO key_create_info;
171
List<Key_part_spec> columns;
175
Key(enum Keytype type_par, const LEX_STRING &name_arg,
176
KEY_CREATE_INFO *key_info_arg,
177
bool generated_arg, List<Key_part_spec> &cols)
178
:type(type_par), key_create_info(*key_info_arg), columns(cols),
179
name(name_arg), generated(generated_arg)
181
Key(enum Keytype type_par, const char *name_arg, size_t name_len_arg,
182
KEY_CREATE_INFO *key_info_arg, bool generated_arg,
183
List<Key_part_spec> &cols)
184
:type(type_par), key_create_info(*key_info_arg), columns(cols),
185
generated(generated_arg)
187
name.str= (char *)name_arg;
188
name.length= name_len_arg;
190
Key(const Key &rhs, MEM_ROOT *mem_root);
192
/* Equality comparison of keys (ignoring name) */
193
friend bool foreign_key_prefix(Key *a, Key *b);
195
Used to make a clone of this object for ALTER/CREATE TABLE
196
@sa comment for Key_part_spec::clone
198
virtual Key *clone(MEM_ROOT *mem_root) const
199
{ return new (mem_root) Key(*this, mem_root); }
204
class Foreign_key: public Key {
206
enum fk_match_opt { FK_MATCH_UNDEF, FK_MATCH_FULL,
207
FK_MATCH_PARTIAL, FK_MATCH_SIMPLE};
208
enum fk_option { FK_OPTION_UNDEF, FK_OPTION_RESTRICT, FK_OPTION_CASCADE,
209
FK_OPTION_SET_NULL, FK_OPTION_NO_ACTION, FK_OPTION_DEFAULT};
211
Table_ident *ref_table;
212
List<Key_part_spec> ref_columns;
213
uint32_t delete_opt, update_opt, match_opt;
214
Foreign_key(const LEX_STRING &name_arg, List<Key_part_spec> &cols,
215
Table_ident *table, List<Key_part_spec> &ref_cols,
216
uint32_t delete_opt_arg, uint32_t update_opt_arg, uint32_t match_opt_arg)
217
:Key(FOREIGN_KEY, name_arg, &default_key_create_info, 0, cols),
218
ref_table(table), ref_columns(ref_cols),
219
delete_opt(delete_opt_arg), update_opt(update_opt_arg),
220
match_opt(match_opt_arg)
222
Foreign_key(const Foreign_key &rhs, MEM_ROOT *mem_root);
224
Used to make a clone of this object for ALTER/CREATE TABLE
225
@sa comment for Key_part_spec::clone
227
virtual Key *clone(MEM_ROOT *mem_root) const
228
{ return new (mem_root) Foreign_key(*this, mem_root); }
229
/* Used to validate foreign key options */
230
bool validate(List<Create_field> &table_fields);
233
105
typedef struct st_mysql_lock
2450
2322
void close_connection(Session *session, uint32_t errcode, bool lock);
2324
/* Some inline functions for more speed */
2326
inline bool add_item_to_list(Session *session, Item *item)
2328
return session->lex->current_select->add_item_to_list(session, item);
2331
inline bool add_value_to_list(Session *session, Item *value)
2333
return session->lex->value_list.push_back(value);
2336
inline bool add_order_to_list(Session *session, Item *item, bool asc)
2338
return session->lex->current_select->add_order_to_list(session, item, asc);
2341
inline bool add_group_to_list(Session *session, Item *item, bool asc)
2343
return session->lex->current_select->add_group_to_list(session, item, asc);
2452
2346
#endif /* DRIZZLE_SERVER */
2454
2348
#endif /* DRIZZLED_SQL_CLASS_H */