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