Skip to content

7.9.0

Choose a tag to compare

@madorin madorin released this 01 Oct 12:27
· 150 commits to master since this release

First release of the community maintained FIBPlus. It is based on the last
Devrace sources (FIBPlus 7, build 632, 2014-02-17) and includes all the changes
made since the repository was created in November 2016.

Added

Firebird 3, 4 and 5 support

  • Data types of Firebird 3/4+: BOOLEAN, INT128, NUMERIC/DECIMAL(19..38),
    DECFLOAT(16/34), TIME/TIMESTAMP WITH TIME ZONE in queries, parameters
    and datasets (#90).
    • New unit FIBTypes: INT128 and DECFLOAT conversions to and from
      TBcd, Int64, Currency, Double and strings, time zone helpers.
    • TFIBXSQLVAR: AsTimeZoneID, AsTimeZoneOffset, AsTimeZoneName,
      AsUTCDateTime, SetAsDateTimeTZ and raw setters for the new types.
    • TFIBFMTBCDField for ftFMTBcd fields, reading NaN/Infinity and values
      out of the TBcd range.
    • DPB parameters session_time_zone, set_bind, decfloat_round,
      decfloat_traps; metadata DDL for the new types.
  • LOCALTIME and LOCALTIMESTAMP column defaults (#87).
  • Identifiers of up to 63 characters (Firebird 4+) for columns, parameters,
    relation aliases, array columns, the field repository and the editors.
  • TFIBDatabase.Capabilities with MaxIdentifierLength, and
    IIBClientLibrary.Version with the product and version of the client
    library.
  • TFIBDatabase.CryptKey and OnCryptKeyRequest to pass the key of a database
    encrypted with a Firebird 3+ crypt plugin from the client (#45).
  • TFIBDatabase.ConfigParam[Name], config=Name=Value lines in DBParams and
    ConnectParams.WireCompression (#49).
  • TFIBDatabase.CreationDate (#19).
  • SQL reserved keywords up to Firebird 5.0 and the Firebird 3 internal
    functions in StrUtil (#52).
  • Array parameters of TFIBQuery (AsVariant := VarArrayOf([...]),
    SetArrayValue).
  • TFIBXSQLVAR.GetArrayElement for arrays of any number of dimensions.

IDE and packages

  • Packages for Delphi XE6, XE7, XE8, 10 Seattle, 10.1 Berlin, 10.2 Tokyo,
    10.3 Rio, 10.4 Sydney, 11 Alexandria, 12 Athens and 13 Florence.
  • Separate runtime and design time packages (FIBPlus_Dxx, DclFIBPlus_Dxx,
    FIBPlusEditors_Dxx), Win64 target support (#33, #64).
  • Russian resources (#3).
  • Sample applications and documentation collected from public forums.
  • Installation steps in README (#66).

Changed

  • The library sources moved to the Source folder and the editors to
    Source\Editors. Replace the library root with Source in the Library path.
  • SQL_BOOLEAN in ibase.pas is now 32764 (Firebird 3 BOOLEAN) instead of
    590 (InterBase). InterBase code must use IB_SQL_BOOLEAN.
    FB3_SQL_BOOLEAN is a deprecated alias of SQL_BOOLEAN.
  • TFIBXSQLVAR.AsBoolean of a number is True for any non-zero value.
  • AsDouble and AsTime assigned before Prepare are applied once the server
    type is known; a Double assigned to a date/time parameter is converted as
    TDateTime.
  • Firebird 4+ types need a Firebird 4+ client library; with older clients use
    set_bind=TIME ZONE TO LEGACY.
  • TFIBQuery applies qoAutoCommit and qoFreeHandleAfterExecute when the
    cursor is done (Eof, Close, SQL change, next ExecQuery, Free). Changing the
    SQL of an open query closes it. GoToFirstRecordOnExecute fetches before
    AfterExecute again, as in 7.5 (#4, #9).
  • TpFIBStoredProc builds its SQL when the database is connected instead of
    when StoredProcName is set (#70).
    TpStoredProcCollect is renamed to TFIBStoredProcMetadataCache.
  • TpFIBScripter: the script parser is rewritten. Several statements on a line,
    EXECUTE BLOCK and PSQL modules with the ; terminator, multi-character
    SET TERM terminators and directives in ExecuteFromFile are supported (#88, #42)
  • Array field values are kept on the client until Post, like BLOB values, so
    Cancel and CachedUpdates work for arrays. TpFIBArray works on buffers of
    the whole array.
  • String parameters encoded in UTF-8 are declared as UTF8 instead of
    UNICODE_FSS on Firebird 2.0+ and InterBase 2007+ (#53).
  • The schema cache reads the table metadata with fewer queries (#74).
  • TFIBDatabase.AttachmentID returns -1 while the database is not connected.
  • CancelOperationFB21 works on Firebird 3.0 and later.
  • TpFIBClientDataSet, TpFIBDataSetProvider and TpFIBClientBCDField are
    registered by the design time package (#51).
  • Packages build in the Release configuration by default; DCU files go to
    .\$(Platform)\$(Config).
  • Delphi sources use CRLF line endings through .gitattributes (#84).
  • TFIBDatabase.ClientMajorVersion, ClientMinorVersion,
    IIBClientLibrary.ClientVersion and SQL_DATE are deprecated.
  • qDefaultFields is removed, use DefaultFields.
  • Version constants: FIBMajorVersion, FIBMinorVersion, FIBRelease and
    FIBVersionString replace FIBPlusVersion, FIBPlusBuild and
    FIBCustomBuild; pFIBVersion.inc is renamed to FIBVersion.inc.

Removed

  • Support for compilers older than Delphi 6 and the non-functional
    C++Builder-only packages; C++Builder uses the files generated by the Delphi
    packages.
  • MDT (Mirror Dataset Tools).
  • The unfinished SQL help viewer of the SQL editor.
  • CycleReadArray and CycleWriteArray of VariantRtn.

Fixed

Connection and client library

  • fb_shutdown is called before the client library is unloaded (#17).
  • Stack overflow in TpFibErrorHandler on a database shutdown; lost
    connections on Firebird 3+ are detected (#24).
  • AttachmentID kept the ID of an old attachment after a reconnection (#34).
  • Data event parameter type on Win64.
  • Packages support check of pFIBMetaData (#12).

Queries and parameters

  • Statements with qoAutoCommit failed on the first fetch or were never
    committed (#4, #9).
  • Long string parameters set before Prepare were not encoded, "Malformed
    string" on UTF8 BLOBs (#54).
  • Characters outside the BMP (e.g. emoji) stored corrupted in UTF-8 parameters (#53).
  • "Invalid pointer operation" and missed lookups in the query cache (#62).
  • TpFIBStoredProc failed when the database was not connected, mixed up the
    parameters of procedures after a failed read and returned no parameter
    defaults on Firebird 2.0+ (#70).
  • Firebird 3 BOOLEAN read and written through AsBoolean and AsVariant (#63, #27).
  • NUMERIC(18) values lost their last digits on Win64.
  • Column names longer than 31 bytes were cut or replaced with F_n.

Datasets and fields

  • Memory corruption and wrong values in field OnValidate (#83, #77, #57, #30).
  • InsertRecord and AppendRecord did nothing (#36).
  • Stack overflow when posting the master from the detail BeforePost (#8).
  • Automatic fields with CloseOpen and CreateCalcField (#58, #10).
  • RefreshFromQuery and RefreshFromDataSet appended records, raised access
    violations and lost the current record (#59).
  • Unbalanced DisableControls in GotoBookmark with an invalid bookmark (#79).
  • Bookmarks with TIME/TIMESTAMP key fields in limited cache mode.
  • BLOB values lost on Cancel after Post and with BlobCacheLimit.
  • Sorting with an empty list of fields (#23).
  • TFIBBCDField.GetAsVariant for small sizes (#26).
  • TpFIBClientBCDField.Value returned 0 instead of Null (#71).
  • TFIBWideStringField.GetAsString of calculated and lookup fields (#73).
  • TFIBWideStringField.CopyData and AsNativeData/AsOctetsData overwrote
    the record buffer.
  • Field defs size regression in InternalInitFieldDefs.
  • Missing override of SetBookmarkData (#13).
  • Limited buffer cache mode, broken by the MDT removal (#48).
  • Default time format (#18).

Local filters

  • IN lists with more than about 40 values and function arguments (#85).
  • Unicode characters in single-value lists, e.g. UPPER(NAME) = '...' (#5).
  • A function of NULL raised a conversion error; SUBSTRING with a start
    position below 1 or without length.
  • Out of memory in TrimPositions (#50).

Array fields

  • Posting a changed array field failed on Firebird 3+ with "Unsupported
    conversion to target type ARRAY".
  • Element conversion of FLOAT, scaled NUMERIC/DECIMAL, BIGINT,
    milliseconds of TIME/TIMESTAMP and CHAR/VARCHAR elements.
  • isc_array_get_slice truncated the pointer on Win64; errors of the array
    calls were not checked.
  • NULL arrays, values with wrong dimensions, string elements of single byte
    character set columns on UTF8 connections.
  • Array descriptors of reused query variables.

Scripter

  • Statements terminated on a line after an empty line were not executed (#88).
  • EXECUTE BLOCK and PSQL subroutines split at ; (#42).
  • Directives, comments and lines over 65535 characters.

Schema cache and repository

  • Cache file loaded and deleted on every other start with
    ValidateAfterLoad (#74).
  • ValidateSchema validated the entries of other databases (#74).
  • Repository state reused by a new database component at the same address.

Packages and editors

  • Custom field classes not registered after the package split (#39).
  • Unit paths of the Delphi 2007/2010 packages (#6, #28) and unused references (#11).
  • UnitSyntaxMemo references (#69).
  • Editor cursor not shown in older Delphi versions (#80, #81).
  • Compiler warnings and hints (#15).