象と戯れ

 | 

2009-02-20

PostgreSQLのparserをいじめてみた

10:46 | PostgreSQLのparserをいじめてみた - 象と戯れ を含むブックマーク はてなブックマーク - PostgreSQLのparserをいじめてみた - 象と戯れ

[postgres@localhost ~]$ psql
Welcome to psql 8.2.4, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

postgres=# \q
[postgres@localhost ~]$ perl -e 'print "SELECT " . "NOT " x 9995 . "TRUE;"' | psql
 ?column? 
----------
 f
(1 row)

[postgres@localhost ~]$ perl -e 'print "SELECT " . "NOT " x 9996 . "TRUE;"' | psql
ERROR:  parser stack overflow at or near "TRUE"
LINE 1: ...OT NOT NOT NOT NOT NOT NOT NOT NOT NOT NOT NOT NOT NOT TRUE;

PostgreSQLyaccではなくbisonですが、これってparser generatorの限界、ってことでいいんでしょうか?

Ref: PHPとRubyとPythonのparserをいじめてみた - hnwの日記

anonymousanonymous2009/02/20 17:508.3.5では異なるエラーメッセージでした。その先は未実行ですが。
perl -e 'print "SELECT " . "NOT " x 7500 . "TRUE;"' | psql exam
ERROR: stack depth limit exceeded
HINT: Increase the configuration parameter "max_stack_depth", after ensuring the platform's stack depth limit is adequate.

umitanukiumitanuki2009/02/20 17:53なるほど。。。max_stack_depthにも制限されるんですね。
max_stack_depthはpostgresql.confで変更可能なので増やしてみるといいかもしれません。

hnwhnw2009/02/20 18:24重箱の隅をつつくような内容の記事を読んで頂いてありがとうございます。10000はbisonのデフォルト値だと思います。http://www.bookshelf.jp/texi/bison/bison-ja_8.html#SEC80

umitanukiumitanuki2009/02/20 18:50postgresql-8.3.1のソースみたら、10000で指定されてましたね。
SELECTやTRUEもカウントすると9997までOKのはずですが、あとの3つはどこいってるんでしょうねー

 |