63
49
This is used to in group_concat() to register how many warnings we actually
64
50
got after the query has been executed.
66
void DRIZZLE_ERROR::set_msg(Session *session, const char *msg_arg)
52
void MYSQL_ERROR::set_msg(THD *thd, const char *msg_arg)
68
msg= session->warn_root.strdup_root(msg_arg);
54
msg= strdup_root(&thd->warn_root, msg_arg);
72
58
Reset all warnings for the thread
75
drizzle_reset_errors()
77
63
force Reset warnings even if it has been done before
80
66
Don't reset warnings if this has already been called for this query.
81
67
This may happen if one gets a warning during the parsing stage,
82
68
in which case push_warnings() has already called this function.
85
void drizzle_reset_errors(Session *session, bool force)
71
void mysql_reset_errors(THD *thd, bool force)
87
if (session->getQueryId() != session->getWarningQueryId() || force)
73
if (thd->query_id != thd->warn_id || force)
89
session->setWarningQueryId(session->getQueryId());
90
session->warn_root.free_root(MYF(0));
91
memset(session->warn_count, 0, sizeof(session->warn_count));
75
thd->warn_id= thd->query_id;
76
free_root(&thd->warn_root,MYF(0));
77
memset((char*) thd->warn_count, 0, sizeof(thd->warn_count));
93
session->total_warn_count= 0;
94
session->warn_list.clear();
95
session->row_count= 1; // by default point to row 1
79
thd->total_warn_count= 0;
80
thd->warn_list.empty();
81
thd->row_count= 1; // by default point to row 1
102
88
Push the warning/error to error list if there is still room in the list
106
session Thread handle
107
93
level Severity of warning (note, warning, error ...)
109
95
msg Clear error message
112
pointer on DRIZZLE_ERROR object
98
pointer on MYSQL_ERROR object
115
DRIZZLE_ERROR *push_warning(Session *session, DRIZZLE_ERROR::enum_warning_level level,
116
drizzled::error_t code, const char *msg)
101
MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
102
uint code, const char *msg)
118
DRIZZLE_ERROR *err= 0;
120
if (level == DRIZZLE_ERROR::WARN_LEVEL_NOTE && !(session->options & OPTION_SQL_NOTES))
125
if (session->getQueryId() != session->getWarningQueryId())
126
drizzle_reset_errors(session, 0);
127
session->got_warning= 1;
106
if (level == MYSQL_ERROR::WARN_LEVEL_NOTE &&
107
!(thd->options & OPTION_SQL_NOTES))
110
if (thd->query_id != thd->warn_id)
111
mysql_reset_errors(thd, 0);
129
114
/* Abort if we are using strict mode and we are not using IGNORE */
130
if ((int) level >= (int) DRIZZLE_ERROR::WARN_LEVEL_WARN &&
131
session->abortOnWarning())
115
if ((int) level >= (int) MYSQL_ERROR::WARN_LEVEL_WARN &&
116
thd->really_abort_on_warning())
133
118
/* Avoid my_message() calling push_warning */
134
bool no_warnings_for_error= session->no_warnings_for_error;
136
session->no_warnings_for_error= 1;
138
session->setKilled(Session::KILL_BAD_DATA);
119
bool no_warnings_for_error= thd->no_warnings_for_error;
121
thd->no_warnings_for_error= 1;
123
thd->killed= THD::KILL_BAD_DATA;
139
124
my_message(code, msg, MYF(0));
141
session->no_warnings_for_error= no_warnings_for_error;
126
thd->no_warnings_for_error= no_warnings_for_error;
142
127
/* Store error in error list (as my_message() didn't do it) */
143
level= DRIZZLE_ERROR::WARN_LEVEL_ERROR;
128
level= MYSQL_ERROR::WARN_LEVEL_ERROR;
146
if (session->handle_error(code, msg, level))
131
if (thd->handle_error(code, msg, level))
149
if (session->warn_list.elements < session->variables.max_error_count)
134
if (thd->warn_list.elements < thd->variables.max_error_count)
151
136
/* We have to use warn_root, as mem_root is freed after each query */
152
if ((err= new (&session->warn_root) DRIZZLE_ERROR(session, code, level, msg)))
154
session->warn_list.push_back(err, &session->warn_root);
137
if ((err= new (&thd->warn_root) MYSQL_ERROR(thd, code, level, msg)))
138
thd->warn_list.push_back(err, &thd->warn_root);
157
session->warn_count[(uint32_t) level]++;
158
session->total_warn_count++;
140
thd->warn_count[(uint) level]++;
141
thd->total_warn_count++;
167
149
push_warning_printf()
168
session Thread handle
169
151
level Severity of warning (note, warning, error ...)
170
152
code Error number
171
153
msg Clear error message
174
void push_warning_printf(Session *session, DRIZZLE_ERROR::enum_warning_level level,
175
drizzled::error_t code, const char *format, ...)
156
void push_warning_printf(THD *thd, MYSQL_ERROR::enum_warning_level level,
157
uint code, const char *format, ...)
178
160
char warning[ERRMSGSIZE+20];
180
162
va_start(args,format);
181
163
vsnprintf(warning, sizeof(warning), format, args);
183
push_warning(session, level, code, warning);
165
push_warning(thd, level, code, warning);
208
191
{ C_STRING_WITH_LEN("?") }
211
bool show_warnings(Session *session,
212
bitset<DRIZZLE_ERROR::NUM_ERRORS> &levels_to_show)
194
bool mysqld_show_warnings(THD *thd, ulong levels_to_show)
214
196
List<Item> field_list;
216
198
field_list.push_back(new Item_empty_string("Level", 7));
217
199
field_list.push_back(new Item_return_int("Code",4, DRIZZLE_TYPE_LONG));
218
field_list.push_back(new Item_empty_string("Message",DRIZZLE_ERRMSG_SIZE));
220
if (session->getClient()->sendFields(&field_list))
224
Select_Lex *sel= &session->getLex()->select_lex;
225
Select_Lex_Unit *unit= &session->getLex()->unit;
200
field_list.push_back(new Item_empty_string("Message",MYSQL_ERRMSG_SIZE));
202
if (thd->protocol->send_fields(&field_list,
203
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
207
SELECT_LEX *sel= &thd->lex->select_lex;
208
SELECT_LEX_UNIT *unit= &thd->lex->unit;
210
Protocol *protocol=thd->protocol;
228
212
unit->set_limit(sel);
230
List<DRIZZLE_ERROR>::iterator it(session->warn_list.begin());
214
List_iterator_fast<MYSQL_ERROR> it(thd->warn_list);
231
215
while ((err= it++))
233
217
/* Skip levels that the user is not interested in */
234
if (! levels_to_show.test(err->level))
218
if (!(levels_to_show & ((ulong) 1 << err->level)))
236
220
if (++idx <= unit->offset_limit_cnt)
238
222
if (idx > unit->select_limit_cnt)
240
session->getClient()->store(warning_level_names[err->level].str,
241
warning_level_names[err->level].length);
242
session->getClient()->store((uint32_t) err->code);
243
session->getClient()->store(err->msg, strlen(err->msg));
244
if (session->getClient()->flush())
224
protocol->prepare_for_resend();
225
protocol->store(warning_level_names[err->level].str,
226
warning_level_names[err->level].length, system_charset_info);
227
protocol->store((uint32_t) err->code);
228
protocol->store(err->msg, strlen(err->msg), system_charset_info);
229
if (protocol->write())
251
} /* namespace drizzled */