MySQL 8.3.0
Source Code Documentation
sql_error.h
Go to the documentation of this file.
1/* Copyright (c) 2005, 2023, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is also distributed with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have included with MySQL.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License, version 2.0, for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
22
23#ifndef SQL_ERROR_H
24#define SQL_ERROR_H
25
26#include <assert.h>
27#include <stdio.h>
28#include <string.h>
29#include <sys/types.h>
30
31#include "lex_string.h"
32#include "my_alloc.h"
33#include "my_compiler.h"
34
35#include "my_inttypes.h"
38#include "mysql_com.h" /* MYSQL_ERRMSG_SIZE */
39#include "sql/sql_list.h"
40#include "sql/sql_plist.h" /* I_P_List */
41#include "sql_string.h" /* String */
42
43class THD;
44class my_decimal;
45struct MYSQL_TIME;
47
48constexpr const size_t WARN_ALLOC_BLOCK_SIZE{2048};
49
50///////////////////////////////////////////////////////////////////////////
51
52/**
53 Representation of a SQL condition.
54 A SQL condition can be a completion condition (note, warning),
55 or an exception condition (error, not found).
56*/
58 public:
59 /**
60 Enumeration value describing the severity of the condition.
61 */
63
64 /**
65 Get the MESSAGE_TEXT of this condition.
66 @return the message text.
67 */
68 const char *message_text() const { return m_message_text.ptr(); }
69
70 /**
71 Get the MESSAGE_OCTET_LENGTH of this condition.
72 @return the length in bytes of the message text.
73 */
74 size_t message_octet_length() const { return m_message_text.length(); }
75
76 /**
77 Get the RETURNED_SQLSTATE of this condition.
78 @return the sql state.
79 */
80 const char *returned_sqlstate() const { return m_returned_sqlstate; }
81
82 /**
83 Get the MYSQL_ERRNO of this condition.
84 @return the sql error number condition item.
85 */
86 uint mysql_errno() const { return m_mysql_errno; }
87
88 /**
89 Get the severity level of this condition.
90 @return the severity level condition item.
91 */
93 return m_severity_level;
94 }
95
96 private:
97 /*
98 The interface of Sql_condition is mostly private, by design,
99 so that only the following code:
100 - various raise_error() or raise_warning() methods in class THD,
101 - the implementation of SIGNAL / RESIGNAL / GET DIAGNOSTICS
102 - catch / re-throw of SQL conditions in stored procedures (sp_rcontext)
103 is allowed to create / modify a SQL condition.
104 Enforcing this policy prevents confusion, since the only public
105 interface available to the rest of the server implementation
106 is the interface offered by the THD methods (THD::raise_error()),
107 which should be used.
108 */
109 friend class THD;
110 friend class Diagnostics_area;
112 friend class Sql_cmd_signal;
113 friend class Sql_cmd_resignal;
114 friend class sp_rcontext;
116
117 /**
118 Constructor.
119
120 @param mem_root Memory root to use for the condition items
121 of this condition.
122 */
124
125 /**
126 Constructor.
127
128 @param mem_root Memory root to use for the condition items
129 of this condition.
130 @param mysql_errno MYSQL_ERRNO
131 @param returned_sqlstate RETURNED_SQLSTATE
132 @param severity Severity level - error, warning or note.
133 @param message_text MESSAGE_TEXT
134 */
136 const char *returned_sqlstate,
138 const char *message_text);
139
140 /** Destructor. */
141 ~Sql_condition() = default;
142
143 /**
144 Copy optional condition items attributes.
145 @param cond the condition to copy.
146 */
147 void copy_opt_attributes(const Sql_condition *cond);
148
149 /**
150 Set the condition message test.
151 @param message_text Message text, expressed in the character set derived
152 from the server --language option
153 */
154 void set_message_text(const char *message_text);
155
156 /** Set the RETURNED_SQLSTATE of this condition. */
157 void set_returned_sqlstate(const char *sqlstate) {
158 memcpy(m_returned_sqlstate, sqlstate, SQLSTATE_LENGTH);
160 }
161
162 /** Set the CLASS_ORIGIN and SUBCLASS_ORIGIN of this condition. */
163 void set_class_origins();
164
165 private:
166 /** SQL CLASS_ORIGIN condition item. */
168
169 /** SQL SUBCLASS_ORIGIN condition item. */
171
172 /** SQL CONSTRAINT_CATALOG condition item. */
174
175 /** SQL CONSTRAINT_SCHEMA condition item. */
177
178 /** SQL CONSTRAINT_NAME condition item. */
180
181 /** SQL CATALOG_NAME condition item. */
183
184 /** SQL SCHEMA_NAME condition item. */
186
187 /** SQL TABLE_NAME condition item. */
189
190 /** SQL COLUMN_NAME condition item. */
192
193 /** SQL CURSOR_NAME condition item. */
195
196 /** Message text, expressed in the character set implied by --language. */
198
199 /** MySQL extension, MYSQL_ERRNO condition item. */
201
202 /**
203 SQL RETURNED_SQLSTATE condition item.
204 This member is always NUL terminated.
205 */
207
208 /** Severity (error, warning, note) of this condition. */
210
211 /** Pointers for participating in the list of conditions. */
214
215 /** Memory root to use to hold condition item values. */
217};
218
219///////////////////////////////////////////////////////////////////////////
220
221size_t err_conv(char *buff, size_t to_length, const char *from,
222 size_t from_length, const CHARSET_INFO *from_cs);
223
227
228 public:
229 explicit ErrConvString(const String *str) {
230 buf_length = err_conv(err_buffer, sizeof(err_buffer), str->ptr(),
231 str->length(), str->charset());
232 }
233
234 ErrConvString(const char *str, size_t length) {
237 }
238
239 ErrConvString(const char *str, size_t length, const CHARSET_INFO *cs) {
241 }
242
244 buf_length = snprintf(err_buffer, sizeof(err_buffer), "%lld", nr);
245 }
246
247 ErrConvString(longlong nr, bool unsigned_flag) {
248 buf_length = longlong10_to_str(nr, err_buffer, unsigned_flag ? 10 : -10) -
250 }
251
252 ErrConvString(double nr);
253 ErrConvString(const my_decimal *nr);
254 ErrConvString(const MYSQL_TIME *ltime, uint dec);
255
256 const char *ptr() const { return err_buffer; }
257 size_t length() const { return buf_length; }
258};
259
260///////////////////////////////////////////////////////////////////////////
261
262/**
263 Stores status of the currently executed statement.
264 Cleared at the beginning of the statement, and then
265 can hold either OK, ERROR, or EOF status.
266 Can not be assigned twice per statement.
267*/
269 /** The type of the counted and doubly linked list of conditions. */
270 typedef I_P_List<
276
277 public:
278 /** Const iterator used to iterate through the condition list. */
280
282 /** The area is cleared at start of a statement. */
284 /** Set whenever one calls my_ok(). */
286 /** Set whenever one calls my_eof(). */
288 /** Set whenever one calls my_error() or my_message(). */
290 /** Set in case of a custom response, such as one from COM_STMT_PREPARE. */
292 };
293
294 Diagnostics_area(bool allow_unlimited_conditions);
296
297 void set_overwrite_status(bool can_overwrite_status) {
298 m_can_overwrite_status = can_overwrite_status;
299 }
300
301 bool is_sent() const { return m_is_sent; }
302
304
305 /**
306 Set OK status -- ends commands that do not return a
307 result set, e.g. INSERT/UPDATE/DELETE.
308
309 @param affected_rows The number of rows affected by the last statement.
310 @sa Diagnostics_area::m_affected_rows.
311 @param last_insert_id The value to be returned by LAST_INSERT_ID().
312 @sa Diagnostics_area::m_last_insert_id.
313 @param message_text The OK-message text.
314 */
316 const char *message_text);
317
318 /**
319 Set EOF status.
320
321 @param thd Thread context.
322 */
323 void set_eof_status(THD *thd);
324
325 /**
326 Set ERROR status in the Diagnostics Area. This function should be used to
327 report fatal errors (such as out-of-memory errors) when no further
328 processing is possible.
329
330 @param thd Thread handle
331 @param mysql_errno SQL-condition error number
332 */
333 void set_error_status(THD *thd, uint mysql_errno);
334
335 /**
336 Set ERROR status in the Diagnostics Area.
337
338 @param mysql_errno SQL-condition error number
339 @param message_text SQL-condition message
340 @param returned_sqlstate SQL-condition state
341 */
342 void set_error_status(uint mysql_errno, const char *message_text,
343 const char *returned_sqlstate);
344
345 /**
346 Mark the Diagnostics Area as 'DISABLED'.
347
348 This is used in rare cases when the COM_ command at hand sends a response
349 in a custom format. One example is COM_STMT_PREPARE.
350 */
352 assert(m_status == DA_EMPTY);
354 }
355
356 /**
357 Clear this Diagnostics Area.
358
359 Normally called at the end of a statement.
360 */
362
363 bool is_set() const { return m_status != DA_EMPTY; }
364
365 bool is_error() const { return m_status == DA_ERROR; }
366
367 bool is_eof() const { return m_status == DA_EOF; }
368
369 bool is_ok() const { return m_status == DA_OK; }
370
371 bool is_disabled() const { return m_status == DA_DISABLED; }
372
374
375 const char *message_text() const {
376 assert(m_status == DA_ERROR || m_status == DA_OK);
377 return m_message_text;
378 }
379
380 uint message_text_length() const {
381 assert(m_status == DA_ERROR || m_status == DA_OK);
383 }
384
385 uint mysql_errno() const {
386 assert(m_status == DA_ERROR);
387 return m_mysql_errno;
388 }
389
390 const char *returned_sqlstate() const {
391 assert(m_status == DA_ERROR);
392 return m_returned_sqlstate;
393 }
394
396 assert(m_status == DA_OK);
397 return m_affected_rows;
398 }
399
401 assert(m_status == DA_OK);
402 return m_last_insert_id;
403 }
404
406 assert(m_status == DA_OK || m_status == DA_EOF);
408 }
409
410 /** Return the number of conditions raised by the current statement. */
413 }
414
415 /**
416 Reset between two COM_ commands. Conditions are preserved
417 between commands, but m_current_statement_cond_count indicates
418 the number of conditions of this particular statement only.
419 */
421
422 /**
423 Checks if the condition list contains SQL-condition with the given message.
424
425 @param message_text Message text
426 @param message_length Length of message_text
427
428 @return true if the condition list contains an SQL-condition with the given
429 message text.
430 */
431 bool has_sql_condition(const char *message_text, size_t message_length) const;
432
433 /**
434 Checks if the condition list contains SQL-condition with the given error
435 code.
436
437 @param sql_errno Error code
438
439 @return true if the condition list contains an SQL-condition with the given
440 error code.
441 */
442 bool has_sql_condition(uint sql_errno) const;
443
444 /**
445 Reset the current condition information stored in the Diagnostics Area.
446 Clear all conditions, the number of conditions, reset current row counter
447 to point to the first row.
448 */
449 void reset_condition_info(THD *thd);
450
451 /** Return the current counter value. */
454 }
455
456 /** Increment the current row counter to point at the next row. */
458
459 /** Set the current row counter to point to the given row number. */
462 }
463
464 /** Reset the current row counter. Start counting from 1. */
466
467 /**
468 The number of errors, or number of rows returned by SHOW ERRORS,
469 also the value of session variable @@error_count.
470 */
471 ulong error_count(THD *thd) const;
472
473 /**
474 Used for @@warning_count system variable, which prints
475 the number of rows returned by SHOW WARNINGS.
476 */
477 ulong warn_count(THD *thd) const;
478
479 /**
480 The number of conditions (errors, warnings and notes) in the list.
481 */
482 uint cond_count() const { return m_conditions_list.elements(); }
483
485
486 const char *get_first_condition_message();
487
488 /** Make sure there is room for the given number of conditions. */
489 void reserve_number_of_conditions(THD *thd, uint count);
490
491 /**
492 Add a new SQL-condition to the current list and increment the respective
493 counters.
494
495 @param thd Thread context.
496 @param mysql_errno SQL-condition error number.
497 @param returned_sqlstate SQL-condition state.
498 @param severity SQL-condition severity.
499 @param message_text SQL-condition message.
500
501 @return a pointer to the added SQL-condition.
502 */
504 const char *returned_sqlstate,
506 const char *message_text);
507
508 /**
509 Mark current SQL-conditions so that we can later know which
510 SQL-conditions have been added.
511 */
513
514 /**
515 Copy SQL-conditions that have been added since
516 mark_preexisting_sql_conditions() was called.
517
518 @param thd Thread context.
519 @param src_da Diagnostics Area to copy from.
520 */
521 void copy_new_sql_conditions(THD *thd, const Diagnostics_area *src_da);
522
523 /**
524 Copy all SQL-conditions from src_da to this DA.
525
526 @param thd Thread context.
527 @param src_da Diagnostics Area to copy from.
528 */
529 void copy_sql_conditions_from_da(THD *thd, const Diagnostics_area *src_da);
530
531 /**
532 Copy Sql_conditions that are not SL_ERROR from the source
533 Diagnostics Area to the current Diagnostics Area.
534
535 @param thd Thread context.
536 @param src_da Diagnostics Area to copy from.
537 */
538 void copy_non_errors_from_da(THD *thd, const Diagnostics_area *src_da);
539
540 /**
541 @return SQL-condition, which corresponds to the error state in
542 Diagnostics Area.
543 */
545
546 private:
547 /**
548 Add a new SQL-condition to the current list and increment the respective
549 counters.
550
551 @param thd Thread context.
552 @param sql_condition SQL-condition to copy values from.
553
554 @return a pointer to the added SQL-condition.
555 */
556 Sql_condition *push_warning(THD *thd, const Sql_condition *sql_condition);
557
558 /**
559 Push the given Diagnostics Area on top of the stack.
560 "This" will then become the stacked Diagnostics Area.
561 Conditions present in the new stacked Diagnostics Area
562 will be copied to the new top Diagnostics Area.
563
564 @note This function will not set THD::m_stmt_da.
565 Use THD::push_diagnostics_area() instead.
566
567 @param thd Thread context
568 @param da Diagnostics Area to be come the top of
569 the Diagnostics Area stack.
570 @param copy_conditions
571 Copy the conditions from the new second Diagnostics Area
572 to the new first Diagnostics Area, as per SQL standard.
573 */
575 bool copy_conditions);
576
577 /**
578 Pop "this" off the Diagnostics Area stack.
579
580 @note This function will not set THD::m_stmt_da.
581 Use THD::pop_diagnostics_area() instead.
582
583 @returns The new top of the Diagnostics Area stack.
584 */
586
587 /**
588 Returns the Diagnostics Area below the current diagnostics
589 area on the stack.
590 */
591 const Diagnostics_area *stacked_da() const { return m_stacked_da; }
592
593 private:
594 /** Pointer to the Diagnostics Area below on the stack. */
596
597 /** A memory root to allocate conditions */
599
600 /** List of conditions of all severities. */
602
603 /** List of conditions present in DA at handler activation. */
605
606 /** True if status information is sent to the client. */
608
609 /** Set to make set_error_status after set_{ok,eof}_status possible. */
611
612 /** Indicates if push_warning() allows unlimited number of conditions. */
614
616
617 private:
618 /*
619 This section contains basic attributes of Sql_condition to store
620 information about error (SQL-condition of error severity) or OK-message.
621 The attributes are inlined here (instead of using Sql_condition) to be able
622 to store the information in case of out-of-memory error.
623 */
624
625 /**
626 Message buffer. It is used only when DA is in OK or ERROR status.
627 If DA status is ERROR, it's the MESSAGE_TEXT attribute of SQL-condition.
628 If DA status is OK, it's the OK-message to be sent.
629 */
631
632 /**
633 Length, in bytes, of m_message_text.
634 */
636
637 /**
638 SQL RETURNED_SQLSTATE condition item.
639 This member is always NUL terminated.
640 */
642
643 /**
644 SQL error number. One of ER_ codes from share/errmsg.txt.
645 Set by set_error_status.
646 */
648
649 /**
650 The number of rows affected by the last statement. This is
651 semantically close to thd->row_count_func, but has a different
652 life cycle. thd->row_count_func stores the value returned by
653 function ROW_COUNT() and is cleared only by statements that
654 update its value, such as INSERT, UPDATE, DELETE and few others.
655 This member is cleared at the beginning of the next statement.
656
657 We could possibly merge the two, but life cycle of thd->row_count_func
658 can not be changed.
659 */
661
662 /**
663 Similarly to the previous member, this is a replacement of
664 thd->first_successful_insert_id_in_prev_stmt, which is used
665 to implement LAST_INSERT_ID().
666 */
668
669 /**
670 Number of conditions of this last statement. May differ from
671 the number of conditions returned by SHOW WARNINGS e.g. in case
672 the statement doesn't clear the conditions, and doesn't generate
673 them.
674 */
676
677 /**
678 The number of conditions of the current statement. m_conditions_list
679 life cycle differs from statement life cycle -- it may span
680 multiple statements. In that case we get
681 m_current_statement_cond_count 0, whereas m_conditions_list is not empty.
682 */
684
685 /** A break down of the number of conditions per severity (level). */
687
688 /**
689 Row counter, to print in errors and warnings. Not increased in
690 create_sort_index(); may differ from examined_row_count.
691 */
693
694 /** Save @@error_count before pre-clearing the DA. */
696
697 /** Save @@warning_count before pre-clearing the DA. */
699
700 friend class THD;
701};
702
703///////////////////////////////////////////////////////////////////////////
704
706 uint code, const char *message_text);
707
708/**
709 Convenience function for sending a warning with level SL_WARNING and no
710 arguments to the message.
711
712 @param thd The session to send the warning to.
713 @param code The warning number.
714*/
715void push_warning(THD *thd, uint code);
716
717/*
718 Note that this MY_ATTRIBUTE check cannot detect number/type mismatch
719 since the format string is not known at compile time.
720 It can however detect if push_warning_printf() is used without any
721 printf arguments. In such cases, use push_warning() instead.
722*/
724 uint code, const char *format, ...)
725 MY_ATTRIBUTE((format(printf, 4, 5)));
726
727/**
728 Generates a warning that a feature is deprecated.
729
730 Using it as
731 push_deprecated_warn(thd, "BAD", "'GOOD'");
732 Will result in a warning:
733 "The syntax 'BAD' is deprecated and will be removed in a
734 future release. Please use 'GOOD' instead"
735
736 If a function is deprecated, it should implement
737 Item_func::is_deprecated() to return true to prevent the
738 usage of the function in the generated column expression.
739
740 @param thd Thread context. If NULL, warning is written
741 to the error log, otherwise the warning is
742 sent to the client.
743 @param old_syntax Deprecated syntax.
744 @param new_syntax Replacement syntax.
745*/
746void push_deprecated_warn(THD *thd, const char *old_syntax,
747 const char *new_syntax);
748
749/**
750 Generates a warning that a feature is deprecated.
751
752 Using it as
753 push_deprecated_warn_no_replacement(thd, "old");
754 Will result in a warning:
755 "The syntax 'old' is deprecated and will be removed in a
756 future release.
757
758 If a function is deprecated, it should implement
759 Item_func::is_deprecated() to return true to prevent the
760 usage of the function in the generated column expression.
761
762 @param thd Thread context. If NULL, warning is written
763 to the error log, otherwise the warning is
764 sent to the client.
765 @param old_syntax Deprecated syntax.
766*/
767void push_deprecated_warn_no_replacement(THD *thd, const char *old_syntax);
768
769bool mysqld_show_warnings(THD *thd, ulong levels_to_show);
770
771size_t convert_error_message(char *to, size_t to_length,
772 const CHARSET_INFO *to_cs, const char *from,
773 size_t from_length, const CHARSET_INFO *from_cs,
774 uint *errors);
775
776extern const LEX_CSTRING warning_level_names[];
777
778bool is_sqlstate_valid(const LEX_STRING *sqlstate);
779
780/**
781 Checks if the specified SQL-state-string defines COMPLETION condition.
782 This function assumes that the given string contains a valid SQL-state.
783
784 @param s the condition SQLSTATE.
785
786 @retval true if the given string defines COMPLETION condition.
787 @retval false otherwise.
788*/
789inline bool is_sqlstate_completion(const char *s) {
790 return s[0] == '0' && s[1] == '0';
791}
792
793/**
794 Checks if the specified SQL-state-string defines WARNING condition.
795 This function assumes that the given string contains a valid SQL-state.
796
797 @param s the condition SQLSTATE.
798
799 @retval true if the given string defines WARNING condition.
800 @retval false otherwise.
801*/
802inline bool is_sqlstate_warning(const char *s) {
803 return s[0] == '0' && s[1] == '1';
804}
805
806/**
807 Checks if the specified SQL-state-string defines NOT FOUND condition.
808 This function assumes that the given string contains a valid SQL-state.
809
810 @param s the condition SQLSTATE.
811
812 @retval true if the given string defines NOT FOUND condition.
813 @retval false otherwise.
814*/
815inline bool is_sqlstate_not_found(const char *s) {
816 return s[0] == '0' && s[1] == '2';
817}
818
819/**
820 Checks if the specified SQL-state-string defines EXCEPTION condition.
821 This function assumes that the given string contains a valid SQL-state.
822
823 @param s the condition SQLSTATE.
824
825 @retval true if the given string defines EXCEPTION condition.
826 @retval false otherwise.
827*/
828inline bool is_sqlstate_exception(const char *s) {
829 return s[0] != '0' || s[1] > '2';
830}
831
833 const char *alias,
834 const char *option = nullptr);
836 const char *option = nullptr);
837
840#endif // SQL_ERROR_H
A condition information item.
Definition: sql_get_diagnostics.h:223
Stores status of the currently executed statement.
Definition: sql_error.h:268
void reserve_number_of_conditions(THD *thd, uint count)
Make sure there is room for the given number of conditions.
Definition: sql_error.cc:596
void set_error_status(THD *thd, uint mysql_errno)
Set ERROR status in the Diagnostics Area.
Definition: sql_error.cc:422
void inc_current_row_for_condition()
Increment the current row counter to point at the next row.
Definition: sql_error.h:457
uint m_message_text_length
Length, in bytes, of m_message_text.
Definition: sql_error.h:635
Sql_condition * push_warning(THD *thd, uint mysql_errno, const char *returned_sqlstate, Sql_condition::enum_severity_level severity, const char *message_text)
Add a new SQL-condition to the current list and increment the respective counters.
Definition: sql_error.cc:603
bool is_ok() const
Definition: sql_error.h:369
ulong error_count(THD *thd) const
The number of errors, or number of rows returned by SHOW ERRORS, also the value of session variable @...
Definition: sql_error.cc:517
uint last_statement_cond_count() const
Definition: sql_error.h:405
bool is_sent() const
Definition: sql_error.h:301
ulong current_row_for_condition() const
Return the current counter value.
Definition: sql_error.h:452
void reset_condition_info(THD *thd)
Reset the current condition information stored in the Diagnostics Area.
Definition: sql_error.cc:490
ulong m_current_row_for_condition
Row counter, to print in errors and warnings.
Definition: sql_error.h:692
void set_eof_status(THD *thd)
Set EOF status.
Definition: sql_error.cc:401
const char * get_first_condition_message()
Definition: sql_error.cc:484
void disable_status()
Mark the Diagnostics Area as 'DISABLED'.
Definition: sql_error.h:351
void set_ok_status(ulonglong affected_rows, ulonglong last_insert_id, const char *message_text)
Set OK status – ends commands that do not return a result set, e.g.
Definition: sql_error.cc:377
void set_is_sent(bool is_sent)
Definition: sql_error.h:303
bool m_is_sent
True if status information is sent to the client.
Definition: sql_error.h:607
enum_diagnostics_status m_status
Definition: sql_error.h:615
void mark_preexisting_sql_conditions()
Mark current SQL-conditions so that we can later know which SQL-conditions have been added.
Definition: sql_error.cc:559
Diagnostics_area(bool allow_unlimited_conditions)
Definition: sql_error.cc:336
bool is_error() const
Definition: sql_error.h:365
Sql_condition_list::Const_Iterator Sql_condition_iterator
Const iterator used to iterate through the condition list.
Definition: sql_error.h:279
uint m_mysql_errno
SQL error number.
Definition: sql_error.h:647
MEM_ROOT m_condition_root
A memory root to allocate conditions.
Definition: sql_error.h:598
~Diagnostics_area()
Definition: sql_error.cc:358
uint m_current_statement_cond_count
The number of conditions of the current statement.
Definition: sql_error.h:683
Diagnostics_area * m_stacked_da
Pointer to the Diagnostics Area below on the stack.
Definition: sql_error.h:595
ulong current_statement_cond_count() const
Return the number of conditions raised by the current statement.
Definition: sql_error.h:411
uint m_last_statement_cond_count
Number of conditions of this last statement.
Definition: sql_error.h:675
void reset_diagnostics_area()
Clear this Diagnostics Area.
Definition: sql_error.cc:360
enum_diagnostics_status
Definition: sql_error.h:281
@ DA_OK
Set whenever one calls my_ok().
Definition: sql_error.h:285
@ DA_EMPTY
The area is cleared at start of a statement.
Definition: sql_error.h:283
@ DA_ERROR
Set whenever one calls my_error() or my_message().
Definition: sql_error.h:289
@ DA_DISABLED
Set in case of a custom response, such as one from COM_STMT_PREPARE.
Definition: sql_error.h:291
@ DA_EOF
Set whenever one calls my_eof().
Definition: sql_error.h:287
void set_current_row_for_condition(ulong rowno)
Set the current row counter to point to the given row number.
Definition: sql_error.h:460
void copy_new_sql_conditions(THD *thd, const Diagnostics_area *src_da)
Copy SQL-conditions that have been added since mark_preexisting_sql_conditions() was called.
Definition: sql_error.cc:567
ulong m_saved_warn_count
Save @warning_count before pre-clearing the DA.
Definition: sql_error.h:698
void copy_non_errors_from_da(THD *thd, const Diagnostics_area *src_da)
Copy Sql_conditions that are not SL_ERROR from the source Diagnostics Area to the current Diagnostics...
Definition: sql_error.cc:546
void set_overwrite_status(bool can_overwrite_status)
Definition: sql_error.h:297
List< const Sql_condition > m_preexisting_sql_conditions
List of conditions present in DA at handler activation.
Definition: sql_error.h:604
Diagnostics_area * pop_diagnostics_area()
Pop "this" off the Diagnostics Area stack.
Definition: sql_error.cc:642
enum_diagnostics_status status() const
Definition: sql_error.h:373
bool is_disabled() const
Definition: sql_error.h:371
const char * message_text() const
Definition: sql_error.h:375
bool m_allow_unlimited_conditions
Indicates if push_warning() allows unlimited number of conditions.
Definition: sql_error.h:613
I_P_List< Sql_condition, I_P_List_adapter< Sql_condition, &Sql_condition::m_next_condition, &Sql_condition::m_prev_condition >, I_P_List_counter, I_P_List_fast_push_back< Sql_condition > > Sql_condition_list
The type of the counted and doubly linked list of conditions.
Definition: sql_error.h:275
uint mysql_errno() const
Definition: sql_error.h:385
Sql_condition_list m_conditions_list
List of conditions of all severities.
Definition: sql_error.h:601
ulonglong last_insert_id() const
Definition: sql_error.h:400
Sql_condition * error_condition() const
Definition: sql_error.cc:583
uint m_current_statement_cond_count_by_qb[(uint) Sql_condition::SEVERITY_END]
A break down of the number of conditions per severity (level).
Definition: sql_error.h:686
void reset_statement_cond_count()
Reset between two COM_ commands.
Definition: sql_error.h:420
void copy_sql_conditions_from_da(THD *thd, const Diagnostics_area *src_da)
Copy all SQL-conditions from src_da to this DA.
Definition: sql_error.cc:535
uint cond_count() const
The number of conditions (errors, warnings and notes) in the list.
Definition: sql_error.h:482
const char * returned_sqlstate() const
Definition: sql_error.h:390
ulonglong affected_rows() const
Definition: sql_error.h:395
void reset_current_row_for_condition()
Reset the current row counter.
Definition: sql_error.h:465
bool m_can_overwrite_status
Set to make set_error_status after set_{ok,eof}_status possible.
Definition: sql_error.h:610
char m_returned_sqlstate[SQLSTATE_LENGTH+1]
SQL RETURNED_SQLSTATE condition item.
Definition: sql_error.h:641
bool is_set() const
Definition: sql_error.h:363
Sql_condition_iterator sql_conditions() const
Definition: sql_error.h:484
ulong m_saved_error_count
Save @error_count before pre-clearing the DA.
Definition: sql_error.h:695
bool is_eof() const
Definition: sql_error.h:367
ulong warn_count(THD *thd) const
Used for @warning_count system variable, which prints the number of rows returned by SHOW WARNINGS.
Definition: sql_error.cc:523
const Diagnostics_area * stacked_da() const
Returns the Diagnostics Area below the current diagnostics area on the stack.
Definition: sql_error.h:591
void push_diagnostics_area(THD *thd, Diagnostics_area *da, bool copy_conditions)
Push the given Diagnostics Area on top of the stack.
Definition: sql_error.cc:631
char m_message_text[MYSQL_ERRMSG_SIZE]
Message buffer.
Definition: sql_error.h:630
ulonglong m_last_insert_id
Similarly to the previous member, this is a replacement of thd->first_successful_insert_id_in_prev_st...
Definition: sql_error.h:667
uint message_text_length() const
Definition: sql_error.h:380
bool has_sql_condition(const char *message_text, size_t message_length) const
Checks if the condition list contains SQL-condition with the given message.
Definition: sql_error.cc:461
ulonglong m_affected_rows
The number of rows affected by the last statement.
Definition: sql_error.h:660
Definition: sql_error.h:224
ErrConvString(const char *str, size_t length)
Definition: sql_error.h:234
size_t length() const
Definition: sql_error.h:257
ErrConvString(const String *str)
Definition: sql_error.h:229
const char * ptr() const
Definition: sql_error.h:256
char err_buffer[MYSQL_ERRMSG_SIZE]
Definition: sql_error.h:225
ErrConvString(longlong nr)
Definition: sql_error.h:243
size_t buf_length
Definition: sql_error.h:226
ErrConvString(const char *str, size_t length, const CHARSET_INFO *cs)
Definition: sql_error.h:239
ErrConvString(longlong nr, bool unsigned_flag)
Definition: sql_error.h:247
Element counting policy class for I_P_List which provides basic element counting.
Definition: sql_plist.h:221
uint elements() const
Definition: sql_plist.h:232
An insertion policy class for I_P_List which can be used when fast push_back() operation is required.
Definition: sql_plist.h:259
Iterator for I_P_List.
Definition: sql_plist.h:167
Intrusive parameterized list.
Definition: sql_plist.h:74
Definition: sql_list.h:434
Sql_cmd_common_signal represents the common properties of the SIGNAL and RESIGNAL statements.
Definition: sql_signal.h:87
Sql_cmd_resignal represents a RESIGNAL statement.
Definition: sql_signal.h:167
Sql_cmd_signal represents a SIGNAL statement.
Definition: sql_signal.h:147
Representation of a SQL condition.
Definition: sql_error.h:57
String m_catalog_name
SQL CATALOG_NAME condition item.
Definition: sql_error.h:182
Sql_condition(MEM_ROOT *mem_root)
Constructor.
Definition: sql_error.cc:220
String m_cursor_name
SQL CURSOR_NAME condition item.
Definition: sql_error.h:194
String m_message_text
Message text, expressed in the character set implied by –language.
Definition: sql_error.h:197
void set_message_text(const char *message_text)
Set the condition message test.
Definition: sql_error.cc:281
size_t message_octet_length() const
Get the MESSAGE_OCTET_LENGTH of this condition.
Definition: sql_error.h:74
String m_schema_name
SQL SCHEMA_NAME condition item.
Definition: sql_error.h:185
String m_table_name
SQL TABLE_NAME condition item.
Definition: sql_error.h:188
String m_constraint_name
SQL CONSTRAINT_NAME condition item.
Definition: sql_error.h:179
void set_returned_sqlstate(const char *sqlstate)
Set the RETURNED_SQLSTATE of this condition.
Definition: sql_error.h:157
const char * message_text() const
Get the MESSAGE_TEXT of this condition.
Definition: sql_error.h:68
MEM_ROOT * m_mem_root
Memory root to use to hold condition item values.
Definition: sql_error.h:216
String m_class_origin
SQL CLASS_ORIGIN condition item.
Definition: sql_error.h:167
Sql_condition * m_next_condition
Pointers for participating in the list of conditions.
Definition: sql_error.h:212
String m_constraint_schema
SQL CONSTRAINT_SCHEMA condition item.
Definition: sql_error.h:176
uint mysql_errno() const
Get the MYSQL_ERRNO of this condition.
Definition: sql_error.h:86
void copy_opt_attributes(const Sql_condition *cond)
Copy optional condition items attributes.
Definition: sql_error.cc:267
enum_severity_level
Enumeration value describing the severity of the condition.
Definition: sql_error.h:62
@ SL_NOTE
Definition: sql_error.h:62
@ SL_ERROR
Definition: sql_error.h:62
@ SL_WARNING
Definition: sql_error.h:62
@ SEVERITY_END
Definition: sql_error.h:62
Sql_condition::enum_severity_level m_severity_level
Severity (error, warning, note) of this condition.
Definition: sql_error.h:209
String m_subclass_origin
SQL SUBCLASS_ORIGIN condition item.
Definition: sql_error.h:170
char m_returned_sqlstate[SQLSTATE_LENGTH+1]
SQL RETURNED_SQLSTATE condition item.
Definition: sql_error.h:206
void set_class_origins()
Set the CLASS_ORIGIN and SUBCLASS_ORIGIN of this condition.
Definition: sql_error.cc:292
Sql_condition::enum_severity_level severity() const
Get the severity level of this condition.
Definition: sql_error.h:92
~Sql_condition()=default
Destructor.
const char * returned_sqlstate() const
Get the RETURNED_SQLSTATE of this condition.
Definition: sql_error.h:80
String m_constraint_catalog
SQL CONSTRAINT_CATALOG condition item.
Definition: sql_error.h:173
uint m_mysql_errno
MySQL extension, MYSQL_ERRNO condition item.
Definition: sql_error.h:200
String m_column_name
SQL COLUMN_NAME condition item.
Definition: sql_error.h:191
Sql_condition ** m_prev_condition
Definition: sql_error.h:213
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:166
const char * ptr() const
Definition: sql_string.h:248
size_t length() const
Definition: sql_string.h:240
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:35
my_decimal class limits 'decimal_t' type to what we need in MySQL.
Definition: my_decimal.h:94
Definition: sp_rcontext.h:76
static MEM_ROOT mem_root
Definition: client_plugin.cc:113
static const std::string dec("DECRYPTION")
static constexpr unsigned PSI_INSTRUMENT_ME
Definition: psi_bits.h:42
MYSQL_STRINGS_EXPORT char * longlong10_to_str(int64_t val, char *dst, int radix)
Converts a 64-bit integer to its string representation in decimal notation.
Definition: int2str.cc:97
A better implementation of the UNIX ctype(3) library.
MYSQL_STRINGS_EXPORT CHARSET_INFO my_charset_latin1
Definition: ctype-latin1.cc:365
This file follows Google coding style, except for the name MEM_ROOT (which is kept for historical rea...
Header for compiler-dependent features.
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:55
long long int longlong
Definition: my_inttypes.h:54
static int count
Definition: myisam_ftdump.cc:44
Common definition between mysql server & client.
#define MYSQL_ERRMSG_SIZE
Max length of a error message.
Definition: mysql_com.h:886
#define SQLSTATE_LENGTH
Definition: mysql_com.h:74
const char * collation
Definition: audit_api_message_emit.cc:183
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1065
Definition: commit_order_queue.h:33
required uint32 status
Definition: replication_asynchronous_connection_failover.proto:60
const LEX_CSTRING warning_level_names[]
Definition: sql_error.cc:726
size_t err_conv(char *buff, size_t to_length, const char *from, size_t from_length, const CHARSET_INFO *from_cs)
Convert value for dispatch to error message(see WL#751).
Definition: sql_error.cc:847
bool is_sqlstate_completion(const char *s)
Checks if the specified SQL-state-string defines COMPLETION condition.
Definition: sql_error.h:789
void check_deprecated_datetime_format(THD *thd, const CHARSET_INFO *cs, MYSQL_TIME_STATUS &status)
Check if status contains a deprecation warning.
Definition: sql_error.cc:1066
bool is_sqlstate_not_found(const char *s)
Checks if the specified SQL-state-string defines NOT FOUND condition.
Definition: sql_error.h:815
void push_deprecated_warn_no_replacement(THD *thd, const char *old_syntax)
Generates a warning that a feature is deprecated.
Definition: sql_lexer_error.h:44
void warn_on_deprecated_collation(THD *thd, const CHARSET_INFO *collation, const char *option=nullptr)
Output warnings on deprecated character collations.
Definition: sql_lexer_error.h:37
void push_warning(THD *thd, Sql_condition::enum_severity_level severity, uint code, const char *message_text)
Push the warning to error list if there is still room in the list.
Definition: sql_error.cc:658
size_t convert_error_message(char *to, size_t to_length, const CHARSET_INFO *to_cs, const char *from, size_t from_length, const CHARSET_INFO *from_cs, uint *errors)
Convert string for dispatch to client(see WL#751).
Definition: sql_error.cc:904
bool is_sqlstate_exception(const char *s)
Checks if the specified SQL-state-string defines EXCEPTION condition.
Definition: sql_error.h:828
void push_warning_printf(THD *thd, Sql_condition::enum_severity_level severity, uint code, const char *format,...)
Push the warning to error list if there is still room in the list.
Definition: sql_error.cc:689
bool mysqld_show_warnings(THD *thd, ulong levels_to_show)
Send all notes, errors or warnings to the client in a result set.
Definition: sql_error.cc:741
void push_deprecated_warn(THD *thd, const char *old_syntax, const char *new_syntax)
Generates a warning that a feature is deprecated.
Definition: sql_lexer_error.h:41
constexpr const size_t WARN_ALLOC_BLOCK_SIZE
Definition: sql_error.h:48
bool is_sqlstate_warning(const char *s)
Checks if the specified SQL-state-string defines WARNING condition.
Definition: sql_error.h:802
bool is_sqlstate_valid(const LEX_STRING *sqlstate)
Sanity check for SQLSTATEs.
Definition: sql_error.cc:970
void warn_on_deprecated_charset(THD *thd, const CHARSET_INFO *cs, const char *alias, const char *option=nullptr)
Output warnings on deprecated character sets.
Definition: sql_lexer_error.h:32
Our own string classes, used pervasively throughout the executor.
Definition: m_ctype.h:422
Hook class which via its methods specifies which members of T should be used for participating in a i...
Definition: sql_plist.h:197
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:82
Definition: mysql_lex_string.h:39
Definition: mysql_lex_string.h:34
Structure to return status from str_to_datetime(), str_to_time(), number_to_datetime(),...
Definition: my_time.h:169
Definition: mysql_time.h:81