Ошибки синтаксиса MySQL часто довольно расплывчаты, только указывая строку, в которой происходит ошибка. Написание парсера, который дает точное и полезное сообщение об ошибке, не является полностью тривиальным, но это не проблема открытого исследования: большинство компиляторов для языков программирования общего назначения создают сообщения об ошибках, которые намного полезнее.
Так почему же анализатор MySQL не создает более качественные сообщения об ошибках? Это как-то связано с MySQL, или грамматика SQL, как правило, делает это чрезвычайно трудным?
Вот пример:
SELECT * FROM foo
WHERE bar > 0
AND baz NOT NULL
ORDER BY qux ASC
MySQL генерирует следующее сообщение об ошибке: 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 'NULL ORDER BY qux ASC'
Фактически, NOT NULL
должен быть IS NOT NULL
. Итак, почему MySQL не генерирует ошибку, например Unexpected token NOT at line 3 column 8
?