maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #10377
Re: [Commits] cb918231a25: MDEV-11582 InnoDB: Failing assertion: !((field)->vcol_info && !(field)->stored_in_db())
Hello Sergei,
The patch looks fine. I suggest one improvement.
Currently SERIAL can have various redundant, ignored, non-applicable
attributes, e.g.:
CREATE TABLE t1 (a SERIAL NULL);
CREATE TABLE t1 (a SERIAL AUTO_INCREMENT);
CREATE TABLE t1 (a SERIAL SERIAL DEFAULT VALUE);
CREATE OR REPLACE TABLE t1 (a SERIAL COLLATE `binary`);
Can we split the "attribute:" rule to disallow these for SERIAL?
Thanks!
On 02/09/2017 03:06 PM, serg@xxxxxxxxxxx wrote:
> revision-id: cb918231a25ee792749d7e64ebc97e19c0faaf09 (mariadb-10.2.3-192-gcb918231a25)
> parent(s): d1cc58f55ad516453aed42b65d71810e1392f745
> author: Sergei Golubchik
> committer: Sergei Golubchik
> timestamp: 2017-02-09 12:06:15 +0100
> message:
>
> 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.
>
> ---
> mysql-test/r/parser.result | 12 ++++++++++++
> mysql-test/t/parser.test | 11 +++++++++++
> sql/sql_yacc.yy | 22 ++++++++++++++--------
> 3 files changed, 37 insertions(+), 8 deletions(-)
>
> diff --git a/mysql-test/r/parser.result b/mysql-test/r/parser.result
> index 7a0a8667350..1292b0bd2e5 100644
> --- a/mysql-test/r/parser.result
> +++ b/mysql-test/r/parser.result
> @@ -1289,3 +1289,15 @@ 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
> SELECT 1' at line 2
> DROP TABLE t1;
> +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;
> diff --git a/mysql-test/t/parser.test b/mysql-test/t/parser.test
> index 1fa7df7fc3d..dc538db6073 100644
> --- a/mysql-test/t/parser.test
> +++ b/mysql-test/t/parser.test
> @@ -1321,3 +1321,14 @@ UNION
> SELECT 1;
>
> DROP TABLE t1;
> +
> +#
> +# MDEV-11582 InnoDB: Failing assertion: !((field)->vcol_info && !(field)->stored_in_db())
> +#
> +--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;
> diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
> index 12423e71f1f..db22708db43 100644
> --- a/sql/sql_yacc.yy
> +++ b/sql/sql_yacc.yy
> @@ -6145,8 +6145,7 @@ field_spec:
> lex->init_last_field(f, $1.str, NULL);
> $<create_field>$= f;
> }
> - field_type { Lex->set_last_field_type($3); }
> - field_def
> + field_type_or_serial
> {
> LEX *lex=Lex;
> $$= $<create_field>2;
> @@ -6164,6 +6163,19 @@ 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_attribute
> + ;
> +
> field_def:
> opt_attribute
> | opt_generated_always AS virtual_column_func
> @@ -6441,12 +6453,6 @@ field_type:
> { $$.set(MYSQL_TYPE_SET); }
> | LONG_SYM opt_binary
> { $$.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:
> _______________________________________________
> commits mailing list
> commits@xxxxxxxxxxx
> https://lists.askmonty.org/cgi-bin/mailman/listinfo/commits
>