@@ -598,7 +598,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
598
598
599
599
%type <simple_string>
600
600
remember_name remember_end opt_ident opt_db text_or_password
601
- opt_escape
601
+ opt_escape opt_constraint
602
602
603
603
%type <string>
604
604
text_string opt_gconcat_separator
@@ -631,7 +631,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
631
631
expr_list udf_expr_list when_list ident_list ident_list_arg
632
632
633
633
%type <key_type>
634
- key_type opt_unique_or_fulltext
634
+ key_type opt_unique_or_fulltext constraint_key_type
635
635
636
636
%type <key_alg>
637
637
key_alg opt_btree_or_rtree
@@ -1189,6 +1189,13 @@ key_def:
1189
1189
lex->key_list.push_back(new Key($1 ,$2 , $3 , lex->col_list));
1190
1190
lex->col_list.empty(); /* Alloced by sql_alloc */
1191
1191
}
1192
+ | opt_constraint constraint_key_type opt_ident key_alg ' (' key_list ' )'
1193
+ {
1194
+ LEX *lex=Lex;
1195
+ const char *key_name= $3 ? $3 :$1 ;
1196
+ lex->key_list.push_back(new Key($2 , key_name, $4 , lex->col_list));
1197
+ lex->col_list.empty(); /* Alloced by sql_alloc */
1198
+ }
1192
1199
| opt_constraint FOREIGN KEY_SYM opt_ident ' (' key_list ' )' references
1193
1200
{
1194
1201
LEX *lex=Lex;
@@ -1212,8 +1219,8 @@ check_constraint:
1212
1219
;
1213
1220
1214
1221
opt_constraint :
1215
- /* empty */
1216
- | CONSTRAINT opt_ident ;
1222
+ /* empty */ { $$ =( char *) 0 ; }
1223
+ | CONSTRAINT opt_ident { $$ = $2 ; } ;
1217
1224
1218
1225
field_spec :
1219
1226
field_ident
@@ -1575,14 +1582,16 @@ delete_option:
1575
1582
| SET DEFAULT { $$ = (int ) foreign_key::FK_OPTION_DEFAULT; };
1576
1583
1577
1584
key_type :
1578
- opt_constraint PRIMARY_SYM KEY_SYM { $$ = Key::PRIMARY; }
1579
- | key_or_index { $$ = Key::MULTIPLE; }
1585
+ key_or_index { $$ = Key::MULTIPLE; }
1580
1586
| FULLTEXT_SYM { $$ = Key::FULLTEXT; }
1581
1587
| FULLTEXT_SYM key_or_index { $$ = Key::FULLTEXT; }
1582
1588
| SPATIAL_SYM { $$ = Key::SPATIAL; }
1583
- | SPATIAL_SYM key_or_index { $$ = Key::SPATIAL; }
1584
- | opt_constraint UNIQUE_SYM { $$ = Key::UNIQUE; }
1585
- | opt_constraint UNIQUE_SYM key_or_index { $$ = Key::UNIQUE; };
1589
+ | SPATIAL_SYM key_or_index { $$ = Key::SPATIAL; };
1590
+
1591
+ constraint_key_type :
1592
+ PRIMARY_SYM KEY_SYM { $$ = Key::PRIMARY; }
1593
+ | UNIQUE_SYM { $$ = Key::UNIQUE; }
1594
+ | UNIQUE_SYM key_or_index { $$ = Key::UNIQUE; };
1586
1595
1587
1596
key_or_index :
1588
1597
KEY_SYM {}
0 commit comments