Support 6 digit version numbers in executable comment syntax.
This is needed to be able to ignore executable comments from version 10.0.
This commit is contained in:
parent
1bdf2151da
commit
55829ac13d
@ -38,11 +38,14 @@ select 1 /*M!50300 +1 */;
|
|||||||
select 2 /*M!99999 +1 */;
|
select 2 /*M!99999 +1 */;
|
||||||
2
|
2
|
||||||
2
|
2
|
||||||
|
select 2 /*M!100000 +1 */;
|
||||||
|
2
|
||||||
|
2
|
||||||
select 2 /*M!0000 +1 */;
|
select 2 /*M!0000 +1 */;
|
||||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '0000 +1 */' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '0000 +1 */' at line 1
|
||||||
select 1/*!2*/;
|
select 1/*!2*/;
|
||||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '2*/' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '2*/' at line 1
|
||||||
select 1/*!000002*/;
|
select 1/*!0000002*/;
|
||||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '2*/' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '2*/' at line 1
|
||||||
select 1/*!999992*/;
|
select 1/*!999992*/;
|
||||||
1
|
1
|
||||||
|
@ -28,6 +28,7 @@ select 1 /*M! +1 */;
|
|||||||
select 1 /*M!50000 +1 */;
|
select 1 /*M!50000 +1 */;
|
||||||
select 1 /*M!50300 +1 */;
|
select 1 /*M!50300 +1 */;
|
||||||
select 2 /*M!99999 +1 */;
|
select 2 /*M!99999 +1 */;
|
||||||
|
select 2 /*M!100000 +1 */;
|
||||||
--error ER_PARSE_ERROR
|
--error ER_PARSE_ERROR
|
||||||
select 2 /*M!0000 +1 */;
|
select 2 /*M!0000 +1 */;
|
||||||
|
|
||||||
@ -39,7 +40,7 @@ select 2 /*M!0000 +1 */;
|
|||||||
select 1/*!2*/;
|
select 1/*!2*/;
|
||||||
|
|
||||||
--error ER_PARSE_ERROR
|
--error ER_PARSE_ERROR
|
||||||
select 1/*!000002*/;
|
select 1/*!0000002*/;
|
||||||
|
|
||||||
select 1/*!999992*/;
|
select 1/*!999992*/;
|
||||||
|
|
||||||
|
@ -1509,27 +1509,23 @@ int lex_one_token(void *arg, THD *thd)
|
|||||||
|
|
||||||
lip->save_in_comment_state();
|
lip->save_in_comment_state();
|
||||||
|
|
||||||
if (lip->yyPeekn(2) == 'M' && lip->yyPeekn(3) == '!')
|
if (lip->yyPeekn(2) == '!' ||
|
||||||
{
|
(lip->yyPeekn(2) == 'M' && lip->yyPeekn(3) == '!'))
|
||||||
/* Skip MariaDB unique marker */
|
|
||||||
lip->set_echo(FALSE);
|
|
||||||
lip->yySkip();
|
|
||||||
/* The following if will be true */
|
|
||||||
}
|
|
||||||
if (lip->yyPeekn(2) == '!')
|
|
||||||
{
|
{
|
||||||
|
bool maria_comment_syntax= lip->yyPeekn(2) == 'M';
|
||||||
lip->in_comment= DISCARD_COMMENT;
|
lip->in_comment= DISCARD_COMMENT;
|
||||||
/* Accept '/' '*' '!', but do not keep this marker. */
|
/* Accept '/' '*' '!', but do not keep this marker. */
|
||||||
lip->set_echo(FALSE);
|
lip->set_echo(FALSE);
|
||||||
lip->yySkipn(3);
|
lip->yySkipn(maria_comment_syntax ? 4 : 3);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The special comment format is very strict:
|
The special comment format is very strict:
|
||||||
'/' '*' '!', followed by an optional 'M' and exactly
|
'/' '*' '!', followed by an optional 'M' and exactly
|
||||||
1 digit (major), 2 digits (minor), then 2 digits (dot).
|
1-2 digits (major), 2 digits (minor), then 2 digits (dot).
|
||||||
32302 -> 3.23.02
|
32302 -> 3.23.02
|
||||||
50032 -> 5.0.32
|
50032 -> 5.0.32
|
||||||
50114 -> 5.1.14
|
50114 -> 5.1.14
|
||||||
|
100000 -> 10.0.0
|
||||||
*/
|
*/
|
||||||
if ( my_isdigit(cs, lip->yyPeekn(0))
|
if ( my_isdigit(cs, lip->yyPeekn(0))
|
||||||
&& my_isdigit(cs, lip->yyPeekn(1))
|
&& my_isdigit(cs, lip->yyPeekn(1))
|
||||||
@ -1539,14 +1535,21 @@ int lex_one_token(void *arg, THD *thd)
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
ulong version;
|
ulong version;
|
||||||
char *end_ptr= (char*) lip->get_ptr()+5;
|
uint length= 5;
|
||||||
|
char *end_ptr= (char*) lip->get_ptr()+length;
|
||||||
int error;
|
int error;
|
||||||
|
if (my_isdigit(cs, lip->yyPeekn(5)))
|
||||||
|
{
|
||||||
|
end_ptr++; // 6 digit number
|
||||||
|
length++;
|
||||||
|
}
|
||||||
|
|
||||||
version= (ulong) my_strtoll10(lip->get_ptr(), &end_ptr, &error);
|
version= (ulong) my_strtoll10(lip->get_ptr(), &end_ptr, &error);
|
||||||
|
|
||||||
if (version <= MYSQL_VERSION_ID)
|
if (version <= MYSQL_VERSION_ID)
|
||||||
{
|
{
|
||||||
/* Accept 'M' 'm' 'm' 'd' 'd' */
|
/* Accept 'M' 'm' 'm' 'd' 'd' */
|
||||||
lip->yySkipn(5);
|
lip->yySkipn(length);
|
||||||
/* Expand the content of the special comment as real code */
|
/* Expand the content of the special comment as real code */
|
||||||
lip->set_echo(TRUE);
|
lip->set_echo(TRUE);
|
||||||
state=MY_LEX_START;
|
state=MY_LEX_START;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user