Firebird News

Tuesday, November 30, 2004

IBReplicator Beta 2.0.0.10 has been released

IBReplicator Beta 2.0.0.10 has been released and is available for download.

Want your own Firebird T-Shirt or Polo Shirt?

Want your own Firebird T-Shirt or Polo Shirt to impress your friends and advertise your favourite open source database? Well now you can - the Firebird Project has just started to make available, official branded Firebird merchandise. To start with T-Shirts and Polo Shirts, other goodies to follow.

Firebird currently beats Ingres on performance

On the CA Ingres community page there is an interesting discussion thread:
http://opensource.ca.com/projects/ingres/forum/10/650886925835?b_start:int=0

Problems in Firebird 1.5.2 RC 3

Some minor new problems showed up in the Release Candidate 3 build. Release candidate 4 will follow shortly. Meanwhile, point release notes v.0152_08 are available online in English and for download in English and German.

Friday, November 26, 2004

PHP5 the undocumented bit

from the php-firebird list , note the new fbird_gen_id function

If we are talking PHP5 then the undocumented bit is all the ibase_ can
be changed to fbird_ , so Johan could use
$userid = fbird_gen_id ('G_USERS');

Would be nice to see the ibase_ fall out of use when using Firebird.
It is just a wrapper round the ibase_* but in the future if any changes
are needed specific to Firebird, then the fbird_ version can be modified.


-- Lester Caine

Wednesday, November 24, 2004

IBReplicator Beta 2.0.0.9

IBReplicator Beta 2.0.0.9 is available for download.

Tuesday, November 23, 2004

Evans Data research survey of databases

Evans Data research survey of databases includes Firebird, for once. Firebird is listed under "What Open Source database are you using?" but appears not to rate with MySQL, MaxDB, PostgreSQL, Progress, et al., under these two: "Which of the following server database products do you work with?" and "Which database product do you use to do MOST of your programming?" Oh well.... Everyone who completes a survey is automatically entered into a draw to win $500.00 US.

SQLDirect Component Library V4.1.1

SQLDirect Component Library V4.1.1 is available. (SQLDirect is a light-weight BDE replacement for Borland Delphi V4 - 8 and C++Builder V4 - 6. It uses the native application programming interfaces to access to a number of database servers including InterBase and Firebird).

ZeosDBO 6.5.1 Alpha

Zeos Library, ZeosDBO 6.5.1 Alpha has been released.

Is Oracle A Legacy Technology?

Something to ponder: Is Oracle A Legacy Technology? On Mark Rittman's Oracle Weblog.

Firebird 1.5.2 RC3 is ready for testing

Release candidate 3 of Firebird 1.5.2 is now ready in the pre-release area for download and testing. Point release notes v.0152_07 are available online in English and for download in both English and German.

FlameRobin has Moved!

The FlameRobin project has now moved to its own home site on Sourceforge. All future releases will happen under the flamerobin SF project name. Those previously monitoring the package by way of the old fbmanager project will need to re-register your interest. The new Alpha 0.2 package is identical to the one released earlier in the week, so there is no need to download anything again.

Anyone subscribed to our current mailing lists should unsubscribe and re-subscribe to the new lists here.

InterBase Performance Monitoring: Vision and Control

In older versions of InterBase it was sometimes difficult to tell what was going on inside the server. This could make debugging applications very difficult. You could tell, for example, that there was a long-running transaction by looking at the DB header statistics, but you couldn't tell whose it was or what it was doing. Nor could the DBA preemptively end the transaction.

With InterBase 7 and higher, InterBase now provides insight into and control over the internal functions of the server via the temporary system tables. In some ways, InterBase developers and DBAs have a new problem: Instead of not enough information, we now have so much information and so many options for controlling the server that it's possible to get lost in the minutia of InterBase internals.

This session will focus on practical use of the feature. I'm not going to reproduce the InterBase documentation or explain every column of every table, but instead will focus on how to debug and enhance applications, and how to effectively administer an InterBase server.

Read more at: http://blogs.teamb.com/craigstuntz/articles/IBPerformanceMonitoring.aspx

Friday, November 19, 2004

Fyracle 0.8.1 released!

This release fixes a number of issues:

- fixed install failure when the installer was located on
a different drive than the installation directory (Win)
- fixed install failure where fyracle.dll did not get
installed properly (Win)
- fixed install failure where the desktop icons did not
always properly launch their program
- fixed issue with the installer where post-install errors
caused the installer to abort
- removed the maximum statement length in the plsql
compiler
- fixed incorrect command line parameter handling in the
plsql compiler

Download from http://www.fyracle.org/downloads/

Wednesday, November 17, 2004

FIBPlus 6.0 fixes

If you cannot wait for the service pack, you can try these quick fixes:

1. A report "Can''t read Buffer.Incorrect RecordNo" appeared on adding a new record to the database. An exception arose on trying to refresh an empty dataset.
function TRecordsCache.OldBuffer(RecordNo:integer): PChar;

begin
if SaveChangeLog then
begin
if RecordNo<=FRecordCount then
ReadRecordBuffer(RecordNo,FOldBuffer,True)
else
ClearOldBuffer
end
else
begin
if FOldBufRecordNumber<>RecordNo then
if RecordNo<=FRecordCount then
SaveOldBuffer(RecordNo)
else
ClearOldBuffer
end;
Result:=FOldBuffer
end;

procedure TRecordsCache.SaveOldBuffer(RecordNo: integer);
begin
if SaveChangeLog then
SaveToChangeLog(RecordNo)
else
begin
if RecordNo<=FRecordCount then
ReadRecord(RecordNo,FOldBuffer)
else
ClearOldBuffer;
FOldBufRecordNumber:=RecordNo;
end;
end;
2. Incorrect FullRefresh occurred with CacheModelKind=cmkLimitedBufferSize
unit FIBDataSet;


function TFIBCustomDataSet.RefreshAround(BaseQuery: TFIBQuery;var
BaseRecNum:integer;
IgnoreEmptyBaseQuery:boolean = True;ReopenBaseQuery:boolean = True
):boolean;

procedure ExecCurSelect( aCurSelect:TFIBQuery; SourceObject:ISQLObject);
begin
aCurSelect.Close;
AssignSQLObjectParams(aCurSelect,[SourceObject]);
aCurSelect.Params.AssignValues(FQSelect.Params);
aCurSelect.ExecQuery;
end;

function FetchAround(aCurSelect:TFIBQuery; RecordsLimit:integer;
Arrow:smallint;
FromRecNum:integer =-1
):boolean;
var
i:integer;
begin
if FromRecNum=-1 then
FCurrentRecord:=BaseRecNum
else
FCurrentRecord:=FromRecNum;
i:=RecordsLimit;
Result := False;
while (i>0) and (aCurSelect.Next<>nil) do
begin
Result := True;
Inc(FCurrentRecord,Arrow);
FetchRecordToCache(aCurSelect, FCurrentRecord);
if Arrow<0 then
begin
vPartition^.BeginPartRecordNo:=FCurrentRecord;
if vPartition^.EndPartRecordNo=-1 then
vPartition^.EndPartRecordNo:=vPartition^.BeginPartRecordNo
end
else
begin
vPartition^.EndPartRecordNo :=FCurrentRecord;
if vPartition^.BeginPartRecordNo=-1 then
vPartition^.BeginPartRecordNo:=vPartition^.EndPartRecordNo;
end;
Dec(i);
end;
if aCurSelect.Eof then
if Arrow<0 then
vPartition^.IncludeBof:=True
else
vPartition^.IncludeEof:=True;
end;

var
RecordSource :ISQLObject;
EmptyDataSet :boolean;
NotFetchedCount:integer;
begin
with BaseQuery do
begin
if ReopenBaseQuery then
begin
Close;
Params.AssignValues(FQSelect.Params);
ExecQuery;
Next;
Result:=not Eof;
end
else
Result :=RecordCount>0;

end;

EmptyDataSet :=True;

if Result or (not IgnoreEmptyBaseQuery) then
begin
if BaseRecNum<(FCacheModelOptions.FBufferChunks div 2) then
BaseRecNum:=FCacheModelOptions.FBufferChunks div 2;

if Result then
begin
EmptyDataSet :=False;
FetchRecordToCache(BaseQuery, BaseRecNum);
vPartition^.BeginPartRecordNo:=BaseRecNum;
vPartition^.EndPartRecordNo :=BaseRecNum;
RecordSource:=BaseQuery
end
else
begin
RecordSource:=Self;
end;

vPartition^.IncludeBof:=False;
vPartition^.IncludeEof:=False;

ExecCurSelect(FQSelectDescPart,RecordSource);
ExecCurSelect(FQSelectPart,RecordSource);
if not Result then
begin
vPartition^.BeginPartRecordNo:=-1;
vPartition^.EndPartRecordNo :=-1;
end;

if FetchAround(FQSelectDescPart,FCacheModelOptions.FBufferChunks div
2,-1) then
EmptyDataSet:=False;

if not Result then
Dec(BaseRecNum);

NotFetchedCount:=FCacheModelOptions.FBufferChunks-(vPartition^.EndPartRecordNo-vPartition^.BeginPartRecordNo+2);
if FetchAround(FQSelectPart,NotFetchedCount,1) then
EmptyDataSet:=False;

NotFetchedCount:=FCacheModelOptions.FBufferChunks-(vPartition^.EndPartRecordNo-vPartition^.BeginPartRecordNo+2);
if NotFetchedCount>0 then
FetchAround(FQSelectDescPart,NotFetchedCount,-1,vPartition^.BeginPartRecordNo);

FQSelectDescPart.Close;

if Result then
FCurrentRecord:=BaseRecNum
else
if EmptyDataSet then
FCurrentRecord:=-1
else
FCurrentRecord:=BaseRecNum+1;
FQCurrentSelect:=FQSelectPart ;

BaseQuery.Close;
end;
end;
3. Local sorting and the CloneCurRecord method did not work.
unit FIBDataSet;


procedure GetInspectRecBuffer;
var
dsState:TDataSetState;
begin
dsState:=State;
Allocated:=
(dsState<>dsCalcFields) and (Field.FieldKind in
[fkLookUp,fkCalculated]);
if Allocated then
begin
Buff :=AllocRecordBuffer;
ReadRecordCache(vInspectRecno, Buff, State=dsOldValue);
if (Field.FieldKind in [fkLookUp,fkCalculated]) then
try
SetTempState(dsCalcFields);
CalculateFields(Buff);
finally
RestoreState(dsState);
end
end
else
begin
Allocated:=(dsState in [dsOldValue,dsFilter]) or
(vTypeDispositionField=dfRRecNumber);
if Allocated then
begin
Buff :=AllocRecordBuffer;
ReadRecordCache(vInspectRecno, Buff, State=dsOldValue)
end
else
Buff:=GetActiveBuf;
end;
end;
4. On saving a dataset to the repository the query dialog always opened with an empty string.
unit RegFIBPlusEditors;


procedure TFIBGenSQlEd.SaveDataSetInfo;
var
vDescription:string;
begin
with Component as TpFibDataSet do
if DataSet_ID = 0 then ShowMessage(Name + SCompEditDataSet_ID)
else
if DataBase = nil then ShowMessage(SDataBaseNotAssigned)
else
begin
if not ExistDRepositaryTable(TFIBDataset(Component).DataBase) then
begin
if
MessageDlg(SCompEditInfoTableNotExist, mtConfirmation, [mbOK, mbCancel], 0
) <> mrOk
then Exit;
CreateDRepositaryTable(TFibDataSet(Component).DataBase);
end;
vDescription:=TpFibDataSet(Component).Description;
if not InputQuery(SCompEditSaveDataSetProperty, SCompEditDataSetDesc, vDescription) then
Exit;
SaveFIBDataSetInfo(TpFibDataSet(Component),vDescription);
TpFibDataSet(Component).Description:=vDescription;
end;
end;
5. When creating the SQL statements at design time, FibPlus 6 invoked an error in the Refreh SQL Query.
unit fraDSSQLEdit;


procedure TfDSSQLEdit.cmbTablesChange(Sender: TObject);
begin
with cmbTables do
if ItemIndex>-1 then
begin
FUpdTableSynonym:=
FormatIdentifier(FDatabase.SQLDialect,AliasForTable(SelectSQLEdit.SQLText,cmbTables.Text)) +'.';
if FUpdTableSynonym[1]='@' then FUpdTableSynonym:='';
end
else
FUpdTableSynonym:='';

LstKeyFields.Clear; LstUpdFields.Clear;
btnGetFieldsClick(btnGetFields);
end;
6. On trying to connect to the database in design-time FIBPlus used the client library gds32.dll, though the LibraryName property had fbclient.dll.
unit pFIBDBEdit;


procedure TDBEditForm.TestBClick(Sender: TObject);
var TempDB : TFIBDatabase;
begin
TestB.Enabled := false;
TempDB := TFIBDatabase.Create(nil);
try
if LocalC.Checked then
TempDB.DBName := DBNameE.Text
else
case ProtocolC.ItemIndex of
0: TempDB.DBName := Format('\\%s\%s', [ServerE.Text, DBNameE.Text]);
1: TempDB.DBName := Format('%s@%s', [ServerE.Text, DBNameE.Text]);
2: TempDB.DBName := Format('%s:%s', [ServerE.Text, DBNameE.Text]);
end;
TempDB.DBParams.Assign(ParamsM.Lines);
TempDB.UseLoginPrompt := UseLoginC.Checked;
/////////////
TempDB.LibraryName := aDatabase.LibraryName;
////^^^^^^^^^ to add

TempDB.SQLDialect := DialectC.ItemIndex + 1;
TempDB.Connected := True;
ShowMessage(SDBEditSuccessConnection);
finally
TempDB.Free;
TestB.Enabled := true;
end;
end;
6. If Select uses macro, refresh did not work.
function TFIBCustomDataSet.InternalRefreshRow(Qry: TFIBQuery; Buff:Pointer):boolean;

var
iCurScreenState: Integer;
begin
ChangeScreenCursor(iCurScreenState);
Result:=False;
try
if Buff=nil then
Exit;
if not EmptyStrings(Qry.SQL) and (Active) then
begin
if not FCachedUpdates and (CacheModelOptions.CacheModelKind=cmkStandard) then
SaveOldBuffer(Buff);
if not (Qry.Open or Qry.ProcExecuted) then
begin
SetQueryParams(Qry, Buff);
PrepareQuery(skRefresh);
if (poStartTransaction in Options) and
not Qry.Transaction.InTransaction
then
Qry.Transaction.StartTransaction;
Qry.ExecQuery;
end;
if Qry.Open then
with PRecordData(Buff)^ do
try
if (Qry.SQLType = SQLExecProcedure) or (Qry.Next <> nil) then
begin
FetchCurrentRecordToBuffer(Qry,PRecordData(Buff)^.rdRecordNumber,Buff);
Result:=True;
end
else
if poRefreshDeletedRecord in Options then
begin
if (CacheModelOptions.CacheModelKind=cmkStandard) then
begin
CacheDelete;
DoAfterRefresh;
end;
end;
finally
Qry.Close;
end;
end
else
if RecordCount>0 then
FIBError(feCannotRefresh, [CmpFullName(Self)]);
finally
RestoreScreenCursor(iCurScreenState);
end;
end;

FYRACLE listed on GrokDoc

"Grokdoc is an offshoot of the well-known site Groklaw. Groklaw has the goal of covering legal news. Grokdoc is our newbie usability study, our attempt to help new users of GNU/Linux systems make the transition in a pleasant way, using the open method that proved so successful in developing FOSS software."

Fyracle and Firebird are listed on the "application crossover" page under the "Databases" heading:
http://www.grokdoc.net/index.php/Application_Crossover_Chart

Firebird support in Neo 1.3

Johannes Ahrer announced Firebird support in Neo 1.3. Neo (.Net Entity Objects) is an open source framework for .NET developers who want an object-based domain model.

Advanced Data Generator

Upscene Productions is happy to announce a new version of the database developer tool: "Advanced Data Generator." More info and a 30-day trial version on Upscene

Tuesday, November 16, 2004

FlameRobin 0.2.0 just released !

We are glad to announce the release of FlameRobin 0.2.0 ALPHA, now with property sheets and editors for most database objects, brand new background backup & restore features and a MacOS X port. Not to mention the new program logo.
New features:
- Brand new Backup/Restore dialogs that work in background, let you suppress the output messages and store their settings among invocations. Plus, the output messages can be copied to the clipboard.
- Many dialogs have been redesigned and now feature a cleaner GUI.
- "Show value" and "Show all values" context menu commands implemented for generators.
- Exceptions are now shown in the tree view and have Create/Drop menu commands and a property page.
- Property pages for triggers, table constraints, dependencies (all objects), generators were added. Plus, a special empty property page now appears for not yet supported object types, instead of an error message.
- Ability to view/add/drop table constraints.
- Reconnect menu command for databases will physically disconnect and reconnect a database in one shot.
- "Create new" and "Drop" commands added for external functions.
- New MacOS X port.
Release notes here, download here. Please send us comments, bug reports, feature requests, wishes, etc.

Firebird Words Reference

Here you can find interesting list created by Lester Caine

http://81.138.11.136:8080/tikifirebird/wiki/index.php?page=FirebirdWordsReference

Thursday, November 11, 2004

The .NET Entity Objects Framework

The .NET Entity Objects Framework :- NEO is a framework for .NET developers who want to write enterprise applications with an object-based domain model. Version 1.3.0 of the Neo framework provides support for Firebird.

Wednesday, November 10, 2004

The Free Database Niche - Response

A response from an open source database supporter.

In a recent article entitled ""Freie Datenbanken in der Nische", Wolfgang Sommergut compared open source database offerings with the products of the big three database companies, IBM, Microsoft, and Oracle. His conclusion was that open source databases were and would continue to be niche products in the near future. We at IBPhoenix see the future differently. Niche markets are early adopters, incubators for new technologies.Open source databases are attracting attention now because they are breaking out of their original niches and threatening the hegemony of the big three.
http://ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_conputerwoche_response

ibWebAdmin 0.99.1 released - Version 1.0 soon

This release includes only small feature enhancements and bugfixes.
But it comes with a polish translation contributed by
Matthias Hryniszak and a first draft of a documentation which can be
found in the doc directory inside of the source tree.

Due to the fact that there are no known bugs for some time now I have
decided to change the development status from 'beta' to 'stable' with
this release. The version number will become 1.0 when the
documentation is finished.


Changes:
- added polish language file, contributed by Matthias Hryniszak
- fixed editing of data for values containing double quotes
- fixed trigger-source when modifying triggers
- fixed a bug for csv-import of text-blobs
- direct editing of textblobs when entering/editing data
- added a 'delete all' option to the delete udf selectlist
- fixed editing/deleting data from the watchtable panel when cookies
are disabled


More on the fbwebadmin page

FireFoot - alternative to the current Firebird API

New component library has been added to the contributed downloads section. FireFoot created as an alternative to the current Firebird API. It has been made using C and the GLib object model.

Monday, November 08, 2004

The Firebird ADO.NET Data Provider 1.7 Beta 1

The Firebird ADO.NET Data Provider 1.7 Beta 1 is available for download.


Download information can be found here:

http://www.firebirdsql.org/index.php?op=files&id=netprovider


Beta 1 ( 2004-11-05 )
---- - - ---- -- -- -

( Please, see the changelog for details )


* Bug fixes:

- Fixed Event Parameter buffer handling.

- Fixed plan retrieval using the connection character set.

- Fixed Globalization issues.

- Documentation fixes.

- Minor fix in the FbCommandBuilder class on quotes usage.

- Fixed Input parameter describe when the Prepare method
is called before the FbCommand instance has parameters assigned.

- Fixed Role usage in Connection Strings.

* Added new "Isolation Level" parameter for the connection string,
that allows to set the default IsolationLevel for implicit transactions.

* Improve handling of parameters when they have null values (embedded
server support only.)


* Added changes to try to handle arrays defined with lowerbound 0 correctly.



NOTE: The design time support included in this release for the
FbDataAdapter class is not complete, please, do not use it until it get
finished in future releases.




CVS Tag: NP_1_7_Beta1

Tuesday, November 02, 2004

IBReplicator V2.0.0.8 (Beta)

IBReplicator V2.0.0.8 (Beta) is available for download.

IBReplicator Features

Database replication synchronizes data when and where you want it!

A tailored solution
IBReplicator uses Firebird's/InterBase's own native API for all replication, so there is no reliance on middleware and drivers. IBReplicator is, therefore:
  • Fast: Replication occurs directly between servers: there are no intervening layers of processing from database engines or drivers, for example. Our tests indicate that actual replication speeds range from five operations per second over a 28.8 dial-up connection to 200 operations per second between two 200Mhz Pentium machines on a 10BaseT network, where an "operation" is an insert, update or delete.
  • Small: IBReplicator consists only of the necessary code; there is none of the overhead associated with any form of middleware.
  • Inexpensive: IBReplicator does not rely on any other software, so we pay no royalties, which means a cheaper product for you.
Furthermore, IBReplicator can take advantage of Firebirds/InterBase's advanced, non-standard features:
  • Advanced datatypes: IBReplicator can replicate data of all types, including BLObs and arrays.
  • Event-alerters: Replication can occur in response to database events.
  • Two-phase commits: IBReplicator uses InterBase's two-phase commit to ensure that source and target databases are always synchronized.
  • Internationalisation: International character sets are supported.

Ease of use
A replication tool is, by it's nature, a complex piece of software, especially if it is a highly configurable one, like IBReplicator. Nonetheless, careful design has ensured that our replication server is exceptionally easy to install and use:

  • Point-and-click configuration: This tool allows you to select which tables and fields are to be replicated, and to view and edit optional settings; it also generates the required triggers on the source database for you.
  • Minimal configuration: Target databases need no configuration at all.
  • Performance monitor: This tool provides a real-time graph showing how replications are going.

Powerful replication strategies
Just how data should be replicated depends on the what you're trying to do, so our replication server offers you great flexibility as you configure your replications:

  • Multiple source and target databases: IBReplicator allows you to publish the data in many databases, and to subscribe many databases to each of them.
  • Flexible replication timing: Replication can occur either synchronously or asynchronously, i.e. on request, at timed intervals, or in response to database events.
  • N-way replication: Each target database can also be a source database in its turn, with replication being controlled by different instances of the replication server, or even by the same one.
  • Conflict resolution: IBReplicator provides three ways to handle cases where replicated data conflicts with extant data in the target database:
    • Priority-based
      Databases can be given priorities, and the database with the higher priority takes precedence.
    • Time-stamped
      Either the earliest or the latest change takes effect.
    • Master/slave
      The source database always takes precedence.

Remote replication
Our replication engine doesn't have to be running on either the source or the target database server for replication to occur; it can be running on any machine on your network or intranet.

Operation logging
IBReplicator can record its transactions in a log which can be either a window onscreen or a disk file.

Sophisticated database operations
IBReplicator uses a variety of techniques to get the most out of an Firebird/InterBase server, and to give you all the flexibility you need to configure a replication that fits your needs:

  • Optimizations: Only transactions that must be replicated are, in fact, replicated. For example, if an insert is immediately followed by an update of the same row, then only the insert is replicated, but with the more recent data.
  • Multi-segment primary keys: IBReplicator recognizes primary keys made up of multiple columns, and allows each column to be of any InterBase datatype.
  • Complete transactions: Only committed transactions are replicated (and the replication server may bundle multiple transactions into super-transactions for reasons of efficiency).

Monday, November 01, 2004

Firebird V1.5.2 Release Candiate 1

Firebird 1.5.2 Release Candidate 1 is available for download and testing.
Note this is a "Release Candidate", not an official release. We would
like people to help test this before official release. Any comments
issues, problems etc should be reported to the Firebird Development
list.

Builds can be downloaded from:
http://www.firebirdsql.org/download/prerelease/

Windows, Linux, Linux NPTL and 64 bit Linux versions are all available
under the appropriate subdirectories at the above url.

Details on what bugs have been fixed in this release, can be found in the
release notes


This release includes a fix for the following known problem with events.
Those of you who have experienced this bug should please test 1.5.2 and
make sure that the problem has been resolved.

"An old legacy bug that has continued to bug us is that, when a client had some
events registered and its network connection had been terminated abnormally
(hardware failure, reset button or task manager), then the server would start
using 100% of the CPU time until the "parent" port (client connection which
called isc_que_events() API routine) reported on its failure.

This bug affected all FB versions (more or less, depending on the
DummyPacketInterval configuration option) and only TCP/IP connections.

Solution
Further work has been done to rectify the problem in v.1.5.2. It now appears to be solved."