Friday, March 31, 2006

New in Firebird 2.0

Firebird 2 contains a large number of new features, including derived tables, support for Execute Block, increased table sizes, new improved index code (the 252-byte index length limit is no longer applicable), expression indices, numerous optimiser improvements, enhanced security features, support for on-line incremental backups, new international language support, along with numerous other improvements and bug fixes.

Note Firebird 2 includes ODS changes. So, backup anything you want to keep before uninstalling a previous Firebird version or a previous alpha or beta version.

Firebird 2.00 Release Candidate 1

The Firebird Project is pleased to announce the release of the first release candidate of Firebird 2.0, for final testing. Download kits are available for Windows and Linux, including x64 Linux. However, due to hardware failure on the Windows build system, there will be initial delays in accessing the Win32 kits. Patience please!

Firebird 2.0 RC1 is out. What's next?

Dmitry Yemanov reported:

RC1 has just been released. There will definitely be RC2 as well, as we have to complete the documentation and solve some minor installation issues. Also, there were a few regressions fixed in the meantime. But should one expect RC3 and so on? This depends on you only. The better you test the server and provide us with the feedback, the sooner we release the final version. The release branch will be created the next week. At the same time, we should publish the updated roadmap to reflect the actual state of development. I also expect some private branches to be merged with HEAD as soon as it's unlocked to allow the new code.

There are bugs and BUGS

Dmitry Yemanov writes:

Consider it a bughunting success story :-) Some time ago we've got a bugreport about bugcheck #205 (index bucket overfilled) appearing during the database restore on a v2.0 server. The database was big and it was hard for the customer to create a test case. Fortunately, a special build with improved tracking facilities helped and the bug has been found and fixed. So far so good. But a few weeks later, this bug reappeared on the same database and under the same conditions. The only difference was a database size which has grown. After unsuccessful attempts to find the bug, the reduced copy of the customer database (with just a single table that causes the problem) has been received. It reproduced the bug successfully, with just one minor issue... it was a 3.5GB backup file :-) The restore process takes 6 hours in the debugger. It required a few runs to figure out the actual problem (don't ask me how many days it has taken :-), but it has been finally fixed. Sigh. Some bugs are buggier than others :-) By the way, this should be exactly the bug that prevented Dalton Calford from restoring his database on v2.0 (he reported the issue in fb-devel).

Thursday, March 30, 2006

Data Application Block for Firebird SQL (The Code Project)

Posted by Dan on

The Firebird SQL data application block is intended to speed up development, and it should be used in conjunction with data layer classes in much the same way as Microsoft’s data block. The sample included with this article uses the embedded Firebird SQL database (included in sample) to demonstrate the use of the application block without having to bother setting up a database.

Firebird SQL data application block was inspired by the Microsoft Application blocks. The block provides overloaded methods to query a Firebird database which return a dataset, data table, or integer in the case of scalar database calls. An additional overload method takes an existing dataset as a parameter and fills the results of a stored procedure send as parameter as well.

Data Application Block for Firebird SQL - The Code Project - C# Database

Why Firebird?


"I am trying to move from using mckoi as my default test database to firebird. I really didn't want to do this, but I also cannot afford to buy an odbc driver for mckoi. Also, I am trying to move all my gobs stuff into 3 different languages, java (it is there already), C#, and ruby. mckoi only works for one of them, firebird works for all of them. I can also use firebird with NEO, Spring for Net, and NHibernate. Firebird wins."

Idea for one application build around firebird

Seems to be the blog of the day :

More & more I want to write the issue/requirements tracker that has been in my head for so long. I would write it in either java, php or Ruby on Rails. I would put an embedded firebird database behind it. Now, I have to get people to believe that they should let me do this at work. I am too damn old and tired to do it at home in my oh so copious spare time.

php class to use with firebird database

Posted by mariuz
Source code example is located on

Then they laugh at you...

Not only does open source Firebird-Fyracle have a catchy name and almost match Oracle on the 6 well known “gold standard key database evaluation mapping criteria”, but it is “just as idiosyncratic”, AND you can run “Compiere v2.5.3c” ( almost )!

Here is the response from shocked oracle users after they found Firebird/Fyracle (Denial Mode)

Wednesday, March 29, 2006

fyracle - oracle replacement blog of the day

Seen at Firebird Weekly News

"I won't be suggesting this as a replacement for my Oracle production databases anytime soon, but it might be worth looking at for some applications."

Visual Studio Information for Borland Delphi Developers

MSDN has an interesting page with information for Delphi users. Some interesting... some totally misleading.

Firebird COBOL users united

Stephen Boyd asked:

“Before you all go eeeewwww yuck who still uses COBOL, the answer is
lots of us. My immediate goal is to try to find out if there are many
Interbase / Firebird users who still use COBOL like we do.
[ED: you can read the full thread on Firebird-General mailing list]

Using AQTime as a Delphi Debugging Tool

Firebird ADO .NET Data Provider

The Firebird ADO .NET Data Provider 1.7.1 for .NET 1.1 and Mono:1.1 is available for download.

Web Deploy is back! (Delphi 2005 and 2006)

The Web Deploy feature is now back for Delphi 2005 and BDS 2006. You use this when you need to deploy your ActiveX projects.

Tuesday, March 28, 2006

SAS software and Firebird Vulcan

By Tom Cole, Platform R&D, SAS Institute Inc. (From the Firebird Conference Prague 2005).
First seen on IBPhoenix

"This paper describes the architecture and requirements for implementing a relational, transaction-based storage mechanism in SAS software, a commercial business intelligence product that uses the Vulcan code base in an embedded mode."

Mastering Borland Delphi 2006 EBook

Marco Cantu have finished an ebook meant to update Mastering Borland Delphi 2005 to Delphi 2006.
The ebook, which can be found at now covers the most relevant new areas of the product, from the IDE to the language, from the RTL to the VCL, and from the database area to the Internet development tools.

Monday, March 27, 2006

Firebird Developers Journal

Dmitry Yemanov writes: "Well, after many months of thinking about this idea, we are finally starting this journal. It's intended to provide you with all the necessary news about the Firebird development process. So if you cannot (or just don't want to) follow the development mailing lists closely, this is your chance to still be informed about the progress."
Read more

Peace Signs in Sarajevo

There is a great news article on Sarajevo & BiH in the Washington Post.

"After the War, the Capital Rises From the Ruins

The word most often heard from visitors about Sarajevo is "hospitable." After the concert, I walked the city streets, chatting with shop owners selling copper coffee sets and wooden crafts in Old Town, which Ottoman Turks founded in the 15th century. I wondered how a population so recently torn apart by hate could be so warm and inviting. Everywhere I stopped, I was beseeched to stay and share strong Bosnian (Turkish) coffee or something stronger. Who was I to refuse?

The return of the VAX cluster

iSCSI is making network shared storage an increasingly popular choice in the midmarket. A $15K device can offer 2.5TB shared storage to 6 servers. Now that looks remarkably like the architecture of the VAX clusters of old. Perhaps it is time to resurrect the Firebird VAX clustering code.

Read more here

New acronyms FLAPS , FWAP, FWIP

FLAPS is FLAP with ssl (that is s for)

FWAP is an acronym for the combination Microsoft Windows, Apache, Firebird and one or more of Perl, PHP and Python. It is modelled after the more well-known FLAP, referring to the all-open source/free software approach which uses Linux instead of Windows.
FWIP is the WIMP equivalent (alias) with firebird used instead of mysql

Firebird 2.0 tagged for RC1!

Dmitry Yemanov reported:

The CVS tree has been tagged for RC1 last week, the release notes are also ready. The build makers are now in the process of compiling the kits and testing them. So we expect RC1 to be released sometime this week.

Sunday, March 26, 2006

Firebird source code reviews

Claudio Valderrama wrote:

"Recently, Coverity presented their first results in their scanning technology that hunts for defects in source code. One of the addressed projects was Firebird. After Roman Rokytskyy reviewed the results, he concluded the failures are in two areas ..."

Saturday, March 25, 2006

[ Firebird/Fyracle ] Example of stored procedure in C #

Several months ago, Carlos Guzmán Alvarez posted sample of stored procedure written in C #.
Article is on Spanish but here is babelfish translation :

"The procedure stored this carried to C # from one of the stored procedures of the data base of example that comes with Firebird (employee.fdb), asi we have the possibility of verifying that the results are the correct ones of a very simple form:)

The procedure stored original in PSQL:

CREATE PROCEDURE to ship_order (po_num CHAR(8))
SELECT s.order_status, c.on_hold, c.cust_no
FROM salts s, to customer c
WHERE to po_number =:po_num
AND s.cust_no = c.cust_no

/ * This purchase to order you have been already shipped.
IF (ord_stat = ' shipped') THEN
EXCEPTION order_already_shipped;

/ * Customer is on hold. */
ELSE IF (hold_stat = ' * ') THEN
EXCEPTION customer_on_hold;

/ *
* If there is an unpaid balance on orders shipped
to over 2 months ago,
* put the to customer on hold.
FOR SELECT to po_number
FROM salts
WHERE cust_no =:cust_no
AND order_status = ' shipped'
AND paid = ' n'
AND ship_date < CAST('NOW' AS TIMESTAMP) - 60
EXCEPTION customer_check;

UPDATE to customer
SETH on_hold = ' * '
WHERE cust_no =:cust_no;


/ *
* Ship the to order.
UPDATE salts
SETH order_status = ' shipped', ship_date = ' NOW'
WHERE to po_number =:po_num;


The code carried to C # would be left asi:

public FbResultSet ShipOrder(string to
string orderStatus = null;
string holdStatus = null;
int to customerNumber = 0;

to purchaseOrderNumber = purchaseOrderNumber.Trim();

FbConnection connection = new

string SQL = "SELECT s.order_status, c.on_hold, c.cust_no" +
"FROM salts s, to customer c" +
"WHERE to po_number = to @PurchaseOrderNumber AND
s.cust_no = c.cust_no";

using (FbCommand select = new FbCommand(sql, connection))
to select.Parameters.Add("@PurchaseOrderNumber",
FbDbType.Char).Value = to purchaseOrderNumber;

FbDataReader to reader = select.ExecuteReader();

if (reader.Read())
orderStatus = reader.GetString(0);
holdStatus = reader.GetString(1);
to customerNumber = reader.GetInt32(2);

to reader = null;

/ * This purchase to order you have been already
shipped. */
if (orderStatus == "shipped")
throw new Exception("Order status is \"shipped.\"");
else if (holdStatus == "*")// Customer is on hold.
throw new Exception("This to customer is on hold.");

/ *
* If there is an unpaid balance on orders shipped
to over 2 months ago,
* put the to customer on hold.
SQL = "SELECT to po_number" +
"FROM salts" +
"WHERE cust_no = to @CustomerNumber" +
"AND order_status = ' shipped'" +
"AND paid = ' n'" +
"AND ship_date < CAST('NOW' AS TIMESTAMP) - 60 ";

using (FbCommand select = new FbCommand(sql,
to select.Parameters.Add("@CustomerNumber",
FbDbType.Integer).Value = to customerNumber;

using (FbDataReader to reader = select.ExecuteReader())
while (reader.Read())
SQL = "UPDATE to customer SETH on_hold = ' * ' WHERE
cust_no = to @CustomerNumber;";

FbCommand update = new FbCommand(sql, connection);
to update.Parameters.Add("@CustomerNumber",
FbDbType.Integer).Value = to customerNumber;

int rowsAffected = update.ExecuteNonQuery();

update = null;

throw new Exception("Overdue balance -- dog not ship.");

/ *
* Ship the to order.
SQL = "UPDATE salts SETH order_status = ' shipped',
ship_date = ' NOW' WHERE to po_number = to @PurchaseOrderNumber";

using (FbCommand update = new FbCommand(sql, connection))
to update.Parameters.Add("@PurchaseOrderNumber",
FbDbType.Char).Value = to purchaseOrderNumber;

int rowsAffected = update.ExecuteNonQuery();


//Return an empty resultset
return new FbResultSet();

In order to define the almancenado procedure, the name of engine is not definitive and the format to either indicate the class and the method that are going away to execute:

CREATE PROCEDURE to ship_order
po_num CHAR(8)
External NAME '

By I complete would be possible to execute using it:


It will try to publish another example in which resultset is given back."

FlameRobin whitepaper

Milan writes:

"it was recently concluded that the original authors have the copyright
on papers that were published at the Firebird Conference, so I decided
to make my paper available to the public.

Some small portion of the text is outdated (based on version 0.4.0),
but you can read about history and basic ideas around the project:

"DevCo" - Ping...

by Allen Bauer

"It's Friday. It's been a full week. The BDS2006 update is nearing completion. The team is adopting some more agile processes and continuing on Highlander (the codename for the next BDS release) as we peel folks away from the update. We had some “proof-of-concept“ demos in a meeting this morning that seems to have sparked some real interest among the team. The small email storm that followed was a good sign...

We had a new compiler engineer start this week! Yet, there's still some more open req's for the Delphi/C++Builder. We're looking to fill some of those positions now. This is a good opportunity for someone (or more) to get on board before the spin out."

Read more

Leveraging breakpoint properties in the Delphi IDE

Steve Trefethen writes:

"Have you ever tried debugging GUI code where focus changes cause code to execute that you didn't want executed? This is a fairly standard GUI debugging problem and one that Mark Edington (of Delphi R&D) recently discussed relating to debugging drag/drop code in the VCL. Having written a custom menuing system (in ActionBands) I've had my fair share of this type of debugging as well. I was helping Mark debug the above drag/drop problem and it occurred to me that it might be useful to mention a few breakpoint debugger features in our IDE that are likely overlooked by a lot of people."

Read more

Friday, March 24, 2006

Teach Yourself Programming in Ten Years

Teach Yourself Programming in Ten Years

Interesting thoughts. Should be taught at schools. :)

Interbase and Delphi to move to Europe?

Borland CEO promises 'caring' IDE overlord by Gavin Clarke on The Register. The Reg suggests that Delphi and Interbase may be acquired by a European investor.

MSSql difficult to configure? Switch to Firebird!

However I don’t like MSSql server, first of all it is hard to configure, finding solutions to problems is not an easy task, it has lots of dependencies scattered around the hard disk. Hail mysql and firebird.

Let there be Fire - morfik site revamped

Today I was glad to see the new website of Morfik Technology was unveiled. Along with a totally redesigned web site, comes the public release of a test version of the their WebOS AppsBuilder tool. These transformations probably reflect a move by Morfik, to bring the development of the WebOS AppsBuilder into the light, after being kept in the shadows for quite some time.

Ed:if you don't know what is the link between firebird and morfik here is an e-mail interview with the Morfik team

TurboCASH development implementing Firebird database

From the blog of the day department

This blogger's comment:

I think this is really good news, since the Delphi source code poses a lot of limitations, Delphi being a commercial compiler/IDE. The way I understand it, you basically have to purchase Delphi if you want to customize and recompile the TurboCASH source. The same with BDE-Paradox. I'd really like to see TurboCASH take-off in this direction.

Fyracle presentation

Oracle-mode Firebird (Fyracle) was presented at Developer's GigaCon in Warsaw. Paul Ruizendaal's paper is available for general viewing.

Borland CEO promises 'caring' IDE overlord

Nielsen told the annual EclipseCon show in Santa Clara: "Its my commitment to find an investor who will invest in the business and drive it forward. I'm not looking for someone who is a Lex Luthor or the Evil Empire who will destroy the business. That's going to reflect badly on Borland."

Read more

Thursday, March 23, 2006

A few results from a Performance Test of Firebird 2

Holger Klemt from IBExpert have some interesting story.

In short, Firebird 2.0 beta 2 is twice as fast as FB 1.53 and almost 4 times faster than Interbase 7.51!

Read complete story:

"In the latest Edition of IBExpert, we added some new modules, on is
a database script with a simple sales database, that creates its test
data from a stored procedure.

now i had some time to test it against fb153, fb2b2 (and ib751)

What does it do: first it creates a almost empty database with just
some entries in helptables. after the database is created, you have to
start one procedure and wait for the time it takes.

the procedures creates a customer table from the strings in the
helptables, it creates products from other strings, it creates
order header and order lines. based on that some trigger also
write a sales history etc.

all in all you can create a testdatabase as large as you need, because
the procedure called initall gives you the possibilty to fill a
parameter with an integervalue, that defines the size of the final
database. when you use the value 10000, then 10000 customers are
created, 10000 articles and a lot of orders etc. The Testdatabase
is before starting the procedure created with 16k pagesize and the
cache buffers were changed to 50000.

for the test i used a value of 100000 so the final database that is
created has a size of about 200MB.

While executing this procedure with the parameter 100000, it starts
about 5,200,000 Selects, 800,000 Updates and 1,700,000 Inserts, all
in all about 7,700,000 Operations.

now the time when starting this on a dual core AMD Athlon 64 x2 3800+
with 2 GB RAM.

using fb153: 486 Seconds (not bad, about 16,000 Operations per second)

uninstalled fb153, installed fb2 beta 2: 244 Seconds!!!!!!!!

Wow, not that i would say it was slow on fb153, but the results on
fb2b2 are impressive. About 31500 Operations per second.

Congratulations to the developer Team. you made a brilliant job.

Starting with the next IBExpert Version, the Demodatabase will be
available also in the trial version and in the personal edition.

if you would like to test it now on your machine, just Install
IBExpertLive (download details on I have added
the demodatabase in my session "Holger Klemt - Server Performance -
How to make your application run faster (FBC2005)", so you can connect
to view this session and press on the left side on "download session
files" to get the installer.


p.s.: did i mention the result from ib751? 838 Seconds"

Tuesday, March 21, 2006

Tax System of Open Code

I their latest issue, INFO magazine published an article about TAMP Project (where I work), and this is one of Firebird success stories...

I have scanned those 3 pages, and our translator have translated article to English ;-)

Here it is (Bosnian version):

Original page 1
Original page 2
Original page 3

And now English translation

The Big Secret of the OpenSource Community

I have written article about Firebird for Bosnian IT magazine INFO several months ago. I have scanned those 3 pages, and also translated article to English ;-)

Here it is:

Original page 1
Original page 2
Original page 3

And now English translation

I hope that you will like it!

I am back!

I was too busy to write here in last several (or even more than several) months.
I'll try to write as much as possible from now on!