Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FB4 Release Notes should indicate that revised CREATE TRIGGER (SQL2003) syntax is not backwards compatible with older versions [DOC145] #81

Closed
firebird-automations opened this issue Feb 6, 2020 · 3 comments

Comments

@firebird-automations
Copy link

Submitted by: Tony Whyman (twhyman)

See CORE6243 and CORE5545 for background discussion.

The SQL2003 variant of the CREATE TRIGGER syntax has changed in Firebird 4 so that the "POSITION" clause must now come after the "ON <relation name>" clause instead of preceding it as was the case in Firebird 2.5 and Firebird 3.x. SQL statements that successfully used this variant in earlier versions will be rejected by Firebird 4 as invalid syntax (token unknown - POSITION). The Firebird 2.5 language reference specifies:

<relation_trigger_sql2003> ::=
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <mutation_list>
[POSITION number]
ON {tablename | viewname}

Firebird 4 effectively changes the syntax specification to

<relation_trigger_sql2003> ::=
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <mutation_list>
ON {tablename | viewname}
[POSITION number]

CORE5545 declares that this a bug fix despite both Firebird 2.5 and Firebird 3 being compliant with the Firebird 2.5 language reference manual. The "POSITION" clause is understood to be a Firebird extension rather than an SQL standard and hence the language reference may be viewed as the original specification. Both Firebird 2.5 and Firebird 3 are compliant with the specification and hence this should not be identified as a bug. CORE5545 is a change to the Firebird SQL syntax specification.

The revised CREATE TRIGGER syntax should be declared in the release notes both in chapter 8 (DDL) and in chapter 12 (Compatibility Issues) so that users are correctly informed about this change to the Firebird SQL specification.

@firebird-automations
Copy link
Author

Modified by: Tony Whyman (twhyman)

description: See CORE6243 and CORE5545 for background discussion.

The SQL2003 variant of the CREATE TRIGGER syntax has changed in Firebird 4 so that the "POSITION" clause must now come after the "ON <relation name>" clause instead of preceding it as was the case in Firebird 2.5 and Firebird 3.x. SQL statements that successfully used this variant in earlier versions will be rejected by Firebird 4 as invalid syntax (token unknown - POSITION). The Firebird 2.5 language reference specifies:

<relation_trigger_sql2003> ::=
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <mutation_list>
[POSITION number]
ON {tablename | viewname}

Firebird 4 effectively changes the syntax specification to

<relation_trigger_sql2003> ::=
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <mutation_list>
ON {tablename | viewname}
[POSITION number]

CORE5545 declares this as a bug despite both Firebird 2.5 and Firebird 3 being compliant with the Firebird 2.5 language reference manual. The "POSITION" clause is understood to be a Firebird extension rather than an SQL standard and hence the language reference may be viewed as the original specification. Both Firebird 2.5 and Firebird 3 are compliant with the specification and hence this should not be identified as a bug. CORE5545 is a change to the Firebird SQL syntax specification.

The revised CREATE TRIGGER syntax should be declared in the release notes both in chapter 8 (DDL) and in chapter 12 (Compatibility Issues) so that users are correctly informed about this change to the Firebird SQL specification.

=>

See CORE6243 and CORE5545 for background discussion.

The SQL2003 variant of the CREATE TRIGGER syntax has changed in Firebird 4 so that the "POSITION" clause must now come after the "ON <relation name>" clause instead of preceding it as was the case in Firebird 2.5 and Firebird 3.x. SQL statements that successfully used this variant in earlier versions will be rejected by Firebird 4 as invalid syntax (token unknown - POSITION). The Firebird 2.5 language reference specifies:

<relation_trigger_sql2003> ::=
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <mutation_list>
[POSITION number]
ON {tablename | viewname}

Firebird 4 effectively changes the syntax specification to

<relation_trigger_sql2003> ::=
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <mutation_list>
ON {tablename | viewname}
[POSITION number]

CORE5545 declares that this a bug fix despite both Firebird 2.5 and Firebird 3 being compliant with the Firebird 2.5 language reference manual. The "POSITION" clause is understood to be a Firebird extension rather than an SQL standard and hence the language reference may be viewed as the original specification. Both Firebird 2.5 and Firebird 3 are compliant with the specification and hence this should not be identified as a bug. CORE5545 is a change to the Firebird SQL syntax specification.

The revised CREATE TRIGGER syntax should be declared in the release notes both in chapter 8 (DDL) and in chapter 12 (Compatibility Issues) so that users are correctly informed about this change to the Firebird SQL specification.

@mrotteveel
Copy link
Member

@dyemanov Can you check if this is still relevant?

@mrotteveel
Copy link
Member

Verified, Firebird allows POSITION in both positions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants