~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to server/item_func.h

  • Committer: Stewart Smith
  • Date: 2008-07-25 03:48:54 UTC
  • mfrom: (207.1.1 drizzle)
  • mto: (210.1.1 drizzle)
  • mto: This revision was merged to the branch mainline in revision 211.
  • Revision ID: stewart@flamingspork.com-20080725034854-p34pdb0lhpoc159d
merge mainline and update md5 and crc32 plugins to new interface

Show diffs side-by-side

added added

removed removed

Lines of Context:
41
41
  table_map used_tables_cache, not_null_tables_cache;
42
42
  bool const_item_cache;
43
43
  enum Functype { UNKNOWN_FUNC,EQ_FUNC,EQUAL_FUNC,NE_FUNC,LT_FUNC,LE_FUNC,
44
 
                  GE_FUNC,GT_FUNC,FT_FUNC,
 
44
                  GE_FUNC,GT_FUNC,
45
45
                  LIKE_FUNC,ISNULL_FUNC,ISNOTNULL_FUNC,
46
46
                  COND_AND_FUNC, COND_OR_FUNC, COND_XOR_FUNC,
47
47
                  BETWEEN, IN_FUNC, MULT_EQUAL_FUNC,
206
206
  Item_real_func(List<Item> &list) :Item_func(list) {}
207
207
  String *val_str(String*str);
208
208
  my_decimal *val_decimal(my_decimal *decimal_value);
209
 
  longlong val_int()
210
 
    { assert(fixed == 1); return (longlong) rint(val_real()); }
 
209
  int64_t val_int()
 
210
    { assert(fixed == 1); return (int64_t) rint(val_real()); }
211
211
  enum Item_result result_type () const { return REAL_RESULT; }
212
212
  void fix_length_and_dec()
213
213
  { decimals= NOT_FIXED_DEC; max_length= float_length(decimals); }
234
234
  virtual void find_num_type()= 0; /* To be called from fix_length_and_dec */
235
235
 
236
236
  double val_real();
237
 
  longlong val_int();
 
237
  int64_t val_int();
238
238
  my_decimal *val_decimal(my_decimal *);
239
239
  String *val_str(String*str);
240
240
 
244
244
 
245
245
     @return The result of the operation.
246
246
  */
247
 
  virtual longlong int_op()= 0;
 
247
  virtual int64_t int_op()= 0;
248
248
 
249
249
  /**
250
250
     @brief Performs the operation that this functions implements when the
327
327
 
328
328
class Item_func_connection_id :public Item_int_func
329
329
{
330
 
  longlong value;
 
330
  int64_t value;
331
331
 
332
332
public:
333
333
  Item_func_connection_id() {}
334
334
  const char *func_name() const { return "connection_id"; }
335
335
  void fix_length_and_dec();
336
336
  bool fix_fields(THD *thd, Item **ref);
337
 
  longlong val_int() { assert(fixed == 1); return value; }
 
337
  int64_t val_int() { assert(fixed == 1); return value; }
338
338
};
339
339
 
340
340
 
343
343
public:
344
344
  Item_func_signed(Item *a) :Item_int_func(a) {}
345
345
  const char *func_name() const { return "cast_as_signed"; }
346
 
  longlong val_int();
347
 
  longlong val_int_from_str(int *error);
 
346
  int64_t val_int();
 
347
  int64_t val_int_from_str(int *error);
348
348
  void fix_length_and_dec()
349
349
  { max_length=args[0]->max_length; unsigned_flag=0; }
350
350
  virtual void print(String *str, enum_query_type query_type);
359
359
  const char *func_name() const { return "cast_as_unsigned"; }
360
360
  void fix_length_and_dec()
361
361
  { max_length=args[0]->max_length; unsigned_flag=1; }
362
 
  longlong val_int();
 
362
  int64_t val_int();
363
363
  virtual void print(String *str, enum_query_type query_type);
364
364
};
365
365
 
375
375
  }
376
376
  String *val_str(String *str);
377
377
  double val_real();
378
 
  longlong val_int();
 
378
  int64_t val_int();
379
379
  my_decimal *val_decimal(my_decimal*);
380
380
  enum Item_result result_type () const { return DECIMAL_RESULT; }
381
381
  enum_field_types field_type() const { return MYSQL_TYPE_NEWDECIMAL; }
398
398
public:
399
399
  Item_func_plus(Item *a,Item *b) :Item_func_additive_op(a,b) {}
400
400
  const char *func_name() const { return "+"; }
401
 
  longlong int_op();
 
401
  int64_t int_op();
402
402
  double real_op();
403
403
  my_decimal *decimal_op(my_decimal *);
404
404
};
408
408
public:
409
409
  Item_func_minus(Item *a,Item *b) :Item_func_additive_op(a,b) {}
410
410
  const char *func_name() const { return "-"; }
411
 
  longlong int_op();
 
411
  int64_t int_op();
412
412
  double real_op();
413
413
  my_decimal *decimal_op(my_decimal *);
414
414
  void fix_length_and_dec();
420
420
public:
421
421
  Item_func_mul(Item *a,Item *b) :Item_num_op(a,b) {}
422
422
  const char *func_name() const { return "*"; }
423
 
  longlong int_op();
 
423
  int64_t int_op();
424
424
  double real_op();
425
425
  my_decimal *decimal_op(my_decimal *);
426
426
  void result_precision();
432
432
public:
433
433
  uint prec_increment;
434
434
  Item_func_div(Item *a,Item *b) :Item_num_op(a,b) {}
435
 
  longlong int_op() { assert(0); return 0; }
 
435
  int64_t int_op() { assert(0); return 0; }
436
436
  double real_op();
437
437
  my_decimal *decimal_op(my_decimal *);
438
438
  const char *func_name() const { return "/"; }
446
446
public:
447
447
  Item_func_int_div(Item *a,Item *b) :Item_int_func(a,b)
448
448
  {}
449
 
  longlong val_int();
 
449
  int64_t val_int();
450
450
  const char *func_name() const { return "DIV"; }
451
451
  void fix_length_and_dec();
452
452
 
462
462
{
463
463
public:
464
464
  Item_func_mod(Item *a,Item *b) :Item_num_op(a,b) {}
465
 
  longlong int_op();
 
465
  int64_t int_op();
466
466
  double real_op();
467
467
  my_decimal *decimal_op(my_decimal *);
468
468
  const char *func_name() const { return "%"; }
476
476
public:
477
477
  Item_func_neg(Item *a) :Item_func_num1(a) {}
478
478
  double real_op();
479
 
  longlong int_op();
 
479
  int64_t int_op();
480
480
  my_decimal *decimal_op(my_decimal *);
481
481
  const char *func_name() const { return "-"; }
482
482
  enum Functype functype() const   { return NEG_FUNC; }
491
491
public:
492
492
  Item_func_abs(Item *a) :Item_func_num1(a) {}
493
493
  double real_op();
494
 
  longlong int_op();
 
494
  int64_t int_op();
495
495
  my_decimal *decimal_op(my_decimal *);
496
496
  const char *func_name() const { return "abs"; }
497
497
  void fix_length_and_dec();
646
646
public:
647
647
  Item_func_ceiling(Item *a) :Item_func_int_val(a) {}
648
648
  const char *func_name() const { return "ceiling"; }
649
 
  longlong int_op();
 
649
  int64_t int_op();
650
650
  double real_op();
651
651
  my_decimal *decimal_op(my_decimal *);
652
652
};
657
657
public:
658
658
  Item_func_floor(Item *a) :Item_func_int_val(a) {}
659
659
  const char *func_name() const { return "floor"; }
660
 
  longlong int_op();
 
660
  int64_t int_op();
661
661
  double real_op();
662
662
  my_decimal *decimal_op(my_decimal *);
663
663
};
672
672
    :Item_func_num1(a,b), truncate(trunc_arg) {}
673
673
  const char *func_name() const { return truncate ? "truncate" : "round"; }
674
674
  double real_op();
675
 
  longlong int_op();
 
675
  int64_t int_op();
676
676
  my_decimal *decimal_op(my_decimal *);
677
677
  void fix_length_and_dec();
678
678
};
699
699
public:
700
700
  Item_func_sign(Item *a) :Item_int_func(a) {}
701
701
  const char *func_name() const { return "sign"; }
702
 
  longlong val_int();
 
702
  int64_t val_int();
703
703
};
704
704
 
705
705
 
734
734
    cmp_type(INT_RESULT), cmp_sign(cmp_sign_arg), compare_as_dates(false),
735
735
    datetime_item(0) {}
736
736
  double val_real();
737
 
  longlong val_int();
 
737
  int64_t val_int();
738
738
  String *val_str(String *);
739
739
  my_decimal *val_decimal(my_decimal *);
740
740
  void fix_length_and_dec();
741
741
  enum Item_result result_type () const { return cmp_type; }
742
 
  bool result_as_longlong() { return compare_as_dates; };
743
 
  uint cmp_datetimes(ulonglong *value);
 
742
  bool result_as_int64_t() { return compare_as_dates; };
 
743
  uint cmp_datetimes(uint64_t *value);
744
744
  enum_field_types field_type() const { return cached_field_type; }
745
745
};
746
746
 
773
773
    name_length= a->name_length;
774
774
  }
775
775
  double val_real() { return args[0]->val_real(); }
776
 
  longlong val_int() { return args[0]->val_int(); }
 
776
  int64_t val_int() { return args[0]->val_int(); }
777
777
  String *val_str(String *str) { return args[0]->val_str(str); }
778
778
  my_decimal *val_decimal(my_decimal *dec) { return args[0]->val_decimal(dec); }
779
779
  const char *func_name() const { return "rollup_const"; }
795
795
  String value;
796
796
public:
797
797
  Item_func_length(Item *a) :Item_int_func(a) {}
798
 
  longlong val_int();
 
798
  int64_t val_int();
799
799
  const char *func_name() const { return "length"; }
800
800
  void fix_length_and_dec() { max_length=10; }
801
801
};
804
804
{
805
805
public:
806
806
  Item_func_bit_length(Item *a) :Item_func_length(a) {}
807
 
  longlong val_int()
 
807
  int64_t val_int()
808
808
    { assert(fixed == 1); return Item_func_length::val_int()*8; }
809
809
  const char *func_name() const { return "bit_length"; }
810
810
};
814
814
  String value;
815
815
public:
816
816
  Item_func_char_length(Item *a) :Item_int_func(a) {}
817
 
  longlong val_int();
 
817
  int64_t val_int();
818
818
  const char *func_name() const { return "char_length"; }
819
819
  void fix_length_and_dec() { max_length=10; }
820
820
};
823
823
{
824
824
public:
825
825
  Item_func_coercibility(Item *a) :Item_int_func(a) {}
826
 
  longlong val_int();
 
826
  int64_t val_int();
827
827
  const char *func_name() const { return "coercibility"; }
828
828
  void fix_length_and_dec() { max_length=10; maybe_null= 0; }
829
829
  table_map not_null_tables() const { return 0; }
837
837
  Item_func_locate(Item *a,Item *b) :Item_int_func(a,b) {}
838
838
  Item_func_locate(Item *a,Item *b,Item *c) :Item_int_func(a,b,c) {}
839
839
  const char *func_name() const { return "locate"; }
840
 
  longlong val_int();
 
840
  int64_t val_int();
841
841
  void fix_length_and_dec();
842
842
  virtual void print(String *str, enum_query_type query_type);
843
843
};
850
850
  DTCollation cmp_collation;
851
851
public:
852
852
  Item_func_field(List<Item> &list) :Item_int_func(list) {}
853
 
  longlong val_int();
 
853
  int64_t val_int();
854
854
  const char *func_name() const { return "field"; }
855
855
  void fix_length_and_dec();
856
856
};
861
861
  String value;
862
862
public:
863
863
  Item_func_ascii(Item *a) :Item_int_func(a) {}
864
 
  longlong val_int();
 
864
  int64_t val_int();
865
865
  const char *func_name() const { return "ascii"; }
866
866
  void fix_length_and_dec() { max_length=3; }
867
867
};
871
871
  String value;
872
872
public:
873
873
  Item_func_ord(Item *a) :Item_int_func(a) {}
874
 
  longlong val_int();
 
874
  int64_t val_int();
875
875
  const char *func_name() const { return "ord"; }
876
876
};
877
877
 
879
879
{
880
880
  String value,value2;
881
881
  uint enum_value;
882
 
  ulonglong enum_bit;
 
882
  uint64_t enum_bit;
883
883
  DTCollation cmp_collation;
884
884
public:
885
885
  Item_func_find_in_set(Item *a,Item *b) :Item_int_func(a,b),enum_value(0) {}
886
 
  longlong val_int();
 
886
  int64_t val_int();
887
887
  const char *func_name() const { return "find_in_set"; }
888
888
  void fix_length_and_dec();
889
889
};
907
907
{
908
908
public:
909
909
  Item_func_bit_or(Item *a, Item *b) :Item_func_bit(a, b) {}
910
 
  longlong val_int();
 
910
  int64_t val_int();
911
911
  const char *func_name() const { return "|"; }
912
912
};
913
913
 
915
915
{
916
916
public:
917
917
  Item_func_bit_and(Item *a, Item *b) :Item_func_bit(a, b) {}
918
 
  longlong val_int();
 
918
  int64_t val_int();
919
919
  const char *func_name() const { return "&"; }
920
920
};
921
921
 
923
923
{
924
924
public:
925
925
  Item_func_bit_count(Item *a) :Item_int_func(a) {}
926
 
  longlong val_int();
 
926
  int64_t val_int();
927
927
  const char *func_name() const { return "bit_count"; }
928
928
  void fix_length_and_dec() { max_length=2; }
929
929
};
932
932
{
933
933
public:
934
934
  Item_func_shift_left(Item *a, Item *b) :Item_func_bit(a, b) {}
935
 
  longlong val_int();
 
935
  int64_t val_int();
936
936
  const char *func_name() const { return "<<"; }
937
937
};
938
938
 
940
940
{
941
941
public:
942
942
  Item_func_shift_right(Item *a, Item *b) :Item_func_bit(a, b) {}
943
 
  longlong val_int();
 
943
  int64_t val_int();
944
944
  const char *func_name() const { return ">>"; }
945
945
};
946
946
 
948
948
{
949
949
public:
950
950
  Item_func_bit_neg(Item *a) :Item_func_bit(a) {}
951
 
  longlong val_int();
 
951
  int64_t val_int();
952
952
  const char *func_name() const { return "~"; }
953
953
 
954
954
  virtual inline void print(String *str, enum_query_type query_type)
963
963
public:
964
964
  Item_func_last_insert_id() :Item_int_func() {}
965
965
  Item_func_last_insert_id(Item *a) :Item_int_func(a) {}
966
 
  longlong val_int();
 
966
  int64_t val_int();
967
967
  const char *func_name() const { return "last_insert_id"; }
968
968
  void fix_length_and_dec()
969
969
  {
980
980
  Item_func_benchmark(Item *count_expr, Item *expr)
981
981
    :Item_int_func(count_expr, expr)
982
982
  {}
983
 
  longlong val_int();
 
983
  int64_t val_int();
984
984
  const char *func_name() const { return "benchmark"; }
985
985
  void fix_length_and_dec() { max_length=1; maybe_null=0; }
986
986
  virtual void print(String *str, enum_query_type query_type);
987
987
};
988
988
 
989
989
 
990
 
#ifdef HAVE_DLOPEN
991
 
 
992
990
class Item_udf_func :public Item_func
993
991
{
994
992
protected:
1077
1075
  Item_func_udf_float(udf_func *udf_arg,
1078
1076
                      List<Item> &list)
1079
1077
    :Item_udf_func(udf_arg, list) {}
1080
 
  longlong val_int()
 
1078
  int64_t val_int()
1081
1079
  {
1082
1080
    assert(fixed == 1);
1083
 
    return (longlong) rint(Item_func_udf_float::val_real());
 
1081
    return (int64_t) rint(Item_func_udf_float::val_real());
1084
1082
  }
1085
1083
  my_decimal *val_decimal(my_decimal *dec_buf)
1086
1084
  {
1104
1102
  Item_func_udf_int(udf_func *udf_arg,
1105
1103
                    List<Item> &list)
1106
1104
    :Item_udf_func(udf_arg, list) {}
1107
 
  longlong val_int();
 
1105
  int64_t val_int();
1108
1106
  double val_real() { return (double) Item_func_udf_int::val_int(); }
1109
1107
  String *val_str(String *str);
1110
1108
  enum Item_result result_type () const { return INT_RESULT; }
1119
1117
    :Item_udf_func(udf_arg) {}
1120
1118
  Item_func_udf_decimal(udf_func *udf_arg, List<Item> &list)
1121
1119
    :Item_udf_func(udf_arg, list) {}
1122
 
  longlong val_int();
 
1120
  int64_t val_int();
1123
1121
  double val_real();
1124
1122
  my_decimal *val_decimal(my_decimal *);
1125
1123
  String *val_str(String *str);
1145
1143
    return res ? my_strntod(res->charset(),(char*) res->ptr(), 
1146
1144
                            res->length(), &end_not_used, &err_not_used) : 0.0;
1147
1145
  }
1148
 
  longlong val_int()
 
1146
  int64_t val_int()
1149
1147
  {
1150
1148
    int err_not_used;
1151
1149
    String *res;  res=val_str(&str_value);
1152
1150
    return res ? my_strntoll(res->charset(),res->ptr(),res->length(),10,
1153
 
                             (char**) 0, &err_not_used) : (longlong) 0;
 
1151
                             (char**) 0, &err_not_used) : (int64_t) 0;
1154
1152
  }
1155
1153
  my_decimal *val_decimal(my_decimal *dec_buf)
1156
1154
  {
1164
1162
  void fix_length_and_dec();
1165
1163
};
1166
1164
 
1167
 
#else /* Dummy functions to get sql_yacc.cc compiled */
1168
 
 
1169
 
class Item_func_udf_float :public Item_real_func
1170
 
{
1171
 
 public:
1172
 
  Item_func_udf_float(udf_func *udf_arg)
1173
 
    :Item_real_func() {}
1174
 
  Item_func_udf_float(udf_func *udf_arg, List<Item> &list)
1175
 
    :Item_real_func(list) {}
1176
 
  double val_real() { assert(fixed == 1); return 0.0; }
1177
 
};
1178
 
 
1179
 
 
1180
 
class Item_func_udf_int :public Item_int_func
1181
 
{
1182
 
public:
1183
 
  Item_func_udf_int(udf_func *udf_arg)
1184
 
    :Item_int_func() {}
1185
 
  Item_func_udf_int(udf_func *udf_arg, List<Item> &list)
1186
 
    :Item_int_func(list) {}
1187
 
  longlong val_int() { assert(fixed == 1); return 0; }
1188
 
};
1189
 
 
1190
 
 
1191
 
class Item_func_udf_decimal :public Item_int_func
1192
 
{
1193
 
public:
1194
 
  Item_func_udf_decimal(udf_func *udf_arg)
1195
 
    :Item_int_func() {}
1196
 
  Item_func_udf_decimal(udf_func *udf_arg, List<Item> &list)
1197
 
    :Item_int_func(list) {}
1198
 
  my_decimal *val_decimal(my_decimal *) { assert(fixed == 1); return 0; }
1199
 
};
1200
 
 
1201
 
 
1202
 
class Item_func_udf_str :public Item_func
1203
 
{
1204
 
public:
1205
 
  Item_func_udf_str(udf_func *udf_arg)
1206
 
    :Item_func() {}
1207
 
  Item_func_udf_str(udf_func *udf_arg, List<Item> &list)
1208
 
    :Item_func(list) {}
1209
 
  String *val_str(String *)
1210
 
    { assert(fixed == 1); null_value=1; return 0; }
1211
 
  double val_real() { assert(fixed == 1); null_value= 1; return 0.0; }
1212
 
  longlong val_int() { assert(fixed == 1); null_value=1; return 0; }
1213
 
  enum Item_result result_type () const { return STRING_RESULT; }
1214
 
  void fix_length_and_dec() { maybe_null=1; max_length=0; }
1215
 
};
1216
 
 
1217
 
#endif /* HAVE_DLOPEN */
1218
1165
 
1219
1166
/* replication functions */
1220
1167
 
1224
1171
public:
1225
1172
  Item_master_pos_wait(Item *a,Item *b) :Item_int_func(a,b) {}
1226
1173
  Item_master_pos_wait(Item *a,Item *b,Item *c) :Item_int_func(a,b,c) {}
1227
 
  longlong val_int();
 
1174
  int64_t val_int();
1228
1175
  const char *func_name() const { return "master_pos_wait"; }
1229
1176
  void fix_length_and_dec() { max_length=21; maybe_null=1;}
1230
1177
};
1244
1191
  bool null_item;
1245
1192
  union
1246
1193
  {
1247
 
    longlong vint;
 
1194
    int64_t vint;
1248
1195
    double vreal;
1249
1196
    String *vstr;
1250
1197
    my_decimal *vdec;
1257
1204
  {}
1258
1205
  enum Functype functype() const { return SUSERVAR_FUNC; }
1259
1206
  double val_real();
1260
 
  longlong val_int();
 
1207
  int64_t val_int();
1261
1208
  String *val_str(String *str);
1262
1209
  my_decimal *val_decimal(my_decimal *);
1263
1210
  double val_result();
1264
 
  longlong val_int_result();
 
1211
  int64_t val_int_result();
1265
1212
  String *str_result(String *str);
1266
1213
  my_decimal *val_decimal_result(my_decimal *);
1267
1214
  bool update_hash(void *ptr, uint length, enum Item_result type,
1299
1246
  enum Functype functype() const { return GUSERVAR_FUNC; }
1300
1247
  LEX_STRING get_name() { return name; }
1301
1248
  double val_real();
1302
 
  longlong val_int();
 
1249
  int64_t val_int();
1303
1250
  my_decimal *val_decimal(my_decimal*);
1304
1251
  String *val_str(String* str);
1305
1252
  void fix_length_and_dec();
1335
1282
  /* We should return something different from FIELD_ITEM here */
1336
1283
  enum Type type() const { return STRING_ITEM;}
1337
1284
  double val_real();
1338
 
  longlong val_int();
 
1285
  int64_t val_int();
1339
1286
  String *val_str(String *str);
1340
1287
  my_decimal *val_decimal(my_decimal *decimal_buffer);
1341
1288
  /* fix_fields() binds variable name with its entry structure */
1363
1310
    item is always substituted with a constant in fix_fields().
1364
1311
  */
1365
1312
  double val_real()         { assert(0); return 0.0; }
1366
 
  longlong val_int()        { assert(0); return 0; }
 
1313
  int64_t val_int()        { assert(0); return 0; }
1367
1314
  String* val_str(String*)  { assert(0); return 0; }
1368
1315
  void fix_length_and_dec() { assert(0); }
1369
1316
  /* TODO: fix to support views */
1383
1330
{
1384
1331
public:
1385
1332
  Item_func_bit_xor(Item *a, Item *b) :Item_func_bit(a, b) {}
1386
 
  longlong val_int();
 
1333
  int64_t val_int();
1387
1334
  const char *func_name() const { return "^"; }
1388
1335
};
1389
1336
 
1392
1339
  String value;
1393
1340
public:
1394
1341
  Item_func_is_free_lock(Item *a) :Item_int_func(a) {}
1395
 
  longlong val_int();
 
1342
  int64_t val_int();
1396
1343
  const char *func_name() const { return "is_free_lock"; }
1397
1344
  void fix_length_and_dec() { decimals=0; max_length=1; maybe_null=1;}
1398
1345
};
1402
1349
  String value;
1403
1350
public:
1404
1351
  Item_func_is_used_lock(Item *a) :Item_int_func(a) {}
1405
 
  longlong val_int();
 
1352
  int64_t val_int();
1406
1353
  const char *func_name() const { return "is_used_lock"; }
1407
1354
  void fix_length_and_dec() { decimals=0; max_length=10; maybe_null=1;}
1408
1355
};
1421
1368
{
1422
1369
public:
1423
1370
  Item_func_row_count() :Item_int_func() {}
1424
 
  longlong val_int();
 
1371
  int64_t val_int();
1425
1372
  const char *func_name() const { return "row_count"; }
1426
1373
  void fix_length_and_dec() { decimals= 0; maybe_null=0; }
1427
1374
};
1439
1386
{
1440
1387
public:
1441
1388
  Item_func_found_rows() :Item_int_func() {}
1442
 
  longlong val_int();
 
1389
  int64_t val_int();
1443
1390
  const char *func_name() const { return "found_rows"; }
1444
1391
  void fix_length_and_dec() { decimals= 0; maybe_null=0; }
1445
1392
};
1446
 
 
1447
 
 
1448
 
void uuid_short_init();
1449
 
 
1450
 
class Item_func_uuid_short :public Item_int_func
1451
 
{
1452
 
public:
1453
 
  Item_func_uuid_short() :Item_int_func() {}
1454
 
  const char *func_name() const { return "uuid_short"; }
1455
 
  longlong val_int();
1456
 
  void fix_length_and_dec()
1457
 
  { max_length= 21; unsigned_flag=1; }
1458
 
};
1459