TL;DR
- hmatsu47 さんに MySQLのキーワードと予約語 の中で「ROLEは予約語じゃなくてキーワード」と教えてもらった
- 予約語とキーワードの違いは、
role_or_ident_keyword
にリストされているかどうか? (ちなみに5.7だと単にkeyword
ってリストになってる)
シンボルのリスト
SYM(ROLE)
がROLE_SYM
に割り当てられているSYM
はキーワードとして(SG_KEYWORDS
)割り当てた値を返す
ラベルのリスト
- MySQL 8.0.0はここに
ROLE_SYM
がリストされてない。MySQL 8.0.1以降はここにROLE_SYM
がリストされてる。
ほげってみる
$ diff -c1 sql/sql_yacc.yy.orig sql/sql_yacc.yy
*** sql/sql_yacc.yy.orig 2017-09-19 20:33:50.000000000 +0900
--- sql/sql_yacc.yy 2017-10-30 16:23:04.657625949 +0900
***************
*** 13343,13345 ****
| RESTORE_SYM {}
- | ROLE_SYM {}
| ROLLBACK_SYM {}
--- 13343,13344 ----
$ make && make install
mysql80 8> SELECT @@version;
+--------------------+
| @@version |
+--------------------+
| 8.0.3-rc-debug-log |
+--------------------+
1 row in set (0.00 sec)
mysql80 8> CREATE TABLE t1 (role int);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'role int)' at line 1
転けるようになった。
なんというか
予約語のキーワードと非予約語のキーワードの境目って案外大したことなかった…。
これを機に色々ゴニョって遊んでみ(ない
0 件のコメント :
コメントを投稿