mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Added possibility to use --error <name> instead of --error <number>
The old syntax works as well. WL#2356.
This commit is contained in:
@ -123,6 +123,17 @@ typedef struct
|
|||||||
} code;
|
} code;
|
||||||
} match_err;
|
} match_err;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const char *name;
|
||||||
|
long code;
|
||||||
|
} st_error;
|
||||||
|
|
||||||
|
static st_error global_error[] = {
|
||||||
|
#include <mysqld_ername.h>
|
||||||
|
{ 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
static match_err global_expected_errno[MAX_EXPECTED_ERRORS];
|
static match_err global_expected_errno[MAX_EXPECTED_ERRORS];
|
||||||
static uint global_expected_errors;
|
static uint global_expected_errors;
|
||||||
|
|
||||||
@ -1340,6 +1351,7 @@ static uint get_errcodes(match_err *to,struct st_query* q)
|
|||||||
{
|
{
|
||||||
char* p= q->first_argument;
|
char* p= q->first_argument;
|
||||||
uint count= 0;
|
uint count= 0;
|
||||||
|
|
||||||
DBUG_ENTER("get_errcodes");
|
DBUG_ENTER("get_errcodes");
|
||||||
|
|
||||||
if (!*p)
|
if (!*p)
|
||||||
@ -1350,19 +1362,41 @@ static uint get_errcodes(match_err *to,struct st_query* q)
|
|||||||
if (*p == 'S')
|
if (*p == 'S')
|
||||||
{
|
{
|
||||||
/* SQLSTATE string */
|
/* SQLSTATE string */
|
||||||
int i;
|
char *end= ++p + SQLSTATE_LENGTH;
|
||||||
p++;
|
char *to_ptr= to[count].code.sqlstate;
|
||||||
for (i = 0; my_isalnum(charset_info, *p) && i < SQLSTATE_LENGTH; p++, i++)
|
|
||||||
to[count].code.sqlstate[i]= *p;
|
for (; my_isalnum(charset_info, *p) && p != end; p++)
|
||||||
to[count].code.sqlstate[i]= '\0';
|
*to_ptr++= *p;
|
||||||
|
*to_ptr= 0;
|
||||||
|
|
||||||
to[count].type= ERR_SQLSTATE;
|
to[count].type= ERR_SQLSTATE;
|
||||||
}
|
}
|
||||||
|
else if (*p == 'E')
|
||||||
|
{
|
||||||
|
/* SQL error as string */
|
||||||
|
st_error *e= global_error;
|
||||||
|
char *start= p++;
|
||||||
|
|
||||||
|
for (; *p == '_' || my_isalnum(charset_info, *p); p++)
|
||||||
|
;
|
||||||
|
for (; e->name; e++)
|
||||||
|
{
|
||||||
|
if (!strncmp(start, e->name, (int) (p - start)))
|
||||||
|
{
|
||||||
|
to[count].code.errnum= (uint) e->code;
|
||||||
|
to[count].type= ERR_ERRNO;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!e->name)
|
||||||
|
die("Unknown SQL error '%s'\n", start);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
long val;
|
long val;
|
||||||
p=str2int(p,10,(long) INT_MIN, (long) INT_MAX, &val);
|
|
||||||
if (p == NULL)
|
if (!(p= str2int(p,10,(long) INT_MIN, (long) INT_MAX, &val)))
|
||||||
die("Invalid argument in %s\n", q->query);
|
die("Invalid argument in %s\n", q->query);
|
||||||
to[count].code.errnum= (uint) val;
|
to[count].code.errnum= (uint) val;
|
||||||
to[count].type= ERR_ERRNO;
|
to[count].type= ERR_ERRNO;
|
||||||
}
|
}
|
||||||
@ -2855,6 +2889,7 @@ static int normal_handle_error(const char *query, struct st_query *q,
|
|||||||
mysql_error(mysql));
|
mysql_error(mysql));
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
return 0; /* Keep compiler happy */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -294,7 +294,7 @@ select * from t2;
|
|||||||
create table t3 like t1;
|
create table t3 like t1;
|
||||||
--error 1050
|
--error 1050
|
||||||
create table t3 like mysqltest.t3;
|
create table t3 like mysqltest.t3;
|
||||||
--error 1044,1
|
--error ER_DBACCESS_DENIED_ERROR,1
|
||||||
create table non_existing_database.t1 like t1;
|
create table non_existing_database.t1 like t1;
|
||||||
--error 1051
|
--error 1051
|
||||||
create table t3 like non_existing_table;
|
create table t3 like non_existing_table;
|
||||||
|
@ -1761,9 +1761,9 @@ DO benchmark(100,1+1),1,1;
|
|||||||
# Bug #6449: do default;
|
# Bug #6449: do default;
|
||||||
#
|
#
|
||||||
|
|
||||||
--error 1064
|
--error ER_PARSE_ERROR
|
||||||
do default;
|
do default;
|
||||||
--error 1054
|
--error ER_BAD_FIELD_ERROR
|
||||||
do foobar;
|
do foobar;
|
||||||
|
|
||||||
#
|
#
|
||||||
|
Reference in New Issue
Block a user