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 件のコメント :
コメントを投稿