2017年10月30日月曜日

MySQL 8.0.0で予約語だったROLEが8.0.1ではキーワードになっていたはなし

TL;DR

  • hmatsu47 さんに MySQLのキーワードと予約語 の中で「ROLEは予約語じゃなくてキーワード」と教えてもらった
  • 予約語とキーワードの違いは、 role_or_ident_keyword にリストされているかどうか? (ちなみに5.7だと単に keyword ってリストになってる)

シンボルのリスト

ラベルのリスト

ほげってみる

$ 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 件のコメント :

コメントを投稿