46
46
and index of field in thia array.
48
48
#define FIELDTYPE_TEAR_FROM (DRIZZLE_TYPE_VARCHAR + 1)
49
#define FIELDTYPE_TEAR_TO (DRIZZLE_TYPE_NEWDECIMAL - 1)
49
#define FIELDTYPE_TEAR_TO (DRIZZLE_TYPE_VIRTUAL - 1)
50
50
#define FIELDTYPE_NUM (FIELDTYPE_TEAR_FROM + (255 - FIELDTYPE_TEAR_TO))
51
51
inline int field_type2index (enum_field_types field_type)
76
76
DRIZZLE_TYPE_VARCHAR,
77
77
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
78
78
DRIZZLE_TYPE_VARCHAR, DRIZZLE_TYPE_VARCHAR,
79
// DRIZZLE_TYPE_VIRTUAL
79
81
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
80
82
DRIZZLE_TYPE_NEWDECIMAL, DRIZZLE_TYPE_VARCHAR,
81
83
//DRIZZLE_TYPE_BLOB
99
101
DRIZZLE_TYPE_VARCHAR,
100
102
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
101
103
DRIZZLE_TYPE_VARCHAR, DRIZZLE_TYPE_VARCHAR,
104
// DRIZZLE_TYPE_VIRTUAL
105
DRIZZLE_TYPE_VIRTUAL,
102
106
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
103
107
DRIZZLE_TYPE_NEWDECIMAL, DRIZZLE_TYPE_VARCHAR,
104
108
//DRIZZLE_TYPE_BLOB
122
126
DRIZZLE_TYPE_VARCHAR,
123
127
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
124
128
DRIZZLE_TYPE_VARCHAR, DRIZZLE_TYPE_VARCHAR,
129
// DRIZZLE_TYPE_VIRTUAL
130
DRIZZLE_TYPE_VIRTUAL,
125
131
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
126
132
DRIZZLE_TYPE_NEWDECIMAL, DRIZZLE_TYPE_VARCHAR,
127
133
//DRIZZLE_TYPE_BLOB
145
151
DRIZZLE_TYPE_VARCHAR,
146
152
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
147
153
DRIZZLE_TYPE_VARCHAR, DRIZZLE_TYPE_VARCHAR,
154
// DRIZZLE_TYPE_VIRTUAL
155
DRIZZLE_TYPE_VIRTUAL,
148
156
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
149
157
DRIZZLE_TYPE_DOUBLE, DRIZZLE_TYPE_VARCHAR,
150
158
//DRIZZLE_TYPE_BLOB
168
176
DRIZZLE_TYPE_DATETIME,
169
177
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
170
178
DRIZZLE_TYPE_NEWDATE, DRIZZLE_TYPE_VARCHAR,
179
// DRIZZLE_TYPE_VIRTUAL
180
DRIZZLE_TYPE_VIRTUAL,
171
181
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
172
182
DRIZZLE_TYPE_NEWDECIMAL, DRIZZLE_TYPE_ENUM,
173
183
//DRIZZLE_TYPE_BLOB
191
201
DRIZZLE_TYPE_DATETIME,
192
202
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
193
203
DRIZZLE_TYPE_NEWDATE, DRIZZLE_TYPE_VARCHAR,
204
// DRIZZLE_TYPE_VIRTUAL
205
DRIZZLE_TYPE_VIRTUAL,
194
206
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
195
207
DRIZZLE_TYPE_VARCHAR, DRIZZLE_TYPE_VARCHAR,
196
208
//DRIZZLE_TYPE_BLOB
214
226
DRIZZLE_TYPE_VARCHAR,
215
227
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
216
228
DRIZZLE_TYPE_NEWDATE, DRIZZLE_TYPE_VARCHAR,
229
// DRIZZLE_TYPE_VIRTUAL
230
DRIZZLE_TYPE_VIRTUAL,
217
231
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
218
232
DRIZZLE_TYPE_NEWDECIMAL, DRIZZLE_TYPE_VARCHAR,
219
233
//DRIZZLE_TYPE_BLOB
237
251
DRIZZLE_TYPE_DATETIME,
238
252
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
239
253
DRIZZLE_TYPE_NEWDATE, DRIZZLE_TYPE_VARCHAR,
254
// DRIZZLE_TYPE_VIRTUAL
255
DRIZZLE_TYPE_VIRTUAL,
240
256
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
241
257
DRIZZLE_TYPE_VARCHAR, DRIZZLE_TYPE_VARCHAR,
242
258
//DRIZZLE_TYPE_BLOB
260
276
DRIZZLE_TYPE_DATETIME,
261
277
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
262
278
DRIZZLE_TYPE_NEWDATE, DRIZZLE_TYPE_VARCHAR,
279
// DRIZZLE_TYPE_VIRTUAL
280
DRIZZLE_TYPE_VIRTUAL,
263
281
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
264
282
DRIZZLE_TYPE_VARCHAR, DRIZZLE_TYPE_VARCHAR,
265
283
//DRIZZLE_TYPE_BLOB
283
301
DRIZZLE_TYPE_DATETIME,
284
302
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
285
303
DRIZZLE_TYPE_NEWDATE, DRIZZLE_TYPE_VARCHAR,
304
// DRIZZLE_TYPE_VIRTUAL
305
DRIZZLE_TYPE_VIRTUAL,
286
306
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
287
307
DRIZZLE_TYPE_VARCHAR, DRIZZLE_TYPE_VARCHAR,
288
308
//DRIZZLE_TYPE_BLOB
306
326
DRIZZLE_TYPE_VARCHAR,
307
327
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
308
328
DRIZZLE_TYPE_VARCHAR, DRIZZLE_TYPE_VARCHAR,
329
// DRIZZLE_TYPE_VIRTUAL
330
DRIZZLE_TYPE_VIRTUAL,
309
331
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
310
332
DRIZZLE_TYPE_VARCHAR, DRIZZLE_TYPE_VARCHAR,
311
333
//DRIZZLE_TYPE_BLOB
312
334
DRIZZLE_TYPE_BLOB,
336
/* DRIZZLE_TYPE_VIRTUAL -> */
338
//DRIZZLE_TYPE_DECIMAL DRIZZLE_TYPE_TINY
339
DRIZZLE_TYPE_VIRTUAL, DRIZZLE_TYPE_VIRTUAL,
341
DRIZZLE_TYPE_VIRTUAL,
342
//DRIZZLE_TYPE_DOUBLE
343
DRIZZLE_TYPE_VIRTUAL,
344
//DRIZZLE_TYPE_NULL DRIZZLE_TYPE_TIMESTAMP
345
DRIZZLE_TYPE_VIRTUAL, DRIZZLE_TYPE_VIRTUAL,
346
//DRIZZLE_TYPE_LONGLONG
347
DRIZZLE_TYPE_VIRTUAL,
349
DRIZZLE_TYPE_VIRTUAL,
350
//DRIZZLE_TYPE_DATETIME
351
DRIZZLE_TYPE_VIRTUAL,
352
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
353
DRIZZLE_TYPE_VIRTUAL, DRIZZLE_TYPE_VIRTUAL,
354
// DRIZZLE_TYPE_VIRTUAL
355
DRIZZLE_TYPE_VIRTUAL,
356
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
357
DRIZZLE_TYPE_VIRTUAL, DRIZZLE_TYPE_VIRTUAL,
359
DRIZZLE_TYPE_VIRTUAL,
314
361
/* DRIZZLE_TYPE_NEWDECIMAL -> */
316
363
//DRIZZLE_TYPE_DECIMAL DRIZZLE_TYPE_TINY
329
376
DRIZZLE_TYPE_VARCHAR,
330
377
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
331
378
DRIZZLE_TYPE_VARCHAR, DRIZZLE_TYPE_VARCHAR,
379
// DRIZZLE_TYPE_VIRTUAL
380
DRIZZLE_TYPE_VIRTUAL,
332
381
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
333
382
DRIZZLE_TYPE_NEWDECIMAL, DRIZZLE_TYPE_VARCHAR,
334
383
//DRIZZLE_TYPE_BLOB
352
401
DRIZZLE_TYPE_VARCHAR,
353
402
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
354
403
DRIZZLE_TYPE_VARCHAR, DRIZZLE_TYPE_VARCHAR,
404
// DRIZZLE_TYPE_VIRTUAL
405
DRIZZLE_TYPE_VIRTUAL,
355
406
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
356
407
DRIZZLE_TYPE_VARCHAR, DRIZZLE_TYPE_VARCHAR,
357
408
//DRIZZLE_TYPE_BLOB
375
426
DRIZZLE_TYPE_BLOB,
376
427
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
377
428
DRIZZLE_TYPE_BLOB, DRIZZLE_TYPE_BLOB,
429
// DRIZZLE_TYPE_VIRTUAL
430
DRIZZLE_TYPE_VIRTUAL,
378
431
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
379
432
DRIZZLE_TYPE_BLOB, DRIZZLE_TYPE_BLOB,
380
433
//DRIZZLE_TYPE_BLOB
421
474
//DRIZZLE_TYPE_NEWDATE DRIZZLE_TYPE_VARCHAR
422
475
STRING_RESULT, STRING_RESULT,
476
//DRIZZLE_TYPE_VIRTUAL
423
478
//DRIZZLE_TYPE_NEWDECIMAL DRIZZLE_TYPE_ENUM
424
479
DECIMAL_RESULT, STRING_RESULT,
425
480
//DRIZZLE_TYPE_BLOB
616
671
key_start(0), part_of_key(0), part_of_key_not_clustered(0),
617
672
part_of_sortkey(0), unireg_check(unireg_check_arg),
618
673
field_length(length_arg), null_bit(null_bit_arg),
619
is_created_from_null_item(false)
674
is_created_from_null_item(false),
675
vcol_info(NULL), is_stored(true)
621
677
flags=null_ptr ? 0: NOT_NULL_FLAG;
622
678
comment.str= (char*) "";
1322
1381
char *fld_change, List<String> *fld_interval_list,
1323
1382
const CHARSET_INFO * const fld_charset,
1324
1383
uint32_t fld_geom_type __attribute__((unused)),
1325
enum column_format_type column_format)
1384
enum column_format_type column_format,
1385
virtual_column_info *fld_vcol_info)
1327
1387
uint32_t sign_len, allowed_type_modifier= 0;
1328
1388
uint32_t max_field_charlength= MAX_FIELD_CHARLENGTH;
1351
1411
interval_list.empty();
1353
1413
comment= *fld_comment;
1414
vcol_info= fld_vcol_info;
1417
/* Initialize data for a virtual field */
1418
if (fld_type == DRIZZLE_TYPE_VIRTUAL)
1420
assert(vcol_info && vcol_info->expr_item);
1421
is_stored= vcol_info->get_field_stored();
1423
Perform per item-type checks to determine if the expression is
1424
allowed for a virtual column.
1425
Note that validation of the specific function is done later in
1426
procedures open_table_from_share and fix_fields_vcol_func
1428
switch (vcol_info->expr_item->type()) {
1429
case Item::FUNC_ITEM:
1430
if (((Item_func *)vcol_info->expr_item)->functype() == Item_func::FUNC_SP)
1432
my_error(ER_VIRTUAL_COLUMN_FUNCTION_IS_NOT_ALLOWED, MYF(0), field_name);
1436
case Item::COPY_STR_ITEM:
1437
case Item::FIELD_AVG_ITEM:
1438
case Item::PROC_ITEM:
1439
case Item::REF_ITEM:
1440
case Item::FIELD_STD_ITEM:
1441
case Item::FIELD_VARIANCE_ITEM:
1442
case Item::INSERT_VALUE_ITEM:
1443
case Item::SUBSELECT_ITEM:
1444
case Item::CACHE_ITEM:
1445
case Item::TYPE_HOLDER:
1446
case Item::PARAM_ITEM:
1447
case Item::VIEW_FIXER_ITEM:
1448
my_error(ER_VIRTUAL_COLUMN_FUNCTION_IS_NOT_ALLOWED, MYF(0), field_name);
1452
// Continue with the field creation
1456
Make a field created for the real type.
1457
Note that "real" and virtual fields differ from each other
1458
only by Field::vcol_info, which is always 0 for normal columns.
1459
vcol_info is updated for fields later in procedure open_binary_frm.
1461
sql_type= fld_type= vcol_info->get_real_type();
1355
1465
Set NO_DEFAULT_VALUE_FLAG if this field doesn't have a default value and
1356
1466
it is NOT NULL, not an AUTO_INCREMENT field and not a TIMESTAMP.
1684
1796
case DRIZZLE_TYPE_NULL:
1685
1797
return new Field_null(ptr, field_length, unireg_check, field_name,
1686
1798
field_charset);
1799
case DRIZZLE_TYPE_VIRTUAL: // Must not happen
1687
1801
default: // Impossible (Wrong version)
1706
1820
charset= old_field->charset(); // May be NULL ptr
1707
1821
comment= old_field->comment;
1708
1822
decimals= old_field->decimals();
1823
vcol_info= old_field->vcol_info;
1824
is_stored= old_field->is_stored;
1710
1826
/* Fix if the original table had 4 byte pointer blobs */
1711
1827
if (flags & BLOB_FLAG)