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 | + | + | + | + | + |