| Feature ID | Feature Name | v1.5 | v2.0 | v2.1 | v2.5 | v3.0 | Comments | |||
| E011 | Numeric data types | * | * | * | * | * | ||||
| E011-01 | INTEGER and SMALLINT data types (including all spellings) | + | + | + | + | + | ||||
| E011-02 | REAL, DOUBLE PRECISON, and FLOAT data types | + | + | + | + | + | ||||
| E011-03 | DECIMAL and NUMERIC data types | * | * | * | * | * | NUMERIC is not compliant and represents almost the same semantics as DECIMAL | |||
| E011-04 | Arithmetic operators | + | + | + | + | + | ||||
| E011-05 | Numeric comparison | + | + | + | + | + | ||||
| E011-06 | Implicit casting among the numeric data types | + | + | + | + | + | ||||
| E021 | Character string types | * | * | + | + | + | ||||
| E021-01 | CHARACTER data type (including all its spellings) | + | + | + | + | + | ||||
| E021-02 | CHARACTER VARYING data type (including all its spellings) | + | + | + | + | + | ||||
| E021-03 | Character literals | + | + | + | + | + | ||||
| E021-04 | CHARACTER_LENGTH function | − | + | + | + | + | ||||
| E021-05 | OCTET_LENGTH function | − | + | + | + | + | ||||
| E021-06 | SUBSTRING function | * | + | + | + | + | In Firebird 1.5, SUBSTRING does not accept value expressions as its arguments | |||
| E021-07 | Character concatenation | + | + | + | + | + | ||||
| E021-08 | UPPER and LOWER functions | * | + | + | + | + | In Firebird 1.5, LOWER is not supported | |||
| E021-09 | TRIM function | − | + | + | + | + | ||||
| E021-10 | Implicit casting among the fixed-length and variable-length character string types | + | + | + | + | + | ||||
| E021-11 | POSITION function | − | − | + | + | + | ||||
| E021-12 | Character comparison | + | + | + | + | + | ||||
| E031 | Identifiers | + | + | + | + | + | ||||
| E031-01 | Delimited identifiers | + | + | + | + | + | ||||
| E031-02 | Lower case identifiers | + | + | + | + | + | ||||
| E031-03 | Trailing underscore | + | + | + | + | + | ||||
| E051 | Basic query specification | * | * | * | * | * | ||||
| E051-01 | SELECT DISTINCT | + | + | + | + | + | ||||
| E051-02 | GROUP BY clause | + | + | + | + | + | ||||
| E051-04 | GROUP BY can contain columns not in | + | + | + | + | + | ||||
| E051-05 | Select list items can be renamed | + | + | + | + | + | ||||
| E051-06 | HAVING clause | + | + | + | + | + | ||||
| E051-07 | Qualified * in select list | + | + | + | + | + | ||||
| E051-08 | Correlation names in the FROM clause | + | + | + | + | + | In Firebird 1.5, keyword AS is not supported | |||
| E051-09 | Rename columns in the FROM clause | − | * | * | * | * | Supported only for derived tables | |||
| E061 | Basic predicates and search conditions | + | + | + | + | + | ||||
| E061-01 | Comparison predicate | + | + | + | + | + | ||||
| E061-02 | BETWEEN predicate | + | + | + | + | + | ||||
| E061-03 | IN predicate with list of values | + | + | + | + | + | ||||
| E061-04 | LIKE predicate | + | + | + | + | + | ||||
| E061-05 | LIKE predicate: ESCAPE clause | + | + | + | + | + | ||||
| E061-06 | NULL predicate | + | + | + | + | + | ||||
| E061-07 | Quantified comparison predicate | + | + | + | + | + | ||||
| E061-08 | EXISTS predicate | + | + | + | + | + | ||||
| E061-09 | Subqueries in comparison predicate | + | + | + | + | + | ||||
| E061-11 | Subqueries in IN predicate | + | + | + | + | + | ||||
| E061-12 | Subqueries in quantified comparison predicate | + | + | + | + | + | ||||
| E061-13 | Correlated subqueries | + | + | + | + | + | ||||
| E061-14 | Search condition | + | + | + | + | + | ||||
| E071 | Basic query expressions | * | * | * | * | * | ||||
| E071-01 | UNION DISTINCT table operator | * | + | + | + | + | In Firebird 1.5, keyword DISTINCT is not supported, but the default behaviour conforms | |||
| E071-02 | UNION ALL table operator | + | + | + | + | + | ||||
| E071-03 | EXCEPT DISTINCT table operator | − | − | − | − | − | ||||
| E071-05 | Columns combined via table operators need not have exactly the same data type | − | + | + | + | + | ||||
| E071-06 | Table operators in subqueries | − | + | + | + | + | ||||
| E081 | Basic Privileges | * | * | * | * | + | ||||
| E081-01 | SELECT privilege at the table level | + | + | + | + | + | ||||
| E081-02 | DELETE privilege | + | + | + | + | + | ||||
| E081-03 | INSERT privilege at the table level | + | + | + | + | + | ||||
| E081-04 | UPDATE privilege at the table level | + | + | + | + | + | ||||
| E081-05 | UPDATE privilege at the column level | + | + | + | + | + | ||||
| E081-06 | REFERENCES privilege at the table level | + | + | + | + | + | ||||
| E081-07 | REFERENCES privilege at the column level | + | + | + | + | + | ||||
| E081-08 | WITH GRANT OPTION | + | + | + | + | + | ||||
| E081-09 | USAGE privilege | − | − |
|
|
+ | ||||
| E081-10 | EXECUTE privilege | + | + | + | + | + | ||||
| E091 | Set functions | + | + | + | + | + | ||||
| E091-01 | AVG | + | + | + | + | + | ||||
| E091-02 | COUNT | + | + | + | + | + | ||||
| E091-03 | MAX | + | + | + | + | + | ||||
| E091-04 | MIN | + | + | + | + | + | ||||
| E091-05 | SUM | + | + | + | + | + | ||||
| E091-06 | ALL quantifier | + | + | + | + | + | ||||
| E091-07 | DISTINCT quantifier | + | + | + | + | + | ||||
| E101 | Basic data manipulation | + | + | + | + | + | ||||
| E101-01 | INSERT statement | + | + | + | + | + | ||||
| E101-03 | Searched UPDATE statement | + | + | + | + | + | ||||
| E101-04 | Searched DELETE statement | + | + | + | + | + | ||||
| E111 | Single row SELECT statement | + | + | + | + | + | ||||
| E121 | Basic cursor support | * | * | * | * | * | ||||
| E121-01 | DECLARE CURSOR | − | + | + | + | + | ||||
| E121-02 | ORDER BY columns need not be in select list | + | + | + | + | + | ||||
| E121-03 | Value expressions in ORDER BY clause | + | + | + | + | + | ||||
| E121-04 | OPEN statement | − | + | + | + | + | ||||
| E121-06 | Positioned UPDATE statement | * | + | + | + | + | In Firebird 1.5, only non-standard FOR SELECT cursors support positioned updates/deletes | |||
| E121-07 | Positioned DELETE statement | * | + | + | + | + | (same as above) | |||
| E121-08 | CLOSE statement | − | + | + | + | + | ||||
| E121-10 | FETCH statement: implicit NEXT | − | + | + | + | + | ||||
| E121-17 | WITH HOLD cursors | − | − | − | − | − | ||||
| E131 | Null value support (nulls in lieu of values) | − | + | + | + | + | ||||
| E141 | Basic integrity constraints | * | * | * | * | * | ||||
| E141-01 | NOT NULL constraints | + | + | + | + | + | ||||
| E141-02 | UNIQUE constraints of NOT NULL columns | + | + | + | + | + | ||||
| E141-03 | PRIMARY KEY constraints | + | + | + | + | + | ||||
| E141-04 | Basic FOREIGN KEY constraint with the NO ACTION default for both referential delete action and referential update action | + | + | + | + | + | ||||
| E141-06 | CHECK constraints | + | + | + | + | + | ||||
| E141-07 | Column defaults | + | + | + | + | + | ||||
| E141-08 | NOT NULL inferred on PRIMARY KEY | − | + | + | + | + | ||||
| E141-10 | Names in a foreign key can be specified in any order | − | − | − | − | − | ||||
| E151 | Transaction support | + | + | + | + | + | ||||
| E151-01 | COMMIT statement | + | + | + | + | + | ||||
| E151-02 | ROLLBACK statement | + | + | + | + | + | ||||
| E152 | Basic SET TRANSACTION statement | * | * | * | * | * | ||||
| E152-01 | SET TRANSACTION statement: ISOLATION LEVEL SERIALIZABLE clause |
− | − | − | − | − | ||||
| E152-02 | SET TRANSACTION statement: READ ONLY and READ WRITE clauses |
+ | + | + | + | + | ||||
| E153 | Updatable queries with subqueries | + | + | + | + | + | ||||
| E161 | SQL comments using leading double minus | + | + | + | + | + | ||||
| E171 | SQLSTATE support | − | − | − | + | + | ||||
| E182 | Module language | − | − | − | − | − | ||||
| F031 | Basic schema manipulation | * | * | * | * | * | ||||
| F031-01 | CREATE TABLE statement to create persistent base tables | + | + | + | + | + | ||||
| F031-02 | CREATE VIEW statement | + | + | + | + | + | ||||
| F031-03 | GRANT statement | + | + | + | + | + | ||||
| F031-04 | ALTER TABLE statement: ADD COLUMN clause |
+ | + | + | + | + | ||||
| F031-13 | DROP TABLE statement: RESTRICT clause |
* | * | * | * | * | RESTRICT keyword is not supported, but the default behaviour conforms | |||
| F031-19 | REVOKE statement: RESTRICT clause |
* | * | * | * | * | (same as above) | |||
| F041 | Basic joined table | + | + | + | + | + | ||||
| F041-01 | Inner join (but not necessarily the INNER keyword) | + | + | + | + | + | ||||
| F041-02 | INNER keyword | + | + | + | + | + | ||||
| F041-03 | LEFT OUTER JOIN | + | + | + | + | + | ||||
| F041-04 | RIGHT OUTER JOIN | + | + | + | + | + | ||||
| F041-05 | Outer joins can be nested | + | + | + | + | + | ||||
| F041-07 | The inner table in a left or right outer join can also be used in an inner join | + | + | + | + | + | ||||
| F041-08 | All comparison operators are supported (rather than just =) | + | + | + | + | + | ||||
| F051 | Basic date and time | * | * | * | * | * | ||||
| F051-01 | DATE data type (including support of DATE literal) | + | + | + | + | + | ||||
| F051-02 | TIME data type (including support of TIME literal) with fractional seconds precision of at least 0 | + | + | + | + | + | ||||
| F051-03 | TIMESTAMP data type (including support of TIMESTAMP literal) with fractional seconds precision of at least 0 and 6 | + | + | + | + | + | ||||
| F051-04 | Comparison predicate on DATE, TIME, and TIMESTAMP data types | + | + | + | + | + | ||||
| F051-05 | Explicit CAST between datetime types and character string types | + | + | + | + | + | ||||
| F051-06 | CURRENT_DATE | + | + | + | + | + | ||||
| F051-07 | LOCALTIME | * | * | * | * | * | Supported as CURRENT_TIME instead | |||
| F051-08 | LOCALTIMESTAMP | * | * | * | * | * | Supported as CURRENT_TIMESTAMP instead | |||
| F081 | UNION and EXCEPT in views | − | * | * | * | * | EXCEPT is not supported | |||
| F131 | Grouped operations | + | + | + | + | + | ||||
| F131-01 | WHERE, GROUP BY, and HAVING clauses supported in queries with grouped views | + | + | + | + | + | ||||
| F131-02 | Multiple tables supported in queries with grouped views | + | + | + | + | + | ||||
| F131-03 | Set functions supported in queries with grouped views | + | + | + | + | + | ||||
| F131-04 | Subqueries with GROUP BY and HAVING clauses and grouped views | + | + | + | + | + | ||||
| F131-05 | Single row SELECT with GROUP BY and HAVING clauses and grouped views | + | + | + | + | + | ||||
| F181 | Multiple module support | − | − | − | − | − | ||||
| F201 | CAST function | + | + | |||||||
| F221 | Explicit defaults | − | − | * | * | * | Supported only as DEFAULT VALUES in INSERT statements | |||
| F261 | CASE expression | + | + | + | + | + | ||||
| F261-01 | Simple CASE | + | + | + | + | + | ||||
| F261-02 | Searched CASE | + | + | + | + | + | ||||
| F261-03 | NULLIF | + | + | + | + | + | ||||
| F261-04 | COALESCE | + | + | + | + | + | ||||
| F311 | Schema definition statement | − | − | − | − | − | ||||
| F311-01 | CREATE SCHEMA | − | − | − | − | − | ||||
| F311-02 | CREATE TABLE for persistent base tables | − | − | − | − | − | ||||
| F311-03 | CREATE VIEW | − | − | − | − | − | ||||
| F311-04 | CREATE VIEW: WITH CHECK OPTION | − | − | − | − | − | ||||
| F311-05 | GRANT statement | − | − | − | − | − | ||||
| F471 | Scalar subquery values | + | + | + | + | + | ||||
| F481 | Expanded NULL predicate | + | + | + | + | + | ||||
| F812 | Basic flagging | − | − |
|
|
|
||||
| S011 | Distinct data types | − | − | − | − | − | ||||
| T321 | Basic SQL-invoked routines | * | * | * | * | * | ||||
| T321-01 | User-defined functions with no overloading | * | * | * | * | + | Priot to Firebird 3.0, only external (non-SQL) functions were supported | |||
| T321-02 | User-defined stored procedures with no overloading | * | * | * | * | + | Priot to Firebird 3.0, only SQL procedures were supported | |||
| T321-03 | Function invocation | + | + | + | + | + | ||||
| T321-04 | CALL statement | * | * | * | * | * | Available as EXECUTE PROCEDURE instead | |||
| T321-05 | RETURN statement | * | * | * | * | + | Available as EXIT in SQL procedures | |||
| T631 | IN predicate with one list element | + | + | + | + | + |
| Feature ID | Feature Name | v1.5 | v2.0 | v2.1 | v2.5 | v3.0 | Comments | |
| B011 | Embedded Ada | + | + | + | + | + | ||
| B012 | Embedded C | + | + | + | + | + | ||
| B013 | Embedded COBOL | + | + | + | + | + | ||
| B014 | Embedded Fortran | + | + | + | + | + | ||
| B015 | Embedded MUMPS | − | − | − | − | − | ||
| B016 | Embedded Pascal | + | + | + | + | + | ||
| B017 | Embedded PL/I | − | − | − | − | − | ||
| B021 | Direct SQL | + | + | + | + | + | ||
| B031 | Basic dynamic SQL | * | * | * | * | * | Not all standard features are supported | |
| B032 | Extended dynamic SQL | − | − | − | − | − | ||
| B032-01 | − | − | ||||||
| B033 | Untyped SQL-invoked function arguments | − | − | − | − | − | ||
| B034 | Dynamic specification of cursor attributes | − | − | − | − | − | ||
| B041 | Extensions to embedded SQL exception declarations | − | − | − | − | − | ||
| B051 | Enhanced execution rights | − | − | − | − | − | ||
| B111 | Module language Ada | − | − | − | − | − | ||
| B112 | Module language C | − | − | − | − | − | ||
| B113 | Module language COBOL | − | − | − | − | − | ||
| B114 | Module language Fortran | − | − | − | − | − | ||
| B115 | Module language MUMPS | − | − | − | − | − | ||
| B116 | Module language Pascal | − | − | − | − | − | ||
| B117 | Module language PL/I | − | − | − | − | − | ||
| B121 | Routine language Ada | − | − | − | − | + | ||
| B122 | Routine language C | + | + | + | + | + | ||
| B123 | Routine language COBOL | − | − | − | − | + | ||
| B124 | Routine language Fortran | − | − | − | − | + | ||
| B125 | Routine language MUMPS | − | − | − | − | + | ||
| B126 | Routine language Pascal | + | + | + | + | + | ||
| B127 | Routine language PL/I | − | − | − | − | + | ||
| B128 | Routine language SQL | + | + | + | + | + | ||
| F032 | CASCADE drop behavior | − | − | − | − | − | ||
| F033 | ALTER TABLE statement: DROP COLUMN clause |
+ | + | + | + | + | ||
| F034 | Extended REVOKE statement | * | * | * | * | * | REVOKE CASCADE is not supported | |
| F034-01 | REVOKE statement performed by other than the owner of a schema object | + | + | + | + | + | ||
| F034-02 | REVOKE statement: GRANT OPTION FOR clause |
+ | + | + | + | + | ||
| F034-03 | REVOKE statement to revoke a privilege that the grantee has WITH GRANT OPTION | ? | ? | ? | ? | ? | ||
| F052 | Intervals and datetime arithmetic | * | * | * | * | * | Intervals are not supported | |
| F053 | OVERLAPS predicate | − | − | − | − | − | ||
| F111 | Isolation levels other than SERIALIZABLE | * | * | * | * | * | ||
| F111-01 | READ UNCOMMITTED isolation level | − | − | − | − | − | ||
| F111-02 | READ COMMITTED isolation level | + | + | + | + | + | ||
| F111-03 | REPEATABLE READ isolation level | + | + | + | + | + | Available as SNAPSHOT | |
| F121 | Basic diagnostics management | − | − | − | − | − | ||
| F121-01 | GET DIAGNOSTICS statement | − | − | − | − | − | ||
| F121-02 | SET TRANSACTION statement: DIAGNOSTICS SIZE clause | − | − | − | − | − | ||
| F171 | Multiple schemas per user | − | − | − | − | − | ||
| F191 | Referential delete actions | + | + | + | + | + | ||
| F222 | INSERT statement: DEFAULT VALUES clause |
− | − | + | + | + | ||
| F231 | Privilege tables | − | − | − | − | − | ||
| F231-01 | TABLE_PRIVILEGES view | − | − | − | − | − | ||
| F231-02 | COLUMN_PRIVILEGES view | − | − | − | − | − | ||
| F231-03 | USAGE_PRIVILEGES view | − | − | − | − | − | ||
| F251 | Domain support | + | + | + | + | + | ||
| F262 | Extended CASE expression | − | − | − | − | − | ||
| F263 | Comma-separated predicates in simple CASE expression | − | − | − | − | − | ||
| F271 | Compound character literals | − | − | − | − | − | ||
| F281 | LIKE enhancements | + | + | + | + | + | ||
| F291 | UNIQUE predicate | − | − |
|
− | − | ||
| F301 | CORRESPONDING in query expressions | − | − | − | − | − | ||
| F302 | INTERSECT table operator | − | − | − | − | − | ||
| F302-01 | INTERSECT DISTINCT table operator | − | − | − | − | − | ||
| F302-02 | INTERSECT ALL table operator | − | − | − | − | − | ||
| F304 | EXCEPT ALL table operator | − | − | − | − | − | ||
| F312 | MERGE statement | − | − | + | + | + | ||
| F321 | User authorization | * | * | * | * | * | Only CURRENT_USER is supported | |
| F341 | Usage tables | ? | ? | ? | ? | ? | ||
| F361 | Subprogram support | ? | ? | ? | ? | ? | ||
| F381 | Extended schema manipulation | + | + | + | + | + | ||
| F381-01 | ALTER TABLE statement: ALTER COLUMN clause |
+ | + | + | + | + | ||
| F381-02 | ALTER TABLE statement: ADD CONSTRAINT clause |
+ | + | + | + | + | ||
| F381-03 | ALTER TABLE statement: DROP CONSTRAINT clause |
+ | + | + | + | + | ||
| F391 | Long identifiers | * | * | * | * | * | Maximum identifier length is equal to 31 | |
| F392 | Unicode escapes in identifiers | − | − | − | − | − | ||
| F393 | Unicode escapes in literals | − | − | − | − | − | ||
| F401 | Extended joined table | * | * | + | + | + | ||
| F401-01 | NATURAL JOIN | − | − | + | + | + | ||
| F401-02 | FULL OUTER JOIN | + | + | + | + | + | ||
| F401-04 | CROSS JOIN | − | + | + | + | + | ||
| F402 | Named column joins for LOBs, arrays, and multisets | − | − | − | − | − | ||
| F411 | Time zone specification | − | − | − | − | − | ||
| F421 | National character | * | * | * | * | * | Neither national string literals nor NCHAR VARYING datatype are supported | |
| F431 | Read-only scrollable cursors | − | − | − | − | + | ||
| F431-01 | FETCH with explicit NEXT | − | − | − | − | + | ||
| F431-02 | FETCH FIRST | − | − | − | − | + | ||
| F431-03 | FETCH LAST | − | − | − | − | + | ||
| F431-04 | FETCH PRIOR | − | − | − | − | + | ||
| F431-05 | FETCH ABSOLUTE | − | − | − | − | + | ||
| F431-06 | FETCH RELATIVE | − | − | − | − | + | ||
| F441 | Extended set function support | + | + | + | + | + | ||
| F442 | Mixed column references in set functions | + | + | + | + | + | ||
| F451 | Character set definition | − | − | − | − | − | ||
| F461 | Named character sets | + | + | + | + | + | ||
| F491 | Constraint management | + | + | + | + | + | ||
| F502 | Enhanced documentation tables | − | − | − | − | − | ||
| F502-01 | SQL_SIZING_PROFILES view | − | − | − | − | − | ||
| F502-02 | SQL_IMPLEMENTATION_INFO view | − | − | − | − | − | ||
| F502-03 | SQL_PACKAGES view | − | − | − | − | − | ||
| F521 | Assertions | − | − | − | − | − | ||
| F531 | Temporary tables | − | − | * | * | * | Only global temporary tables are supported | |
| F555 | Enhanced seconds precision | * | * | * | * | * | Maximum supported precision is equal to 3, precision in datatype declarations are not supported | |
| F561 | Full value expressions | + | + | + | + | + | ||
| F571 | Truth value tests | − | − | − | − | + | ||
| F591 | Derived tables | − | + | + | + | + | ||
| F611 | Indicator data types | − | − | − | − | − | ||
| F641 | Row and table constructors | − | − | − | − | − | ||
| F651 | Catalog name qualifiers | − | − | − | − | − | ||
| F661 | Simple tables | − | − | − | − | − | ||
| F671 | Subqueries in CHECK | + | + | + | + | + | ||
| F672 | Retrospective check constraints | + | + | + | + | + | ||
| F691 | Collation and translation | * | * | * | + | + | Prior to Firebird 2.5, CREATE/DROP COLLATION was not supported | |
| F692 | Enhanced collation support | + | + | + | + | + | ||
| F693 | SQL-session and client module collations | − | − | − | − | − | ||
| F695 | Translation support | − | − | − | − | − | ||
| F696 | Additional translation documentation | − | − | − | − | − | ||
| F701 | Referential update actions | + | + | + | + | + | ||
| F711 | ALTER domain | + | + | + | + | + | ||
| F721 | Deferrable constraints | − | − | − | − | − | ||
| F731 | INSERT column privileges | − | − | − | − | − | ||
| F741 | Referential MATCH types | − | − | − | − | − | ||
| F751 | View CHECK enhancements | − | − | − | − | − | ||
| F761 | Session management | − | − | − | − | − | ||
| F771 | Connection management | − | − | − | − | − | ||
| F781 | Self-referencing operations | + | + | + | + | + | ||
| F791 | Insensitive cursors | − | − | − | − | − | ||
| F801 | Full set function | − | − | − | − | − | ||
| F813 | Extended flagging | − | − | − | − | − | ||
| F821 | Local table references | − | − | − | − | − | ||
| F831 | Full cursor update | − | − | − | − | − | ||
| F831-01 | Updateable scrollable cursors | − | − | − | − | − | ||
| F831-02 | Updateable ordered cursors | − | − | − | − | − | ||
| S023 | Basic structured types | − | − | − | − | − | ||
| S024 | Enhanced structured types | − | − | − | − | − | ||
| S025 | Final structured types | − | − | − | − | − | ||
| S026 | Self-referencing structured types | − | − | − | − | − | ||
| S027 | Create method by specific method name | − | − | − | − | − | ||
| S028 | Permutable UDT options list | − | − | − | − | − | ||
| S041 | Basic reference types | − | − | − | − | − | ||
| S043 | Enhanced reference types | − | − | − | − | − | ||
| S051 | Create table of type | − | − | − | − | − | ||
| S071 | SQL paths in function and type name resolution | − | − | − | − | − | ||
| S081 | Subtables | − | − | − | − | − | ||
| S091 | Basic array support | * | * | * | * | * | ||
| S091-01 | Arrays of built-in data types | * | * | * | * | * | Implementation is non-standard and limited to DSQL only | |
| S091-02 | Arrays of distinct types | − | − | − | − | − | ||
| S091-03 | Array expressions | − | − | − | − | − | ||
| S092 | Arrays of user-defined types | − | − | − | − | − | ||
| S094 | Arrays of reference types | − | − | − | − | − | ||
| S095 | Array constructors by query | − | − | − | − | − | ||
| S096 | Optional array bounds | − | − | − | − | − | ||
| S097 | Array element assignment | − | − | − | − | − | ||
| S111 | ONLY in query expressions | − | − | − | − | − | ||
| S151 | Type predicate | − | − | − | − | − | ||
| S161 | Subtype treatment | − | − | − | − | − | ||
| S162 | Subtype treatment for references | − | − | − | − | − | ||
| S201 | SQL-invoked routines on arrays | − | − | − | − | − | ||
| S201-01 | Array parameters | − | − | − | − | − | ||
| S201-02 | Array as result type of functions | − | − | − | − | − | ||
| S202 | SQL-invoked routines on multisets | − | − | − | − | − | ||
| S211 | User-defined cast functions | − | − | − | − | − | ||
| S231 | Structured type locators | − | − | − | − | − | ||
| S232 | Array locators | − | − | − | − | − | ||
| S233 | Multiset locators | − | − | − | − | − | ||
| S241 | Transform functions | − | − | − | − | − | ||
| S242 | Alter transform statement | − | − | − | − | − | ||
| S251 | User-defined orderings | − | − | − | − | − | ||
| S261 | Specific type method | − | − | − | − | − | ||
| S271 | Basic multiset support | − | − | − | − | − | ||
| S272 | Multisets of user-defined types | − | − | − | − | − | ||
| S274 | Multisets of reference types | − | − | − | − | − | ||
| S275 | Advanced multiset support | − | − | − | − | − | ||
| S281 | Nested collection types | − | − | − | − | − | ||
| S291 | Unique constraint on entire row | − | − | − | − | − | ||
| T011 | Timestamp in Information Schema | − | − | − | − | − | ||
| T031 | BOOLEAN data type | − | − | − | − | + | ||
| T041 | Basic LOB data type support | * | * | * | * | * | ||
| T041-01 | BLOB data type | + | + | + | + | + | ||
| T041-02 | CLOB data type | * | * | * | * | * | Available as BLOB SUB_TYPE TEXT | |
| T041-03 | POSITION, LENGTH, LOWER, TRIM, UPPER, and SUBSTRING functions for LOB data types | * | * | + | + | + | Partially supported | |
| T041-04 | Concatenation of LOB data types | − | − | − | − | − | ||
| T041-05 | LOB locator: non-holdable | − | − | − | − | − | ||
| T042 | Extended LOB data type support | − | − | − | − | − | ||
| T051 | Row types | − | − | − | − | − | ||
| T052 | MAX and MIN for row types | − | − | − | − | − | ||
| T053 | Explicit aliases for all-fields reference | − | − | − | − | − | ||
| T061 | UCS support | − | − | − | − | − | ||
| T071 | BIGINT data type | + | + | + | + | + | ||
| T111 | Updatable joins, unions, and columns | − | − | − | − | − | ||
| T121 | WITH (excluding RECURSIVE) in query expression | − | − | + | + | + | ||
| T122 | WITH (excluding RECURSIVE) in subquery | − | − | − | − | − | ||
| T131 | Recursive query | − | − | + | + | + | ||
| T132 | Recursive query in subquery | − | − | − | − | − | ||
| T141 | SIMILAR predicate | − | − | − | + | + | ||
| T151 | DISTINCT predicate | − | + | + | + | + | ||
| T152 | DISTINCT predicate with negation | − | + | + | + | + | ||
| T171 | LIKE clause in table definition | − | − | − | − | − | ||
| T172 | AS subquery clause in table definition | − | − | − | − | − | ||
| T173 | Extended LIKE clause in table definition | − | − | − | − | − | ||
| T174 | Identity columns | − | − | − | − | + | ||
| T175 | Generated columns | * | * | * | * | + | Supported as computed columns | |
| T176 | Sequence generator support | + | + | + | + | + | ||
| T191 | Referential action RESTRICT | + | + | + | + | + | ||
| T201 | Comparable data types for referential constraints | * | * | * | * | * | Numerics, timestamps and strings are not considered comparable | |
| T211 | Basic trigger capability | * | * | * | * | * | ||
| T211-01 | Triggers activated on UPDATE, INSERT, or DELETE of one base table | + | + | + | + | + | ||
| T211-02 | BEFORE triggers | + | + | + | + | + | ||
| T211-03 | AFTER triggers | + | + | + | + | + | ||
| T211-04 | FOR EACH ROW triggers | + | + | + | + | + | ||
| T211-05 | Ability to specify a search condition that shall be True before the trigger is invoked | − | − | − | − | − | ||
| T211-06 | Support for run-time rules for the interaction of triggers and constraints | ? | ? | ? | ? | ? | ||
| T211-07 | TRIGGER privilege | − | − | − | − | − | ||
| T211-08 | Multiple triggers for the same event are executed in the order in which they were created in the catalog |
* | * | * | * | * | Execution order is specified by the developer | |
| T212 | Enhanced trigger capability | − | − | − | − | − | ||
| T231 | Sensitive cursors | − | − | − | − | − | ||
| T241 | START TRANSACTION statement | + | + | + | + | + | Available as SET TRANSACTION | |
| T251 | SET TRANSACTION statement: LOCAL option | − | − | − | − | − | ||
| T261 | Chained transactions | − | − | − | − | − | ||
| T271 | Savepoints | + | + | + | + | + | ||
| T272 | Enhanced savepoint management | − | − | − | − | − | ||
| T281 | SELECT privilege with column granularity | − | − | − | − | − | ||
| T301 | Functional dependencies | + | + | + | + | + | ||
| T312 | OVERLAY function | − | − | − | − | − | ||
| T322 | Overloading of SQL-invoked functions and procedures | − | − | − | − | − | ||
| T323 | Explicit security for external routines | − | − | − | − | − | ||
| T324 | Explicit security for SQL routines | − | − | − | − | − | ||
| T325 | Qualified SQL parameter references | − | − | − | − | − | ||
| T326 | Table functions | − | − | − | − | − | ||
| T331 | Basic roles | * | * | * | * | + | Prior to Firebird 3.0, SET ROLE was not supported | |
| T332 | Extended roles | * | * | * | * | * | GRANTED BY CURRENT_ROLE is not supported | |
| T351 | Bracketed SQL comments (/*...*/ comments) | + | + | + | + | + | ||
| T431 | Extended grouping capabilities | − | − | − | − | − | ||
| T432 | Nested and concatenated GROUPING SETS | − | − | − | − | − | ||
| T433 | Multi-argument GROUPING function | − | − | − | − | − | ||
| T434 | GROUP BY DISTINCT | − | − | − | − | − | ||
| T441 | ABS and MOD functions | − | − | + | + | + | ||
| T461 | Symmetric BETWEEN predicate | − | − | − | − | − | ||
| T471 | Result sets return value | − | − | − | − | − | ||
| T491 | LATERAL derived table | − | − | − | − | − | ||
| T501 | Enhanced EXISTS predicate | + | + | + | + | + | ||
| T511 | Transaction counts | − | − | − | − | − | ||
| T551 | Optional keywords for default syntax | + | + | + | + | + | ||
| T561 | Holdable locators | − | − | − | − | − | ||
| T571 | Array-returning external SQL-invoked functions | − | − | − | − | − | ||
| T572 | Multiset-returning external SQL-invoked functions | − | − | − | − | − | ||
| T581 | Regular expression substring function | − | − | − | − | + | ||
| T591 | UNIQUE constraints of possibly null columns | + | + | + | + | + | ||
| T601 | Local cursor references | − | − | − | − | − | ||
| T611 | Elementary OLAP operations | − | − | − | − | − | ||
| T612 | Advanced OLAP operations | − | − | − | − | − | ||
| T613 | Sampling | − | − | − | − | − | ||
| T621 | Enhanced numeric functions | − | − | − | − | − | ||
| T641 | Multiple column assignment | − | − | − | − | − | ||
| T651 | SQL-schema statements in SQL routines | − | − | − | − | − | ||
| T652 | SQL-dynamic statements in SQL routines | + | + | + | + | + | ||
| T653 | SQL-schema statements in external routines | − | − | − | − | − | ||
| T654 | SQL-dynamic statements in external routines | − | − | − | − | + | ||
| T655 | Cyclically dependent routines | + | + | + | + | + |