Repository navigation
7.9.0
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 ZONEin queries, parameters
and datasets (#90).- New unit
FIBTypes:INT128andDECFLOATconversions to and from
TBcd,Int64,Currency,Doubleand strings, time zone helpers. TFIBXSQLVAR:AsTimeZoneID,AsTimeZoneOffset,AsTimeZoneName,
AsUTCDateTime,SetAsDateTimeTZand raw setters for the new types.TFIBFMTBCDFieldforftFMTBcdfields, reading NaN/Infinity and values
out of theTBcdrange.- DPB parameters
session_time_zone,set_bind,decfloat_round,
decfloat_traps; metadata DDL for the new types.
- New unit
LOCALTIMEandLOCALTIMESTAMPcolumn defaults (#87).- Identifiers of up to 63 characters (Firebird 4+) for columns, parameters,
relation aliases, array columns, the field repository and the editors. TFIBDatabase.CapabilitieswithMaxIdentifierLength, and
IIBClientLibrary.Versionwith the product and version of the client
library.TFIBDatabase.CryptKeyandOnCryptKeyRequestto pass the key of a database
encrypted with a Firebird 3+ crypt plugin from the client (#45).TFIBDatabase.ConfigParam[Name],config=Name=Valuelines inDBParamsand
ConnectParams.WireCompression(#49).TFIBDatabase.CreationDate(#19).- SQL reserved keywords up to Firebird 5.0 and the Firebird 3 internal
functions inStrUtil(#52). - Array parameters of
TFIBQuery(AsVariant := VarArrayOf([...]),
SetArrayValue). TFIBXSQLVAR.GetArrayElementfor 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
Sourcefolder and the editors to
Source\Editors. Replace the library root withSourcein the Library path. SQL_BOOLEANinibase.pasis now32764(Firebird 3BOOLEAN) instead of
590(InterBase). InterBase code must useIB_SQL_BOOLEAN.
FB3_SQL_BOOLEANis a deprecated alias ofSQL_BOOLEAN.TFIBXSQLVAR.AsBooleanof a number isTruefor any non-zero value.AsDoubleandAsTimeassigned beforePrepareare applied once the server
type is known; aDoubleassigned 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. TFIBQueryappliesqoAutoCommitandqoFreeHandleAfterExecutewhen the
cursor is done (Eof, Close, SQL change, nextExecQuery, Free). Changing the
SQL of an open query closes it.GoToFirstRecordOnExecutefetches before
AfterExecuteagain, as in 7.5 (#4, #9).TpFIBStoredProcbuilds its SQL when the database is connected instead of
whenStoredProcNameis set (#70).
TpStoredProcCollectis renamed toTFIBStoredProcMetadataCache.TpFIBScripter: the script parser is rewritten. Several statements on a line,
EXECUTE BLOCKand PSQL modules with the;terminator, multi-character
SET TERMterminators and directives inExecuteFromFileare supported (#88, #42)- Array field values are kept on the client until
Post, like BLOB values, so
CancelandCachedUpdateswork for arrays.TpFIBArrayworks on buffers of
the whole array. - String parameters encoded in UTF-8 are declared as
UTF8instead of
UNICODE_FSSon Firebird 2.0+ and InterBase 2007+ (#53). - The schema cache reads the table metadata with fewer queries (#74).
TFIBDatabase.AttachmentIDreturns-1while the database is not connected.CancelOperationFB21works on Firebird 3.0 and later.TpFIBClientDataSet,TpFIBDataSetProviderandTpFIBClientBCDFieldare
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.ClientVersionandSQL_DATEare deprecated.qDefaultFieldsis removed, useDefaultFields.- Version constants:
FIBMajorVersion,FIBMinorVersion,FIBReleaseand
FIBVersionStringreplaceFIBPlusVersion,FIBPlusBuildand
FIBCustomBuild;pFIBVersion.incis renamed toFIBVersion.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.
CycleReadArrayandCycleWriteArrayofVariantRtn.
Fixed
Connection and client library
fb_shutdownis called before the client library is unloaded (#17).- Stack overflow in
TpFibErrorHandleron a database shutdown; lost
connections on Firebird 3+ are detected (#24). AttachmentIDkept 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
qoAutoCommitfailed on the first fetch or were never
committed (#4, #9). - Long string parameters set before
Preparewere 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).
TpFIBStoredProcfailed 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
BOOLEANread and written throughAsBooleanandAsVariant(#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). InsertRecordandAppendRecorddid nothing (#36).- Stack overflow when posting the master from the detail
BeforePost(#8). - Automatic fields with
CloseOpenandCreateCalcField(#58, #10). RefreshFromQueryandRefreshFromDataSetappended records, raised access
violations and lost the current record (#59).- Unbalanced
DisableControlsinGotoBookmarkwith an invalid bookmark (#79). - Bookmarks with
TIME/TIMESTAMPkey fields in limited cache mode. - BLOB values lost on
CancelafterPostand withBlobCacheLimit. - Sorting with an empty list of fields (#23).
TFIBBCDField.GetAsVariantfor small sizes (#26).TpFIBClientBCDField.Valuereturned 0 instead of Null (#71).TFIBWideStringField.GetAsStringof calculated and lookup fields (#73).TFIBWideStringField.CopyDataandAsNativeData/AsOctetsDataoverwrote
the record buffer.- Field defs size regression in
InternalInitFieldDefs. - Missing
overrideofSetBookmarkData(#13). - Limited buffer cache mode, broken by the MDT removal (#48).
- Default time format (#18).
Local filters
INlists 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;
SUBSTRINGwith 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, scaledNUMERIC/DECIMAL,BIGINT,
milliseconds ofTIME/TIMESTAMPandCHAR/VARCHARelements. isc_array_get_slicetruncated 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 BLOCKand 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). ValidateSchemavalidated the entries of other databases (#74).- Repository state reused by a new database component at the same address.