~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to server/item_func.h

  • Committer: Brian Aker
  • Date: 2008-07-13 22:45:08 UTC
  • Revision ID: brian@tangent.org-20080713224508-hb20z4okblotb39a
longlong replacement

Show diffs side-by-side

added added

removed removed

Lines of Context:
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; };
 
742
  bool result_as_int64_t() { return compare_as_dates; };
743
743
  uint cmp_datetimes(uint64_t *value);
744
744
  enum_field_types field_type() const { return cached_field_type; }
745
745
};
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
 
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);
1077
1077
  Item_func_udf_float(udf_func *udf_arg,
1078
1078
                      List<Item> &list)
1079
1079
    :Item_udf_func(udf_arg, list) {}
1080
 
  longlong val_int()
 
1080
  int64_t val_int()
1081
1081
  {
1082
1082
    assert(fixed == 1);
1083
 
    return (longlong) rint(Item_func_udf_float::val_real());
 
1083
    return (int64_t) rint(Item_func_udf_float::val_real());
1084
1084
  }
1085
1085
  my_decimal *val_decimal(my_decimal *dec_buf)
1086
1086
  {
1104
1104
  Item_func_udf_int(udf_func *udf_arg,
1105
1105
                    List<Item> &list)
1106
1106
    :Item_udf_func(udf_arg, list) {}
1107
 
  longlong val_int();
 
1107
  int64_t val_int();
1108
1108
  double val_real() { return (double) Item_func_udf_int::val_int(); }
1109
1109
  String *val_str(String *str);
1110
1110
  enum Item_result result_type () const { return INT_RESULT; }
1119
1119
    :Item_udf_func(udf_arg) {}
1120
1120
  Item_func_udf_decimal(udf_func *udf_arg, List<Item> &list)
1121
1121
    :Item_udf_func(udf_arg, list) {}
1122
 
  longlong val_int();
 
1122
  int64_t val_int();
1123
1123
  double val_real();
1124
1124
  my_decimal *val_decimal(my_decimal *);
1125
1125
  String *val_str(String *str);
1145
1145
    return res ? my_strntod(res->charset(),(char*) res->ptr(), 
1146
1146
                            res->length(), &end_not_used, &err_not_used) : 0.0;
1147
1147
  }
1148
 
  longlong val_int()
 
1148
  int64_t val_int()
1149
1149
  {
1150
1150
    int err_not_used;
1151
1151
    String *res;  res=val_str(&str_value);
1152
1152
    return res ? my_strntoll(res->charset(),res->ptr(),res->length(),10,
1153
 
                             (char**) 0, &err_not_used) : (longlong) 0;
 
1153
                             (char**) 0, &err_not_used) : (int64_t) 0;
1154
1154
  }
1155
1155
  my_decimal *val_decimal(my_decimal *dec_buf)
1156
1156
  {
1184
1184
    :Item_int_func() {}
1185
1185
  Item_func_udf_int(udf_func *udf_arg, List<Item> &list)
1186
1186
    :Item_int_func(list) {}
1187
 
  longlong val_int() { assert(fixed == 1); return 0; }
 
1187
  int64_t val_int() { assert(fixed == 1); return 0; }
1188
1188
};
1189
1189
 
1190
1190
 
1209
1209
  String *val_str(String *)
1210
1210
    { assert(fixed == 1); null_value=1; return 0; }
1211
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; }
 
1212
  int64_t val_int() { assert(fixed == 1); null_value=1; return 0; }
1213
1213
  enum Item_result result_type () const { return STRING_RESULT; }
1214
1214
  void fix_length_and_dec() { maybe_null=1; max_length=0; }
1215
1215
};
1224
1224
public:
1225
1225
  Item_master_pos_wait(Item *a,Item *b) :Item_int_func(a,b) {}
1226
1226
  Item_master_pos_wait(Item *a,Item *b,Item *c) :Item_int_func(a,b,c) {}
1227
 
  longlong val_int();
 
1227
  int64_t val_int();
1228
1228
  const char *func_name() const { return "master_pos_wait"; }
1229
1229
  void fix_length_and_dec() { max_length=21; maybe_null=1;}
1230
1230
};
1244
1244
  bool null_item;
1245
1245
  union
1246
1246
  {
1247
 
    longlong vint;
 
1247
    int64_t vint;
1248
1248
    double vreal;
1249
1249
    String *vstr;
1250
1250
    my_decimal *vdec;
1257
1257
  {}
1258
1258
  enum Functype functype() const { return SUSERVAR_FUNC; }
1259
1259
  double val_real();
1260
 
  longlong val_int();
 
1260
  int64_t val_int();
1261
1261
  String *val_str(String *str);
1262
1262
  my_decimal *val_decimal(my_decimal *);
1263
1263
  double val_result();
1264
 
  longlong val_int_result();
 
1264
  int64_t val_int_result();
1265
1265
  String *str_result(String *str);
1266
1266
  my_decimal *val_decimal_result(my_decimal *);
1267
1267
  bool update_hash(void *ptr, uint length, enum Item_result type,
1299
1299
  enum Functype functype() const { return GUSERVAR_FUNC; }
1300
1300
  LEX_STRING get_name() { return name; }
1301
1301
  double val_real();
1302
 
  longlong val_int();
 
1302
  int64_t val_int();
1303
1303
  my_decimal *val_decimal(my_decimal*);
1304
1304
  String *val_str(String* str);
1305
1305
  void fix_length_and_dec();
1335
1335
  /* We should return something different from FIELD_ITEM here */
1336
1336
  enum Type type() const { return STRING_ITEM;}
1337
1337
  double val_real();
1338
 
  longlong val_int();
 
1338
  int64_t val_int();
1339
1339
  String *val_str(String *str);
1340
1340
  my_decimal *val_decimal(my_decimal *decimal_buffer);
1341
1341
  /* fix_fields() binds variable name with its entry structure */
1363
1363
    item is always substituted with a constant in fix_fields().
1364
1364
  */
1365
1365
  double val_real()         { assert(0); return 0.0; }
1366
 
  longlong val_int()        { assert(0); return 0; }
 
1366
  int64_t val_int()        { assert(0); return 0; }
1367
1367
  String* val_str(String*)  { assert(0); return 0; }
1368
1368
  void fix_length_and_dec() { assert(0); }
1369
1369
  /* TODO: fix to support views */
1383
1383
{
1384
1384
public:
1385
1385
  Item_func_bit_xor(Item *a, Item *b) :Item_func_bit(a, b) {}
1386
 
  longlong val_int();
 
1386
  int64_t val_int();
1387
1387
  const char *func_name() const { return "^"; }
1388
1388
};
1389
1389
 
1392
1392
  String value;
1393
1393
public:
1394
1394
  Item_func_is_free_lock(Item *a) :Item_int_func(a) {}
1395
 
  longlong val_int();
 
1395
  int64_t val_int();
1396
1396
  const char *func_name() const { return "is_free_lock"; }
1397
1397
  void fix_length_and_dec() { decimals=0; max_length=1; maybe_null=1;}
1398
1398
};
1402
1402
  String value;
1403
1403
public:
1404
1404
  Item_func_is_used_lock(Item *a) :Item_int_func(a) {}
1405
 
  longlong val_int();
 
1405
  int64_t val_int();
1406
1406
  const char *func_name() const { return "is_used_lock"; }
1407
1407
  void fix_length_and_dec() { decimals=0; max_length=10; maybe_null=1;}
1408
1408
};
1421
1421
{
1422
1422
public:
1423
1423
  Item_func_row_count() :Item_int_func() {}
1424
 
  longlong val_int();
 
1424
  int64_t val_int();
1425
1425
  const char *func_name() const { return "row_count"; }
1426
1426
  void fix_length_and_dec() { decimals= 0; maybe_null=0; }
1427
1427
};
1439
1439
{
1440
1440
public:
1441
1441
  Item_func_found_rows() :Item_int_func() {}
1442
 
  longlong val_int();
 
1442
  int64_t val_int();
1443
1443
  const char *func_name() const { return "found_rows"; }
1444
1444
  void fix_length_and_dec() { decimals= 0; maybe_null=0; }
1445
1445
};