On 10-6-2014 18:20, Arnold Levy [email protected] [firebird-support] 
wrote:
> I suspect that the parser of Firebird SQL was written as a recursive
> decent implementation - judging from the poor error reporting. I heard
> that Firebird is written in C. A great LR grammar parser such as Hyacc -
> also written in C - which is an improvement on Bison - the original yacc
> is available. I believe that Hyacc would comfortably handle the
> Firebird/Interbase SQL grammar. Why this suggestion? - because accurate
> error reporting can be provided by using such an implementation of the
> parser.

Firebird itself only executes individual statements, the server itself 
doesn't support executing scripts of multiple statement: it is the job 
of the client to break up a script into individual statements.

This is usually done in the naive way isql does it: splitting input on a 
semi-colon ";" and then sending the fragments as individual statements 
to the server. Firebird itself doesn't know semi-colons, except within 
PSQL blocks.

In your example, as Svein pointed out, it sends the statement

CREATE TRIGGER "TR_AI_Administrators__Id" FOR "Administrators"
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
   IF (NEW."_Id" IS NULL) THEN
   NEW."_Id" = GEN_ID("GEN_Administrators__Id", 1)

To the server, this is entirely valid until the end of string is reached 
where a semi-colon is expected. Would it have been helpful to receive a 
message indicating what is missing: probably but I don't think that is a 
top priority.

If you want to help improving Firebird and its error reporting, feel 
free to join the Firebird-devel mailinglist and offer your help.

Mark
-- 
Mark Rotteveel

Reply via email to