mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-11582 InnoDB: Failing assertion: !((field)->vcol_info && !(field)->stored_in_db())
change the parser not to allow SERIAL as a normal data type. make a special rule for it, where it could be used for define fields, but not generated fields, not return type of a stored function, etc.
This commit is contained in:
@ -1289,3 +1289,23 @@ SELECT 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 'UNION
|
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 'UNION
|
||||||
SELECT 1' at line 2
|
SELECT 1' at line 2
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1 (a serial null);
|
||||||
|
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 'null)' at line 1
|
||||||
|
create table t1 (a serial auto_increment);
|
||||||
|
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 'auto_increment)' at line 1
|
||||||
|
create table t1 (a serial serial default value);
|
||||||
|
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 'serial default value)' at line 1
|
||||||
|
create table t1 (a serial collate binary);
|
||||||
|
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 'collate binary)' at line 1
|
||||||
|
create table t1 (i int, vc serial as (i));
|
||||||
|
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 'as (i))' at line 1
|
||||||
|
create function fs() returns serial return 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 'serial return 1' at line 1
|
||||||
|
create table t1 ( id serial );
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
UNIQUE KEY `id` (`id`)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
drop table t1;
|
||||||
|
@ -1321,3 +1321,23 @@ UNION
|
|||||||
SELECT 1;
|
SELECT 1;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# MDEV-11582 InnoDB: Failing assertion: !((field)->vcol_info && !(field)->stored_in_db())
|
||||||
|
#
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
create table t1 (a serial null);
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
create table t1 (a serial auto_increment);
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
create table t1 (a serial serial default value);
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
create table t1 (a serial collate binary);
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
create table t1 (i int, vc serial as (i));
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
create function fs() returns serial return 1;
|
||||||
|
|
||||||
|
create table t1 ( id serial );
|
||||||
|
show create table t1;
|
||||||
|
drop table t1;
|
||||||
|
@ -1993,6 +1993,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
|||||||
definer_opt no_definer definer get_diagnostics
|
definer_opt no_definer definer get_diagnostics
|
||||||
parse_vcol_expr vcol_opt_specifier vcol_opt_attribute
|
parse_vcol_expr vcol_opt_specifier vcol_opt_attribute
|
||||||
vcol_opt_attribute_list vcol_attribute
|
vcol_opt_attribute_list vcol_attribute
|
||||||
|
opt_serial_attribute opt_serial_attribute_list serial_attribute
|
||||||
explainable_command
|
explainable_command
|
||||||
END_OF_INPUT
|
END_OF_INPUT
|
||||||
|
|
||||||
@ -6151,8 +6152,7 @@ field_spec:
|
|||||||
lex->init_last_field(f, $1.str, NULL);
|
lex->init_last_field(f, $1.str, NULL);
|
||||||
$<create_field>$= f;
|
$<create_field>$= f;
|
||||||
}
|
}
|
||||||
field_type { Lex->set_last_field_type($3); }
|
field_type_or_serial
|
||||||
field_def
|
|
||||||
{
|
{
|
||||||
LEX *lex=Lex;
|
LEX *lex=Lex;
|
||||||
$$= $<create_field>2;
|
$$= $<create_field>2;
|
||||||
@ -6170,6 +6170,30 @@ field_spec:
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
field_type_or_serial:
|
||||||
|
field_type { Lex->set_last_field_type($1); } field_def
|
||||||
|
| SERIAL_SYM
|
||||||
|
{
|
||||||
|
Lex_field_type_st type;
|
||||||
|
type.set(MYSQL_TYPE_LONGLONG);
|
||||||
|
Lex->set_last_field_type(type);
|
||||||
|
Lex->last_field->flags|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG
|
||||||
|
| UNSIGNED_FLAG | UNIQUE_KEY_FLAG;
|
||||||
|
}
|
||||||
|
opt_serial_attribute
|
||||||
|
;
|
||||||
|
|
||||||
|
opt_serial_attribute:
|
||||||
|
/* empty */ {}
|
||||||
|
| opt_serial_attribute_list {}
|
||||||
|
;
|
||||||
|
|
||||||
|
opt_serial_attribute_list:
|
||||||
|
opt_serial_attribute_list serial_attribute {}
|
||||||
|
| serial_attribute
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
field_def:
|
field_def:
|
||||||
opt_attribute
|
opt_attribute
|
||||||
| opt_generated_always AS virtual_column_func
|
| opt_generated_always AS virtual_column_func
|
||||||
@ -6447,12 +6471,6 @@ field_type:
|
|||||||
{ $$.set(MYSQL_TYPE_SET); }
|
{ $$.set(MYSQL_TYPE_SET); }
|
||||||
| LONG_SYM opt_binary
|
| LONG_SYM opt_binary
|
||||||
{ $$.set(MYSQL_TYPE_MEDIUM_BLOB); }
|
{ $$.set(MYSQL_TYPE_MEDIUM_BLOB); }
|
||||||
| SERIAL_SYM
|
|
||||||
{
|
|
||||||
$$.set(MYSQL_TYPE_LONGLONG);
|
|
||||||
Lex->last_field->flags|= (AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNSIGNED_FLAG |
|
|
||||||
UNIQUE_KEY_FLAG);
|
|
||||||
}
|
|
||||||
;
|
;
|
||||||
|
|
||||||
spatial_type:
|
spatial_type:
|
||||||
@ -6575,7 +6593,6 @@ opt_attribute_list:
|
|||||||
|
|
||||||
attribute:
|
attribute:
|
||||||
NULL_SYM { Lex->last_field->flags&= ~ NOT_NULL_FLAG; }
|
NULL_SYM { Lex->last_field->flags&= ~ NOT_NULL_FLAG; }
|
||||||
| not NULL_SYM { Lex->last_field->flags|= NOT_NULL_FLAG; }
|
|
||||||
| DEFAULT column_default_expr { Lex->last_field->default_value= $2; }
|
| DEFAULT column_default_expr { Lex->last_field->default_value= $2; }
|
||||||
| ON UPDATE_SYM NOW_SYM opt_default_time_precision
|
| ON UPDATE_SYM NOW_SYM opt_default_time_precision
|
||||||
{
|
{
|
||||||
@ -6591,6 +6608,18 @@ attribute:
|
|||||||
lex->last_field->flags|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNIQUE_KEY_FLAG;
|
lex->last_field->flags|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG | UNIQUE_KEY_FLAG;
|
||||||
lex->alter_info.flags|= Alter_info::ALTER_ADD_INDEX;
|
lex->alter_info.flags|= Alter_info::ALTER_ADD_INDEX;
|
||||||
}
|
}
|
||||||
|
| COLLATE_SYM collation_name
|
||||||
|
{
|
||||||
|
if (Lex->charset && !my_charset_same(Lex->charset,$2))
|
||||||
|
my_yyabort_error((ER_COLLATION_CHARSET_MISMATCH, MYF(0),
|
||||||
|
$2->name,Lex->charset->csname));
|
||||||
|
Lex->last_field->charset= $2;
|
||||||
|
}
|
||||||
|
| serial_attribute
|
||||||
|
;
|
||||||
|
|
||||||
|
serial_attribute:
|
||||||
|
not NULL_SYM { Lex->last_field->flags|= NOT_NULL_FLAG; }
|
||||||
| opt_primary KEY_SYM
|
| opt_primary KEY_SYM
|
||||||
{
|
{
|
||||||
LEX *lex=Lex;
|
LEX *lex=Lex;
|
||||||
@ -6610,13 +6639,6 @@ attribute:
|
|||||||
lex->alter_info.flags|= Alter_info::ALTER_ADD_INDEX;
|
lex->alter_info.flags|= Alter_info::ALTER_ADD_INDEX;
|
||||||
}
|
}
|
||||||
| COMMENT_SYM TEXT_STRING_sys { Lex->last_field->comment= $2; }
|
| COMMENT_SYM TEXT_STRING_sys { Lex->last_field->comment= $2; }
|
||||||
| COLLATE_SYM collation_name
|
|
||||||
{
|
|
||||||
if (Lex->charset && !my_charset_same(Lex->charset,$2))
|
|
||||||
my_yyabort_error((ER_COLLATION_CHARSET_MISMATCH, MYF(0),
|
|
||||||
$2->name,Lex->charset->csname));
|
|
||||||
Lex->last_field->charset= $2;
|
|
||||||
}
|
|
||||||
| IDENT_sys equal TEXT_STRING_sys
|
| IDENT_sys equal TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
if ($3.length > ENGINE_OPTION_MAX_LENGTH)
|
if ($3.length > ENGINE_OPTION_MAX_LENGTH)
|
||||||
|
Reference in New Issue
Block a user