MySQL 8.0.33
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, 2023, 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:
67 Item_func_period_add(const POS &pos, Item *a, Item *b)
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:
76 Item_func_period_diff(const POS &pos, Item *a, Item *b)
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:
85 Item_func_to_days(const POS &pos, Item *a) : Item_int_func(pos, a) {}
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:
100 Item_func_to_seconds(const POS &pos, Item *a) : Item_int_func(pos, a) {}
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:
125 Item_func_dayofmonth(const POS &pos, Item *a) : Item_int_func(pos, a) {}
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:
142 Item_func_month(const POS &pos, Item *a) : Item_func(pos, a) {
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:
175 Item_func_monthname(const POS &pos, Item *a) : Item_str_func(pos, a) {}
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:
188 Item_func_dayofyear(const POS &pos, Item *a) : Item_int_func(pos, a) {}
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:
201 Item_func_hour(const POS &pos, Item *a) : Item_int_func(pos, a) {}
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:
214 Item_func_minute(const POS &pos, Item *a) : Item_int_func(pos, a) {}
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:
227 Item_func_quarter(const POS &pos, Item *a) : Item_int_func(pos, a) {}
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:
240 Item_func_second(const POS &pos, Item *a) : Item_int_func(pos, a) {}
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:
268 Item_func_yearweek(const POS &pos, Item *a, Item *b)
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:
282 Item_func_year(const POS &pos, Item *a) : Item_int_func(pos, a) {}
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:
297 Item_typecast_year(const POS &pos, Item *a) : Item_int_func(pos, a) {
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:
353 Item_func_dayname(const POS &pos, Item *a)
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
377 Item_timeval_func(const POS &pos, Item *a) : Item_func(pos, a) {}
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:
404 explicit Item_func_unix_timestamp(const POS &pos) : Item_timeval_func(pos) {}
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:
454 Item_func_time_to_sec(const POS &pos, Item *item)
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
479 Item_temporal_func(const POS &pos, Item *a) : Item_func(pos, a) {}
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) {}
484 Item_temporal_func(const POS &pos, Item *a, Item *b, Item *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:
582 explicit Item_date_func(const POS &pos) : Item_temporal_func(pos) {
584 }
586 Item_date_func(const POS &pos, Item *a) : Item_temporal_func(pos, a) {
588 }
589 Item_date_func(const POS &pos, Item *a, Item *b)
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 }
632 Item_datetime_func(const POS &pos, Item *a) : Item_temporal_func(pos, a) {
634 }
635 Item_datetime_func(const POS &pos, Item *a, Item *b)
636 : Item_temporal_func(pos, a, b) {
638 }
641 }
642 Item_datetime_func(const POS &pos, Item *a, Item *b, Item *c)
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:
685 explicit Item_time_func(const POS &pos) : Item_temporal_func(pos) {
687 }
690 }
691 Item_time_func(const POS &pos, Item *a) : Item_temporal_func(pos, a) {
693 }
694 Item_time_func(const POS &pos, Item *a, Item *b)
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:
969 Item_func_at_time_zone(const POS &pos, Item *datetime,
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 */
1016 Item_func_curtime(const POS &pos, uint8 dec_arg) : Item_time_func(pos) {
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:
1046 Item_func_curtime_local(const POS &pos, uint8 dec_arg)
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:
1056 Item_func_curtime_utc(const POS &pos, uint8 dec_arg)
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:
1073 explicit Item_func_curdate(const POS &pos) : Item_date_func(pos) {}
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:
1101 explicit Item_func_curdate_local(const POS &pos) : Item_func_curdate(pos) {}
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 */
1131 Item_func_now(const POS &pos, uint8 dec_arg) : Item_datetime_func(pos) {
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
1168 Item_func_now_local(const POS &pos, uint8 dec_arg)
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:
1182 Item_func_now_utc(const POS &pos, uint8 dec_arg)
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:
1215 Item_func_from_days(const POS &pos, Item *a) : Item_date_func(pos, a) {}
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; }
1219 enum Functype functype() const override { return FROM_DAYS_FUNC; }
1221 return has_date_args() || has_time_args();
1222 }
1223 bool resolve_type(THD *thd) override {
1224 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_LONGLONG)) return true;
1225 return Item_date_func::resolve_type(thd);
1226 }
1227};
1228
1231 const bool is_time_format;
1233
1234 public:
1236 bool is_time_format_arg = false)
1237 : Item_str_func(pos, a, b), is_time_format(is_time_format_arg) {}
1238 String *val_str(String *str) override;
1239 const char *func_name() const override {
1240 return is_time_format ? "time_format" : "date_format";
1241 }
1242 bool resolve_type(THD *thd) override;
1243 uint format_length(const String *format);
1244 bool eq(const Item *item, bool binary_cmp) const override;
1245};
1246
1248 public:
1250 : Item_datetime_func(pos, a) {}
1251 const char *func_name() const override { return "from_unixtime"; }
1252 enum Functype functype() const override { return FROM_UNIXTIME_FUNC; }
1253 bool resolve_type(THD *thd) override;
1254 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1255};
1256
1257/*
1258 This class represents CONVERT_TZ() function.
1259 The important fact about this function that it is handled in special way.
1260 When such function is met in expression time_zone system tables are added
1261 to global list of tables to open, so later those already opened and locked
1262 tables can be used during this function calculation for loading time zone
1263 descriptions.
1264*/
1266 /*
1267 If time zone parameters are constants we are caching objects that
1268 represent them (we use separate from_tz_cached/to_tz_cached members
1269 to indicate this fact, since NULL is legal value for from_tz/to_tz
1270 members.
1271 */
1274
1275 public:
1276 Item_func_convert_tz(const POS &pos, Item *a, Item *b, Item *c)
1277 : Item_datetime_func(pos, a, b, c),
1278 from_tz_cached(false),
1279 to_tz_cached(false) {}
1280 const char *func_name() const override { return "convert_tz"; }
1281 enum Functype functype() const override { return CONVERT_TZ_FUNC; }
1282 bool resolve_type(THD *) override;
1283 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1284 void cleanup() override;
1285};
1286
1288 public:
1289 Item_func_sec_to_time(const POS &pos, Item *item)
1290 : Item_time_func(pos, item) {}
1291 bool resolve_type(THD *thd) override {
1292 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_NEWDECIMAL)) return true;
1294 std::min(args[0]->decimals, uint8{DATETIME_MAX_DECIMALS}));
1295 set_nullable(true);
1296 return false;
1297 }
1298 const char *func_name() const override { return "sec_to_time"; }
1299 bool get_time(MYSQL_TIME *ltime) override;
1300};
1301
1302extern const char *interval_names[];
1303
1304/**
1305 Implementation class for the DATE_ADD and DATE_SUB functions.
1306 Also used for the synonym functions ADDDATE and SUBDATE.
1307*/
1309 public:
1311 bool subtract)
1312 : Item_temporal_hybrid_func(pos, a, b),
1314 m_subtract(subtract) {}
1315 /**
1316 POS-less ctor for post-parse construction with implicit addition to THD's
1317 free_list (see Item::Item() no-argument ctor).
1318 */
1322 m_subtract(subtract) {}
1323 const char *func_name() const override { return "date_add_interval"; }
1324 enum Functype functype() const override { return DATEADD_FUNC; }
1325 bool resolve_type(THD *) override;
1326 bool eq(const Item *item, bool binary_cmp) const override;
1327 void print(const THD *thd, String *str,
1328 enum_query_type query_type) const override;
1330 bool is_subtract() const { return m_subtract; }
1331
1332 private:
1333 bool val_datetime(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override;
1334 bool get_date_internal(MYSQL_TIME *res, my_time_flags_t fuzzy_date);
1335 bool get_time_internal(MYSQL_TIME *res);
1336
1337 /// The type of the interval argument
1339 /// False if function is DATE_ADD, true if function is DATE_SUB
1340 const bool m_subtract;
1342};
1343
1344class Item_extract final : public Item_int_func {
1346
1347 public:
1348 const interval_type int_type; // keep it public
1349 Item_extract(const POS &pos, interval_type type_arg, Item *a)
1350 : Item_int_func(pos, a), int_type(type_arg) {}
1351 longlong val_int() override;
1352 enum Functype functype() const override { return EXTRACT_FUNC; }
1353 const char *func_name() const override { return "extract"; }
1354 bool resolve_type(THD *) override;
1355 bool eq(const Item *item, bool binary_cmp) const override;
1356 void print(const THD *thd, String *str,
1357 enum_query_type query_type) const override;
1358 bool check_partition_func_processor(uchar *) override { return false; }
1360 switch (int_type) {
1361 case INTERVAL_YEAR:
1363 case INTERVAL_QUARTER:
1364 case INTERVAL_MONTH:
1365 /* case INTERVAL_WEEK: Not allowed as partitioning function, bug#57071 */
1366 case INTERVAL_DAY:
1367 return !has_date_args();
1368 case INTERVAL_DAY_HOUR:
1372 return !has_datetime_args();
1373 case INTERVAL_HOUR:
1376 case INTERVAL_MINUTE:
1378 case INTERVAL_SECOND:
1383 return !has_time_args();
1384 default:
1385 /*
1386 INTERVAL_LAST is only an end marker,
1387 INTERVAL_WEEK depends on default_week_format which is a session
1388 variable and cannot be used for partitioning. See bug#57071.
1389 */
1390 break;
1391 }
1392 return true;
1393 }
1394};
1395
1398
1399 public:
1400 Item_typecast_date(Item *a, bool explicit_cast)
1401 : Item_date_func(a), m_explicit_cast(explicit_cast) {
1402 set_nullable(true);
1403 }
1404 Item_typecast_date(const POS &pos, Item *a) : Item_date_func(pos, a) {
1405 set_nullable(true);
1406 }
1407
1408 bool resolve_type(THD *thd) override {
1409 if (args[0]->propagate_type(thd, MYSQL_TYPE_DATE, false, true)) return true;
1410 return Item_date_func::resolve_type(thd);
1411 }
1412 void print(const THD *thd, String *str,
1413 enum_query_type query_type) const override;
1414 const char *func_name() const override { return "cast_as_date"; }
1415 enum Functype functype() const override { return TYPECAST_FUNC; }
1416 bool is_explicit_cast() const { return m_explicit_cast; }
1417 bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override;
1418 const char *cast_type() const { return "date"; }
1419};
1420
1424
1425 public:
1428 }
1429 Item_typecast_time(const POS &pos, Item *a) : Item_time_func(pos, a) {
1431 }
1432 Item_typecast_time(const POS &pos, Item *a, uint8 dec_arg)
1433 : Item_time_func(pos, a) {
1435 decimals = dec_arg;
1436 }
1439 decimals = dec_arg;
1440 }
1441 void print(const THD *thd, String *str,
1442 enum_query_type query_type) const override;
1443 const char *func_name() const override { return "cast_as_time"; }
1444 enum Functype functype() const override { return TYPECAST_FUNC; }
1445 bool is_explicit_cast() const { return m_explicit_cast; }
1446 bool get_time(MYSQL_TIME *ltime) override;
1447 const char *cast_type() const { return "time"; }
1448 bool resolve_type(THD *thd) override {
1449 if (args[0]->propagate_type(thd, MYSQL_TYPE_DATETIME, false, true))
1450 return true;
1452 : decimals);
1453 set_nullable(true);
1454 return false;
1455 }
1456};
1457
1461
1462 public:
1463 Item_typecast_datetime(Item *a, bool explicit_cast)
1464 : Item_datetime_func(a), m_explicit_cast(explicit_cast) {
1466 }
1469 }
1470 Item_typecast_datetime(const POS &pos, Item *a, uint8 dec_arg)
1471 : Item_datetime_func(pos, a) {
1473 decimals = dec_arg;
1474 }
1477 decimals = dec_arg;
1478 }
1479 void print(const THD *thd, String *str,
1480 enum_query_type query_type) const override;
1481 const char *func_name() const override { return "cast_as_datetime"; }
1482 enum Functype functype() const override { return TYPECAST_FUNC; }
1483 const char *cast_type() const { return "datetime"; }
1484 bool is_explicit_cast() const { return m_explicit_cast; }
1485 bool resolve_type(THD *thd) override {
1486 if (args[0]->propagate_type(thd, MYSQL_TYPE_DATETIME, false, true))
1487 return true;
1490 set_nullable(true);
1491 return false;
1492 }
1493 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1494};
1495
1497 public:
1498 Item_func_makedate(const POS &pos, Item *a, Item *b)
1499 : Item_date_func(pos, a, b) {
1500 set_nullable(true);
1501 }
1502 const char *func_name() const override { return "makedate"; }
1503 bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override;
1504 enum Functype functype() const override { return MAKEDATE_FUNC; }
1505 bool resolve_type(THD *thd) override {
1506 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_LONGLONG)) return true;
1507 return Item_date_func::resolve_type(thd);
1508 }
1509};
1510
1511/**
1512 Add a time expression to a temporal expression, or
1513 subtract a time expression from a temporal expression.
1514 Used to implement the functions ADDTIME and SUBTIME, and the
1515 two-argument version of TIMESTAMP (which sets m_datetime = true).
1516*/
1518 const bool m_datetime; ///< True if first argument expected to be datetime
1519 int m_sign; ///< +1 for ADD, -1 for SUBTRACT
1520
1521 bool val_datetime(MYSQL_TIME *time, my_time_flags_t fuzzy_date) override;
1522
1523 public:
1524 Item_func_add_time(Item *a, Item *b, bool datetime, bool negate)
1526 m_datetime(datetime),
1527 m_sign(negate ? -1 : 1) {}
1528 Item_func_add_time(const POS &pos, Item *a, Item *b, bool datetime,
1529 bool negate)
1530 : Item_temporal_hybrid_func(pos, a, b),
1531 m_datetime(datetime),
1532 m_sign(negate ? -1 : 1) {}
1533
1534 Item_func_add_time(const POS &pos, Item *a, Item *b)
1535 : Item_func_add_time(pos, a, b, false, false) {}
1536
1537 bool resolve_type(THD *) override;
1538 void print(const THD *thd, String *str,
1539 enum_query_type query_type) const override;
1540 const char *func_name() const override { return "add_time"; }
1541 enum Functype functype() const override { return ADDTIME_FUNC; }
1542 int sign() const { return m_sign; }
1543};
1544
1546 public:
1547 Item_func_timediff(const POS &pos, Item *a, Item *b)
1548 : Item_time_func(pos, a, b) {}
1549 const char *func_name() const override { return "timediff"; }
1550 bool resolve_type(THD *thd) override {
1551 /*
1552 This function can operate on two TIME, or on two DATETIME (no mix).
1553 We infer the type from the other argument. If both arguments are '?', we
1554 choose VARCHAR; indeed, if we chose TIME and get DATETIME, we risk
1555 cutting the date part, and if we chose DATETIME and get TIME, we risk
1556 interpreting "01:01:01" as "2001:01:01 00:00:00".
1557 */
1558 if (param_type_uses_non_param(thd)) return true;
1560 std::max(args[0]->time_precision(), args[1]->time_precision()));
1561 set_nullable(true);
1562 return false;
1563 }
1564 bool get_time(MYSQL_TIME *ltime) override;
1565};
1566
1568 public:
1569 Item_func_maketime(const POS &pos, Item *a, Item *b, Item *c)
1570 : Item_time_func(pos, a, b, c) {
1571 set_nullable(true);
1572 }
1573 bool resolve_type(THD *thd) override {
1574 if (param_type_is_default(thd, 0, 2, MYSQL_TYPE_LONGLONG)) return true;
1575 if (param_type_is_default(thd, 2, 3, MYSQL_TYPE_NEWDECIMAL)) return true;
1577 std::min(args[2]->decimals, uint8{DATETIME_MAX_DECIMALS}));
1578 return false;
1579 }
1580 const char *func_name() const override { return "maketime"; }
1581 bool get_time(MYSQL_TIME *ltime) override;
1582};
1583
1585 public:
1586 Item_func_microsecond(const POS &pos, Item *a) : Item_int_func(pos, a) {}
1587 longlong val_int() override;
1588 const char *func_name() const override { return "microsecond"; }
1589 enum Functype functype() const override { return MICROSECOND_FUNC; }
1590 bool resolve_type(THD *thd) override;
1591 bool check_partition_func_processor(uchar *) override { return false; }
1593 return !has_time_args();
1594 }
1595};
1596
1599
1600 public:
1602 interval_type type_arg)
1603 : Item_int_func(pos, a, b), int_type(type_arg) {}
1604 const char *func_name() const override { return "timestampdiff"; }
1605 enum Functype functype() const override { return TIMESTAMPDIFF_FUNC; }
1607 longlong val_int() override;
1608 bool resolve_type(THD *thd) override {
1609 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_DATETIME)) return true;
1610 set_nullable(true);
1611 return false;
1612 }
1613 void print(const THD *thd, String *str,
1614 enum_query_type query_type) const override;
1615};
1616
1624
1626 public:
1627 const enum_mysql_timestamp_type type; // keep it public
1629 Item *a)
1630 : Item_str_ascii_func(pos, a), type(type_arg) {}
1631 String *val_str_ascii(String *str) override;
1632 const char *func_name() const override { return "get_format"; }
1633 bool resolve_type(THD *) override {
1634 set_nullable(true);
1636 return false;
1637 }
1638 void print(const THD *thd, String *str,
1639 enum_query_type query_type) const override;
1640};
1641
1644 void fix_from_format(const char *format, size_t length);
1645
1646 protected:
1647 bool val_datetime(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override;
1648
1649 public:
1651 : Item_temporal_hybrid_func(pos, a, b) {}
1652 const char *func_name() const override { return "str_to_date"; }
1653 bool resolve_type(THD *) override;
1654};
1655
1657 public:
1658 Item_func_last_day(const POS &pos, Item *a) : Item_date_func(pos, a) {
1659 set_nullable(true);
1660 }
1661 const char *func_name() const override { return "last_day"; }
1662 enum Functype functype() const override { return LAST_DAY_FUNC; }
1663 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1664 bool resolve_type(THD *thd) override {
1665 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_DATETIME)) return true;
1666 return Item_date_func::resolve_type(thd);
1667 }
1668};
1669
1671 public:
1673 : Item_datetime_func(pos, list) {}
1674 enum Functype functype() const override { return DD_INTERNAL_FUNC; }
1675 const char *func_name() const override { return "internal_update_time"; }
1676 bool resolve_type(THD *thd) override;
1677 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1678};
1679
1681 public:
1683 : Item_datetime_func(pos, list) {}
1684 enum Functype functype() const override { return DD_INTERNAL_FUNC; }
1685 const char *func_name() const override { return "internal_check_time"; }
1686 bool resolve_type(THD *thd) override;
1687 bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override;
1688};
1689
1690/* Function prototypes */
1691
1692bool make_date_time(Date_time_format *format, MYSQL_TIME *l_time,
1694
1695#endif /* ITEM_TIMEFUNC_INCLUDED */
void set_numeric()
Definition: item.h:209
const CHARSET_INFO * collation
Definition: item.h:175
Definition: field.h:574
Implementation class for the DATE_ADD and DATE_SUB functions.
Definition: item_timefunc.h:1308
bool eq(const Item *item, bool binary_cmp) const override
Definition: item_timefunc.cc:2629
enum Functype functype() const override
Definition: item_timefunc.h:1324
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_timefunc.cc:2663
const bool m_subtract
False if function is DATE_ADD, true if function is DATE_SUB.
Definition: item_timefunc.h:1340
bool val_datetime(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override
Get "native" temporal value as MYSQL_TIME.
Definition: item_timefunc.cc:2622
const char * func_name() const override
Definition: item_timefunc.h:1323
bool is_subtract() const
Definition: item_timefunc.h:1330
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2444
bool get_date_internal(MYSQL_TIME *res, my_time_flags_t fuzzy_date)
Definition: item_timefunc.cc:2534
const interval_type m_interval_type
The type of the interval argument.
Definition: item_timefunc.h:1338
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:1319
interval_type get_interval_type() const
Definition: item_timefunc.h:1329
String value
Definition: item_timefunc.h:1341
bool get_time_internal(MYSQL_TIME *res)
Definition: item_timefunc.cc:2569
Item_date_add_interval(const POS &pos, Item *a, Item *b, interval_type type, bool subtract)
Definition: item_timefunc.h:1310
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:1344
bool date_value
Definition: item_timefunc.h:1345
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:1359
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_timefunc.cc:2674
const char * func_name() const override
Definition: item_timefunc.h:1353
enum Functype functype() const override
Definition: item_timefunc.h:1352
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2683
longlong val_int() override
Definition: item_timefunc.cc:2774
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:1358
const interval_type int_type
Definition: item_timefunc.h:1348
bool eq(const Item *item, bool binary_cmp) const override
Definition: item_timefunc.cc:2852
Item_extract(const POS &pos, interval_type type_arg, Item *a)
Definition: item_timefunc.h:1349
Add a time expression to a temporal expression, or subtract a time expression from a temporal express...
Definition: item_timefunc.h:1517
int m_sign
+1 for ADD, -1 for SUBTRACT
Definition: item_timefunc.h:1519
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:3000
const char * func_name() const override
Definition: item_timefunc.h:1540
Item_func_add_time(Item *a, Item *b, bool datetime, bool negate)
Definition: item_timefunc.h:1524
const bool m_datetime
True if first argument expected to be datetime.
Definition: item_timefunc.h:1518
int sign() const
Definition: item_timefunc.h:1542
enum Functype functype() const override
Definition: item_timefunc.h:1541
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:3043
Item_func_add_time(const POS &pos, Item *a, Item *b, bool datetime, bool negate)
Definition: item_timefunc.h:1528
Item_func_add_time(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:1534
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_timefunc.cc:3112
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:1265
const char * func_name() const override
Definition: item_timefunc.h:1280
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:2400
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2392
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item_timefunc.cc:2438
Time_zone * from_tz
Definition: item_timefunc.h:1273
Item_func_convert_tz(const POS &pos, Item *a, Item *b, Item *c)
Definition: item_timefunc.h:1276
bool from_tz_cached
Definition: item_timefunc.h:1272
bool to_tz_cached
Definition: item_timefunc.h:1272
enum Functype functype() const override
Definition: item_timefunc.h:1281
Time_zone * to_tz
Definition: item_timefunc.h:1273
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:1229
bool eq(const Item *item, bool binary_cmp) const override
Definition: item_timefunc.cc:2201
const bool is_time_format
Definition: item_timefunc.h:1231
int fixed_length
Definition: item_timefunc.h:1230
const char * func_name() const override
Definition: item_timefunc.h:1239
String * val_str(String *str) override
Definition: item_timefunc.cc:2289
Item_func_date_format(const POS &pos, Item *a, Item *b, bool is_time_format_arg=false)
Definition: item_timefunc.h:1235
String value
Definition: item_timefunc.h:1232
uint format_length(const String *format)
Definition: item_timefunc.cc:2219
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2173
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:1220
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1223
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
enum Functype functype() const override
Definition: item_timefunc.h:1219
Definition: item_timefunc.h:1247
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:2339
const char * func_name() const override
Definition: item_timefunc.h:1251
Item_func_from_unixtime(const POS &pos, Item *a)
Definition: item_timefunc.h:1249
enum Functype functype() const override
Definition: item_timefunc.h:1252
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:2331
Definition: item_timefunc.h:1625
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1633
String * val_str_ascii(String *str) override
Definition: item_timefunc.cc:3421
const char * func_name() const override
Definition: item_timefunc.h:1632
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_timefunc.cc:3448
Item_func_get_format(const POS &pos, enum_mysql_timestamp_type type_arg, Item *a)
Definition: item_timefunc.h:1628
const enum_mysql_timestamp_type type
Definition: item_timefunc.h:1627
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:1680
enum Functype functype() const override
Definition: item_timefunc.h:1684
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:3728
const char * func_name() const override
Definition: item_timefunc.h:1685
Item_func_internal_check_time(const POS &pos, PT_item_list *list)
Definition: item_timefunc.h:1682
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:3720
Definition: item_timefunc.h:1670
const char * func_name() const override
Definition: item_timefunc.h:1675
enum Functype functype() const override
Definition: item_timefunc.h:1674
Item_func_internal_update_time(const POS &pos, PT_item_list *list)
Definition: item_timefunc.h:1672
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:3641
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:3649
Definition: item_timefunc.h:1656
Item_func_last_day(const POS &pos, Item *a)
Definition: item_timefunc.h:1658
const char * func_name() const override
Definition: item_timefunc.h:1661
enum Functype functype() const override
Definition: item_timefunc.h:1662
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1664
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:3617
Definition: item_timefunc.h:1496
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1505
enum Functype functype() const override
Definition: item_timefunc.h:1504
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:2971
Item_func_makedate(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:1498
const char * func_name() const override
Definition: item_timefunc.h:1502
Definition: item_timefunc.h:1567
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1573
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:3196
Item_func_maketime(const POS &pos, Item *a, Item *b, Item *c)
Definition: item_timefunc.h:1569
const char * func_name() const override
Definition: item_timefunc.h:1580
Definition: item_timefunc.h:1584
bool check_valid_arguments_processor(uchar *) override
Definition: item_timefunc.h:1592
longlong val_int() override
MICROSECOND(a) is a function ( extraction) that extracts the microseconds from a.
Definition: item_timefunc.cc:3269
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:3275
enum Functype functype() const override
Definition: item_timefunc.h:1589
Item_func_microsecond(const POS &pos, Item *a)
Definition: item_timefunc.h:1586
const char * func_name() const override
Definition: item_timefunc.h:1588
bool check_partition_func_processor(uchar *) override
Check if a partition function is allowed.
Definition: item_timefunc.h:1591
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:1287
const char * func_name() const override
Definition: item_timefunc.h:1298
Item_func_sec_to_time(const POS &pos, Item *item)
Definition: item_timefunc.h:1289
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1291
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:1642
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.cc:3535
Item_func_str_to_date(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:1650
bool val_datetime(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override
Get "native" temporal value as MYSQL_TIME.
Definition: item_timefunc.cc:3568
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:3485
const char * func_name() const override
Definition: item_timefunc.h:1652
enum_mysql_timestamp_type cached_timestamp_type
Definition: item_timefunc.h:1643
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 representation 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:1545
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:3140
Item_func_timediff(const POS &pos, Item *a, Item *b)
Definition: item_timefunc.h:1547
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1550
const char * func_name() const override
Definition: item_timefunc.h:1549
Definition: item_timefunc.h:1597
interval_type intervaltype() const
Definition: item_timefunc.h:1606
const char * func_name() const override
Definition: item_timefunc.h:1604
enum Functype functype() const override
Definition: item_timefunc.h:1605
longlong val_int() override
Definition: item_timefunc.cc:3281
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_timefunc.cc:3377
Item_func_timestamp_diff(const POS &pos, Item *a, Item *b, interval_type type_arg)
Definition: item_timefunc.h:1601
const interval_type int_type
Definition: item_timefunc.h:1598
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1608
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:176
@ DATEADD_FUNC
Definition: item_func.h:281
@ YEAR_FUNC
Definition: item_func.h:262
@ HOUR_FUNC
Definition: item_func.h:272
@ TIME_TO_SEC_FUNC
Definition: item_func.h:286
@ FROM_UNIXTIME_FUNC
Definition: item_func.h:282
@ NOW_FUNC
Definition: item_func.h:217
@ FROM_DAYS_FUNC
Definition: item_func.h:218
@ CONVERT_TZ_FUNC
Definition: item_func.h:283
@ DD_INTERNAL_FUNC
Definition: item_func.h:232
@ DAY_FUNC
Definition: item_func.h:267
@ MAKEDATE_FUNC
Definition: item_func.h:264
@ DATE_FUNC
Definition: item_func.h:271
@ TIMESTAMPDIFF_FUNC
Definition: item_func.h:287
@ SECOND_FUNC
Definition: item_func.h:274
@ EXTRACT_FUNC
Definition: item_func.h:223
@ MONTH_FUNC
Definition: item_func.h:265
@ TO_SECONDS_FUNC
Definition: item_func.h:270
@ MICROSECOND_FUNC
Definition: item_func.h:275
@ QUARTER_FUNC
Definition: item_func.h:278
@ MONTHNAME_FUNC
Definition: item_func.h:266
@ TYPECAST_FUNC
Definition: item_func.h:224
@ LAST_DAY_FUNC
Definition: item_func.h:284
@ WEEKDAY_FUNC
Definition: item_func.h:280
@ ADDTIME_FUNC
Definition: item_func.h:277
@ DAYOFYEAR_FUNC
Definition: item_func.h:276
@ DAYNAME_FUNC
Definition: item_func.h:268
@ DATETIME_LITERAL
Definition: item_func.h:288
@ MINUTE_FUNC
Definition: item_func.h:273
@ TO_DAYS_FUNC
Definition: item_func.h:269
@ WEEK_FUNC
Definition: item_func.h:279
@ YEARWEEK_FUNC
Definition: item_func.h:263
@ UNIX_TIMESTAMP_FUNC
Definition: item_func.h:285
bool has_timestamp_args()
Definition: item_func.h:568
enum Type type() const override
Definition: item_func.h:307
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:578
uint arg_count
How many arguments in 'args'.
Definition: item_func.h:123
bool has_time_args()
Definition: item_func.h:589
bool has_datetime_args()
Definition: item_func.h:600
Definition: item_func.h:926
virtual const char * func_name() const =0
Definition: item_strfunc.h:143
Definition: item_strfunc.h:75
String * val_str_from_val_str_ascii(String *str, String *str2)
Definition: item_strfunc.cc:141
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:1396
bool m_explicit_cast
Definition: item_timefunc.h:1397
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1408
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:2925
const char * cast_type() const
Definition: item_timefunc.h:1418
bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:2934
const char * func_name() const override
Definition: item_timefunc.h:1414
bool is_explicit_cast() const
Definition: item_timefunc.h:1416
enum Functype functype() const override
Definition: item_timefunc.h:1415
Item_typecast_date(Item *a, bool explicit_cast)
Definition: item_timefunc.h:1400
Item_typecast_date(const POS &pos, Item *a)
Definition: item_timefunc.h:1404
Definition: item_timefunc.h:1458
Item_typecast_datetime(Item *a, uint8 dec_arg)
Definition: item_timefunc.h:1475
Item_typecast_datetime(const POS &pos, Item *a)
Definition: item_timefunc.h:1467
Item_typecast_datetime(Item *a, bool explicit_cast)
Definition: item_timefunc.h:1463
enum Functype functype() const override
Definition: item_timefunc.h:1482
bool is_explicit_cast() const
Definition: item_timefunc.h:1484
const char * func_name() const override
Definition: item_timefunc.h:1481
bool m_explicit_cast
Definition: item_timefunc.h:1460
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1485
Item_typecast_datetime(const POS &pos, Item *a, uint8 dec_arg)
Definition: item_timefunc.h:1470
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:2865
bool detect_precision_from_arg
Definition: item_timefunc.h:1459
bool get_date(MYSQL_TIME *res, my_time_flags_t fuzzy_date) override
Definition: item_timefunc.cc:2875
const char * cast_type() const
Definition: item_timefunc.h:1483
Definition: item_timefunc.h:1421
Item_typecast_time(Item *a, uint8 dec_arg)
Definition: item_timefunc.h:1437
Item_typecast_time(const POS &pos, Item *a)
Definition: item_timefunc.h:1429
bool is_explicit_cast() const
Definition: item_timefunc.h:1445
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_timefunc.h:1448
Item_typecast_time(const POS &pos, Item *a, uint8 dec_arg)
Definition: item_timefunc.h:1432
bool get_time(MYSQL_TIME *ltime) override
Definition: item_timefunc.cc:2913
const char * cast_type() const
Definition: item_timefunc.h:1447
enum Functype functype() const override
Definition: item_timefunc.h:1444
bool detect_precision_from_arg
Definition: item_timefunc.h:1422
Item_typecast_time(Item *a)
Definition: item_timefunc.h:1426
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:2903
const char * func_name() const override
Definition: item_timefunc.h:1443
bool m_explicit_cast
Definition: item_timefunc.h:1423
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:850
void set_nullable(bool nullable)
Definition: item.h:3424
void set_data_type_date()
Set all type properties for Item of DATE type.
Definition: item.h:1538
DTCollation collation
Character set and collation properties assigned for this Item.
Definition: item.h:3341
longlong val_int_from_decimal()
Definition: item.cc:454
void set_data_type(enum_field_types data_type)
Set the data type of the current Item.
Definition: item.h:1391
longlong val_int_from_datetime()
Definition: item.cc:485
bool get_time_from_string(MYSQL_TIME *ltime)
Convert val_str() to time in MYSQL_TIME.
Definition: item.cc:1537
static const CHARSET_INFO * default_charset()
Definition: item.cc:1649
String * val_string_from_date(String *str)
Definition: item.cc:308
double val_real_from_decimal()
Definition: item.cc:436
String * val_string_from_datetime(String *str)
Definition: item.cc:298
bool get_date_from_time(MYSQL_TIME *ltime)
Convert get_time() from time to date in MYSQL_TIME.
Definition: item.cc:1487
bool get_time_from_datetime(MYSQL_TIME *ltime)
Convert datetime to time.
Definition: item.cc:1582
longlong val_int_from_date()
Definition: item.cc:477
void set_data_type_year()
Set the data type of the Item to be YEAR.
Definition: item.h:1603
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:6374
bool get_time_from_date(MYSQL_TIME *ltime)
Convert date to time.
Definition: item.cc:1574
enum_field_types data_type() const
Retrieve the derived data type of the Item.
Definition: item.h:1359
bool fixed
True if item has been resolved.
Definition: item.h:3412
longlong val_int_from_time()
Definition: item.cc:463
bool null_value
True if item is null.
Definition: item.h:3449
void set_data_type_datetime(uint8 fsp)
Set all properties for Item of DATETIME type.
Definition: item.h:1562
virtual uint datetime_precision()
DATETIME precision of the item: 0..6.
Definition: item.cc:688
bool get_date_from_numeric(MYSQL_TIME *ltime, my_time_flags_t fuzzydate)
Convert a numeric type to date.
Definition: item.cc:1497
my_decimal * val_decimal_from_date(my_decimal *decimal_value)
Definition: item.cc:361
@ MARKER_NONE
Definition: item.h:3361
bool get_date_from_string(MYSQL_TIME *ltime, my_time_flags_t flags)
Convert val_str() to date in MYSQL_TIME.
Definition: item.cc:1450
type_conversion_status save_time_in_field(Field *field)
Definition: item.cc:508
item_marker marker
This member has several successive meanings, depending on the phase we're in (.
Definition: item.h:3400
bool get_time_from_numeric(MYSQL_TIME *ltime)
Convert a numeric type to time.
Definition: item.cc:1589
uint8 decimals
Number of decimals in result when evaluating this item.
Definition: item.h:3421
void set_data_type_string(uint32 max_l)
Set the Item to be variable length string.
Definition: item.h:1449
bool get_date_from_int(MYSQL_TIME *ltime, my_time_flags_t flags)
Convert val_int() to date in MYSQL_TIME.
Definition: item.cc:1478
String * val_string_from_time(String *str)
Definition: item.cc:318
void set_data_type_longlong()
Set the data type of the Item to be longlong.
Definition: item.h:1406
void set_data_type_time(uint8 fsp)
Set all type properties for Item of TIME type.
Definition: item.h:1550
void set_data_type_decimal(uint8 precision, uint8 scale)
Set the data type of the Item to be decimal.
Definition: item.h:1419
my_decimal * val_decimal_from_time(my_decimal *decimal_value)
Definition: item.cc:370
type_conversion_status save_date_in_field(Field *field)
Definition: item.cc:515
bool get_time_from_int(MYSQL_TIME *ltime)
Convert val_int() to time in MYSQL_TIME.
Definition: item.cc:1565
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:104
Base class for parse tree nodes (excluding the Parse_tree_root hierarchy)
Definition: parse_tree_node_base.h:138
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_lexer_thd.h:33
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
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:61
@ MYSQL_TYPE_TIME
Definition: field_types.h:64
@ MYSQL_TYPE_STRING
Definition: field_types.h:85
@ MYSQL_TYPE_NEWDECIMAL
Definition: field_types.h:77
@ MYSQL_TYPE_DATE
Definition: field_types.h:63
@ MYSQL_TYPE_DATETIME
Definition: field_types.h:65
static const std::string dec("DECRYPTION")
enum monotonicity_info enum_monotonicity_info
const char * interval_names[]
Definition: item_timefunc.cc:2642
bool make_date_time(Date_time_format *format, MYSQL_TIME *l_time, enum_mysql_timestamp_type type, String *str)
Create a formatted date/time value in a string.
Definition: item_timefunc.cc:505
date_time_format
Definition: item_timefunc.h:1617
@ USA_FORMAT
Definition: item_timefunc.h:1618
@ JIS_FORMAT
Definition: item_timefunc.h:1619
@ INTERNAL_FORMAT
Definition: item_timefunc.h:1622
@ EUR_FORMAT
Definition: item_timefunc.h:1621
@ ISO_FORMAT
Definition: item_timefunc.h:1620
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:142
unsigned int my_time_flags_t
Flags to str_to_datetime and number_to_datetime.
Definition: my_time.h:93
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:429
interval_type
Available interval types used in any statement.
Definition: my_time.h:454
@ INTERVAL_HOUR_SECOND
Definition: my_time.h:469
@ INTERVAL_MONTH
Definition: my_time.h:457
@ INTERVAL_HOUR_MICROSECOND
Definition: my_time.h:472
@ INTERVAL_MINUTE
Definition: my_time.h:461
@ INTERVAL_HOUR_MINUTE
Definition: my_time.h:468
@ INTERVAL_DAY
Definition: my_time.h:459
@ INTERVAL_MINUTE_MICROSECOND
Definition: my_time.h:473
@ INTERVAL_MINUTE_SECOND
Definition: my_time.h:470
@ INTERVAL_QUARTER
Definition: my_time.h:456
@ INTERVAL_YEAR
Definition: my_time.h:455
@ INTERVAL_DAY_MICROSECOND
Definition: my_time.h:471
@ INTERVAL_SECOND_MICROSECOND
Definition: my_time.h:474
@ INTERVAL_SECOND
Definition: my_time.h:462
@ INTERVAL_DAY_HOUR
Definition: my_time.h:465
@ INTERVAL_HOUR
Definition: my_time.h:460
@ INTERVAL_YEAR_MONTH
Definition: my_time.h:464
@ INTERVAL_DAY_SECOND
Definition: my_time.h:467
@ INTERVAL_MICROSECOND
Definition: my_time.h:463
@ INTERVAL_DAY_MINUTE
Definition: my_time.h:466
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:1054
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
std::list< T, ut::allocator< T > > list
Specialization of list which uses ut_allocator.
Definition: ut0new.h:2876
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:201
@ VGS_CHECK_CONSTRAINT
Definition: field.h:475
@ VGS_GENERATED_COLUMN
Definition: field.h:473
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:382
Struct used to pass around arguments to/from check_function_as_value_generator.
Definition: item.h:486
const char * banned_function_name
the name of the function which is not allowed
Definition: item.h:500
Value_generator_source source
Definition: item.h:498
Representation of time formats.
Definition: sql_time.h:60
Struct representing a duration.
Definition: my_time.h:227
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:120
Definition: table.h:1395
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: uca9-dump.cc:74
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