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