MySQL 8.0.29
Source Code Documentation
item_timefunc.h
Go to the documentation of this file.
1#ifndef ITEM_TIMEFUNC_INCLUDED
2#define ITEM_TIMEFUNC_INCLUDED
3
4/* Copyright (c) 2000, 2021, Oracle and/or its affiliates.
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, version 2.0,
8 as published by the Free Software Foundation.
9
10 This program is also distributed with certain software (including
11 but not limited to OpenSSL) that is licensed under separate terms,
12 as designated in a particular file or component or in included license
13 documentation. The authors of MySQL hereby grant you an additional
14 permission to link the program and your derivative works with the
15 separately licensed software that they have included with MySQL.
16
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License, version 2.0, for more details.
21
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
25
26/* Function items used by mysql */
27
28#include <assert.h>
29#include <sys/types.h>
30
31#include <algorithm>
32#include <cstddef>
33
34#include "field_types.h" // MYSQL_TYPE_DATETIME
35#include "m_ctype.h"
36
37#include "my_inttypes.h"
38#include "my_table_map.h"
39#include "my_time.h"
41#include "mysql_time.h"
42#include "sql/enum_query_type.h"
43#include "sql/field.h"
44#include "sql/item.h"
45#include "sql/item_func.h"
46#include "sql/item_strfunc.h" // Item_str_func
47#include "sql/parse_location.h" // POS
48#include "sql/set_var.h"
49#include "sql/sql_const.h"
50#include "sql_string.h"
51#include "template_utils.h" // pointer_cast
52
53class MY_LOCALE;
54class PT_item_list;
55class THD;
56class Time_zone;
57class my_decimal;
58struct Date_time_format;
59struct Parse_context;
60struct TABLE;
61
62bool get_interval_value(Item *args, interval_type int_type, String *str_value,
64
65class Item_func_period_add final : public Item_int_func {
66 public:
68 : Item_int_func(pos, a, b) {}
69 longlong val_int() override;
70 const char *func_name() const override { return "period_add"; }
71 bool resolve_type(THD *thd) override;
72};
73
75 public:
77 : Item_int_func(pos, a, b) {}
78 longlong val_int() override;
79 const char *func_name() const override { return "period_diff"; }
80 bool resolve_type(THD *thd) override;
81};
82
83class Item_func_to_days final : public Item_int_func {
84 public:
86 longlong val_int() override;
87 const char *func_name() const override { return "to_days"; }
88 enum Functype functype() const override { return TO_DAYS_FUNC; }
89 bool resolve_type(THD *thd) override;
91 longlong val_int_endpoint(bool left_endp, bool *incl_endp) override;
92 bool check_partition_func_processor(uchar *) override { return false; }
94 return !has_date_args();
95 }
96};
97
98class Item_func_to_seconds final : public Item_int_func {
99 public:
101 longlong val_int() override;
102 const char *func_name() const override { return "to_seconds"; }
103 enum Functype functype() const override { return TO_SECONDS_FUNC; }
104 bool resolve_type(THD *thd) override;
106 longlong val_int_endpoint(bool left_endp, bool *incl_endp) override;
107 bool check_partition_func_processor(uchar *) override { return false; }
108
109 bool intro_version(uchar *int_arg) override {
110 int *input_version = (int *)int_arg;
111 /* This function was introduced in 5.5 */
112 int output_version = std::max(*input_version, 50500);
113 *input_version = output_version;
114 return false;
115 }
116
117 /* Only meaningful with date part and optional time part */
119 return !has_date_args();
120 }
121};
122
124 public:
126
127 longlong val_int() override;
128 const char *func_name() const override { return "dayofmonth"; }
129 enum Functype functype() const override { return DAY_FUNC; }
130 bool resolve_type(THD *thd) override;
131 bool check_partition_func_processor(uchar *) override { return false; }
133 return !has_date_args();
134 }
135};
136
137/**
138 TS-TODO: This should probably have Item_int_func as parent class.
139*/
140class Item_func_month final : public Item_func {
141 public:
145 }
146 longlong val_int() override;
147 double val_real() override {
148 assert(fixed);
149 return (double)Item_func_month::val_int();
150 }
151 String *val_str(String *str) override {
152 longlong nr = val_int();
153 if (null_value) return nullptr;
154 str->set(nr, collation.collation);
155 return str;
156 }
157 bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override {
158 return get_date_from_int(ltime, fuzzydate);
159 }
160 bool get_time(MYSQL_TIME *ltime) override { return get_time_from_int(ltime); }
161 const char *func_name() const override { return "month"; }
162 enum Functype functype() const override { return MONTH_FUNC; }
163 enum Item_result result_type() const override { return INT_RESULT; }
164 bool resolve_type(THD *thd) override;
165 bool check_partition_func_processor(uchar *) override { return false; }
167 return !has_date_args();
168 }
169};
170
171class Item_func_monthname final : public Item_str_func {
173
174 public:
176 const char *func_name() const override { return "monthname"; }
177 enum Functype functype() const override { return MONTHNAME_FUNC; }
178 String *val_str(String *str) override;
179 bool resolve_type(THD *thd) override;
180 bool check_partition_func_processor(uchar *) override { return true; }
182 return !has_date_args();
183 }
184};
185
186class Item_func_dayofyear final : public Item_int_func {
187 public:
189 longlong val_int() override;
190 const char *func_name() const override { return "dayofyear"; }
191 enum Functype functype() const override { return DAYOFYEAR_FUNC; }
192 bool resolve_type(THD *thd) override;
193 bool check_partition_func_processor(uchar *) override { return false; }
195 return !has_date_args();
196 }
197};
198
199class Item_func_hour final : public Item_int_func {
200 public:
202 longlong val_int() override;
203 const char *func_name() const override { return "hour"; }
204 enum Functype functype() const override { return HOUR_FUNC; }
205 bool resolve_type(THD *thd) override;
206 bool check_partition_func_processor(uchar *) override { return false; }
208 return !has_time_args();
209 }
210};
211
212class Item_func_minute final : public Item_int_func {
213 public:
215 longlong val_int() override;
216 const char *func_name() const override { return "minute"; }
217 enum Functype functype() const override { return MINUTE_FUNC; }
218 bool resolve_type(THD *thd) override;
219 bool check_partition_func_processor(uchar *) override { return false; }
221 return !has_time_args();
222 }
223};
224
225class Item_func_quarter final : public Item_int_func {
226 public:
228 longlong val_int() override;
229 const char *func_name() const override { return "quarter"; }
230 enum Functype functype() const override { return QUARTER_FUNC; }
231 bool resolve_type(THD *thd) override;
232 bool check_partition_func_processor(uchar *) override { return false; }
234 return !has_date_args();
235 }
236};
237
238class Item_func_second final : public Item_int_func {
239 public:
241 longlong val_int() override;
242 const char *func_name() const override { return "second"; }
243 enum Functype functype() const override { return SECOND_FUNC; }
244 bool resolve_type(THD *thd) override;
245 bool check_partition_func_processor(uchar *) override { return false; }
247 return !has_time_args();
248 }
249};
250
251class Item_func_week final : public Item_int_func {
253
254 public:
256 Item_func_week(const POS &pos, Item *a, Item *b) : super(pos, a, b) {}
257
258 bool itemize(Parse_context *pc, Item **res) override;
259
260 longlong val_int() override;
261 const char *func_name() const override { return "week"; }
262 enum Functype functype() const override { return WEEK_FUNC; }
263 bool resolve_type(THD *thd) override;
264};
265
266class Item_func_yearweek final : public Item_int_func {
267 public:
269 : Item_int_func(pos, a, b) {}
270 longlong val_int() override;
271 const char *func_name() const override { return "yearweek"; }
272 enum Functype functype() const override { return YEARWEEK_FUNC; }
273 bool resolve_type(THD *thd) override;
274 bool check_partition_func_processor(uchar *) override { return false; }
276 return !has_date_args();
277 }
278};
279
280class Item_func_year final : public Item_int_func {
281 public:
283 longlong val_int() override;
284 const char *func_name() const override { return "year"; }
285 enum Functype functype() const override { return YEAR_FUNC; }
287 longlong val_int_endpoint(bool left_endp, bool *incl_endp) override;
288 bool resolve_type(THD *thd) override;
289 bool check_partition_func_processor(uchar *) override { return false; }
291 return !has_date_args();
292 }
293};
294
295class Item_typecast_year final : public Item_int_func {
296 public:
299 }
300 longlong val_int() override;
301 const char *func_name() const override { return "cast_as_year"; }
302 enum Functype functype() const override { return TYPECAST_FUNC; }
303 bool resolve_type(THD *thd) override;
304};
305
306/**
307 TS-TODO: This should probably have Item_int_func as parent class.
308*/
311
312 public:
313 Item_func_weekday(const POS &pos, Item *a, bool type_arg)
314 : Item_func(pos, a), odbc_type(type_arg) {
317 }
318 longlong val_int() override;
319 double val_real() override {
320 assert(fixed);
321 return static_cast<double>(val_int());
322 }
323 String *val_str(String *str) override {
324 assert(fixed == 1);
325 str->set(val_int(), &my_charset_bin);
326 return null_value ? nullptr : str;
327 }
328 bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override {
329 return get_date_from_int(ltime, fuzzydate);
330 }
331 bool get_time(MYSQL_TIME *ltime) override { return get_time_from_int(ltime); }
332 const char *func_name() const override {
333 return (odbc_type ? "dayofweek" : "weekday");
334 }
335 enum Functype functype() const override { return WEEKDAY_FUNC; }
336 enum Item_result result_type() const override { return INT_RESULT; }
337 bool resolve_type(THD *thd) override;
338 bool check_partition_func_processor(uchar *) override { return false; }
340 return !has_date_args();
341 }
342};
343
344/**
345 TS-TODO: Item_func_dayname should be derived from Item_str_func.
346 In the current implementation funny things can happen:
347 select dayname(now())+1 -> 4
348*/
351
352 public:
354 : Item_func_weekday(pos, a, false) {}
355 const char *func_name() const override { return "dayname"; }
356 enum Functype functype() const override { return DAYNAME_FUNC; }
357 String *val_str(String *str) override;
358 bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override {
359 return get_date_from_string(ltime, fuzzydate);
360 }
361 bool get_time(MYSQL_TIME *ltime) override {
362 return get_time_from_string(ltime);
363 }
364 enum Item_result result_type() const override { return STRING_RESULT; }
365 bool resolve_type(THD *thd) override;
366 bool check_partition_func_processor(uchar *) override { return true; }
367};
368
369/*
370 Abstract class for functions returning "struct timeval".
371*/
373 public:
374 explicit Item_timeval_func(const POS &pos) : Item_func(pos) {}
375
378 /**
379 Return timestamp in "struct timeval" format.
380 @param[out] tm The value is store here.
381 @retval false On success
382 @retval true On error
383 */
384 virtual bool val_timeval(my_timeval *tm) = 0;
385 longlong val_int() override;
386 double val_real() override;
387 String *val_str(String *str) override;
388 my_decimal *val_decimal(my_decimal *decimal_value) override;
389 bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override {
390 return get_date_from_numeric(ltime, fuzzydate);
391 }
392 bool get_time(MYSQL_TIME *ltime) override {
393 return get_time_from_numeric(ltime);
394 }
395 enum Item_result result_type() const override {
397 }
398};
399
402
403 public:
405
407
409 : Item_timeval_func(pos, a) {}
410
411 const char *func_name() const override { return "unix_timestamp"; }
412 enum Functype functype() const override { return UNIX_TIMESTAMP_FUNC; }
413
414 bool itemize(Parse_context *pc, Item **res) override;
416 longlong val_int_endpoint(bool left_endp, bool *incl_endp) override;
417 bool check_partition_func_processor(uchar *) override { return false; }
418 /*
419 UNIX_TIMESTAMP() depends on the current timezone
420 (and thus may not be used as a partitioning function)
421 when its argument is NOT of the TIMESTAMP type.
422 */
424 return !has_timestamp_args();
425 }
426 bool resolve_type(THD *thd) override {
427 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_DATETIME)) return true;
429 const uint8 dec = arg_count == 0 ? 0 : args[0]->datetime_precision();
430 if (dec > 0) {
432 } else {
434 }
435 return false;
436 }
437 bool val_timeval(my_timeval *tm) override;
438
440 /*
441 TODO: Allow UNIX_TIMESTAMP called with an argument to be a part
442 of the expression for a generated column too.
443 */
445 pointer_cast<Check_function_as_value_generator_parameters *>(p_arg);
446 func_arg->banned_function_name = func_name();
447 return ((func_arg->source == VGS_GENERATED_COLUMN) ||
448 (func_arg->source == VGS_CHECK_CONSTRAINT));
449 }
450};
451
453 public:
455 : Item_int_func(pos, item) {}
456 longlong val_int() override;
457 const char *func_name() const override { return "time_to_sec"; }
458 enum Functype functype() const override { return TIME_TO_SEC_FUNC; }
459 bool resolve_type(THD *thd) override;
460 bool check_partition_func_processor(uchar *) override { return false; }
462 return !has_time_args();
463 }
464};
465
466/**
467 Abstract class for functions returning TIME, DATE, DATETIME types
468 whose data type is known at constructor time.
469*/
471 protected:
472 bool check_precision();
473
474 public:
476 explicit Item_temporal_func(const POS &pos) : Item_func(pos) {}
477
480
481 Item_temporal_func(const POS &pos, Item *a, Item *b) : Item_func(pos, a, b) {}
482
483 Item_temporal_func(Item *a, Item *b, Item *c) : Item_func(a, b, c) {}
485 : Item_func(pos, a, b, c) {}
486 Item_temporal_func(const POS &pos, Item *a, Item *b, Item *c, Item *d)
487 : Item_func(pos, a, b, c, d) {}
489 : Item_func(pos, list) {}
490
491 Item_result result_type() const override { return STRING_RESULT; }
493 return &my_charset_bin;
494 }
495 Field *tmp_table_field(TABLE *table) override {
496 return tmp_table_field_from_field_type(table, false);
497 }
498 uint time_precision() override {
499 assert(fixed);
500 return decimals;
501 }
503 assert(fixed);
504 return decimals;
505 }
506 void print(const THD *thd, String *str,
507 enum_query_type query_type) const override;
508};
509
510/**
511 Abstract class for functions returning TIME, DATE, DATETIME or string values,
512 whose data type depends on parameters and is set at fix_field time.
513*/
515 protected:
516 sql_mode_t sql_mode; // sql_mode value is cached here in resolve_type()
517 String ascii_buf; // Conversion buffer
518 /**
519 Get "native" temporal value as MYSQL_TIME
520 @param[out] ltime The value is stored here.
521 @param[in] fuzzy_date Date flags.
522 @retval false On success.
523 @retval true On error.
524 */
525 virtual bool val_datetime(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) = 0;
527 bool no_conversions) override;
528
529 public:
531 : Item_str_func(a, b), sql_mode(0) {}
533 : Item_str_func(pos, a, b), sql_mode(0) {}
534
535 Item_result result_type() const override { return STRING_RESULT; }
537 /*
538 Can return TIME, DATE, DATETIME or VARCHAR depending on arguments.
539 Send using "binary" when TIME, DATE or DATETIME,
540 or using collation.collation when VARCHAR
541 (which is fixed from @collation_connection in resolve_type()).
542 */
543 assert(fixed == 1);
546 }
547 Field *tmp_table_field(TABLE *table) override {
548 return tmp_table_field_from_field_type(table, false);
549 }
550 longlong val_int() override { return val_int_from_decimal(); }
551 double val_real() override { return val_real_from_decimal(); }
552 my_decimal *val_decimal(my_decimal *decimal_value) override;
553 /**
554 Return string value in ASCII character set.
555 */
556 String *val_str_ascii(String *str) override;
557 /**
558 Return string value in @@character_set_connection.
559 */
560 String *val_str(String *str) override {
562 }
563 bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override;
564 bool get_time(MYSQL_TIME *ltime) override;
565};
566
567/*
568 This can't be a Item_str_func, because the val_real() functions are special
569*/
570
571/**
572 Abstract class for functions returning DATE values.
573*/
575 protected:
577 return save_date_in_field(field);
578 }
579
580 public:
584 }
588 }
590 : Item_temporal_func(pos, a, b) {
592 }
593 bool get_time(MYSQL_TIME *ltime) override {
594 return get_time_from_date(ltime);
595 }
597 longlong val_int() override { return val_int_from_date(); }
598 longlong val_date_temporal() override;
599 double val_real() override { return static_cast<double>(val_int()); }
600 const char *func_name() const override { return "date"; }
601 enum Functype functype() const override { return DATE_FUNC; }
602 bool resolve_type(THD *) override { return false; }
603 my_decimal *val_decimal(my_decimal *decimal_value) override {
604 assert(fixed == 1);
605 return val_decimal_from_date(decimal_value);
606 }
607 // All date functions must implement get_date()
608 // to avoid use of generic Item::get_date()
609 // which converts to string and then parses the string as DATE.
610 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override = 0;
611};
612
613/**
614 Abstract class for functions returning DATETIME values.
615*/
617 protected:
619 return save_date_in_field(field);
620 }
621
622 public:
625 }
628 }
631 }
634 }
636 : Item_temporal_func(pos, a, b) {
638 }
641 }
643 : Item_temporal_func(pos, a, b, c) {
645 }
646 Item_datetime_func(const POS &pos, Item *a, Item *b, Item *c, Item *d)
647 : Item_temporal_func(pos, a, b, c, d) {
649 }
651 : Item_temporal_func(pos, list) {
653 }
654
655 double val_real() override { return val_real_from_decimal(); }
656 String *val_str(String *str) override {
658 }
659 longlong val_int() override { return val_int_from_datetime(); }
660 longlong val_date_temporal() override;
661 my_decimal *val_decimal(my_decimal *decimal_value) override {
662 assert(fixed == 1);
663 return val_decimal_from_date(decimal_value);
664 }
665 bool get_time(MYSQL_TIME *ltime) override {
666 return get_time_from_datetime(ltime);
667 }
668 // All datetime functions must implement get_date()
669 // to avoid use of generic Item::get_date()
670 // which converts to string and then parses the string as DATETIME.
671 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override = 0;
672};
673
674/**
675 Abstract class for functions returning TIME values.
676*/
678 protected:
680 return save_time_in_field(field);
681 }
682
683 public:
687 }
690 }
693 }
695 : Item_temporal_func(pos, a, b) {
697 }
698 Item_time_func(const POS &pos, Item *a, Item *b, Item *c)
699 : Item_temporal_func(pos, a, b, c) {
701 }
702 double val_real() override { return val_real_from_decimal(); }
703 my_decimal *val_decimal(my_decimal *decimal_value) override {
704 assert(fixed);
705 return val_decimal_from_time(decimal_value);
706 }
707 longlong val_int() override { return val_int_from_time(); }
708 longlong val_time_temporal() override;
709 bool get_date(MYSQL_TIME *res, my_time_flags_t) override {
710 return get_date_from_time(res);
711 }
713 // All time functions must implement get_time()
714 // to avoid use of generic Item::get_time()
715 // which converts to string and then parses the string as TIME.
716 bool get_time(MYSQL_TIME *res) override = 0;
717};
718
719/**
720 Cache for MYSQL_TIME value with various representations.
721
722 - MYSQL_TIME representation (time) is initialized during set_XXX().
723 - Packed representation (time_packed) is also initialized during set_XXX().
724 - String representation (string_buff) is also initialized during set_XXX();
725*/
727 MYSQL_TIME time; ///< MYSQL_TIME representation
728 longlong time_packed; ///< packed representation
729 char string_buff[MAX_DATE_STRING_REP_LENGTH]; ///< string representation
730 uint string_length; ///< length of string
731 uint8 dec; ///< Number of decimals
732
733 /**
734 Store MYSQL_TIME representation into the given MYSQL_TIME variable.
735 */
736 void get_TIME(MYSQL_TIME *ltime) const {
738 *ltime = time;
739 }
740
741 public:
744 string_buff[0] = '\0';
745 }
746 /**
747 Set time and time_packed from a DATE value.
748 */
749 void set_date(MYSQL_TIME *ltime);
750 /**
751 Set time and time_packed from a TIME value.
752 */
753 void set_time(MYSQL_TIME *ltime, uint8 dec_arg);
754 /**
755 Set time and time_packed from a DATETIME value.
756 */
757 void set_datetime(MYSQL_TIME *ltime, uint8 dec_arg,
758 const Time_zone *tz = nullptr);
759 /**
760 Set time and time_packed according to DATE value
761 in "struct timeval" representation and its time zone.
762 */
763 void set_date(my_timeval tv, Time_zone *tz);
764 /**
765 Set time and time_packed according to TIME value
766 in "struct timeval" representation and its time zone.
767 */
768 void set_time(my_timeval tv, uint8 dec_arg, Time_zone *tz);
769 /**
770 Set time and time_packed according to DATETIME value
771 in "struct timeval" representation and its time zone.
772 */
773 void set_datetime(my_timeval tv, uint8 dec_arg, Time_zone *tz);
774 /**
775 Test if cached value is equal to another MYSQL_TIME_cache value.
776 */
777 bool eq(const MYSQL_TIME_cache &tm) const {
778 return val_packed() == tm.val_packed();
779 }
780
781 /**
782 Return number of decimal digits.
783 */
784 uint8 decimals() const {
786 return dec;
787 }
788
789 /**
790 Return packed representation.
791 */
794 return time_packed;
795 }
796 /**
797 Store MYSQL_TIME representation into the given date/datetime variable
798 checking date flags.
799 */
800 bool get_date(MYSQL_TIME *ltime, uint fuzzyflags) const;
801 /**
802 Store MYSQL_TIME representation into the given time variable.
803 */
804 bool get_time(MYSQL_TIME *ltime) const {
805 get_TIME(ltime);
806 return false;
807 }
808 /**
809 Return pointer to MYSQL_TIME representation.
810 */
813 return &time;
814 }
815 /**
816 Store string representation into String.
817 */
819 /**
820 Return C string representation.
821 */
822 const char *cptr() const { return string_buff; }
823};
824
825/**
826 DATE'2010-01-01'
827*/
828class Item_date_literal final : public Item_date_func {
830
831 public:
832 /**
833 Constructor for Item_date_literal.
834 @param ltime DATE value.
835 */
837 cached_time.set_date(ltime);
839 fixed = true;
840 }
841 const char *func_name() const override { return "date_literal"; }
842 void print(const THD *thd, String *str,
843 enum_query_type query_type) const override;
845 assert(fixed);
846 return cached_time.val_packed();
847 }
848 bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override {
849 assert(fixed);
850 return cached_time.get_date(ltime, fuzzy_date);
851 }
852 String *val_str(String *str) override {
853 assert(fixed);
854 return cached_time.val_str(str);
855 }
856 bool resolve_type(THD *) override { return false; }
857 bool check_partition_func_processor(uchar *) override { return false; }
858 bool basic_const_item() const override { return true; }
859 table_map used_tables() const override { return 0; }
860 table_map not_null_tables() const override { return used_tables(); }
861 void cleanup() override { assert(marker == MARKER_NONE); }
862 bool eq(const Item *item, bool binary_cmp) const override;
863};
864
865/**
866 TIME'10:10:10'
867*/
868class Item_time_literal final : public Item_time_func {
870
871 public:
872 /**
873 Constructor for Item_time_literal.
874 @param ltime TIME value.
875 @param dec_arg number of fractional digits in ltime.
876 */
878 set_data_type_time(std::min(dec_arg, uint(DATETIME_MAX_DECIMALS)));
880 fixed = true;
881 }
882 const char *func_name() const override { return "time_literal"; }
883 void print(const THD *thd, String *str,
884 enum_query_type query_type) const override;
886 assert(fixed);
887 return cached_time.val_packed();
888 }
889 bool get_time(MYSQL_TIME *ltime) override {
890 assert(fixed);
891 return cached_time.get_time(ltime);
892 }
893 String *val_str(String *str) override {
894 assert(fixed);
895 return cached_time.val_str(str);
896 }
897 bool resolve_type(THD *) override { return false; }
898 bool check_partition_func_processor(uchar *) override { return false; }
899 bool basic_const_item() const override { return true; }
900 table_map used_tables() const override { return 0; }
901 table_map not_null_tables() const override { return used_tables(); }
902 void cleanup() override { assert(marker == MARKER_NONE); }
903 bool eq(const Item *item, bool binary_cmp) const override;
904};
905
906/**
907 TIMESTAMP'2001-01-01 10:20:30'
908*/
911
912 public:
913 /**
914 Constructor for Item_datetime_literal.
915 @param ltime DATETIME value.
916 @param dec_arg Number of fractional digits in ltime.
917 @param tz The current time zone, used for converting literals with
918 time zone upon storage.
919 */
920 Item_datetime_literal(MYSQL_TIME *ltime, uint dec_arg, const Time_zone *tz) {
923 fixed = true;
924 }
925 const char *func_name() const override { return "datetime_literal"; }
926 enum Functype functype() const override { return DATETIME_LITERAL; }
927 void print(const THD *thd, String *str,
928 enum_query_type query_type) const override;
930 assert(fixed);
931 return cached_time.val_packed();
932 }
933 bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override {
934 assert(fixed);
935 return cached_time.get_date(ltime, fuzzy_date);
936 }
937 String *val_str(String *str) override {
938 assert(fixed);
939 return cached_time.val_str(str);
940 }
941 bool resolve_type(THD *) override { return false; }
942 bool check_partition_func_processor(uchar *) override { return false; }
943 bool basic_const_item() const override { return true; }
944 table_map used_tables() const override { return 0; }
945 table_map not_null_tables() const override { return used_tables(); }
946 void cleanup() override { assert(marker == MARKER_NONE); }
947 bool eq(const Item *item, bool binary_cmp) const override;
948};
949
950/**
951 This function implements the `AT TIME ZONE` operator, which casts a temporal
952 value to a temporal with time zone.
953
954 This function is hidden from the user except when used in a cast() operation,
955 the reason being that it adds time zone information to a temporal value, and
956 we don't currently have a type that corresponds to such a value. Hence the
957 only way to evaluate this function is by a concomitant cast to a temporal
958 without time zone designation. However, the value is not converted according
959 to the current time zone as is normally the case. For `TIMESTAMP`, this means
960 that the value is converted to the time zone given as argument to this
961 function rather than the session's time zone. And as we currently only support
962 the UTC time zone or the equivalent `INTERVAL '+00:00'`, so in practice the
963 value is not converted at all. This is a bit similar to the unix_timestamp()
964 function, but that one converts any argument (DATETIME, TIME) to UTC from the
965 session's time zone. This operator only accepts `TIMESTAMP` values.
966*/
968 public:
970 const char *specifier_string, bool is_interval)
971 : Item_datetime_func(pos, datetime),
973 m_is_interval(is_interval) {}
974
975 bool resolve_type(THD *) override;
976
977 const char *func_name() const override { return "time_zone"; }
978
979 bool set_time_zone(THD *thd);
980
981 bool get_date(MYSQL_TIME *res, my_time_flags_t) override;
982
983 const char *specifier_string() const { return m_specifier_string; }
984
985 protected:
986 bool check_type() const;
987
988 private:
989 /// The time zone that the specifier string argument resolves to.
990 const Time_zone *m_tz{nullptr};
991
992 /// The specifier string argument, not used after resolution.
994
995 /**
996 Whether the syntax used the `INTERVAL` construction. We have no interval
997 type.
998 */
1000};
1001
1002/// Abstract CURTIME function. Children should define what time zone is used.
1005
1006 protected:
1007 // Abstract method that defines which time zone is used for conversion.
1008 virtual Time_zone *time_zone() = 0;
1009
1010 public:
1011 /**
1012 Constructor for Item_func_curtime.
1013 @param pos Position of token in the parser.
1014 @param dec_arg Number of fractional digits.
1015 */
1017 decimals = dec_arg;
1018 }
1019
1020 bool itemize(Parse_context *pc, Item **res) override;
1021
1022 /// This function must assign a new value for each execution
1024 return INNER_TABLE_BIT;
1025 }
1026
1027 bool resolve_type(THD *thd) override;
1028 longlong val_time_temporal() override;
1029 bool get_time(MYSQL_TIME *ltime) override;
1030 String *val_str(String *) override;
1031 bool check_function_as_value_generator(uchar *checker_args) override {
1033 pointer_cast<Check_function_as_value_generator_parameters *>(
1034 checker_args);
1035 func_arg->banned_function_name = func_name();
1036 return ((func_arg->source == VGS_GENERATED_COLUMN) ||
1037 (func_arg->source == VGS_CHECK_CONSTRAINT));
1038 }
1039};
1040
1042 protected:
1043 Time_zone *time_zone() override;
1044
1045 public:
1047 : Item_func_curtime(pos, dec_arg) {}
1048 const char *func_name() const override { return "curtime"; }
1049};
1050
1052 protected:
1053 Time_zone *time_zone() override;
1054
1055 public:
1057 : Item_func_curtime(pos, dec_arg) {}
1058 const char *func_name() const override { return "utc_time"; }
1059};
1060
1061/**
1062 Abstract CURDATE function.
1063
1064 @sa Item_func_curtime
1065 */
1068
1069 protected:
1070 virtual Time_zone *time_zone() = 0;
1071
1072 public:
1074
1075 bool itemize(Parse_context *pc, Item **res) override;
1076
1077 /// This function must assign a new value for each execution
1079 return INNER_TABLE_BIT;
1080 }
1081
1082 bool resolve_type(THD *) override;
1083 longlong val_date_temporal() override;
1084 bool get_date(MYSQL_TIME *res, my_time_flags_t) override;
1085 String *val_str(String *) override;
1086 bool check_function_as_value_generator(uchar *checker_args) override {
1088 pointer_cast<Check_function_as_value_generator_parameters *>(
1089 checker_args);
1090 func_arg->banned_function_name = func_name();
1091 return ((func_arg->source == VGS_GENERATED_COLUMN) ||
1092 (func_arg->source == VGS_CHECK_CONSTRAINT));
1093 }
1094};
1095
1097 protected:
1098 Time_zone *time_zone() override;
1099
1100 public:
1102 const char *func_name() const override { return "curdate"; }
1103};
1104
1106 protected:
1107 Time_zone *time_zone() override;
1108
1109 public:
1111 const char *func_name() const override { return "utc_date"; }
1112};
1113
1114/**
1115 Abstract CURRENT_TIMESTAMP function.
1116
1117 @sa Item_func_curtime
1118*/
1120 protected:
1121 virtual Time_zone *time_zone() = 0;
1123 bool no_conversions) override;
1124
1125 public:
1126 /**
1127 Constructor for Item_func_now.
1128 @param dec_arg Number of fractional digits.
1129 */
1132 decimals = dec_arg;
1133 }
1134
1135 /// This function must assign a new value for each execution
1137 return INNER_TABLE_BIT;
1138 }
1139
1140 bool resolve_type(THD *) override;
1141 longlong val_date_temporal() override;
1142 bool get_date(MYSQL_TIME *res, my_time_flags_t) override;
1143 String *val_str(String *) override;
1144 bool check_function_as_value_generator(uchar *checker_args) override {
1146 pointer_cast<Check_function_as_value_generator_parameters *>(
1147 checker_args);
1148 func_arg->banned_function_name = func_name();
1149 return ((func_arg->source == VGS_GENERATED_COLUMN) ||
1150 (func_arg->source == VGS_CHECK_CONSTRAINT));
1151 }
1152};
1153
1155 protected:
1156 Time_zone *time_zone() override;
1157
1158 public:
1159 /**
1160 Stores the query start time in a field, truncating to the field's number
1161 of fractional second digits.
1162
1163 @param field The field to store in.
1164 */
1165 static void store_in(Field *field);
1166
1169 : Item_func_now(pos, dec_arg) {}
1170
1171 const char *func_name() const override { return "now"; }
1172 enum Functype functype() const override { return NOW_FUNC; }
1173};
1174
1175class Item_func_now_utc final : public Item_func_now {
1177
1178 protected:
1179 Time_zone *time_zone() override;
1180
1181 public:
1183 : Item_func_now(pos, dec_arg) {}
1184
1185 bool itemize(Parse_context *pc, Item **res) override;
1186
1187 const char *func_name() const override { return "utc_timestamp"; }
1188};
1189
1190/**
1191 SYSDATE() is like NOW(), but always uses the real current time, not the
1192 query_start(). This matches the Oracle behavior.
1193*/
1195 public:
1197 decimals = dec_arg;
1198 }
1199 const char *func_name() const override { return "sysdate"; }
1200 bool resolve_type(THD *) override;
1201 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1202 /**
1203 This function is non-deterministic and hence depends on the 'RAND'
1204 pseudo-table.
1205
1206 @retval Always RAND_TABLE_BIT
1207 */
1209 return RAND_TABLE_BIT;
1210 }
1211};
1212
1214 public:
1216 const char *func_name() const override { return "from_days"; }
1217 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1218 bool check_partition_func_processor(uchar *) override { return false; }
1220 return has_date_args() || has_time_args();
1221 }
1222 bool resolve_type(THD *thd) override {
1223 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_LONGLONG)) return true;
1224 return Item_date_func::resolve_type(thd);
1225 }
1226};
1227
1230 const bool is_time_format;
1232
1233 public:
1235 bool is_time_format_arg = false)
1236 : Item_str_func(pos, a, b), is_time_format(is_time_format_arg) {}
1237 String *val_str(String *str) override;
1238 const char *func_name() const override {
1239 return is_time_format ? "time_format" : "date_format";
1240 }
1241 bool resolve_type(THD *thd) override;
1242 uint format_length(const String *format);
1243 bool eq(const Item *item, bool binary_cmp) const override;
1244};
1245
1247 public:
1249 : Item_datetime_func(pos, a) {}
1250 const char *func_name() const override { return "from_unixtime"; }
1251 enum Functype functype() const override { return FROM_UNIXTIME_FUNC; }
1252 bool resolve_type(THD *thd) override;
1253 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1254};
1255
1256/*
1257 This class represents CONVERT_TZ() function.
1258 The important fact about this function that it is handled in special way.
1259 When such function is met in expression time_zone system tables are added
1260 to global list of tables to open, so later those already opened and locked
1261 tables can be used during this function calculation for loading time zone
1262 descriptions.
1263*/
1265 /*
1266 If time zone parameters are constants we are caching objects that
1267 represent them (we use separate from_tz_cached/to_tz_cached members
1268 to indicate this fact, since NULL is legal value for from_tz/to_tz
1269 members.
1270 */
1273
1274 public:
1276 : Item_datetime_func(pos, a, b, c),
1277 from_tz_cached(false),
1278 to_tz_cached(false) {}
1279 const char *func_name() const override { return "convert_tz"; }
1280 enum Functype functype() const override { return CONVERT_TZ_FUNC; }
1281 bool resolve_type(THD *) override;
1282 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1283 void cleanup() override;
1284};
1285
1287 public:
1289 : Item_time_func(pos, item) {}
1290 bool resolve_type(THD *thd) override {
1291 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_NEWDECIMAL)) return true;
1293 std::min(args[0]->decimals, uint8{DATETIME_MAX_DECIMALS}));
1294 set_nullable(true);
1295 return false;
1296 }
1297 const char *func_name() const override { return "sec_to_time"; }
1298 bool get_time(MYSQL_TIME *ltime) override;
1299};
1300
1301extern const char *interval_names[];
1302
1303/**
1304 Implementation class for the DATE_ADD and DATE_SUB functions.
1305 Also used for the synonym functions ADDDATE and SUBDATE.
1306*/
1308 public:
1310 bool subtract)
1313 m_subtract(subtract) {}
1314 /**
1315 POS-less ctor for post-parse construction with implicit addition to THD's
1316 free_list (see Item::Item() no-argument ctor).
1317 */
1321 m_subtract(subtract) {}
1322 const char *func_name() const override { return "date_add_interval"; }
1323 enum Functype functype() const override { return DATEADD_FUNC; }
1324 bool resolve_type(THD *) override;
1325 bool eq(const Item *item, bool binary_cmp) const override;
1326 void print(const THD *thd, String *str,
1327 enum_query_type query_type) const override;
1329 bool is_subtract() const { return m_subtract; }
1330
1331 private:
1332 bool val_datetime(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override;
1333 bool get_date_internal(MYSQL_TIME *res, my_time_flags_t fuzzy_date);
1334 bool get_time_internal(MYSQL_TIME *res);
1335
1336 /// The type of the interval argument
1338 /// False if function is DATE_ADD, true if function is DATE_SUB
1339 const bool m_subtract;
1341};
1342
1343class Item_extract final : public Item_int_func {
1345
1346 public:
1347 const interval_type int_type; // keep it public
1348 Item_extract(const POS &pos, interval_type type_arg, Item *a)
1349 : Item_int_func(pos, a), int_type(type_arg) {}
1350 longlong val_int() override;
1351 enum Functype functype() const override { return EXTRACT_FUNC; }
1352 const char *func_name() const override { return "extract"; }
1353 bool resolve_type(THD *) override;
1354 bool eq(const Item *item, bool binary_cmp) const override;
1355 void print(const THD *thd, String *str,
1356 enum_query_type query_type) const override;
1357 bool check_partition_func_processor(uchar *) override { return false; }
1359 switch (int_type) {
1360 case INTERVAL_YEAR:
1362 case INTERVAL_QUARTER:
1363 case INTERVAL_MONTH:
1364 /* case INTERVAL_WEEK: Not allowed as partitioning function, bug#57071 */
1365 case INTERVAL_DAY:
1366 return !has_date_args();
1367 case INTERVAL_DAY_HOUR:
1371 return !has_datetime_args();
1372 case INTERVAL_HOUR:
1375 case INTERVAL_MINUTE:
1377 case INTERVAL_SECOND:
1382 return !has_time_args();
1383 default:
1384 /*
1385 INTERVAL_LAST is only an end marker,
1386 INTERVAL_WEEK depends on default_week_format which is a session
1387 variable and cannot be used for partitioning. See bug#57071.
1388 */
1389 break;
1390 }
1391 return true;
1392 }
1393};
1394
1397
1398 public:
1399 Item_typecast_date(Item *a, bool explicit_cast)
1400 : Item_date_func(a), m_explicit_cast(explicit_cast) {
1401 set_nullable(true);
1402 }
1404 set_nullable(true);
1405 }
1406
1407 bool resolve_type(THD *thd) override {
1408 if (args[0]->propagate_type(thd, MYSQL_TYPE_DATE, false, true)) return true;
1409 return Item_date_func::resolve_type(thd);
1410 }
1411 void print(const THD *thd, String *str,
1412 enum_query_type query_type) const override;
1413 const char *func_name() const override { return "cast_as_date"; }
1414 enum Functype functype() const override { return TYPECAST_FUNC; }
1415 bool is_explicit_cast() const { return m_explicit_cast; }
1416 bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override;
1417 const char *cast_type() const { return "date"; }
1418};
1419
1423
1424 public:
1427 }
1430 }
1431 Item_typecast_time(const POS &pos, Item *a, uint8 dec_arg)
1432 : Item_time_func(pos, a) {
1434 decimals = dec_arg;
1435 }
1438 decimals = dec_arg;
1439 }
1440 void print(const THD *thd, String *str,
1441 enum_query_type query_type) const override;
1442 const char *func_name() const override { return "cast_as_time"; }
1443 enum Functype functype() const override { return TYPECAST_FUNC; }
1444 bool is_explicit_cast() const { return m_explicit_cast; }
1445 bool get_time(MYSQL_TIME *ltime) override;
1446 const char *cast_type() const { return "time"; }
1447 bool resolve_type(THD *thd) override {
1448 if (args[0]->propagate_type(thd, MYSQL_TYPE_DATETIME, false, true))
1449 return true;
1451 : decimals);
1452 set_nullable(true);
1453 return false;
1454 }
1455};
1456
1460
1461 public:
1462 Item_typecast_datetime(Item *a, bool explicit_cast)
1463 : Item_datetime_func(a), m_explicit_cast(explicit_cast) {
1465 }
1468 }
1470 : Item_datetime_func(pos, a) {
1472 decimals = dec_arg;
1473 }
1476 decimals = dec_arg;
1477 }
1478 void print(const THD *thd, String *str,
1479 enum_query_type query_type) const override;
1480 const char *func_name() const override { return "cast_as_datetime"; }
1481 enum Functype functype() const override { return TYPECAST_FUNC; }
1482 const char *cast_type() const { return "datetime"; }
1483 bool is_explicit_cast() const { return m_explicit_cast; }
1484 bool resolve_type(THD *thd) override {
1485 if (args[0]->propagate_type(thd, MYSQL_TYPE_DATETIME, false, true))
1486 return true;
1489 set_nullable(true);
1490 return false;
1491 }
1492 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1493};
1494
1496 public:
1498 : Item_date_func(pos, a, b) {
1499 set_nullable(true);
1500 }
1501 const char *func_name() const override { return "makedate"; }
1502 bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override;
1503 enum Functype functype() const override { return MAKEDATE_FUNC; }
1504 bool resolve_type(THD *thd) override {
1505 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_LONGLONG)) return true;
1506 return Item_date_func::resolve_type(thd);
1507 }
1508};
1509
1510/**
1511 Add a time expression to a temporal expression, or
1512 subtract a time expression from a temporal expression.
1513 Used to implement the functions ADDTIME and SUBTIME, and the
1514 two-argument version of TIMESTAMP (which sets m_datetime = true).
1515*/
1517 const bool m_datetime; ///< True if first argument expected to be datetime
1518 int m_sign; ///< +1 for ADD, -1 for SUBTRACT
1519
1520 bool val_datetime(MYSQL_TIME *time, my_time_flags_t fuzzy_date) override;
1521
1522 public:
1523 Item_func_add_time(Item *a, Item *b, bool datetime, bool negate)
1525 m_datetime(datetime),
1526 m_sign(negate ? -1 : 1) {}
1527 Item_func_add_time(const POS &pos, Item *a, Item *b, bool datetime,
1528 bool negate)
1530 m_datetime(datetime),
1531 m_sign(negate ? -1 : 1) {}
1532
1534 : Item_func_add_time(pos, a, b, false, false) {}
1535
1536 bool resolve_type(THD *) override;
1537 void print(const THD *thd, String *str,
1538 enum_query_type query_type) const override;
1539 const char *func_name() const override { return "add_time"; }
1540 enum Functype functype() const override { return ADDTIME_FUNC; }
1541 int sign() const { return m_sign; }
1542};
1543
1545 public:
1547 : Item_time_func(pos, a, b) {}
1548 const char *func_name() const override { return "timediff"; }
1549 bool resolve_type(THD *thd) override {
1550 /*
1551 This function can operate on two TIME, or on two DATETIME (no mix).
1552 We infer the type from the other argument. If both arguments are '?', we
1553 choose VARCHAR; indeed, if we chose TIME and get DATETIME, we risk
1554 cutting the date part, and if we chose DATETIME and get TIME, we risk
1555 interpreting "01:01:01" as "2001:01:01 00:00:00".
1556 */
1557 if (param_type_uses_non_param(thd)) return true;
1559 std::max(args[0]->time_precision(), args[1]->time_precision()));
1560 set_nullable(true);
1561 return false;
1562 }
1563 bool get_time(MYSQL_TIME *ltime) override;
1564};
1565
1567 public:
1569 : Item_time_func(pos, a, b, c) {
1570 set_nullable(true);
1571 }
1572 bool resolve_type(THD *thd) override {
1573 if (param_type_is_default(thd, 0, 2, MYSQL_TYPE_LONGLONG)) return true;
1574 if (param_type_is_default(thd, 2, 3, MYSQL_TYPE_NEWDECIMAL)) return true;
1576 std::min(args[2]->decimals, uint8{DATETIME_MAX_DECIMALS}));
1577 return false;
1578 }
1579 const char *func_name() const override { return "maketime"; }
1580 bool get_time(MYSQL_TIME *ltime) override;
1581};
1582
1584 public:
1586 longlong val_int() override;
1587 const char *func_name() const override { return "microsecond"; }
1588 enum Functype functype() const override { return MICROSECOND_FUNC; }
1589 bool resolve_type(THD *thd) override;
1590 bool check_partition_func_processor(uchar *) override { return false; }
1592 return !has_time_args();
1593 }
1594};
1595
1598
1599 public:
1601 interval_type type_arg)
1602 : Item_int_func(pos, a, b), int_type(type_arg) {}
1603 const char *func_name() const override { return "timestampdiff"; }
1604 enum Functype functype() const override { return TIMESTAMPDIFF_FUNC; }
1606 longlong val_int() override;
1607 bool resolve_type(THD *thd) override {
1608 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_DATETIME)) return true;
1609 set_nullable(true);
1610 return false;
1611 }
1612 void print(const THD *thd, String *str,
1613 enum_query_type query_type) const override;
1614};
1615
1623
1625 public:
1626 const enum_mysql_timestamp_type type; // keep it public
1628 Item *a)
1629 : Item_str_ascii_func(pos, a), type(type_arg) {}
1630 String *val_str_ascii(String *str) override;
1631 const char *func_name() const override { return "get_format"; }
1632 bool resolve_type(THD *) override {
1633 set_nullable(true);
1635 return false;
1636 }
1637 void print(const THD *thd, String *str,
1638 enum_query_type query_type) const override;
1639};
1640
1643 void fix_from_format(const char *format, size_t length);
1644
1645 protected:
1646 bool val_datetime(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override;
1647
1648 public:
1650 : Item_temporal_hybrid_func(pos, a, b) {}
1651 const char *func_name() const override { return "str_to_date"; }
1652 bool resolve_type(THD *) override;
1653};
1654
1656 public:
1658 set_nullable(true);
1659 }
1660 const char *func_name() const override { return "last_day"; }
1661 enum Functype functype() const override { return LAST_DAY_FUNC; }
1662 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1663 bool resolve_type(THD *thd) override {
1664 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_DATETIME)) return true;
1665 return Item_date_func::resolve_type(thd);
1666 }
1667};
1668
1670 public:
1672 : Item_datetime_func(pos, list) {}
1673 enum Functype functype() const override { return DD_INTERNAL_FUNC; }
1674 const char *func_name() const override { return "internal_update_time"; }
1675 bool resolve_type(THD *thd) override;
1676 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1677};
1678
1680 public:
1682 : Item_datetime_func(pos, list) {}
1683 enum Functype functype() const override { return DD_INTERNAL_FUNC; }
1684 const char *func_name() const override { return "internal_check_time"; }
1685 bool resolve_type(THD *thd) override;
1686 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1687};
1688
1689/* Function prototypes */
1690
1691bool make_date_time(Date_time_format *format, MYSQL_TIME *l_time,
1693
1694#endif /* ITEM_TIMEFUNC_INCLUDED */
void set_numeric()
Definition: item.h:208
const CHARSET_INFO * collation
Definition: item.h:174
Definition: field.h:573
Implementation class for the DATE_ADD and DATE_SUB functions.
Definition: item_timefunc.h:1307
bool eq(const Item *item, bool binary_cmp) const override
Definition: item_timefunc.cc:2627
enum Functype functype() const override
Definition: item_timefunc.h:1323
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_timefunc.cc:2661
const bool m_subtract
False if function is DATE_ADD, true if function is DATE_SUB.
Definition: item_timefunc.h:1339
bool val_datetime(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override
Get "native" temporal value as MYSQL_TIME.
Definition: item_timefunc.cc:2620
const char * func_name() const override
Definition: item_timefunc.h:1322
bool is_subtract() const
Definition: item_timefunc.h:1329
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2442
bool get_date_internal(MYSQL_TIME *res, my_time_flags_t fuzzy_date)
Definition: item_timefunc.cc:2532
const interval_type m_interval_type
The type of the interval argument.
Definition: item_timefunc.h:1337
Item_date_add_interval(Item *a, Item *b, interval_type type, bool subtract)
POS-less ctor for post-parse construction with implicit addition to THD's free_list (see Item::Item()...
Definition: item_timefunc.h:1318
interval_type get_interval_type() const
Definition: item_timefunc.h:1328
String value
Definition: item_timefunc.h:1340
bool get_time_internal(MYSQL_TIME *res)
Definition: item_timefunc.cc:2567
Item_date_add_interval(const POS &pos, Item *a, Item *b, interval_type type, bool subtract)
Definition: item_timefunc.h:1309
Abstract class for functions returning DATE values.
Definition: item_timefunc.h:574
double val_real() override
Definition: item_timefunc.h:599
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override=0
const char * func_name() const override
Definition: item_timefunc.h:600
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:602
enum Functype functype() const override
Definition: item_timefunc.h:601
Item_date_func(const POS &pos)
Definition: item_timefunc.h:582
Item_date_func()
Definition: item_timefunc.h:581
Item_date_func(Item *a)
Definition: item_timefunc.h:585
Item_date_func(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:589
longlong val_date_temporal() override
Return date value of item in packed longlong format.
Definition: item_timefunc.cc:914
bool get_time(MYSQL_TIME *ltime) override
Definition: item_timefunc.h:593
longlong val_int() override
Definition: item_timefunc.h:597
Item_date_func(const POS &pos, Item *a)
Definition: item_timefunc.h:586
type_conversion_status save_in_field_inner(Field *field, bool) override
Helper function which does all of the work for save_in_field(Field*, bool), except some error checkin...
Definition: item_timefunc.h:576
String * val_str(String *str) override
Definition: item_timefunc.h:596
my_decimal * val_decimal(my_decimal *decimal_value) override
Definition: item_timefunc.h:603
DATE'2010-01-01'.
Definition: item_timefunc.h:828
bool basic_const_item() const override
Returns true if this is a simple constant item like an integer, not a constant expression.
Definition: item_timefunc.h:858
Item_date_literal(MYSQL_TIME *ltime)
Constructor for Item_date_literal.
Definition: item_timefunc.h:836
bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.h:848
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:856
void print(const THD *thd, String *str, enum_query_type query_type) const override
Appends function name with argument list or fractional seconds part to the String str.
Definition: item_timefunc.cc:938
bool eq(const Item *item, bool binary_cmp) const override
Definition: item_timefunc.cc:930
const char * func_name() const override
Definition: item_timefunc.h:841
longlong val_date_temporal() override
Return date value of item in packed longlong format.
Definition: item_timefunc.h:844
MYSQL_TIME_cache cached_time
Definition: item_timefunc.h:829
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item_timefunc.h:861
table_map used_tables() const override
Definition: item_timefunc.h:859
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:857
String * val_str(String *str) override
Definition: item_timefunc.h:852
table_map not_null_tables() const override
Return table map of tables that can't be NULL tables (tables that are used in a context where if they...
Definition: item_timefunc.h:860
Abstract class for functions returning DATETIME values.
Definition: item_timefunc.h:616
longlong val_int() override
Definition: item_timefunc.h:659
Item_datetime_func(Item *a)
Definition: item_timefunc.h:629
Item_datetime_func(const POS &pos)
Definition: item_timefunc.h:626
Item_datetime_func()
Definition: item_timefunc.h:623
String * val_str(String *str) override
Definition: item_timefunc.h:656
double val_real() override
Definition: item_timefunc.h:655
longlong val_date_temporal() override
Return date value of item in packed longlong format.
Definition: item_timefunc.cc:922
bool get_time(MYSQL_TIME *ltime) override
Definition: item_timefunc.h:665
Item_datetime_func(const POS &pos, PT_item_list *list)
Definition: item_timefunc.h:650
Item_datetime_func(Item *a, Item *b, Item *c)
Definition: item_timefunc.h:639
type_conversion_status save_in_field_inner(Field *field, bool) override
Helper function which does all of the work for save_in_field(Field*, bool), except some error checkin...
Definition: item_timefunc.h:618
Item_datetime_func(const POS &pos, Item *a, Item *b, Item *c)
Definition: item_timefunc.h:642
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override=0
Item_datetime_func(const POS &pos, Item *a, Item *b, Item *c, Item *d)
Definition: item_timefunc.h:646
my_decimal * val_decimal(my_decimal *decimal_value) override
Definition: item_timefunc.h:661
Item_datetime_func(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:635
Item_datetime_func(const POS &pos, Item *a)
Definition: item_timefunc.h:632
TIMESTAMP'2001-01-01 10:20:30'.
Definition: item_timefunc.h:909
MYSQL_TIME_cache cached_time
Definition: item_timefunc.h:910
bool basic_const_item() const override
Returns true if this is a simple constant item like an integer, not a constant expression.
Definition: item_timefunc.h:943
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:941
table_map not_null_tables() const override
Return table map of tables that can't be NULL tables (tables that are used in a context where if they...
Definition: item_timefunc.h:945
enum Functype functype() const override
Definition: item_timefunc.h:926
const char * func_name() const override
Definition: item_timefunc.h:925
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item_timefunc.h:946
Item_datetime_literal(MYSQL_TIME *ltime, uint dec_arg, const Time_zone *tz)
Constructor for Item_datetime_literal.
Definition: item_timefunc.h:920
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:942
void print(const THD *thd, String *str, enum_query_type query_type) const override
Appends function name with argument list or fractional seconds part to the String str.
Definition: item_timefunc.cc:952
bool eq(const Item *item, bool binary_cmp) const override
Definition: item_timefunc.cc:944
bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.h:933
String * val_str(String *str) override
Definition: item_timefunc.h:937
longlong val_date_temporal() override
Return date value of item in packed longlong format.
Definition: item_timefunc.h:929
table_map used_tables() const override
Definition: item_timefunc.h:944
Definition: item_timefunc.h:1343
bool date_value
Definition: item_timefunc.h:1344
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:1358
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_timefunc.cc:2672
const char * func_name() const override
Definition: item_timefunc.h:1352
enum Functype functype() const override
Definition: item_timefunc.h:1351
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2681
longlong val_int() override
Definition: item_timefunc.cc:2772
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:1357
const interval_type int_type
Definition: item_timefunc.h:1347
bool eq(const Item *item, bool binary_cmp) const override
Definition: item_timefunc.cc:2850
Item_extract(const POS &pos, interval_type type_arg, Item *a)
Definition: item_timefunc.h:1348
Add a time expression to a temporal expression, or subtract a time expression from a temporal express...
Definition: item_timefunc.h:1516
int m_sign
+1 for ADD, -1 for SUBTRACT
Definition: item_timefunc.h:1518
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2997
const char * func_name() const override
Definition: item_timefunc.h:1539
Item_func_add_time(Item *a, Item *b, bool datetime, bool negate)
Definition: item_timefunc.h:1523
const bool m_datetime
True if first argument expected to be datetime.
Definition: item_timefunc.h:1517
int sign() const
Definition: item_timefunc.h:1541
enum Functype functype() const override
Definition: item_timefunc.h:1540
bool val_datetime(MYSQL_TIME *time, my_time_flags_t fuzzy_date) override
ADDTIME(t,a) and SUBTIME(t,a) are time functions that calculate a time/datetime value.
Definition: item_timefunc.cc:3040
Item_func_add_time(const POS &pos, Item *a, Item *b, bool datetime, bool negate)
Definition: item_timefunc.h:1527
Item_func_add_time(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:1533
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_timefunc.cc:3109
This function implements the AT TIME ZONE operator, which casts a temporal value to a temporal with t...
Definition: item_timefunc.h:967
bool check_type() const
Definition: item_timefunc.cc:1021
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:973
bool set_time_zone(THD *thd)
Definition: item_timefunc.cc:985
const char * func_name() const override
Definition: item_timefunc.h:977
bool m_is_interval
Whether the syntax used the INTERVAL construction.
Definition: item_timefunc.h:999
bool get_date(MYSQL_TIME *res, my_time_flags_t) override
Definition: item_timefunc.cc:996
const char * m_specifier_string
The specifier string argument, not used after resolution.
Definition: item_timefunc.h:993
const Time_zone * m_tz
The time zone that the specifier string argument resolves to.
Definition: item_timefunc.h:990
const char * specifier_string() const
Definition: item_timefunc.h:983
Item_func_at_time_zone(const POS &pos, Item *datetime, const char *specifier_string, bool is_interval)
Definition: item_timefunc.h:969
Definition: item_timefunc.h:1264
const char * func_name() const override
Definition: item_timefunc.h:1279
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:2398
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2390
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item_timefunc.cc:2436
Time_zone * from_tz
Definition: item_timefunc.h:1272
Item_func_convert_tz(const POS &pos, Item *a, Item *b, Item *c)
Definition: item_timefunc.h:1275
bool from_tz_cached
Definition: item_timefunc.h:1271
bool to_tz_cached
Definition: item_timefunc.h:1271
enum Functype functype() const override
Definition: item_timefunc.h:1280
Time_zone * to_tz
Definition: item_timefunc.h:1272
Definition: item_timefunc.h:1096
Time_zone * time_zone() override
Definition: item_timefunc.cc:1974
const char * func_name() const override
Definition: item_timefunc.h:1102
Item_func_curdate_local(const POS &pos)
Definition: item_timefunc.h:1101
Definition: item_timefunc.h:1105
Time_zone * time_zone() override
Definition: item_timefunc.cc:1978
Item_func_curdate_utc(const POS &pos)
Definition: item_timefunc.h:1110
const char * func_name() const override
Definition: item_timefunc.h:1111
Abstract CURDATE function.
Definition: item_timefunc.h:1066
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1969
Item_date_func super
Definition: item_timefunc.h:1067
longlong val_date_temporal() override
Return date value of item in packed longlong format.
Definition: item_timefunc.cc:1980
String * val_str(String *) override
Definition: item_timefunc.cc:1994
virtual Time_zone * time_zone()=0
bool check_function_as_value_generator(uchar *checker_args) override
Check if this item is allowed for a virtual column or inside a default expression.
Definition: item_timefunc.h:1086
bool itemize(Parse_context *pc, Item **res) override
The same as contextualize() but with additional parameter.
Definition: item_timefunc.cc:1962
bool get_date(MYSQL_TIME *res, my_time_flags_t) override
Definition: item_timefunc.cc:1987
Item_func_curdate(const POS &pos)
Definition: item_timefunc.h:1073
table_map get_initial_pseudo_tables() const override
This function must assign a new value for each execution.
Definition: item_timefunc.h:1078
Definition: item_timefunc.h:1041
Item_func_curtime_local(const POS &pos, uint8 dec_arg)
Definition: item_timefunc.h:1046
const char * func_name() const override
Definition: item_timefunc.h:1048
Time_zone * time_zone() override
Definition: item_timefunc.cc:2059
Definition: item_timefunc.h:1051
Time_zone * time_zone() override
Definition: item_timefunc.cc:2063
const char * func_name() const override
Definition: item_timefunc.h:1058
Item_func_curtime_utc(const POS &pos, uint8 dec_arg)
Definition: item_timefunc.h:1056
Abstract CURTIME function. Children should define what time zone is used.
Definition: item_timefunc.h:1003
virtual Time_zone * time_zone()=0
String * val_str(String *) override
Definition: item_timefunc.cc:2046
table_map get_initial_pseudo_tables() const override
This function must assign a new value for each execution.
Definition: item_timefunc.h:1023
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2015
bool get_time(MYSQL_TIME *ltime) override
Definition: item_timefunc.cc:2038
bool check_function_as_value_generator(uchar *checker_args) override
Check if this item is allowed for a virtual column or inside a default expression.
Definition: item_timefunc.h:1031
Item_func_curtime(const POS &pos, uint8 dec_arg)
Constructor for Item_func_curtime.
Definition: item_timefunc.h:1016
bool itemize(Parse_context *pc, Item **res) override
The same as contextualize() but with additional parameter.
Definition: item_timefunc.cc:2008
longlong val_time_temporal() override
Return time value of item in packed longlong format.
Definition: item_timefunc.cc:2030
Item_time_func super
Definition: item_timefunc.h:1004
Definition: item_timefunc.h:1228
bool eq(const Item *item, bool binary_cmp) const override
Definition: item_timefunc.cc:2199
const bool is_time_format
Definition: item_timefunc.h:1230
int fixed_length
Definition: item_timefunc.h:1229
const char * func_name() const override
Definition: item_timefunc.h:1238
String * val_str(String *str) override
Definition: item_timefunc.cc:2287
Item_func_date_format(const POS &pos, Item *a, Item *b, bool is_time_format_arg=false)
Definition: item_timefunc.h:1234
String value
Definition: item_timefunc.h:1231
uint format_length(const String *format)
Definition: item_timefunc.cc:2217
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2171
TS-TODO: Item_func_dayname should be derived from Item_str_func.
Definition: item_timefunc.h:349
bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override
Definition: item_timefunc.h:358
enum Item_result result_type() const override
Definition: item_timefunc.h:364
bool get_time(MYSQL_TIME *ltime) override
Definition: item_timefunc.h:361
const char * func_name() const override
Definition: item_timefunc.h:355
Item_func_dayname(const POS &pos, Item *a)
Definition: item_timefunc.h:353
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1466
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:366
String * val_str(String *str) override
Definition: item_timefunc.cc:1477
MY_LOCALE * locale
Definition: item_timefunc.h:350
enum Functype functype() const override
Definition: item_timefunc.h:356
Definition: item_timefunc.h:123
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:132
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1233
Item_func_dayofmonth(const POS &pos, Item *a)
Definition: item_timefunc.h:125
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:131
const char * func_name() const override
Definition: item_timefunc.h:128
longlong val_int() override
Definition: item_timefunc.cc:1243
enum Functype functype() const override
Definition: item_timefunc.h:129
Definition: item_timefunc.h:186
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1215
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:194
longlong val_int() override
Definition: item_timefunc.cc:1225
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:193
Item_func_dayofyear(const POS &pos, Item *a)
Definition: item_timefunc.h:188
const char * func_name() const override
Definition: item_timefunc.h:190
enum Functype functype() const override
Definition: item_timefunc.h:191
Definition: item_timefunc.h:1213
const char * func_name() const override
Definition: item_timefunc.h:1216
Item_func_from_days(const POS &pos, Item *a)
Definition: item_timefunc.h:1215
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:1219
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1222
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:1218
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:1868
Definition: item_timefunc.h:1246
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:2337
const char * func_name() const override
Definition: item_timefunc.h:1250
Item_func_from_unixtime(const POS &pos, Item *a)
Definition: item_timefunc.h:1248
enum Functype functype() const override
Definition: item_timefunc.h:1251
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2329
Definition: item_timefunc.h:1624
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1632
String * val_str_ascii(String *str) override
Definition: item_timefunc.cc:3414
const char * func_name() const override
Definition: item_timefunc.h:1631
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_timefunc.cc:3441
Item_func_get_format(const POS &pos, enum_mysql_timestamp_type type_arg, Item *a)
Definition: item_timefunc.h:1627
const enum_mysql_timestamp_type type
Definition: item_timefunc.h:1626
Definition: item_timefunc.h:199
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1311
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:207
longlong val_int() override
Definition: item_timefunc.cc:1320
const char * func_name() const override
Definition: item_timefunc.h:203
enum Functype functype() const override
Definition: item_timefunc.h:204
Item_func_hour(const POS &pos, Item *a)
Definition: item_timefunc.h:201
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:206
Definition: item_timefunc.h:1679
enum Functype functype() const override
Definition: item_timefunc.h:1683
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:3721
const char * func_name() const override
Definition: item_timefunc.h:1684
Item_func_internal_check_time(const POS &pos, PT_item_list *list)
Definition: item_timefunc.h:1681
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:3713
Definition: item_timefunc.h:1669
const char * func_name() const override
Definition: item_timefunc.h:1674
enum Functype functype() const override
Definition: item_timefunc.h:1673
Item_func_internal_update_time(const POS &pos, PT_item_list *list)
Definition: item_timefunc.h:1671
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:3634
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:3642
Definition: item_timefunc.h:1655
Item_func_last_day(const POS &pos, Item *a)
Definition: item_timefunc.h:1657
const char * func_name() const override
Definition: item_timefunc.h:1660
enum Functype functype() const override
Definition: item_timefunc.h:1661
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1663
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:3610
Definition: item_timefunc.h:1495
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1504
enum Functype functype() const override
Definition: item_timefunc.h:1503
bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override
MAKEDATE(a,b) is a date function that creates a date value from a year and day value.
Definition: item_timefunc.cc:2969
Item_func_makedate(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:1497
const char * func_name() const override
Definition: item_timefunc.h:1501
Definition: item_timefunc.h:1566
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1572
bool get_time(MYSQL_TIME *ltime) override
MAKETIME(h,m,s) is a time function that calculates a time value from the total number of hours,...
Definition: item_timefunc.cc:3193
Item_func_maketime(const POS &pos, Item *a, Item *b, Item *c)
Definition: item_timefunc.h:1568
const char * func_name() const override
Definition: item_timefunc.h:1579
Definition: item_timefunc.h:1583
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:1591
longlong val_int() override
MICROSECOND(a) is a function ( extraction) that extracts the microseconds from a.
Definition: item_timefunc.cc:3262
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:3268
enum Functype functype() const override
Definition: item_timefunc.h:1588
Item_func_microsecond(const POS &pos, Item *a)
Definition: item_timefunc.h:1585
const char * func_name() const override
Definition: item_timefunc.h:1587
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:1590
Definition: item_timefunc.h:212
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1326
const char * func_name() const override
Definition: item_timefunc.h:216
longlong val_int() override
Definition: item_timefunc.cc:1335
Item_func_minute(const POS &pos, Item *a)
Definition: item_timefunc.h:214
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:219
enum Functype functype() const override
Definition: item_timefunc.h:217
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:220
TS-TODO: This should probably have Item_int_func as parent class.
Definition: item_timefunc.h:140
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1249
double val_real() override
Definition: item_timefunc.h:147
enum Item_result result_type() const override
Definition: item_timefunc.h:163
longlong val_int() override
Definition: item_timefunc.cc:1259
const char * func_name() const override
Definition: item_timefunc.h:161
String * val_str(String *str) override
Definition: item_timefunc.h:151
bool get_time(MYSQL_TIME *ltime) override
Definition: item_timefunc.h:160
Item_func_month(const POS &pos, Item *a)
Definition: item_timefunc.h:142
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:166
enum Functype functype() const override
Definition: item_timefunc.h:162
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:165
bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override
Definition: item_timefunc.h:157
Definition: item_timefunc.h:171
Item_func_monthname(const POS &pos, Item *a)
Definition: item_timefunc.h:175
MY_LOCALE * locale
Definition: item_timefunc.h:172
const char * func_name() const override
Definition: item_timefunc.h:176
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:181
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:180
String * val_str(String *str) override
Definition: item_timefunc.cc:1276
enum Functype functype() const override
Definition: item_timefunc.h:177
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1265
Definition: item_timefunc.h:1154
static void store_in(Field *field)
Stores the query start time in a field, truncating to the field's number of fractional second digits.
Definition: item_timefunc.cc:2075
Time_zone * time_zone() override
Definition: item_timefunc.cc:2082
const char * func_name() const override
Definition: item_timefunc.h:1171
Item_func_now_local(const POS &pos, uint8 dec_arg)
Definition: item_timefunc.h:1168
enum Functype functype() const override
Definition: item_timefunc.h:1172
Item_func_now_local(uint8 dec_arg)
Definition: item_timefunc.h:1167
Definition: item_timefunc.h:1175
const char * func_name() const override
Definition: item_timefunc.h:1187
Item_func_now_utc(const POS &pos, uint8 dec_arg)
Definition: item_timefunc.h:1182
bool itemize(Parse_context *pc, Item **res) override
The same as contextualize() but with additional parameter.
Definition: item_timefunc.cc:2084
Item_func_now super
Definition: item_timefunc.h:1176
Time_zone * time_zone() override
Definition: item_timefunc.cc:2091
Abstract CURRENT_TIMESTAMP function.
Definition: item_timefunc.h:1119
Item_func_now(uint8 dec_arg)
Constructor for Item_func_now.
Definition: item_timefunc.h:1130
type_conversion_status save_in_field_inner(Field *to, bool no_conversions) override
Helper function which does all of the work for save_in_field(Field*, bool), except some error checkin...
Definition: item_timefunc.cc:2122
longlong val_date_temporal() override
Return date value of item in packed longlong format.
Definition: item_timefunc.cc:2093
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2067
virtual Time_zone * time_zone()=0
bool check_function_as_value_generator(uchar *checker_args) override
Check if this item is allowed for a virtual column or inside a default expression.
Definition: item_timefunc.h:1144
String * val_str(String *) override
Definition: item_timefunc.cc:2109
table_map get_initial_pseudo_tables() const override
This function must assign a new value for each execution.
Definition: item_timefunc.h:1136
bool get_date(MYSQL_TIME *res, my_time_flags_t) override
Definition: item_timefunc.cc:2101
Item_func_now(const POS &pos, uint8 dec_arg)
Definition: item_timefunc.h:1131
Definition: item_timefunc.h:65
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1035
longlong val_int() override
Definition: item_timefunc.cc:1039
const char * func_name() const override
Definition: item_timefunc.h:70
Item_func_period_add(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:67
Definition: item_timefunc.h:74
const char * func_name() const override
Definition: item_timefunc.h:79
Item_func_period_diff(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:76
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1053
longlong val_int() override
Definition: item_timefunc.cc:1057
Definition: item_timefunc.h:225
const char * func_name() const override
Definition: item_timefunc.h:229
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:232
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:233
enum Functype functype() const override
Definition: item_timefunc.h:230
Item_func_quarter(const POS &pos, Item *a)
Definition: item_timefunc.h:227
longlong val_int() override
Returns the quarter of the year.
Definition: item_timefunc.cc:1304
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1291
Definition: item_timefunc.h:1286
const char * func_name() const override
Definition: item_timefunc.h:1297
Item_func_sec_to_time(const POS &pos, Item *item)
Definition: item_timefunc.h:1288
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1290
bool get_time(MYSQL_TIME *ltime) override
Definition: item_timefunc.cc:2154
Definition: item_timefunc.h:238
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:246
const char * func_name() const override
Definition: item_timefunc.h:242
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:245
enum Functype functype() const override
Definition: item_timefunc.h:243
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1341
Item_func_second(const POS &pos, Item *a)
Definition: item_timefunc.h:240
longlong val_int() override
Returns the second in time_exp in the range of 0 - 59.
Definition: item_timefunc.cc:1353
Definition: item_timefunc.h:1641
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:3528
Item_func_str_to_date(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:1649
bool val_datetime(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override
Get "native" temporal value as MYSQL_TIME.
Definition: item_timefunc.cc:3561
void fix_from_format(const char *format, size_t length)
Set type of datetime value (DATE/TIME/...) which will be produced according to format string.
Definition: item_timefunc.cc:3478
const char * func_name() const override
Definition: item_timefunc.h:1651
enum_mysql_timestamp_type cached_timestamp_type
Definition: item_timefunc.h:1642
SYSDATE() is like NOW(), but always uses the real current time, not the query_start().
Definition: item_timefunc.h:1194
table_map get_initial_pseudo_tables() const override
This function is non-deterministic and hence depends on the 'RAND' pseudo-table.
Definition: item_timefunc.h:1208
const char * func_name() const override
Definition: item_timefunc.h:1199
Item_func_sysdate_local(uint8 dec_arg)
Definition: item_timefunc.h:1196
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2148
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Converts current time in my_time_t to MYSQL_TIME represenatation for local time zone.
Definition: item_timefunc.cc:2135
Definition: item_timefunc.h:452
enum Functype functype() const override
Definition: item_timefunc.h:458
longlong val_int() override
Definition: item_timefunc.cc:1702
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:460
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1695
Item_func_time_to_sec(const POS &pos, Item *item)
Definition: item_timefunc.h:454
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:461
const char * func_name() const override
Definition: item_timefunc.h:457
Definition: item_timefunc.h:1544
bool get_time(MYSQL_TIME *ltime) override
TIMEDIFF(t,s) is a time function that calculates the time value between a start and end time.
Definition: item_timefunc.cc:3137
Item_func_timediff(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:1546
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1549
const char * func_name() const override
Definition: item_timefunc.h:1548
Definition: item_timefunc.h:1596
interval_type intervaltype() const
Definition: item_timefunc.h:1605
const char * func_name() const override
Definition: item_timefunc.h:1603
enum Functype functype() const override
Definition: item_timefunc.h:1604
longlong val_int() override
Definition: item_timefunc.cc:3274
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_timefunc.cc:3370
Item_func_timestamp_diff(const POS &pos, Item *a, Item *b, interval_type type_arg)
Definition: item_timefunc.h:1600
const interval_type int_type
Definition: item_timefunc.h:1597
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1607
Definition: item_timefunc.h:83
Item_func_to_days(const POS &pos, Item *a)
Definition: item_timefunc.h:85
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1072
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:92
longlong val_int() override
Definition: item_timefunc.cc:1085
enum Functype functype() const override
Definition: item_timefunc.h:88
const char * func_name() const override
Definition: item_timefunc.h:87
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:93
longlong val_int_endpoint(bool left_endp, bool *incl_endp) override
Definition: item_timefunc.cc:1166
enum_monotonicity_info get_monotonicity_info() const override
Definition: item_timefunc.cc:1147
Definition: item_timefunc.h:98
bool intro_version(uchar *int_arg) override
Definition: item_timefunc.h:109
enum_monotonicity_info get_monotonicity_info() const override
Definition: item_timefunc.cc:1157
Item_func_to_seconds(const POS &pos, Item *a)
Definition: item_timefunc.h:100
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1115
longlong val_int() override
Definition: item_timefunc.cc:1121
enum Functype functype() const override
Definition: item_timefunc.h:103
const char * func_name() const override
Definition: item_timefunc.h:102
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:107
longlong val_int_endpoint(bool left_endp, bool *incl_endp) override
Definition: item_timefunc.cc:1092
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:118
Definition: item_timefunc.h:400
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:417
longlong val_int_endpoint(bool left_endp, bool *incl_endp) override
Definition: item_timefunc.cc:1686
const char * func_name() const override
Definition: item_timefunc.h:411
Item_func_unix_timestamp(const POS &pos)
Definition: item_timefunc.h:404
bool check_function_as_value_generator(uchar *p_arg) override
Check if this item is allowed for a virtual column or inside a default expression.
Definition: item_timefunc.h:439
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:426
Item_timeval_func super
Definition: item_timefunc.h:401
enum_monotonicity_info get_monotonicity_info() const override
Definition: item_timefunc.cc:1679
Item_func_unix_timestamp(Item *a)
Definition: item_timefunc.h:406
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:423
bool itemize(Parse_context *pc, Item **res) override
The same as contextualize() but with additional parameter.
Definition: item_timefunc.cc:1657
enum Functype functype() const override
Definition: item_timefunc.h:412
Item_func_unix_timestamp(const POS &pos, Item *a)
Definition: item_timefunc.h:408
bool val_timeval(my_timeval *tm) override
Definition: item_timefunc.cc:1668
Definition: item_timefunc.h:251
const char * func_name() const override
Definition: item_timefunc.h:261
longlong val_int() override
Definition: item_timefunc.cc:1418
bool itemize(Parse_context *pc, Item **res) override
The same as contextualize() but with additional parameter.
Definition: item_timefunc.cc:1365
Item_func_week(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:256
Item_func_week(Item *a, Item *b)
Definition: item_timefunc.h:255
Item_int_func super
Definition: item_timefunc.h:252
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1376
enum Functype functype() const override
Definition: item_timefunc.h:262
TS-TODO: This should probably have Item_int_func as parent class.
Definition: item_timefunc.h:309
Item_func_weekday(const POS &pos, Item *a, bool type_arg)
Definition: item_timefunc.h:313
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:338
const char * func_name() const override
Definition: item_timefunc.h:332
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:339
double val_real() override
Definition: item_timefunc.h:319
String * val_str(String *str) override
Definition: item_timefunc.h:323
bool odbc_type
Definition: item_timefunc.h:310
enum Item_result result_type() const override
Definition: item_timefunc.h:336
enum Functype functype() const override
Definition: item_timefunc.h:335
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1446
bool get_time(MYSQL_TIME *ltime) override
Definition: item_timefunc.h:331
bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override
Definition: item_timefunc.h:328
longlong val_int() override
Definition: item_timefunc.cc:1455
Definition: item_timefunc.h:280
enum Functype functype() const override
Definition: item_timefunc.h:285
longlong val_int_endpoint(bool left_endp, bool *incl_endp) override
Definition: item_timefunc.cc:1601
enum_monotonicity_info get_monotonicity_info() const override
Definition: item_timefunc.cc:1593
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:289
const char * func_name() const override
Definition: item_timefunc.h:284
longlong val_int() override
Definition: item_timefunc.cc:1498
Item_func_year(const POS &pos, Item *a)
Definition: item_timefunc.h:282
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1491
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:290
Definition: item_timefunc.h:266
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:274
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1426
enum Functype functype() const override
Definition: item_timefunc.h:272
longlong val_int() override
Definition: item_timefunc.cc:1436
Item_func_yearweek(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:268
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:275
const char * func_name() const override
Definition: item_timefunc.h:271
Definition: item_func.h:93
bool param_type_uses_non_param(THD *thd, enum_field_types def=MYSQL_TYPE_VARCHAR)
Definition: item_func.cc:604
Item ** args
Array of pointers to arguments.
Definition: item_func.h:100
Functype
Definition: item_func.h:178
@ DATEADD_FUNC
Definition: item_func.h:280
@ YEAR_FUNC
Definition: item_func.h:261
@ HOUR_FUNC
Definition: item_func.h:271
@ TIME_TO_SEC_FUNC
Definition: item_func.h:285
@ FROM_UNIXTIME_FUNC
Definition: item_func.h:281
@ NOW_FUNC
Definition: item_func.h:219
@ CONVERT_TZ_FUNC
Definition: item_func.h:282
@ DD_INTERNAL_FUNC
Definition: item_func.h:233
@ DAY_FUNC
Definition: item_func.h:266
@ MAKEDATE_FUNC
Definition: item_func.h:263
@ DATE_FUNC
Definition: item_func.h:270
@ TIMESTAMPDIFF_FUNC
Definition: item_func.h:286
@ SECOND_FUNC
Definition: item_func.h:273
@ EXTRACT_FUNC
Definition: item_func.h:224
@ MONTH_FUNC
Definition: item_func.h:264
@ TO_SECONDS_FUNC
Definition: item_func.h:269
@ MICROSECOND_FUNC
Definition: item_func.h:274
@ QUARTER_FUNC
Definition: item_func.h:277
@ MONTHNAME_FUNC
Definition: item_func.h:265
@ TYPECAST_FUNC
Definition: item_func.h:225
@ LAST_DAY_FUNC
Definition: item_func.h:283
@ WEEKDAY_FUNC
Definition: item_func.h:279
@ ADDTIME_FUNC
Definition: item_func.h:276
@ DAYOFYEAR_FUNC
Definition: item_func.h:275
@ DAYNAME_FUNC
Definition: item_func.h:267
@ DATETIME_LITERAL
Definition: item_func.h:287
@ MINUTE_FUNC
Definition: item_func.h:272
@ TO_DAYS_FUNC
Definition: item_func.h:268
@ WEEK_FUNC
Definition: item_func.h:278
@ YEARWEEK_FUNC
Definition: item_func.h:262
@ UNIX_TIMESTAMP_FUNC
Definition: item_func.h:284
bool has_timestamp_args()
Definition: item_func.h:535
enum Type type() const override
Definition: item_func.h:305
bool param_type_is_default(THD *thd, uint start, uint end, uint step, enum_field_types def)
For arguments of this Item_func ("args" array), in range [start, start+step, start+2*step,...
Definition: item_func.cc:516
bool propagate_type(THD *thd, const Type_properties &type) override
Default implementation for all functions: Propagate base_item's type into all arguments.
Definition: item_func.cc:492
bool has_date_args()
Definition: item_func.h:545
uint arg_count
How many arguments in 'args'.
Definition: item_func.h:123
bool has_time_args()
Definition: item_func.h:556
bool has_datetime_args()
Definition: item_func.h:567
Definition: item_func.h:895
virtual const char * func_name() const =0
Definition: item_strfunc.h:141
Definition: item_strfunc.h:75
String * val_str_from_val_str_ascii(String *str, String *str2)
Definition: item_strfunc.cc:137
Abstract class for functions returning TIME, DATE, DATETIME types whose data type is known at constru...
Definition: item_timefunc.h:470
Item_temporal_func()
Definition: item_timefunc.h:475
Item_temporal_func(const POS &pos, Item *a)
Definition: item_timefunc.h:479
Item_temporal_func(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:481
Item_temporal_func(const POS &pos)
Definition: item_timefunc.h:476
Item_temporal_func(Item *a)
Definition: item_timefunc.h:478
Item_temporal_func(Item *a, Item *b, Item *c)
Definition: item_timefunc.h:483
Field * tmp_table_field(TABLE *table) override
Definition: item_timefunc.h:495
Item_temporal_func(const POS &pos, PT_item_list *list)
Definition: item_timefunc.h:488
bool check_precision()
Definition: item_timefunc.cc:789
Item_temporal_func(const POS &pos, Item *a, Item *b, Item *c)
Definition: item_timefunc.h:484
Item_temporal_func(const POS &pos, Item *a, Item *b, Item *c, Item *d)
Definition: item_timefunc.h:486
uint datetime_precision() override
DATETIME precision of the item: 0..6.
Definition: item_timefunc.h:502
void print(const THD *thd, String *str, enum_query_type query_type) const override
Appends function name with argument list or fractional seconds part to the String str.
Definition: item_timefunc.cc:809
uint time_precision() override
TIME precision of the item: 0..6.
Definition: item_timefunc.h:498
const CHARSET_INFO * charset_for_protocol() override
Definition: item_timefunc.h:492
Item_result result_type() const override
Definition: item_timefunc.h:491
Abstract class for functions returning TIME, DATE, DATETIME or string values, whose data type depends...
Definition: item_timefunc.h:514
const CHARSET_INFO * charset_for_protocol() override
Definition: item_timefunc.h:536
Field * tmp_table_field(TABLE *table) override
Definition: item_timefunc.h:547
my_decimal * val_decimal(my_decimal *decimal_value) override
Definition: item_timefunc.cc:838
sql_mode_t sql_mode
Definition: item_timefunc.h:516
double val_real() override
Definition: item_timefunc.h:551
Item_result result_type() const override
Definition: item_timefunc.h:535
bool get_time(MYSQL_TIME *ltime) override
Definition: item_timefunc.cc:873
Item_temporal_hybrid_func(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:532
virtual bool val_datetime(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date)=0
Get "native" temporal value as MYSQL_TIME.
Item_temporal_hybrid_func(Item *a, Item *b)
Definition: item_timefunc.h:530
String * val_str(String *str) override
Return string value in @character_set_connection.
Definition: item_timefunc.h:560
String * val_str_ascii(String *str) override
Return string value in ASCII character set.
Definition: item_timefunc.cc:884
longlong val_int() override
Definition: item_timefunc.h:550
String ascii_buf
Definition: item_timefunc.h:517
type_conversion_status save_in_field_inner(Field *field, bool no_conversions) override
Helper function which does all of the work for save_in_field(Field*, bool), except some error checkin...
Definition: item_timefunc.cc:831
bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override
Definition: item_timefunc.cc:859
Abstract class for functions returning TIME values.
Definition: item_timefunc.h:677
type_conversion_status save_in_field_inner(Field *field, bool) override
Helper function which does all of the work for save_in_field(Field*, bool), except some error checkin...
Definition: item_timefunc.h:679
longlong val_int() override
Definition: item_timefunc.h:707
String * val_str(String *str) override
Definition: item_timefunc.h:712
Item_time_func(const POS &pos, Item *a)
Definition: item_timefunc.h:691
Item_time_func(const POS &pos, Item *a, Item *b, Item *c)
Definition: item_timefunc.h:698
Item_time_func(Item *a)
Definition: item_timefunc.h:688
longlong val_time_temporal() override
Return time value of item in packed longlong format.
Definition: item_timefunc.cc:908
my_decimal * val_decimal(my_decimal *decimal_value) override
Definition: item_timefunc.h:703
Item_time_func(const POS &pos)
Definition: item_timefunc.h:685
bool get_time(MYSQL_TIME *res) override=0
double val_real() override
Definition: item_timefunc.h:702
Item_time_func(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:694
bool get_date(MYSQL_TIME *res, my_time_flags_t) override
Definition: item_timefunc.h:709
Item_time_func()
Definition: item_timefunc.h:684
TIME'10:10:10'.
Definition: item_timefunc.h:868
bool get_time(MYSQL_TIME *ltime) override
Definition: item_timefunc.h:889
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:897
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:898
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item_timefunc.h:902
bool basic_const_item() const override
Returns true if this is a simple constant item like an integer, not a constant expression.
Definition: item_timefunc.h:899
Item_time_literal(MYSQL_TIME *ltime, uint dec_arg)
Constructor for Item_time_literal.
Definition: item_timefunc.h:877
const char * func_name() const override
Definition: item_timefunc.h:882
void print(const THD *thd, String *str, enum_query_type query_type) const override
Appends function name with argument list or fractional seconds part to the String str.
Definition: item_timefunc.cc:967
longlong val_time_temporal() override
Return time value of item in packed longlong format.
Definition: item_timefunc.h:885
bool eq(const Item *item, bool binary_cmp) const override
Definition: item_timefunc.cc:959
table_map used_tables() const override
Definition: item_timefunc.h:900
table_map not_null_tables() const override
Return table map of tables that can't be NULL tables (tables that are used in a context where if they...
Definition: item_timefunc.h:901
String * val_str(String *str) override
Definition: item_timefunc.h:893
MYSQL_TIME_cache cached_time
Definition: item_timefunc.h:869
Definition: item_timefunc.h:372
bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override
Definition: item_timefunc.h:389
virtual bool val_timeval(my_timeval *tm)=0
Return timestamp in "struct timeval" format.
longlong val_int() override
Definition: item_timefunc.cc:1628
String * val_str(String *str) override
Definition: item_timefunc.cc:1648
Item_timeval_func(const POS &pos, Item *a)
Definition: item_timefunc.h:377
my_decimal * val_decimal(my_decimal *decimal_value) override
Definition: item_timefunc.cc:1633
Item_timeval_func(Item *a)
Definition: item_timefunc.h:376
enum Item_result result_type() const override
Definition: item_timefunc.h:395
Item_timeval_func(const POS &pos)
Definition: item_timefunc.h:374
double val_real() override
Definition: item_timefunc.cc:1641
bool get_time(MYSQL_TIME *ltime) override
Definition: item_timefunc.h:392
Definition: item_timefunc.h:1395
bool m_explicit_cast
Definition: item_timefunc.h:1396
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1407
void print(const THD *thd, String *str, enum_query_type query_type) const override
Appends function name with argument list or fractional seconds part to the String str.
Definition: item_timefunc.cc:2923
const char * cast_type() const
Definition: item_timefunc.h:1417
bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:2932
const char * func_name() const override
Definition: item_timefunc.h:1413
bool is_explicit_cast() const
Definition: item_timefunc.h:1415
enum Functype functype() const override
Definition: item_timefunc.h:1414
Item_typecast_date(Item *a, bool explicit_cast)
Definition: item_timefunc.h:1399
Item_typecast_date(const POS &pos, Item *a)
Definition: item_timefunc.h:1403
Definition: item_timefunc.h:1457
Item_typecast_datetime(Item *a, uint8 dec_arg)
Definition: item_timefunc.h:1474
Item_typecast_datetime(const POS &pos, Item *a)
Definition: item_timefunc.h:1466
Item_typecast_datetime(Item *a, bool explicit_cast)
Definition: item_timefunc.h:1462
enum Functype functype() const override
Definition: item_timefunc.h:1481
bool is_explicit_cast() const
Definition: item_timefunc.h:1483
const char * func_name() const override
Definition: item_timefunc.h:1480
bool m_explicit_cast
Definition: item_timefunc.h:1459
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1484
Item_typecast_datetime(const POS &pos, Item *a, uint8 dec_arg)
Definition: item_timefunc.h:1469
void print(const THD *thd, String *str, enum_query_type query_type) const override
Appends function name with argument list or fractional seconds part to the String str.
Definition: item_timefunc.cc:2863
bool detect_precision_from_arg
Definition: item_timefunc.h:1458
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:2873
const char * cast_type() const
Definition: item_timefunc.h:1482
Definition: item_timefunc.h:1420
Item_typecast_time(Item *a, uint8 dec_arg)
Definition: item_timefunc.h:1436
Item_typecast_time(const POS &pos, Item *a)
Definition: item_timefunc.h:1428
bool is_explicit_cast() const
Definition: item_timefunc.h:1444
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1447
Item_typecast_time(const POS &pos, Item *a, uint8 dec_arg)
Definition: item_timefunc.h:1431
bool get_time(MYSQL_TIME *ltime) override
Definition: item_timefunc.cc:2911
const char * cast_type() const
Definition: item_timefunc.h:1446
enum Functype functype() const override
Definition: item_timefunc.h:1443
bool detect_precision_from_arg
Definition: item_timefunc.h:1421
Item_typecast_time(Item *a)
Definition: item_timefunc.h:1425
void print(const THD *thd, String *str, enum_query_type query_type) const override
Appends function name with argument list or fractional seconds part to the String str.
Definition: item_timefunc.cc:2901
const char * func_name() const override
Definition: item_timefunc.h:1442
bool m_explicit_cast
Definition: item_timefunc.h:1422
Definition: item_timefunc.h:295
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:1504
Item_typecast_year(const POS &pos, Item *a)
Definition: item_timefunc.h:297
longlong val_int() override
Definition: item_timefunc.cc:1512
enum Functype functype() const override
Definition: item_timefunc.h:302
const char * func_name() const override
Definition: item_timefunc.h:301
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:802
void set_nullable(bool nullable)
Definition: item.h:3344
void set_data_type_date()
Set all type properties for Item of DATE type.
Definition: item.h:1476
DTCollation collation
Character set and collation properties assigned for this Item.
Definition: item.h:3268
longlong val_int_from_decimal()
Definition: item.cc:441
void set_data_type(enum_field_types data_type)
Set the data type of the current Item.
Definition: item.h:1329
longlong val_int_from_datetime()
Definition: item.cc:472
bool get_time_from_string(MYSQL_TIME *ltime)
Convert val_str() to time in MYSQL_TIME.
Definition: item.cc:1487
static const CHARSET_INFO * default_charset()
Definition: item.cc:1599
String * val_string_from_date(String *str)
Definition: item.cc:295
double val_real_from_decimal()
Definition: item.cc:423
String * val_string_from_datetime(String *str)
Definition: item.cc:285
bool get_date_from_time(MYSQL_TIME *ltime)
Convert get_time() from time to date in MYSQL_TIME.
Definition: item.cc:1437
bool get_time_from_datetime(MYSQL_TIME *ltime)
Convert datetime to time.
Definition: item.cc:1532
longlong val_int_from_date()
Definition: item.cc:464
void set_data_type_year()
Set the data type of the Item to be YEAR.
Definition: item.h:1541
Field * tmp_table_field_from_field_type(TABLE *table, bool fixed_length) const
Create a field based on field_type of argument.
Definition: item.cc:6282
bool get_time_from_date(MYSQL_TIME *ltime)
Convert date to time.
Definition: item.cc:1524
enum_field_types data_type() const
Retrieve the derived data type of the Item.
Definition: item.h:1297
bool fixed
True if item has been resolved.
Definition: item.h:3332
longlong val_int_from_time()
Definition: item.cc:450
bool null_value
True if item is null.
Definition: item.h:3369
void set_data_type_datetime(uint8 fsp)
Set all properties for Item of DATETIME type.
Definition: item.h:1500
virtual uint datetime_precision()
DATETIME precision of the item: 0..6.
Definition: item.cc:675
bool get_date_from_numeric(MYSQL_TIME *ltime, my_time_flags_t fuzzydate)
Convert a numeric type to date.
Definition: item.cc:1447
my_decimal * val_decimal_from_date(my_decimal *decimal_value)
Definition: item.cc:348
@ MARKER_NONE
Definition: item.h:3288
bool get_date_from_string(MYSQL_TIME *ltime, my_time_flags_t flags)
Convert val_str() to date in MYSQL_TIME.
Definition: item.cc:1400
type_conversion_status save_time_in_field(Field *field)
Definition: item.cc:495
item_marker marker
This member has several successive meanings, depending on the phase we're in (.
Definition: item.h:3325
bool get_time_from_numeric(MYSQL_TIME *ltime)
Convert a numeric type to time.
Definition: item.cc:1539
uint8 decimals
Number of decimals in result when evaluating this item.
Definition: item.h:3341
void set_data_type_string(uint32 max_l)
Set the Item to be variable length string.
Definition: item.h:1387
bool get_date_from_int(MYSQL_TIME *ltime, my_time_flags_t flags)
Convert val_int() to date in MYSQL_TIME.
Definition: item.cc:1428
String * val_string_from_time(String *str)
Definition: item.cc:305
void set_data_type_longlong()
Set the data type of the Item to be longlong.
Definition: item.h:1344
void set_data_type_time(uint8 fsp)
Set all type properties for Item of TIME type.
Definition: item.h:1488
void set_data_type_decimal(uint8 precision, uint8 scale)
Set the data type of the Item to be decimal.
Definition: item.h:1357
my_decimal * val_decimal_from_time(my_decimal *decimal_value)
Definition: item.cc:357
type_conversion_status save_date_in_field(Field *field)
Definition: item.cc:502
bool get_time_from_int(MYSQL_TIME *ltime)
Convert val_int() to time in MYSQL_TIME.
Definition: item.cc:1515
Cache for MYSQL_TIME value with various representations.
Definition: item_timefunc.h:726
uint string_length
length of string
Definition: item_timefunc.h:730
bool get_date(MYSQL_TIME *ltime, uint fuzzyflags) const
Store MYSQL_TIME representation into the given date/datetime variable checking date flags.
Definition: item_timefunc.cc:1948
void set_time(MYSQL_TIME *ltime, uint8 dec_arg)
Set time and time_packed from a TIME value.
Definition: item_timefunc.cc:1892
MYSQL_TIME * get_TIME_ptr()
Return pointer to MYSQL_TIME representation.
Definition: item_timefunc.h:811
bool get_time(MYSQL_TIME *ltime) const
Store MYSQL_TIME representation into the given time variable.
Definition: item_timefunc.h:804
longlong val_packed() const
Return packed representation.
Definition: item_timefunc.h:792
MYSQL_TIME_cache()
Definition: item_timefunc.h:742
uint8 decimals() const
Return number of decimal digits.
Definition: item_timefunc.h:784
uint8 dec
Number of decimals.
Definition: item_timefunc.h:731
const char * cptr() const
Return C string representation.
Definition: item_timefunc.h:822
longlong time_packed
packed representation
Definition: item_timefunc.h:728
void set_date(MYSQL_TIME *ltime)
Set time and time_packed from a DATE value.
Definition: item_timefunc.cc:1900
MYSQL_TIME time
MYSQL_TIME representation.
Definition: item_timefunc.h:727
void set_datetime(MYSQL_TIME *ltime, uint8 dec_arg, const Time_zone *tz=nullptr)
Set time and time_packed from a DATETIME value.
Definition: item_timefunc.cc:1908
bool eq(const MYSQL_TIME_cache &tm) const
Test if cached value is equal to another MYSQL_TIME_cache value.
Definition: item_timefunc.h:777
String * val_str(String *str)
Store string representation into String.
Definition: item_timefunc.cc:1955
char string_buff[MAX_DATE_STRING_REP_LENGTH]
string representation
Definition: item_timefunc.h:729
void get_TIME(MYSQL_TIME *ltime) const
Store MYSQL_TIME representation into the given MYSQL_TIME variable.
Definition: item_timefunc.h:736
Definition: sql_locale.h:36
Wrapper class for an Item list head, used to allocate Item lists in the parser in a context-independe...
Definition: parse_tree_helpers.h:101
Base class for parse tree nodes (excluding the Parse_tree_root hierarchy)
Definition: parse_tree_node_base.h:102
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:166
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_class.h:945
This class represents abstract time zone and provides basic interface for MYSQL_TIME <-> my_time_t co...
Definition: tztime.h:48
my_decimal class limits 'decimal_t' type to what we need in MySQL.
Definition: my_decimal.h:93
ulonglong sql_mode_t
Definition: dd_event.h:36
char * pos
Definition: do_ctype.cc:76
enum_query_type
Query type constants (usable as bitmap flags).
Definition: enum_query_type.h:30
Fido Client Authentication nullptr
Definition: fido_client_plugin.cc:221
This file contains the field type.
@ MYSQL_TYPE_LONGLONG
Definition: field_types.h:65
@ MYSQL_TYPE_TIME
Definition: field_types.h:68
@ MYSQL_TYPE_STRING
Definition: field_types.h:89
@ MYSQL_TYPE_NEWDECIMAL
Definition: field_types.h:81
@ MYSQL_TYPE_DATE
Definition: field_types.h:67
@ MYSQL_TYPE_DATETIME
Definition: field_types.h:69
static const std::string dec("DECRYPTION")
enum monotonicity_info enum_monotonicity_info
const char * interval_names[]
Definition: item_timefunc.cc:2640
bool make_date_time(Date_time_format *format, MYSQL_TIME *l_time, enum_mysql_timestamp_type type, String *str)
Create a formated date/time value in a string.
Definition: item_timefunc.cc:505
date_time_format
Definition: item_timefunc.h:1616
@ USA_FORMAT
Definition: item_timefunc.h:1617
@ JIS_FORMAT
Definition: item_timefunc.h:1618
@ INTERNAL_FORMAT
Definition: item_timefunc.h:1621
@ EUR_FORMAT
Definition: item_timefunc.h:1620
@ ISO_FORMAT
Definition: item_timefunc.h:1619
bool get_interval_value(Item *args, interval_type int_type, String *str_value, Interval *interval)
Convert a string to a interval value.
Definition: item_timefunc.cc:1717
A better implementation of the UNIX ctype(3) library.
MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_bin
Definition: ctype-bin.cc:510
Some integer typedefs for easier portability.
uint8_t uint8
Definition: my_inttypes.h:62
unsigned char uchar
Definition: my_inttypes.h:51
long long int longlong
Definition: my_inttypes.h:54
uint64_t table_map
Definition: my_table_map.h:29
Interface for low level time utilities.
constexpr const int DATETIME_MAX_DECIMALS
Definition: my_time.h:143
unsigned int my_time_flags_t
Time handling defaults.
constexpr const std::size_t MAX_DATE_STRING_REP_LENGTH
Required buffer length for my_time_to_str, my_date_to_str, my_datetime_to_str and TIME_to_string func...
Definition: my_time.h:428
interval_type
Available interval types used in any statement.
Definition: my_time.h:453
@ INTERVAL_HOUR_SECOND
Definition: my_time.h:468
@ INTERVAL_MONTH
Definition: my_time.h:456
@ INTERVAL_HOUR_MICROSECOND
Definition: my_time.h:471
@ INTERVAL_MINUTE
Definition: my_time.h:460
@ INTERVAL_HOUR_MINUTE
Definition: my_time.h:467
@ INTERVAL_DAY
Definition: my_time.h:458
@ INTERVAL_MINUTE_MICROSECOND
Definition: my_time.h:472
@ INTERVAL_MINUTE_SECOND
Definition: my_time.h:469
@ INTERVAL_QUARTER
Definition: my_time.h:455
@ INTERVAL_YEAR
Definition: my_time.h:454
@ INTERVAL_DAY_MICROSECOND
Definition: my_time.h:470
@ INTERVAL_SECOND_MICROSECOND
Definition: my_time.h:473
@ INTERVAL_SECOND
Definition: my_time.h:461
@ INTERVAL_DAY_HOUR
Definition: my_time.h:464
@ INTERVAL_HOUR
Definition: my_time.h:459
@ INTERVAL_YEAR_MONTH
Definition: my_time.h:463
@ INTERVAL_DAY_SECOND
Definition: my_time.h:466
@ INTERVAL_MICROSECOND
Definition: my_time.h:462
@ INTERVAL_DAY_MINUTE
Definition: my_time.h:465
Time declarations shared between the server and client API: you should not add anything to this heade...
enum_mysql_timestamp_type
Definition: mysql_time.h:44
@ MYSQL_TIMESTAMP_NONE
Definition: mysql_time.h:45
static int interval
Definition: mysqladmin.cc:64
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1055
bool length(const dd::Spatial_reference_system *srs, const Geometry *g1, double *length, bool *null) noexcept
Computes the length of linestrings and multilinestrings.
Definition: length.cc:75
required string type
Definition: replication_group_member_actions.proto:33
"public" interface to sys_var - server configuration variables.
type_conversion_status
Status when storing a value in a field or converting from one datatype to another.
Definition: field.h:200
@ VGS_CHECK_CONSTRAINT
Definition: field.h:474
@ VGS_GENERATED_COLUMN
Definition: field.h:472
File containing constants that can be used throughout the server.
constexpr const table_map RAND_TABLE_BIT
Definition: sql_const.h:111
constexpr const table_map INNER_TABLE_BIT
Definition: sql_const.h:109
Our own string classes, used pervasively throughout the executor.
Definition: m_ctype.h:354
Struct used to pass around arguments to/from check_function_as_value_generator.
Definition: item.h:485
const char * banned_function_name
the name of the function which is not allowed
Definition: item.h:499
Value_generator_source source
Definition: item.h:497
Representation of time formats.
Definition: sql_time.h:60
Struct representing a duration.
Definition: my_time.h:226
Definition: mysql_time.h:81
enum enum_mysql_timestamp_type time_type
Definition: mysql_time.h:85
Environment data for the contextualization phase.
Definition: parse_tree_node_base.h:90
Definition: table.h:1394
Bison "location" class.
Definition: parse_location.h:42
Replacement of system's struct timeval to ensure we can carry 64 bit values even on a platform which ...
Definition: my_time_t.h:44
static task_arg int_arg(int i)
Definition: task.h:164
unsigned int uint
Definition: uca-dump.cc:29
Item_result
Type of the user defined function return slot and arguments.
Definition: udf_registration_types.h:38
@ STRING_RESULT
not valid for UDFs
Definition: udf_registration_types.h:40
@ DECIMAL_RESULT
not valid for UDFs
Definition: udf_registration_types.h:44
@ INT_RESULT
double
Definition: udf_registration_types.h:42