1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

longer regex error messages

This commit is contained in:
Sergei Golubchik
2019-12-18 17:50:09 +01:00
parent 9dadfdcde5
commit 3b654d54c1
4 changed files with 22 additions and 23 deletions

View File

@ -31,6 +31,7 @@
#include <m_string.h> #include <m_string.h>
#include <my_getopt.h> #include <my_getopt.h>
#include <my_dir.h> #include <my_dir.h>
#include <ctype.h>
#define MAX_ROWS 3000 #define MAX_ROWS 3000
#define ERRORS_PER_RANGE 1000 #define ERRORS_PER_RANGE 1000
@ -749,18 +750,19 @@ static struct message *find_message(struct errors *err, const char *lang,
for the format specifiers for the format specifiers
RETURN VALUE RETURN VALUE
Returns the checksum for all the characters of the Returns the checksum for all letters of the
format specifiers format specifiers
Ex. Ex.
"text '%-64.s' text part 2 %d'" "text '%-.64s' text part 2 %zu'"
^^^^^^ ^^ ^ ^^
characters will be xored to form checksum characters will be xored to form checksum
Non-letters are skipped, because they do not change the type
of the argument.
NOTE: NOTE:
Does not support format specifiers with positional args Does not support format specifiers with positional args like "%2$s"
like "%2$s" but that is not yet supported by my_vsnprintf
either.
*/ */
static ha_checksum checksum_format_specifier(const char* msg) static ha_checksum checksum_format_specifier(const char* msg)
@ -777,20 +779,17 @@ static ha_checksum checksum_format_specifier(const char* msg)
start= p+1; /* Entering format specifier */ start= p+1; /* Entering format specifier */
num_format_specifiers++; num_format_specifiers++;
} }
else if (start) else if (start && isalpha(*p))
{ {
chksum= my_checksum(chksum, p, 1);
switch(*p) { switch(*p) {
case 'd': case 'd':
case 'u': case 'u':
case 'x': case 'x':
case 's': case 's':
case 'M': case 'M':
chksum= my_checksum(chksum, (uchar*) start, (uint) (p + 1 - start));
start= 0; /* Not in format specifier anymore */ start= 0; /* Not in format specifier anymore */
break; break;
default:
break;
} }
} }

View File

@ -793,7 +793,7 @@ SELECT 'a\nb' RLIKE '(?-s)a.b';
'a\nb' RLIKE 'a.b' 'a\nb' RLIKE 'a.b'
1 1
SELECT 'a\nb' RLIKE '(?-s)a.b'; SELECT 'a\nb' RLIKE '(?-s)a.b';
'a\nb' RLIKE '(?-s)a.b' 'a\nb' RLIKE '(?-s)a.b'
0 0
SET default_regex_flags=DEFAULT; SET default_regex_flags=DEFAULT;
SELECT REGEXP_SUBSTR('Monday Mon','^((?<DN>Mon|Fri|Sun)day|(?<DN>Tue)sday).*(?P=DN)$'); SELECT REGEXP_SUBSTR('Monday Mon','^((?<DN>Mon|Fri|Sun)day|(?<DN>Tue)sday).*(?P=DN)$');
@ -817,10 +817,10 @@ SELECT 'AB' RLIKE 'A# this is a comment\nB';
'AB' RLIKE 'A B' 'AB' RLIKE 'A B'
1 1
SELECT 'AB' RLIKE 'A# this is a comment\nB'; SELECT 'AB' RLIKE 'A# this is a comment\nB';
'AB' RLIKE 'A# this is a comment\nB' 'AB' RLIKE 'A# this is a comment\nB'
1 1
SET default_regex_flags=DEFAULT; SET default_regex_flags=DEFAULT;
SELECT 'Aq' RLIKE 'A\\q'; SELECT 'Aq' RLIKE 'A\\q';
ERROR 42000: Regex error 'unrecognized character follows \ at offset 2' ERROR 42000: Regex error 'unrecognized character follows \ at offset 2'
SET default_regex_flags='EXTRA'; SET default_regex_flags='EXTRA';
SELECT 'Aq' RLIKE 'A\\q'; SELECT 'Aq' RLIKE 'A\\q';
@ -860,7 +860,7 @@ SELECT 0xE001 REGEXP @regCheck;
# Testing a warning # Testing a warning
SET NAMES latin1; SET NAMES latin1;
SET @regCheck= '\\xE0\\x01'; SET @regCheck= '\\xE0\\x01';
SELECT 0xE001 REGEXP @regCheck; SELECT 0xE001 REGEXP @regCheck;
0xE001 REGEXP @regCheck 0xE001 REGEXP @regCheck
0 0
Warnings: Warnings:

View File

@ -3,7 +3,7 @@ SELECT 'a' RLIKE 'a';
'a' RLIKE 'a' 'a' RLIKE 'a'
0 0
Warnings: Warnings:
Warning 1139 Got error 'pcre_exec: Internal error (-123)' from regexp Warning 1139 Regex error 'pcre_exec: Internal error (-123)'
SET debug_dbug=''; SET debug_dbug='';
SELECT 'a' RLIKE 'a'; SELECT 'a' RLIKE 'a';
'a' RLIKE 'a' 'a' RLIKE 'a'

View File

@ -3186,13 +3186,13 @@ ER_INVALID_USE_OF_NULL 22004
swe "Felaktig använding av NULL" swe "Felaktig använding av NULL"
ukr "Хибне використання значення NULL" ukr "Хибне використання значення NULL"
ER_REGEXP_ERROR 42000 ER_REGEXP_ERROR 42000
cze "Regulární výraz vrátil chybu '%-.64s'" cze "Regulární výraz vrátil chybu: %s"
dan "Fik fejl '%-.64s' fra regexp" dan "Fik fejl '%-.64s' fra regexp"
nla "Fout '%-.64s' ontvangen van regexp" nla "Fout '%-.64s' ontvangen van regexp"
eng "Got error '%-.64s' from regexp" eng "Regex error '%s'"
est "regexp tagastas vea '%-.64s'" est "regexp tagastas vea: %s"
fre "Erreur '%-.64s' provenant de regexp" fre "Erreur '%-.64s' provenant de regexp"
ger "regexp lieferte Fehler '%-.64s'" ger "Regexp Fehler %s"
hindi "regexp में '%-.64s' त्रुटि हुई" hindi "regexp में '%-.64s' त्रुटि हुई"
hun "'%-.64s' hiba a regularis kifejezes hasznalata soran (regexp)" hun "'%-.64s' hiba a regularis kifejezes hasznalata soran (regexp)"
ita "Errore '%-.64s' da regexp" ita "Errore '%-.64s' da regexp"
@ -3200,11 +3200,11 @@ ER_REGEXP_ERROR 42000
kor "regexp에서 '%-.64s'가 났습니다." kor "regexp에서 '%-.64s'가 났습니다."
por "Obteve erro '%-.64s' em regexp" por "Obteve erro '%-.64s' em regexp"
rum "Eroarea '%-.64s' obtinuta din expresia regulara (regexp)" rum "Eroarea '%-.64s' obtinuta din expresia regulara (regexp)"
rus "Получена ошибка '%-.64s' от регулярного выражения" rus "Ошибка регулярного выражения: %s"
serbian "Funkcija regexp je vratila grešku '%-.64s'" serbian "Funkcija regexp je vratila grešku: %s"
spa "Obtenido error '%-.64s' de regexp" spa "Obtenido error '%-.64s' de regexp"
swe "Fick fel '%-.64s' från REGEXP" swe "Fick fel '%-.64s' från REGEXP"
ukr "Отримано помилку '%-.64s' від регулярного виразу" ukr "Помилка регулярного виразу: %s"
ER_MIX_OF_GROUP_FUNC_AND_FIELDS 42000 ER_MIX_OF_GROUP_FUNC_AND_FIELDS 42000
cze "Pokud není žádná GROUP BY klauzule, není dovoleno současné použití GROUP položek (MIN(),MAX(),COUNT()...) s ne GROUP položkami" cze "Pokud není žádná GROUP BY klauzule, není dovoleno současné použití GROUP položek (MIN(),MAX(),COUNT()...) s ne GROUP položkami"
dan "Sammenblanding af GROUP kolonner (MIN(),MAX(),COUNT()...) uden GROUP kolonner er ikke tilladt, hvis der ikke er noget GROUP BY prædikat" dan "Sammenblanding af GROUP kolonner (MIN(),MAX(),COUNT()...) uden GROUP kolonner er ikke tilladt, hvis der ikke er noget GROUP BY prædikat"