~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
 *
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
 */
1 by brian
clean slate
19
20
/*
21
  Because of the function new_field() all field classes that have static
22
  variables must declare the size_of() member function.
23
*/
24
520.8.2 by Monty Taylor
Moved sql_parse.h and sql_error.h out of common_includes.
25
#ifndef DRIZZLED_FIELD_H
26
#define DRIZZLED_FIELD_H
27
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
28
#include "drizzled/sql_error.h"
1410.3.1 by Djellel E. Difallah
merge my_decimal and decimal
29
#include "drizzled/decimal.h"
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
30
#include "drizzled/key_map.h"
31
#include "drizzled/sql_bitmap.h"
32
#include "drizzled/sql_list.h"
33
#include "drizzled/structs.h"
1241.9.61 by Monty Taylor
No more mystrings in drizzled/
34
#include "drizzled/charset_info.h"
1315.2.14 by Stewart Smith
move Item_result out to its own header file and out of common.h
35
#include "drizzled/item_result.h"
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
36
656.1.1 by Monty Taylor
OOOh doggie. Got rid of my_alloca.
37
#include <string>
1052.2.5 by Nathan Williams
Changed container from list to vector for CreateField::interval_list. There is never inserts into the middle of the container, only push_back. Per jaypipes suggestion.
38
#include <vector>
1 by brian
clean slate
39
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
40
namespace drizzled
41
{
42
1 by brian
clean slate
43
#define DATETIME_DEC                     6
173.1.9 by Toru Maesaka
ripped out DOUBLE and moved to field/
44
#define DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE FLOATING_POINT_BUFFER
1091 by Brian Aker
Collection of patches from new-cleanup (includes asserts for field in debug)
45
46
#ifdef DEBUG
1662.1.3 by Brian Aker
Fix for debug compile.
47
#define ASSERT_COLUMN_MARKED_FOR_READ assert(!getTable() || (getTable()->read_set == NULL || isReadSet()))
48
#define ASSERT_COLUMN_MARKED_FOR_WRITE assert(!getTable() || (getTable()->write_set == NULL || isWriteSet()))
1091 by Brian Aker
Collection of patches from new-cleanup (includes asserts for field in debug)
49
#else
50
#define ASSERT_COLUMN_MARKED_FOR_READ
51
#define ASSERT_COLUMN_MARKED_FOR_WRITE
52
#endif
173.1.9 by Toru Maesaka
ripped out DOUBLE and moved to field/
53
1241.9.51 by Monty Taylor
More mysys stuff out of headers.
54
typedef struct st_typelib TYPELIB;
55
205 by Brian Aker
uint32 -> uin32_t
56
const uint32_t max_field_size= (uint32_t) 4294967295U;
1 by brian
clean slate
57
1052.2.4 by Nathan Williams
No actual code changes. Changed Send_field to SendField to be consistent with coding standards.
58
class SendField;
1052.2.3 by Nathan Williams
No actual code changes. Changed Create_field to CreateField to be consistent with coding standards.
59
class CreateField;
1000.1.3 by Brian Aker
Renamed TABLE_SHARE to TableShare
60
class TableShare;
798.2.29 by Brian Aker
Detangle more of the session object
61
class Field;
1539.1.6 by Brian Aker
Update for Join structure changes.
62
struct CacheField;
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
63
1 by brian
clean slate
64
int field_conv(Field *to,Field *from);
65
438.1.13 by Brian Aker
uint cleanup.
66
inline uint32_t get_enum_pack_length(int elements)
1 by brian
clean slate
67
{
68
  return elements < 256 ? 1 : 2;
69
}
70
1055.2.4 by Jay Pipes
Style, indentation, and doxygen/documentation cleanup on Field class. Removal of dead methods in Field such as do_last_null_byte(), last_null_byte() and anonymous enum with LAST_NULL_BYTE_UNDEF...
71
/**
72
 * Class representing a Field in a Table
73
 *
74
 * @details
75
 *
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
76
 * The value stored in the Field object is stored in the
1055.2.4 by Jay Pipes
Style, indentation, and doxygen/documentation cleanup on Field class. Removal of dead methods in Field such as do_last_null_byte(), last_null_byte() and anonymous enum with LAST_NULL_BYTE_UNDEF...
77
 * unsigned char pointer member variable called ptr.  The
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
78
 * val_xxx() methods retrieve this raw byte value and
1055.2.4 by Jay Pipes
Style, indentation, and doxygen/documentation cleanup on Field class. Removal of dead methods in Field such as do_last_null_byte(), last_null_byte() and anonymous enum with LAST_NULL_BYTE_UNDEF...
79
 * convert the byte into the appropriate output (int, decimal, etc).
80
 *
81
 * The store_xxx() methods take various input and convert
82
 * the input into the raw bytes stored in the ptr member variable.
83
 */
1 by brian
clean slate
84
class Field
85
{
1055.2.4 by Jay Pipes
Style, indentation, and doxygen/documentation cleanup on Field class. Removal of dead methods in Field such as do_last_null_byte(), last_null_byte() and anonymous enum with LAST_NULL_BYTE_UNDEF...
86
  /* Prevent use of these */
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
87
  Field(const Field&);
1 by brian
clean slate
88
  void operator=(Field &);
89
public:
1055.2.4 by Jay Pipes
Style, indentation, and doxygen/documentation cleanup on Field class. Removal of dead methods in Field such as do_last_null_byte(), last_null_byte() and anonymous enum with LAST_NULL_BYTE_UNDEF...
90
  unsigned char *ptr; /**< Position to field in record. Stores raw field value */
91
  unsigned char *null_ptr; /**< Byte where null_bit is */
92
93
  /**
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
94
   * Pointer to the Table object containing this Field
1055.2.4 by Jay Pipes
Style, indentation, and doxygen/documentation cleanup on Field class. Removal of dead methods in Field such as do_last_null_byte(), last_null_byte() and anonymous enum with LAST_NULL_BYTE_UNDEF...
95
   *
96
   * @note You can use table->in_use as replacement for current_session member
97
   * only inside of val_*() and store() members (e.g. you can't use it in cons)
98
   */
1660.1.3 by Brian Aker
Encapsulate Table in field
99
private:
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
100
  Table *table;
1660.1.3 by Brian Aker
Encapsulate Table in field
101
public:
1643.3.10 by Brian Aker
Column support, clean up of IS/DD for NULL type.
102
  Table *getTable()
103
  {
104
    assert(table);
105
    return table;
106
  }
107
1660.1.3 by Brian Aker
Encapsulate Table in field
108
  Table *getTable() const
109
  {
110
    assert(table);
111
    return table;
112
  }
113
114
  void setTable(Table *table_arg)
115
  {
116
    table= table_arg;
117
  }
118
1055.2.4 by Jay Pipes
Style, indentation, and doxygen/documentation cleanup on Field class. Removal of dead methods in Field such as do_last_null_byte(), last_null_byte() and anonymous enum with LAST_NULL_BYTE_UNDEF...
119
  Table *orig_table; /**< Pointer to the original Table. @TODO What is "the original table"? */
120
  const char *field_name; /**< Name of the field */
121
  LEX_STRING comment; /**< A comment about the field */
122
123
  /** The field is part of the following keys */
124
  key_map	key_start;
125
  key_map part_of_key;
126
  key_map part_of_key_not_clustered;
127
  key_map part_of_sortkey;
128
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
129
  /*
1259.5.4 by Stewart Smith
better reflect reality in why we have TIMESTAMP types around.
130
    We use three additional unireg types for TIMESTAMP for hysterical
131
    raisins and limitations in the MySQL FRM file format.
132
133
    A good TODO is to clean this up as we can support just about
134
    anything in the table proto message now.
1 by brian
clean slate
135
  */
1055.2.4 by Jay Pipes
Style, indentation, and doxygen/documentation cleanup on Field class. Removal of dead methods in Field such as do_last_null_byte(), last_null_byte() and anonymous enum with LAST_NULL_BYTE_UNDEF...
136
  enum utype
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
137
  {
1055.2.4 by Jay Pipes
Style, indentation, and doxygen/documentation cleanup on Field class. Removal of dead methods in Field such as do_last_null_byte(), last_null_byte() and anonymous enum with LAST_NULL_BYTE_UNDEF...
138
    NONE,
139
    NEXT_NUMBER,
140
    TIMESTAMP_OLD_FIELD,
141
    TIMESTAMP_DN_FIELD,
142
    TIMESTAMP_UN_FIELD,
143
    TIMESTAMP_DNUN_FIELD
144
  };
1 by brian
clean slate
145
1055.2.4 by Jay Pipes
Style, indentation, and doxygen/documentation cleanup on Field class. Removal of dead methods in Field such as do_last_null_byte(), last_null_byte() and anonymous enum with LAST_NULL_BYTE_UNDEF...
146
  utype	unireg_check;
147
  uint32_t field_length; /**< Length of this field in bytes */
148
  uint32_t flags;
149
  uint16_t field_index; /**< Index of this Field in Table::fields array */
150
  unsigned char null_bit; /**< Bit used to test null bit */
1 by brian
clean slate
151
  /**
152
     If true, this field was created in create_tmp_field_from_item from a NULL
153
     value. This means that the type of the field is just a guess, and the type
154
     may be freely coerced to another type.
155
156
     @see create_tmp_field_from_item
157
     @see Item_type_holder::get_real_type
158
   */
159
  bool is_created_from_null_item;
160
1241.9.51 by Monty Taylor
More mysys stuff out of headers.
161
  static void *operator new(size_t size);
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
162
  static void *operator new(size_t size, memory::Root *mem_root);
1055.2.4 by Jay Pipes
Style, indentation, and doxygen/documentation cleanup on Field class. Removal of dead methods in Field such as do_last_null_byte(), last_null_byte() and anonymous enum with LAST_NULL_BYTE_UNDEF...
163
  static void operator delete(void *, size_t)
1241.9.51 by Monty Taylor
More mysys stuff out of headers.
164
  { }
1055.2.4 by Jay Pipes
Style, indentation, and doxygen/documentation cleanup on Field class. Removal of dead methods in Field such as do_last_null_byte(), last_null_byte() and anonymous enum with LAST_NULL_BYTE_UNDEF...
165
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
166
  Field(unsigned char *ptr_arg,
167
        uint32_t length_arg,
168
        unsigned char *null_ptr_arg,
169
        unsigned char null_bit_arg,
170
        utype unireg_check_arg,
1 by brian
clean slate
171
        const char *field_name_arg);
172
  virtual ~Field() {}
173
  /* Store functions returns 1 on overflow and -1 on fatal error */
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
174
  virtual int store(const char *to,
175
                    uint32_t length,
779.3.18 by Monty Taylor
Cleaned up warnings up through innodb.
176
                    const CHARSET_INFO * const cs)=0;
177
  virtual int store(double nr)=0;
178
  virtual int store(int64_t nr, bool unsigned_val)=0;
179
  virtual int store_decimal(const my_decimal *d)=0;
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
180
  int store(const char *to,
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
181
            uint32_t length,
779.3.18 by Monty Taylor
Cleaned up warnings up through innodb.
182
            const CHARSET_INFO * const cs,
183
            enum_check_fields check_level);
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
184
  /**
185
    This is called when storing a date in a string.
186
187
    @note
188
      Needs to be changed if/when we want to support different time formats.
189
  */
190
  virtual int store_time(DRIZZLE_TIME *ltime, enum enum_drizzle_timestamp_type t_type);
1 by brian
clean slate
191
  virtual double val_real(void)=0;
152 by Brian Aker
longlong replacement
192
  virtual int64_t val_int(void)=0;
1 by brian
clean slate
193
  virtual my_decimal *val_decimal(my_decimal *);
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
194
  inline String *val_str(String *str)
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
195
  {
196
    return val_str(str, str);
197
  }
1 by brian
clean slate
198
  /*
199
     val_str(buf1, buf2) gets two buffers and should use them as follows:
200
     if it needs a temp buffer to convert result to string - use buf1
201
       example Field_tiny::val_str()
202
     if the value exists as a string already - use buf2
241 by Brian Aker
First pass of CHAR removal.
203
       example Field_varstring::val_str() (???)
1 by brian
clean slate
204
     consequently, buf2 may be created as 'String buf;' - no memory
205
     will be allocated for it. buf1 will be allocated to hold a
206
     value if it's too small. Using allocated buffer for buf2 may result in
207
     an unnecessary free (and later, may be an alloc).
208
     This trickery is used to decrease a number of malloc calls.
209
  */
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
210
  virtual String *val_str(String*, String *)=0;
1 by brian
clean slate
211
  /*
51.1.58 by Jay Pipes
Replace/remove DBUG and standardize TRUE/FALSE. Remove ASSERT_COLUMN_XXX macros, that work will be done on another
212
   str_needs_quotes() returns true if the value returned by val_str() needs
1 by brian
clean slate
213
   to be quoted when used in constructing an SQL query.
214
  */
51.1.58 by Jay Pipes
Replace/remove DBUG and standardize TRUE/FALSE. Remove ASSERT_COLUMN_XXX macros, that work will be done on another
215
  virtual bool str_needs_quotes() { return false; }
1 by brian
clean slate
216
  virtual Item_result result_type () const=0;
217
  virtual Item_result cmp_type () const { return result_type(); }
218
  virtual Item_result cast_to_int_type () const { return result_type(); }
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
219
  /**
220
     Check whether a field type can be partially indexed by a key.
221
222
     This is a static method, rather than a virtual function, because we need
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
223
     to check the type of a non-Field in alter_table().
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
224
225
     @param type  field type
226
227
     @retval
228
       true  Type can have a prefixed key
229
     @retval
230
       false Type can not have a prefixed key
231
  */
1 by brian
clean slate
232
  static bool type_can_have_key_part(enum_field_types);
1055.2.9 by Jay Pipes
Removes dead get_blob_type_from_length() function. We only have one type of BLOB now...
233
  /**
234
    Return type of which can carry value of both given types in UNION result.
235
236
    @param a  type for merging
237
    @param b  type for merging
238
239
    @retval
240
      type of field
241
  */
1 by brian
clean slate
242
  static enum_field_types field_type_merge(enum_field_types, enum_field_types);
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
243
244
  /**
245
     Detect Item_result by given field type of UNION merge result.
246
247
     @param field_type  given field type
248
249
     @return
250
       Item_result (type of internal MySQL expression result)
251
  */
1 by brian
clean slate
252
  static Item_result result_merge_type(enum_field_types);
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
253
254
  virtual bool eq(Field *field);
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
255
  /**
1055.2.7 by Jay Pipes
More documentation cleanup for Field class
256
   * Returns true if the fields are equally defined
257
   *
258
   * @retval
259
   *  true  This Field is equally defined to supplied Field
260
   * @retval
261
   *  false This Field is NOT equally defined to supplied Field
262
   */
1 by brian
clean slate
263
  virtual bool eq_def(Field *field);
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
264
1055.2.7 by Jay Pipes
More documentation cleanup for Field class
265
  /**
266
   * Returns size (in bytes) used to store field data in memory
267
   * (i.e. it returns the maximum size of the field in a row of the table,
268
   * which is located in RAM).
269
   */
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
270
  virtual uint32_t pack_length() const;
1 by brian
clean slate
271
1055.2.7 by Jay Pipes
More documentation cleanup for Field class
272
  /**
273
   * Returns size (in bytes) used to store field data on
274
   * storage (i.e. it returns the maximal size of the field in a row of the
275
   * table, which is located on disk).
276
   */
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
277
  virtual uint32_t pack_length_in_rec() const;
1 by brian
clean slate
278
1055.2.7 by Jay Pipes
More documentation cleanup for Field class
279
  /**
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
280
   * Return the "real size" of the data in memory.
1055.2.7 by Jay Pipes
More documentation cleanup for Field class
281
   * For varstrings, this does _not_ include the length bytes.
282
   */
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
283
  virtual uint32_t data_length();
1055.2.7 by Jay Pipes
More documentation cleanup for Field class
284
  /**
285
   * Returns the number of bytes actually used to store the data
286
   * of the field. So for a varstring it includes both lenght byte(s) and
287
   * string data, and anything after data_length() bytes are unused.
288
   */
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
289
  virtual uint32_t used_length();
290
  virtual uint32_t sort_length() const;
1 by brian
clean slate
291
292
  /**
293
     Get the maximum size of the data in packed format.
294
295
     @return Maximum data length of the field when packed using the
296
     Field::pack() function.
297
   */
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
298
  virtual uint32_t max_data_length() const;
299
  virtual int reset(void);
300
  virtual void reset_fields();
301
  virtual void set_default();
302
  virtual bool binary() const;
303
  virtual bool zero_pack() const;
304
  virtual enum ha_base_keytype key_type() const;
305
  virtual uint32_t key_length() const;
1 by brian
clean slate
306
  virtual enum_field_types type() const =0;
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
307
  virtual enum_field_types real_type() const;
481 by Brian Aker
Remove all of uchar.
308
  inline  int cmp(const unsigned char *str) { return cmp(ptr,str); }
309
  virtual int cmp_max(const unsigned char *a, const unsigned char *b,
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
310
                      uint32_t max_len);
481 by Brian Aker
Remove all of uchar.
311
  virtual int cmp(const unsigned char *,const unsigned char *)=0;
312
  virtual int cmp_binary(const unsigned char *a,const unsigned char *b,
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
313
                         uint32_t max_length=UINT32_MAX);
314
  virtual int cmp_offset(uint32_t row_offset);
315
  virtual int cmp_binary_offset(uint32_t row_offset);
316
  virtual int key_cmp(const unsigned char *a,const unsigned char *b);
317
  virtual int key_cmp(const unsigned char *str, uint32_t length);
318
  virtual uint32_t decimals() const;
319
1 by brian
clean slate
320
  /*
321
    Caller beware: sql_type can change str.Ptr, so check
322
    ptr() to see if it changed if you are using your own buffer
323
    in str and restore it with set() if needed
324
  */
325
  virtual void sql_type(String &str) const =0;
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
326
327
  // For new field
328
  virtual uint32_t size_of() const =0;
329
1122.2.12 by Monty Taylor
Removed the silly my_ptrdiff_t typedef.
330
  bool is_null(ptrdiff_t row_offset= 0);
331
  bool is_real_null(ptrdiff_t row_offset= 0);
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
332
  bool is_null_in_record(const unsigned char *record);
1055.2.9 by Jay Pipes
Removes dead get_blob_type_from_length() function. We only have one type of BLOB now...
333
  bool is_null_in_record_with_offset(ptrdiff_t offset);
334
  void set_null(ptrdiff_t row_offset= 0);
335
  void set_notnull(ptrdiff_t row_offset= 0);
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
336
  bool maybe_null(void);
337
  bool real_maybe_null(void);
1 by brian
clean slate
338
1052.2.4 by Nathan Williams
No actual code changes. Changed Send_field to SendField to be consistent with coding standards.
339
  virtual void make_field(SendField *);
481 by Brian Aker
Remove all of uchar.
340
  virtual void sort_string(unsigned char *buff,uint32_t length)=0;
438.1.13 by Brian Aker
uint cleanup.
341
  virtual bool optimize_range(uint32_t idx, uint32_t part);
1055.2.9 by Jay Pipes
Removes dead get_blob_type_from_length() function. We only have one type of BLOB now...
342
  /**
343
   * Returns true for fields which, when compared with constant
344
   * items, can be casted to int64_t. In this case we will at 'fix_fields'
345
   * stage cast the constant items to int64_ts and at the execution stage
346
   * use field->val_int() for comparison.  Used to optimize clauses like
347
   * 'a_column BETWEEN date_const AND date_const'.
348
   */
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
349
  virtual bool can_be_compared_as_int64_t() const
1055.2.7 by Jay Pipes
More documentation cleanup for Field class
350
  {
351
    return false;
352
  }
1 by brian
clean slate
353
  virtual void free() {}
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
354
  virtual Field *new_field(memory::Root *root,
1055.2.8 by Jay Pipes
Breaks Create_field definition out into its own header file. More documentation and style cleanups around Create_field.
355
                           Table *new_table,
1 by brian
clean slate
356
                           bool keep_type);
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
357
  virtual Field *new_key_field(memory::Root *root, Table *new_table,
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
358
                               unsigned char *new_ptr,
1055.2.8 by Jay Pipes
Breaks Create_field definition out into its own header file. More documentation and style cleanups around Create_field.
359
                               unsigned char *new_null_ptr,
438.1.13 by Brian Aker
uint cleanup.
360
                               uint32_t new_null_bit);
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
361
  /** This is used to generate a field in Table from TableShare */
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
362
  Field *clone(memory::Root *mem_root, Table *new_table);
481 by Brian Aker
Remove all of uchar.
363
  inline void move_field(unsigned char *ptr_arg,unsigned char *null_ptr_arg,unsigned char null_bit_arg)
1 by brian
clean slate
364
  {
1055.2.8 by Jay Pipes
Breaks Create_field definition out into its own header file. More documentation and style cleanups around Create_field.
365
    ptr= ptr_arg;
366
    null_ptr= null_ptr_arg;
367
    null_bit= null_bit_arg;
1 by brian
clean slate
368
  }
481 by Brian Aker
Remove all of uchar.
369
  inline void move_field(unsigned char *ptr_arg) { ptr=ptr_arg; }
1055.2.8 by Jay Pipes
Breaks Create_field definition out into its own header file. More documentation and style cleanups around Create_field.
370
  virtual void move_field_offset(ptrdiff_t ptr_diff)
1 by brian
clean slate
371
  {
1055.2.8 by Jay Pipes
Breaks Create_field definition out into its own header file. More documentation and style cleanups around Create_field.
372
    ptr= ADD_TO_PTR(ptr,ptr_diff, unsigned char*);
1 by brian
clean slate
373
    if (null_ptr)
1055.2.8 by Jay Pipes
Breaks Create_field definition out into its own header file. More documentation and style cleanups around Create_field.
374
      null_ptr= ADD_TO_PTR(null_ptr,ptr_diff,unsigned char*);
1 by brian
clean slate
375
  }
1055.2.5 by Jay Pipes
Removal of dead Field::image_type and st_key_part::image_type member variables. Legacy from geometry MyISAM types...
376
  virtual void get_image(unsigned char *buff, uint32_t length, const CHARSET_INFO * const)
377
  {
378
    memcpy(buff,ptr,length);
379
  }
380
  virtual void get_image(std::basic_string<unsigned char> &buff, uint32_t length, const CHARSET_INFO * const)
381
  {
382
    buff.append(ptr,length);
383
  }
384
  virtual void set_image(const unsigned char *buff,uint32_t length, const CHARSET_INFO * const)
385
  {
386
    memcpy(ptr,buff,length);
387
  }
1 by brian
clean slate
388
1055.2.7 by Jay Pipes
More documentation cleanup for Field class
389
  /**
390
   * Copy a field part into an output buffer.
391
   *
392
   * @details
393
   *
394
   * This function makes a copy of field part of size equal to or
395
   * less than "length" parameter value.
396
   * For fields of string types (VARCHAR, TEXT) the rest of buffer
397
   * is padded by zero byte.
398
   *
399
   * @param output buffer
400
   * @param output buffer size
401
   *
402
   * @note
403
   *
404
   * For variable length character fields (i.e. UTF-8) the "length"
405
   * parameter means a number of output buffer bytes as if all field
406
   * characters have maximal possible size (mbmaxlen). In the other words,
407
   * "length" parameter is a number of characters multiplied by
408
   * field_charset->mbmaxlen.
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
409
   *
1055.2.7 by Jay Pipes
More documentation cleanup for Field class
410
   * @retval
411
   *   Number of copied bytes (excluding padded zero bytes -- see above).
412
   */
1055.2.5 by Jay Pipes
Removal of dead Field::image_type and st_key_part::image_type member variables. Legacy from geometry MyISAM types...
413
  virtual uint32_t get_key_image(unsigned char *buff, uint32_t length)
1 by brian
clean slate
414
  {
415
    get_image(buff, length, &my_charset_bin);
416
    return length;
417
  }
1055.2.5 by Jay Pipes
Removal of dead Field::image_type and st_key_part::image_type member variables. Legacy from geometry MyISAM types...
418
  virtual uint32_t get_key_image(std::basic_string<unsigned char> &buff, uint32_t length)
656.1.1 by Monty Taylor
OOOh doggie. Got rid of my_alloca.
419
  {
420
    get_image(buff, length, &my_charset_bin);
421
    return length;
422
  }
481 by Brian Aker
Remove all of uchar.
423
  virtual void set_key_image(const unsigned char *buff,uint32_t length)
1055.2.5 by Jay Pipes
Removal of dead Field::image_type and st_key_part::image_type member variables. Legacy from geometry MyISAM types...
424
  {
425
    set_image(buff,length, &my_charset_bin);
426
  }
438.1.13 by Brian Aker
uint cleanup.
427
  inline int64_t val_int_offset(uint32_t row_offset)
779.3.18 by Monty Taylor
Cleaned up warnings up through innodb.
428
  {
429
    ptr+=row_offset;
430
    int64_t tmp=val_int();
431
    ptr-=row_offset;
432
    return tmp;
433
  }
434
435
  inline int64_t val_int(const unsigned char *new_ptr)
436
  {
437
    unsigned char *old_ptr= ptr;
438
    int64_t return_value;
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
439
    ptr= const_cast<unsigned char*>(new_ptr);
779.3.18 by Monty Taylor
Cleaned up warnings up through innodb.
440
    return_value= val_int();
441
    ptr= old_ptr;
442
    return return_value;
443
  }
444
  inline String *val_str(String *str, const unsigned char *new_ptr)
445
  {
446
    unsigned char *old_ptr= ptr;
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
447
    ptr= const_cast<unsigned char*>(new_ptr);
779.3.18 by Monty Taylor
Cleaned up warnings up through innodb.
448
    val_str(str);
449
    ptr= old_ptr;
450
    return str;
451
  }
452
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
453
  /**
454
    Pack the field into a format suitable for storage and transfer.
455
456
    To implement packing functionality, only the virtual function
457
    should be overridden. The other functions are just convenience
458
    functions and hence should not be overridden.
459
460
    The value of <code>low_byte_first</code> is dependent on how the
461
    packed data is going to be used: for local use, e.g., temporary
462
    store on disk or in memory, use the native format since that is
463
    faster. For data that is going to be transfered to other machines
464
    (e.g., when writing data to the binary log), data should always be
465
    stored in little-endian format.
466
467
    @note The default method for packing fields just copy the raw bytes
468
    of the record into the destination, but never more than
469
    <code>max_length</code> characters.
470
471
    @param to
472
    Pointer to memory area where representation of field should be put.
473
474
    @param from
475
    Pointer to memory area where record representation of field is
476
    stored.
477
478
    @param max_length
479
    Maximum length of the field, as given in the column definition. For
480
    example, for <code>CHAR(1000)</code>, the <code>max_length</code>
481
    is 1000. This information is sometimes needed to decide how to pack
482
    the data.
483
484
    @param low_byte_first
485
    @c true if integers should be stored little-endian, @c false if
486
    native format should be used. Note that for little-endian machines,
487
    the value of this flag is a moot point since the native format is
488
    little-endian.
489
  */
779.3.16 by Monty Taylor
Some Sun warning fixes.
490
  virtual unsigned char *pack(unsigned char *to,
491
                              const unsigned char *from,
492
                              uint32_t max_length,
493
                              bool low_byte_first);
494
779.3.18 by Monty Taylor
Cleaned up warnings up through innodb.
495
  unsigned char *pack(unsigned char *to, const unsigned char *from);
1 by brian
clean slate
496
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
497
  /**
498
    Unpack a field from row data.
499
500
    This method is used to unpack a field from a master whose size of
501
    the field is less than that of the slave.
502
503
    The <code>param_data</code> parameter is a two-byte integer (stored
504
    in the least significant 16 bits of the unsigned integer) usually
505
    consisting of two parts: the real type in the most significant byte
506
    and a original pack length in the least significant byte.
507
508
    The exact layout of the <code>param_data</code> field is given by
509
    the <code>Table_map_log_event::save_field_metadata()</code>.
510
511
    This is the default method for unpacking a field. It just copies
512
    the memory block in byte order (of original pack length bytes or
513
    length of field, whichever is smaller).
514
515
    @param   to         Destination of the data
516
    @param   from       Source of the data
517
    @param   param_data Real type and original pack length of the field
518
                        data
519
520
    @param low_byte_first
521
    If this flag is @c true, all composite entities (e.g., lengths)
522
    should be unpacked in little-endian format; otherwise, the entities
523
    are unpacked in native order.
524
525
    @return  New pointer into memory based on from + length of the data
526
  */
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
527
  virtual const unsigned char *unpack(unsigned char* to,
528
                                      const unsigned char *from,
529
                                      uint32_t param_data,
530
                                      bool low_byte_first);
1 by brian
clean slate
531
  /**
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
532
     @overload Field::unpack(unsigned char*, const unsigned char*,
533
                             uint32_t, bool)
1 by brian
clean slate
534
  */
779.3.18 by Monty Taylor
Cleaned up warnings up through innodb.
535
  const unsigned char *unpack(unsigned char* to,
536
                              const unsigned char *from);
1 by brian
clean slate
537
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
538
  virtual unsigned char *pack_key(unsigned char* to,
539
                                  const unsigned char *from,
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
540
                                  uint32_t max_length,
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
541
                                  bool low_byte_first)
1 by brian
clean slate
542
  {
543
    return pack(to, from, max_length, low_byte_first);
544
  }
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
545
  virtual const unsigned char *unpack_key(unsigned char* to,
546
                                          const unsigned char *from,
547
                                          uint32_t max_length,
548
                                          bool low_byte_first)
1 by brian
clean slate
549
  {
550
    return unpack(to, from, max_length, low_byte_first);
551
  }
438.1.13 by Brian Aker
uint cleanup.
552
  virtual uint32_t max_packed_col_length(uint32_t max_length)
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
553
  {
554
    return max_length;
555
  }
1 by brian
clean slate
556
1548.2.4 by Barry.Leslie at PrimeBase
Changed the table event observers to pass the 'Table' not the TableShare' to the observers.
557
  inline uint32_t offset(const unsigned char *record)
1 by brian
clean slate
558
  {
438.1.13 by Brian Aker
uint cleanup.
559
    return (uint32_t) (ptr - record);
1 by brian
clean slate
560
  }
561
  void copy_from_tmp(int offset);
1539.1.6 by Brian Aker
Update for Join structure changes.
562
  uint32_t fill_cache_field(CacheField *copy);
438.1.13 by Brian Aker
uint cleanup.
563
  virtual bool get_date(DRIZZLE_TIME *ltime,uint32_t fuzzydate);
236.1.24 by Monty Taylor
Renamed MYSQL_TIME to DRIZZLE_TIME.
564
  virtual bool get_time(DRIZZLE_TIME *ltime);
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
565
  virtual const CHARSET_INFO *charset(void) const { return &my_charset_bin; }
566
  virtual const CHARSET_INFO *sort_charset(void) const { return charset(); }
51.1.58 by Jay Pipes
Replace/remove DBUG and standardize TRUE/FALSE. Remove ASSERT_COLUMN_XXX macros, that work will be done on another
567
  virtual bool has_charset(void) const { return false; }
644 by Brian Aker
Clean up warnings for Solaris.
568
  virtual void set_charset(const CHARSET_INFO * const)
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
569
  {}
1 by brian
clean slate
570
  virtual enum Derivation derivation(void) const
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
571
  {
572
    return DERIVATION_IMPLICIT;
573
  }
644 by Brian Aker
Clean up warnings for Solaris.
574
  virtual void set_derivation(enum Derivation)
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
575
  {}
576
  /**
577
    Produce warning or note about data saved into field.
578
579
    @param level            - level of message (Note/Warning/Error)
580
    @param code             - error code of message to be produced
581
    @param cuted_increment  - whenever we should increase cut fields count or not
582
583
    @note
584
      This function won't produce warning and increase cut fields counter
585
      if count_cuted_fields == CHECK_FIELD_IGNORE for current thread.
586
587
      if count_cuted_fields == CHECK_FIELD_IGNORE then we ignore notes.
588
      This allows us to avoid notes in optimisation, like convert_constant_item().
589
590
    @retval
591
      1 if count_cuted_fields == CHECK_FIELD_IGNORE and error level is not NOTE
592
    @retval
593
      0 otherwise
594
  */
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
595
  bool set_warning(DRIZZLE_ERROR::enum_warning_level,
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
596
                   unsigned int code,
1 by brian
clean slate
597
                   int cuted_increment);
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
598
  /**
599
    Produce warning or note about datetime string data saved into field.
600
601
    @param level            level of message (Note/Warning/Error)
602
    @param code             error code of message to be produced
603
    @param str              string value which we tried to save
604
    @param str_length       length of string which we tried to save
605
    @param ts_type          type of datetime value (datetime/date/time)
606
    @param cuted_increment  whenever we should increase cut fields count or not
607
608
    @note
609
      This function will always produce some warning but won't increase cut
610
      fields counter if count_cuted_fields ==FIELD_CHECK_IGNORE for current
611
      thread.
612
  */
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
613
  void set_datetime_warning(DRIZZLE_ERROR::enum_warning_level,
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
614
                            uint32_t code,
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
615
                            const char *str,
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
616
                            uint32_t str_len,
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
617
                            enum enum_drizzle_timestamp_type ts_type,
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
618
                            int cuted_increment);
619
  /**
620
    Produce warning or note about integer datetime value saved into field.
621
622
    @param level            level of message (Note/Warning/Error)
623
    @param code             error code of message to be produced
624
    @param nr               numeric value which we tried to save
625
    @param ts_type          type of datetime value (datetime/date/time)
626
    @param cuted_increment  whenever we should increase cut fields count or not
627
628
    @note
629
      This function will always produce some warning but won't increase cut
630
      fields counter if count_cuted_fields == FIELD_CHECK_IGNORE for current
631
      thread.
632
  */
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
633
  void set_datetime_warning(DRIZZLE_ERROR::enum_warning_level,
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
634
                            uint32_t code,
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
635
                            int64_t nr,
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
636
                            enum enum_drizzle_timestamp_type ts_type,
637
                            int cuted_increment);
638
  /**
639
    Produce warning or note about double datetime data saved into field.
640
641
    @param level            level of message (Note/Warning/Error)
642
    @param code             error code of message to be produced
643
    @param nr               double value which we tried to save
644
    @param ts_type          type of datetime value (datetime/date/time)
645
646
    @note
647
      This function will always produce some warning but won't increase cut
648
      fields counter if count_cuted_fields == FIELD_CHECK_IGNORE for current
649
      thread.
650
  */
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
651
  void set_datetime_warning(DRIZZLE_ERROR::enum_warning_level,
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
652
                            const uint32_t code,
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
653
                            double nr,
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
654
                            enum enum_drizzle_timestamp_type ts_type);
1 by brian
clean slate
655
  inline bool check_overflow(int op_result)
656
  {
657
    return (op_result == E_DEC_OVERFLOW);
658
  }
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
659
  /**
660
    Process decimal library return codes and issue warnings for overflow and
661
    truncation.
662
663
    @param op_result  decimal library return code (E_DEC_* see include/decimal.h)
664
665
    @retval
666
      E_DEC_OVERFLOW   there was overflow
667
      E_DEC_TRUNCATED  there was truncation
668
    @retval
669
      0  no error or there was some other error except overflow or truncation
670
  */
1 by brian
clean slate
671
  int warn_if_overflow(int op_result);
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
672
  void init(Table *table_arg);
1 by brian
clean slate
673
674
  /* maximum possible display length */
205 by Brian Aker
uint32 -> uin32_t
675
  virtual uint32_t max_display_length()= 0;
1 by brian
clean slate
676
1052.2.3 by Nathan Williams
No actual code changes. Changed Create_field to CreateField to be consistent with coding standards.
677
  virtual uint32_t is_equal(CreateField *new_field);
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
678
  /**
679
    Conversion from decimal to int64_t with checking overflow and
680
    setting correct value (min/max) in case of overflow.
681
682
    @param val             value which have to be converted
683
    @param unsigned_flag   type of integer in which we convert val
684
    @param err             variable to pass error code
685
686
    @return
687
      value converted from val
688
  */
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
689
  int64_t convert_decimal2int64_t(const my_decimal *val,
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
690
                                  bool unsigned_flag,
691
                                  int *err);
1 by brian
clean slate
692
  /* The max. number of characters */
205 by Brian Aker
uint32 -> uin32_t
693
  inline uint32_t char_length() const
1 by brian
clean slate
694
  {
695
    return field_length / charset()->mbmaxlen;
696
  }
697
698
  inline enum column_format_type column_format() const
699
  {
700
    return (enum column_format_type)
701
      ((flags >> COLUMN_FORMAT_FLAGS) & COLUMN_FORMAT_MASK);
702
  }
703
704
  /* Hash value */
290 by Brian Aker
Update for ulong change over.
705
  virtual void hash(uint32_t *nr, uint32_t *nr2);
520.1.21 by Brian Aker
THD -> Session rename
706
  friend bool reopen_table(Session *,Table *,bool);
1052.2.7 by Nathan Williams
Merged trunk and resolved conflicts.
707
1052.2.2 by Nathan Williams
No actual code changes. Changed Copy_field to CopyField, to reflect the coding standards.
708
  friend class CopyField;
1 by brian
clean slate
709
  friend class Item_avg_field;
710
  friend class Item_std_field;
711
  friend class Item_sum_num;
712
  friend class Item_sum_sum;
713
  friend class Item_sum_str;
714
  friend class Item_sum_count;
715
  friend class Item_sum_avg;
716
  friend class Item_sum_std;
717
  friend class Item_sum_min;
718
  friend class Item_sum_max;
719
  friend class Item_func_group_concat;
720
1003.1.9 by Brian Aker
Patches for Jay (aka name changes)
721
  bool isReadSet();
722
  bool isWriteSet();
1089.1.3 by Brian Aker
Fix protobuf to release memory. Add in assert() for wrong column usage. Fix
723
  void setReadSet(bool arg= true);
724
  void setWriteSet(bool arg= true);
1 by brian
clean slate
725
};
726
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
727
} /* namespace drizzled */
728
729
/** @TODO Why is this in the middle of the file???*/
1055.2.8 by Jay Pipes
Breaks Create_field definition out into its own header file. More documentation and style cleanups around Create_field.
730
#include "drizzled/create_field.h"
731
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
732
namespace drizzled
733
{
734
1055.2.8 by Jay Pipes
Breaks Create_field definition out into its own header file. More documentation and style cleanups around Create_field.
735
/**
736
 * A class for sending field information to a client.
737
 *
738
 * @details
739
 *
740
 * Send_field is basically a stripped-down POD class for
741
 * representing basic information about a field...
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
742
 */
1241.3.2 by Trond Norbye
Cleanup: use c++ style casting
743
class SendField
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
744
{
745
public:
1 by brian
clean slate
746
  const char *db_name;
1055.2.8 by Jay Pipes
Breaks Create_field definition out into its own header file. More documentation and style cleanups around Create_field.
747
  const char *table_name;
748
  const char *org_table_name;
749
  const char *col_name;
750
  const char *org_col_name;
290 by Brian Aker
Update for ulong change over.
751
  uint32_t length;
1055.2.8 by Jay Pipes
Breaks Create_field definition out into its own header file. More documentation and style cleanups around Create_field.
752
  uint32_t charsetnr;
753
  uint32_t flags;
754
  uint32_t decimals;
1 by brian
clean slate
755
  enum_field_types type;
1052.2.4 by Nathan Williams
No actual code changes. Changed Send_field to SendField to be consistent with coding standards.
756
  SendField() {}
1 by brian
clean slate
757
};
758
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
759
/**
760
 * A class for quick copying data to fields
761
 */
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
762
class CopyField :public memory::SqlAlloc
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
763
{
1 by brian
clean slate
764
  /**
765
    Convenience definition of a copy function returned by
766
    get_copy_func.
767
  */
1052.2.2 by Nathan Williams
No actual code changes. Changed Copy_field to CopyField, to reflect the coding standards.
768
  typedef void Copy_func(CopyField*);
1 by brian
clean slate
769
  Copy_func *get_copy_func(Field *to, Field *from);
770
public:
1055.2.8 by Jay Pipes
Breaks Create_field definition out into its own header file. More documentation and style cleanups around Create_field.
771
  unsigned char *from_ptr;
772
  unsigned char *to_ptr;
773
  unsigned char *from_null_ptr;
774
  unsigned char *to_null_ptr;
274 by Brian Aker
my_bool conversion in Table
775
  bool *null_row;
1055.2.8 by Jay Pipes
Breaks Create_field definition out into its own header file. More documentation and style cleanups around Create_field.
776
  uint32_t from_bit;
777
  uint32_t to_bit;
778
  uint32_t from_length;
779
  uint32_t to_length;
780
  Field *from_field;
781
  Field *to_field;
1 by brian
clean slate
782
  String tmp;					// For items
783
1052.2.2 by Nathan Williams
No actual code changes. Changed Copy_field to CopyField, to reflect the coding standards.
784
  CopyField() {}
785
  ~CopyField() {}
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
786
  void set(Field *to,Field *from,bool save);	// Field to field
481 by Brian Aker
Remove all of uchar.
787
  void set(unsigned char *to,Field *from);		// Field to string
1052.2.2 by Nathan Williams
No actual code changes. Changed Copy_field to CopyField, to reflect the coding standards.
788
  void (*do_copy)(CopyField *);
789
  void (*do_copy2)(CopyField *);		// Used to handle null values
1 by brian
clean slate
790
};
791
438.1.13 by Brian Aker
uint cleanup.
792
uint32_t pack_length_to_packflag(uint32_t type);
205 by Brian Aker
uint32 -> uin32_t
793
uint32_t calc_pack_length(enum_field_types type,uint32_t length);
1 by brian
clean slate
794
int set_field_to_null(Field *field);
795
int set_field_to_null_with_conversions(Field *field, bool no_conversions);
796
1055.2.7 by Jay Pipes
More documentation cleanup for Field class
797
/**
798
 * Tests if the given string contains important data:
799
 * not spaces for character string, or any data for binary string.
800
 *
801
 * @param pointer to the character set to use
802
 * @param String to test
803
 * @param String end
804
 *
805
 * @retval
806
 *  false - If string does not have important data
807
 * @retval
808
 *  true  - If string has some important data
809
 */
1055.2.6 by Jay Pipes
Style cleanup in field.cc and move documentation into Field class in header file.
810
bool test_if_important_data(const CHARSET_INFO * const cs,
811
                            const char *str,
812
                            const char *strend);
520.8.2 by Monty Taylor
Moved sql_parse.h and sql_error.h out of common_includes.
813
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
814
} /* namespace drizzled */
815
520.8.2 by Monty Taylor
Moved sql_parse.h and sql_error.h out of common_includes.
816
#endif /* DRIZZLED_FIELD_H */