mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-22 20:43:02 +01:00
265 lines
10 KiB
Plaintext
265 lines
10 KiB
Plaintext
|
|
**************
|
|
* v1.5 Alpha 1
|
|
**************
|
|
|
|
* Fixed unregistered bug.
|
|
A well-known "decompression overran buffer" error appears during the schema creation.
|
|
|
|
* New ROWS_AFFECTED system variable (SF #451927).
|
|
Return number of rows affected by the last INSERT/UPDATE/DELETE statement.
|
|
Notes:
|
|
1. Available in PSQL only.
|
|
2. For any other statement than INSERT/UPDATE/DELETE, result is always zero.
|
|
|
|
* Dynamic exception messages (SF #446240).
|
|
Allow to throw an exception with another message than this exception has been created with.
|
|
Syntax:
|
|
EXCEPTION name [value];
|
|
|
|
* New SQLCODE and GDSCODE system variables (SF #547383).
|
|
Provide an access to a code of the catched error within the WHEN-block.
|
|
Notes:
|
|
1. Available in PSQL only.
|
|
2. Makes sense in WHEN-block only, in other places returns 0 (success).
|
|
|
|
* Exception re-initiate semantics.
|
|
Allow an already catched exception to be re-thrown from the WHEN-block.
|
|
Syntax:
|
|
EXCEPTION;
|
|
Note:
|
|
Makes sense in WHEN-block only, in other places evaluates to no-op.
|
|
|
|
* Fixed unregistered bug.
|
|
The server crashes during the garbage collection under heavy load.
|
|
|
|
* Deferred metadata compilation.
|
|
Solve a lot of reasons of the well-known "object in use" error.
|
|
|
|
* New NULL order handling.
|
|
Allow user-defined ordering of NULLs.
|
|
Syntax:
|
|
[ORDER BY <order_list>]
|
|
<order_list> = {col | int} [COLLATE collation]
|
|
[ASC[ENDING] | DESC[ENDING]] [NULLS {FIRST | LAST}]
|
|
[, <order_list> ...]
|
|
Note:
|
|
Default behaviour is NULLS LAST.
|
|
|
|
* Fixed unregistered bug.
|
|
gstat shows wrong value for maxdup element.
|
|
|
|
* New registry key is used on win32.
|
|
Currently it's SOFTWARE\FirebirdSQL\Firebird.
|
|
|
|
* User-defined constraint index names (SF #451925).
|
|
Allow an index name to be either constraint name or user-defined name.
|
|
Syntax:
|
|
<col_constraint> = [CONSTRAINT constraint]
|
|
{UNIQUE [<constraint_index>]
|
|
| PRIMARY KEY [<constraint_index>]
|
|
| REFERENCES other_table [( other_col [, other_col ...])]
|
|
[ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
|
|
[ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
|
|
[<constraint_index>]
|
|
| CHECK ( <search_condition>)}
|
|
<tconstraint> = [CONSTRAINT constraint]
|
|
{{PRIMARY KEY | UNIQUE} ( col [, col ...]) [<constraint_index>]
|
|
| FOREIGN KEY ( col [, col ...]) REFERENCES other_table
|
|
[ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
|
|
[ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
|
|
[<constraint_index>]
|
|
| CHECK ( <search_condition>)}
|
|
<constraint_index> = USING [ASC[ENDING] | DESC[ENDING]] INDEX name
|
|
Note:
|
|
Index is named the same way as a constraint by default.
|
|
|
|
* New RECREATE VIEW statement.
|
|
A shorthand for DROP VIEW / CREATE VIEW couple of statements.
|
|
Syntax:
|
|
RECREATE VIEW name <view_definition>;
|
|
|
|
* Fixed unregistered bug.
|
|
Trigger which name starts with 'RDB$' cannot be altered or dropped at all.
|
|
|
|
* Changed file names.
|
|
Renamed distribution files to make sure we're Firebird. Now they're fbserver, fbclient, firebird.msg etc.
|
|
Note:
|
|
The client library is fbclient now and it should be used in all new FB-based projects. gds32 contains nothing but redirected exports and is provided for compatibility only.
|
|
|
|
* Minor ODS upgrade.
|
|
Added new system indices (RDB$INDEX_41, RDB$INDEX_42, RDB$INDEX_43), now ODS version is 10.1.
|
|
|
|
* New CREATE OR ALTER statement (SF #451935).
|
|
Allow either creating or altering a database object depending on its existance.
|
|
Syntax:
|
|
CREATE OR ALTER name <object_definition>;
|
|
Notes:
|
|
1. Applicable to SPs/triggers/views only.
|
|
2. The statement has the same meaning as CREATE OR REPLACE one in Oracle.
|
|
|
|
* Fixed unregistered bug.
|
|
Broken dependencies (like DB$34) appear in the database after metadata changes.
|
|
|
|
* New ALTER VIEW statement (SF #490261).
|
|
Allow altering an existing view.
|
|
Syntax:
|
|
ALTER VIEW name [(<view_col> [, <view_col> ... ])] AS <select>;
|
|
|
|
* Enhanced declaration of local variables.
|
|
Simplify syntax and allow declaring and defining variable at the same time.
|
|
Syntax:
|
|
DECLARE [VARIABLE] name <variable_type> [{'=' | DEFAULT} value];
|
|
Example:
|
|
DECLARE my_var INTEGER = 123;
|
|
|
|
* Disabled BREAK statement for triggers (like EXIT) due to known internal limitations.
|
|
|
|
* Enhanced grouping (SF #555839, #546274).
|
|
Allow to GROUP BY internal functions and subqueries. Also allow to GROUP BY ordinal (i.e. column position).
|
|
|
|
* New COALESCE internal function (SF #451917).
|
|
Allow a column value to be calculated by a number of expressions, the first expression returning a non NULL value is returned as the column value.
|
|
Syntax:
|
|
COALESCE (value {, value} ... )
|
|
Notes:
|
|
1. COALESCE (V1, V2) is equivalent to the following case specification:
|
|
CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END
|
|
2. COALESCE (V1, V2, ..., Vn), for n >= 3, is equivalent to the following case specification:
|
|
CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, ..., Vn) END
|
|
3. The function has the same meaning as NVL one in Oracle.
|
|
Example:
|
|
SELECT
|
|
PROJ_NAME AS Projectname,
|
|
COALESCE(e.FULL_NAME, '[> not assigned <]') AS Employeename
|
|
FROM
|
|
PROJECT p LEFT JOIN EMPLOYEE e ON (e.EMP_NO = p.TEAM_LEADER)
|
|
|
|
* New NULLIF internal function (SF #451917).
|
|
Return a NULL value for a sub-expression if it has a specific value, otherwise return the value of the sub-expression.
|
|
Syntax:
|
|
NULLIF (value, value)
|
|
Note:
|
|
NULLIF (V1, V2) is equivalent to the following case specification:
|
|
CASE WHEN V1 = V2 THEN NULL ELSE V1 END
|
|
Example:
|
|
UPDATE PRODUCTS
|
|
SET STOCK = NULLIF(STOCK, 0)
|
|
|
|
* New CASE internal function (SF #451917).
|
|
Allow the result of a column to be determined by a the results of a case expression.
|
|
Syntax:
|
|
<case_specification> = <simple_case> | <searched_case>
|
|
|
|
<simple_case> = CASE value <simple_when_clause> ... [ELSE value] END
|
|
<simple_when_clause> = WHEN value THEN value
|
|
|
|
<searched_case> = CASE <searched_when_clause> ... [ELSE value] END
|
|
<searched_when_clause> = WHEN <search_condition> THEN value
|
|
Note:
|
|
The function has the same meaning as DECODE one in Oracle.
|
|
Examples:
|
|
1. Simple case:
|
|
SELECT
|
|
o.ID,
|
|
o.Description,
|
|
CASE o.Status
|
|
WHEN 1 THEN 'confirmed'
|
|
WHEN 2 THEN 'in production'
|
|
WHEN 3 THEN 'ready'
|
|
WHEN 4 THEN 'shipped'
|
|
ELSE 'unknown status ''' || o.Status || ''''
|
|
END
|
|
FROM
|
|
Orders o
|
|
2. Searched case:
|
|
SELECT
|
|
o.ID,
|
|
o.Description,
|
|
CASE
|
|
WHEN (o.Status IS NULL) THEN 'new'
|
|
WHEN (o.Status = 1) THEN 'confirmed'
|
|
WHEN (o.Status = 3) THEN 'in production'
|
|
WHEN (o.Status = 4) THEN 'ready'
|
|
WHEN (o.Status = 5) THEN 'shipped'
|
|
ELSE 'unknown status ''' || o.Status || ''''
|
|
END
|
|
FROM
|
|
Orders o
|
|
|
|
* Fixed bug SF #545725.
|
|
Automatic/background sweep hangs.
|
|
|
|
* Fixed unregistered bug.
|
|
The server crashes when XSQLDA structures are prepared for not all statement parameters.
|
|
|
|
* Enabled support for empty BEGIN...END blocks.
|
|
|
|
* Partially fixed bug SF #567931.
|
|
Metadata security hole.
|
|
|
|
* Fixed unregistered bug.
|
|
INT64 arrays don't work.
|
|
|
|
* Fixed bug SF #437859.
|
|
Execute procedure and string concat.
|
|
Note:
|
|
This change allows any expression to be used as a SP parameter.
|
|
|
|
* Fixed bug SF #562417.
|
|
Aggregate concatenated empty char.
|
|
|
|
* New BIGINT datatype (SF #446206).
|
|
Allow native SQL usage of 64-bit exact numerics.
|
|
Note:
|
|
Available in dialect 3 only.
|
|
|
|
* Universal triggers (SF #451922).
|
|
Allow one trigger to be fired for a number of action types.
|
|
Syntax:
|
|
CREATE TRIGGER name FOR table
|
|
[ACTIVE | INACTIVE]
|
|
<trigger_action_prefix>
|
|
<trigger_action_suffix> [OR <trigger_action_suffix>] [OR <trigger_action_suffix>]
|
|
[POSITION number]
|
|
AS <trigger_body>
|
|
<trigger_action_prefix> = {BEFORE | AFTER}
|
|
<trigger_action_suffix> = {DELETE | INSERT | UPDATE}
|
|
Example:
|
|
CREATE TRIGGER my_trigger FOR my_table BEFORE INSERT OR UPDATE
|
|
AS BEGIN
|
|
IF (NEW.DOC_ID IS NULL) THEN
|
|
EXCEPTION my_exception;
|
|
END
|
|
|
|
* New CONNECTION_ID and TRANSACTION_ID system variables (SF #446238, #446243).
|
|
Return appropriate internal identifier stored on the database header page.
|
|
Notes:
|
|
1. Available in SQL/PSQL.
|
|
2. The values are reset after a database is restored.
|
|
|
|
* Server-side database aliases (SF #446180).
|
|
Any database can be attached to using an "alias" name instead of its physical pathname.
|
|
The list of known database aliases is stored in aliases.conf file under the server installation root.
|
|
Example:
|
|
alias entry in the configuration file: my_database = d:\dbs\my\database.gdb
|
|
connection string: localhost:my_database
|
|
|
|
* In-memory sorting.
|
|
If SORT plan is used for a SQL statement, the sorting is done in memory.
|
|
If there's not enough memory for this operation, old temporary file based method is used.
|
|
|
|
* Fixed bug SF #538201.
|
|
Crash with extract from null as date.
|
|
|
|
* "EXECUTE VARCHAR" statement (SF #446256).
|
|
Allow execution of dynamic SQL statements in SPs/triggers.
|
|
Syntax:
|
|
EXECUTE VARCHAR value;
|
|
Notes:
|
|
1. Available in PSQL only.
|
|
2. Currently cannot return values, so SELECT statements are not allowed.
|
|
3. Recursion level is limited to 500 (hardcoded).
|
|
Example:
|
|
EXECUTE VARCHAR my_var;
|