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