FrontBase 3.x - Release Notes

FrontBase 3.5

Two new functions are now supported: ABS and SIGN.

ABS will return a positive value of the same datatype as the argument. Examples: ABS(-9), ABS(4.0), ABS(-8888.9999).

SIGN will return an INTEGER value of -1 (if the argument is negative), 0 (if the argument is zero) and 1 (if the argument is positive).

A bug related to PREPARE SELECT DISTINCT ... has been fixed.

A major new feature in 3.5 is the ability to work with symbolic time zones. FrontBase 3.5, in symphony with the client side tools and libraries, is now able to correctly deal with situations where client applications are "located" in different time zones than the server. This obliviates all time zone and Daylight Savings Time (DST) management from client applications. The various tools and libraries will automatically do a proper SET TIME ZONE when connecting to a 3.5 server, enabling the server to properly convert TIME and TIMESTAMP values to UTC values.

Example: The server is located in NY (time zone is -05:00). A client in CA (time zone is -08:00) inserts the value '2002-02-11 20:48:00'. A client in Denmark (time zone is +01:00) fetches the value and displays it correctly as '2002-02-12 05:48:00'.

The SET TIME ZONE statement of SQL 92 has been augmented to allow for the specification of a symbolic name:

      SET TIME ZONE '<character string>';


      SET TIME ZONE 'Europe/Copenhagen';

The SET TIME ZONE statement sets the offset and rules, that the server will apply to incoming TIMESTAMP values on a per connection basis, i.e. each connection can/will have its own time zone settings on the server side.

The allowed time zone specification can on Mac OS X be found in /usr/share/zoneinfo. It should be possible to find the same values on all platforms. FrontBase 3.6 will provide for a way to get the list of symbolic time zone names from the server.

Setting the time zone offset and rules via a symbolic name, as an alternative to a straight hour:minutes specification, allows for correct handling of such special cases as the state of Arizona (that is in -07:00, but which has no DST). Example:

      SET TIME ZONE 'America/Phoenix';

It is still possible for client applications to completely control the time zone offset by using the TIMESTAMP WITH TIME ZONE datatype, but please note that JDBC (and consequently WebObjects) DOES NOT support this datatype.

FrontBaseManager 3.5

Some basic keyboard navigation has been added. You can now tab trough the controls in the connection window and the table editor window.

Users could not edit the password or their default schema. Logging in as _SYSTEM used to be required for this. Now, users can edit their own information (but not the information of another user).

In the "Schema Objects" browser we now show which button is the default button -- either "Open Content" or "Open Definition" based on the users preferences.

When editing a table's columns, we now provide a pop-up of all the valid collations rather than just a text field.

When a user is selecting a database to monitor and they add a host, we immediately select that host in the hosts/databases browser and give that browser the focus. This allows the user to use the arrow keys for navigating to the database that they wish to monitor.

When starting a database with some advanced options we were sending those options to FBExec so that it would write a leading space to the "options" file. This leading space would cause starting the database to fail. This has been fixed.

When a user was attempting to select a database to add as a client to a replication master they were only presented with a list of databases that they were not currently monitoring. Now we present the user with a list of all databases.

Using the arrows keys to switch between the different panes of either the main connection window or the table editor window would result in the name of the pane being selected in the list, but the content of the pane would not be displayed. This has been fixed. Users can now use the arrows keys to navigate between the different panes.

FrontBaseManager used to erroneously create a file called (null)_(null).users in Library/FrontBase of the users home directory. This has been fixed.

In some cases FrontBaseManager would continue to fetch data even though it had reached the user's fetch limit. This has been fixed.

When viewing or editing the columns of a table, the default width for the column's collation was very small. This has been increased to be much more viewable.

When importing data via the import window, we were not quoting all of the column names in the resulting SQL. This would sometimes cause SQL errors to be returned by the server if any of the column names happened to be SQL92 keywords. Now we quote all column names in the import SQL before we send it to the server.

When viewing the content of a table you can now double-click on a row to begin editing it.

The windows that come up as a result of clicking on the "Open Content" and "Open Definition" buttons now have their window titles prefixed with "Content" and "Definition" respectively.

When viewing the result of a select statement or the content of a table and any of the columns are BLOB columns, we now display the size of those BLOBs next to their download link.

The bottom part of the list of databases was being completely obscured to the point were you could not use the up/down arrows in the vertical scroll bar. This has been fixed.

FrontBase 3.5 adds support for setting the time zone of a user's session. FrontBaseManager 3.5 adds UI for reporting the current session time zone and editing that time zone.

We were not asking the user if they wanted to change their settings to serializable/pessimistic/read write (if their settings were not already set as such) before letting them try to create an index. This resulted in an error from the server. Now we prompt the user to change these settings like we do elsewhere when modifying a table.

FrontBase PlugIn 1.8

Fixed bug in FrontBasePlugIn.sqlStringForAttribute (flattened attribute being handled as derived created a conflict).

Added support for precision on TIME and TIMESTAMP data types.

Fixed bug in FrontBasePlugIn.formatValueForAttribute (timestamp were not in correct time zone).

Fixed bug in FrontBasePlugIn.framework (directory structure of the framework was causing problems with Cocoa/EOF/Java).

Fixed bugs in 'Synchronize Schema' (several bugs in WebObjects caused this feature to fail).

Added support for the two new data types TINYINT and LONGINT.

Added support for derived attributes (a bug in WebObjects caused this feature to fail).

JDBC 1.23

Fixed bug in FBJDatabaseMetaData (getPrimaryKeys returned all constraints not just the primary key constraint).

Fixed bug in FBJDatabaseMetaData (getPrimaryKeys returned a result with the column COLUNM_NAME misnamed).

JDBC 1.22

Added support for changing the default session time zone (feature in FrontBase 3.5).

Fixed bug in FBJDatabaseMetaData (problem when having multible open resultsets).

JDBC 1.21

Added support for the two new data types TINYINT and LONGINT.

Fixed bug in FBJPreparedStatement.setCharacterStream (problem with 2 and 3 byte UNICODE characters).

JDBC 1.20

Fixed bug in FBJBlob. getSubString (first char was at position 0. According to the JDBC spec this has been changed to 1).

Fixed bug in FBJBlob.getBytes (first byte was at position 0. According to the JDBC spec this has been changed to 1).

Changed implementation of FBJDatabaseMetaData.getProcedures (resultset meta data could not be obtained from the result).

Changed implementation of FBJDatabaseMetaData.getTables (resultset meta data could not be obtained from the result).

Changed implementation of FBJDatabaseMetaData.getTableTypes (resultset meta data could not be obtained from the result).

Changed implementation of FBJDatabaseMetaData.getTypeInfo (resultset meta data could not be obtained from the result).

Changed implementation of FBJDatabaseMetaData.getColumns (resultset meta data could not be obtained from the result).

Fixed bug in FBJResultSet.getBytes() (problem returning byte arrays for certain data sizes).

Fixed bug in FBJStatement.scanForEscapeSyntax() (problem parsing strings with uneven brace count).

Fixed bug in FBJResultSet.getBinaryStream() (problem returning streams for certain data sizes).

Fixed bug in FBJConnection.reply2MetaData() (problem when multiple results were received).

FBUnicodeManager 3.5

FBUnicodeManager would not work properly on Mac OS X 10.1.x systems due to a change in the semantics of -copy. This has been fixed.

You can now map characters to nothing. This allows users to create translations which will remove characters.

sql92 command line tool

The sql92 command line tool now includes commands for controlling and maintaining a replication master and its clients. The sql92 commands assume that you have a session to the master server, and the commands works on the corresponding replicator.

The following commands have been added:


Starts a replicator. If the replicator is already running an error is reported.

   CREATE CLIENT <datbase-name> 
                 [@|ON|HOST <host-name>];
                 [DATABASE PASSWORDS <password>]
                 [PASSWORD <system-password>];");

Create a new client with the name <database-name> on the host <host-name>. If the host name is omitted localhost is used. The create command creates and initialize the new client such that it can later can be added to client list.

   ADD CLIENT <datbase-name>
              [@|ON|HOST <host-name>]
              [DATABASE PASSWORDS <password>]
              [PASSWORD <password>];

Add the client with the name <database-name> on the host <host-name> to the replicators client list. The replicator wil keep the client up to date. The passwords are the database password and the password for the _SYSTEM user which is required by the replicator to be able to connect to the client.

   REMOVE CLIENT <datbase-name> [@|ON|HOST <host-name>];

Remove the client from the list, the client is no longer updated, but may later be added to the client list again.


Show the client list and the status for each client.


Stop the replicator.


The example create a master database with one client.

      create database master options -rmaster;
      connect to master user _system;
      start replicator;
      create client client;
      show clients;
      table t0 ( c0 integer );
      insert into t0 values 1;
      table t0;
      disconnect all;

      connect to client user _system;
      table t0;
      disconnect all;

FrontBase Distribution 3.4

FrontBase 3.4 is a maintenance release with a few bug fixes and some performance improvements.

FrontBase 3.4

The calculation of what is called set functions (MIN, MAX, SUM, COUNT, AVG) has been optimized and should work much faster and with considerable less memory consumption than in 3.3 and earlier.

The DISTINCT quantifier that can be applied to set functions was implemented incorrectly in some cases, but has now been implemented correctly:

This worked also in 3.3 and earlier versions:

      SELECT COUNT(DISTINCT <column>) FROM <table> ...;

this didn't work in 3.3 and earlier versions:

      SELECT DISTINCT <column>, COUNT(DISTINCT <column>) FROM <table> ...;

New datatypes

FrontBase 3.4 supports two new datatypes: TINYINT and LONGINT. TINYINT is an 8-bit integer datatype, while LONGINT is a 64-bit integer datatype.

Fixed bugs

Subtracting an interval from a date didn't work properly:

      DATE '2001-12-01' - INTERVAL '01' DAY;

The BETWEEN predicate wasn't parsed correctly:

      C0 BETWEEN DATE '2001-11-04' AND DATE '2001-11-11';

The server crashed when trying to cast a character string to a BIT datatype (the cast is not allowed):

      CAST('0xabababababababababababab' AS BIT);

There was a problem in applying a "custom" time zone properly:


FrontBaseManager 3.4

UI support for using FrontBase's import feature.

Sometimes (usually when executing a script) an error message would be sent back from the server that would cause our error sheets to become the height of the screen and subsequently get confused. This has been fixed.

There is now a preference for choosing to not have an error sheet drop down on a SQL error. Errors are still logged in the connection log drawer.

Errors that occur during a fetch (rather than during SQL execution) are now logged and handled more appropriately.

FrontBase JDBC 2.x Driver 1.21

Fixed bug in FBJPreparedStatement.setCharacterStream (problem with 2 and 3 byte UNICODE characters).

Fixed bug in FBJBlob. getSubString (first char was at position 0. According to the JDBC spec this has been changed to 1).

Fixed bug in FBJBlob.getBytes (first byte was at position 0. According to the JDBC spec this has been changed to 1).

Changed implementation of






The resultset meta data could not be obtained from the result.

Fixed bug in FBJResultSet.getBytes() (problem returning byte arrays for certain data sizes).

Fixed bug in FBJStatement.scanForEscapeSyntax() (problem parsing strings with uneven brace count).

Fixed bug in FBJConnection.reply2MetaData() (problem when multiple results were received).

FrontBase PlugIn 1.6

Fixed bug in FrontBasePlugIn.updateLOBs (values in the qualifier were not up to date when inserting).

Fixed bug in FrontBasePlugIn.updateLOBs (values in the qualifier were not up to date when updating).

Fixed bug in FrontBasePlugIn.newPrimaryKeys (problem generating primary keys for horizontally inherited entities).

Fixed bug in FrontBasePlugIn.addOrderByAttributeOrdering (collations are now used to perform case insensitive sorts).

Fixed bug in FrontBasePlugIn.createTableStatementsForEntityGroup (SQL for table creation generated wrong when entities are parents for enherited entities).

sql92 Command Line Tool

Sql92 now supports a few new commands:


Show the contents of the command line history buffer.

STOP DATABASE [<database-name>] [@ | ON | HOST] <host-name>;

It is now possible to specify a database name and a host name. The command will prompt for the necessary passwords, if run from a terminal.

SHOW DATABASE LOG [<database-name>] [@ | ON | HOST] <host-name>;

Show the tail of the specified database server log file. If the database name is ommitted the command show the log file for current session database server.

FrontBaseEOAdaptor 3.4

The FrontBaseChannel object is now autoreleased.

FrontBase Distribution 3.3

NOTE: Compatibility with earlier versions of FrontBase.

The database files used by FrontBase 3.x are not compatible with the database files used by FrontBase 2.x and earlier. If you upgrade from FrontBase 2.x to FrontBase 3.x you must export the content of the database to flat ascii files before you upgrade, and load the flat files into FrontBase 3.x after you have installed 3.x.

To export the database myDB database use the following SQL statement:


then install FrontBase 3.x, create a new myDB database, connect to the database as the _SYSTEM user and execute the file.


You can execute the file either by the command line tool sql92 (script <full path name>;) or by the FrontBaseManager's SQL Interpreter Pane (use the "Execute SQL" button).


The FBCAccess library is distributed in 3 forms, as a static library, as a framework and as a bundle.

FrontBase 3.3

The FrontBase server is now able to provide an indication of where in the input SQL string a given syntax error has occured. As there is some overhead associated, the feature is turned off per default, but can be turned on by executing:



insert into t3 values 1,1,2,2,3,3,4,4 5,5,6,6;
Syntax error 108. Expected ';' not found.
Syntax error 485. Near: ,2,3,3,4,4 5,5,6.
Syntax error 485. Near:            ^.

Please note that to increase the usefulness of this feature when dealing with long SQL input strings, only up to the first 10 tokens before and up to 5 tokens after the syntax error are included in the error message.

We have also also included a new expression parser which allows for generalized boolean expressions, e.g. VALUES FALSE = FALSE;, which returns TRUE (one row and one column).

FrontBase FrontBaseManager 3.3

If the "Update" button was pressed after editing a user, but no change was actually made, the user's password is not cleared out.

Boolean values is displayed correctly and edited correctly.

FrontBase Distribution 3.2c

The 3.2c is a maintenance distribution with the following changes:


A number of frameworks unrelated to FrontBase have been removed from the distribution.

FrontBase 3.2c

In rare situations locked rows in transactions with repeatable read isolation level repeatable and pessimistic locking disciplines was unlocked too early, the situation was detected but caused the server to bug check.

FrontBaseManager 3.2e

In Mac OS X 10.1, closing a database connection window which has a pending transaction would bring up an alert sheet asking the user to save. If the user chose to save their changes they were presented with a save panel rather than the application issuing a commit. This has been fixed.

FrontBaseManager 3.2d

Database autostarting has been added, and the connection panel now remembers the last user name you use on a per database basis.

FrontBase Distribution 3.2b

The 3.2b is a maintenance release with the following changes:

FrontBaseManager 3.2c

Passwords were not always being encoded correctly by FrontBaseManager. This was preventing some users from connecting to databases whose passwords had been set via a mechanism other than FrontBaseManager. This has been fixed.

FBExec 3.2b

The FBExec will now do a proper -autostart procedure.

FrontBase Distribution 3.2a


The FBExec is restarted during installation in order to avoid problems with existing 2.26 FrontBase installations.

FrontBase 3.2a Server

Each client uses a socket for communication. When the server reached the limit for the number of sockets it would end up in a tight cpu loop. That loop is now broken.

The server in some rare cases passed table value constructors incorrectly, causing unexpected syntax errors.

Some rare problems with synchronization of new cluster members have been fixed.

FrontBaseManager 3.2b

Some FrontBase databases prior to 3.2 would return more rows than had been requested. This behavior would confuse FrontBaseManager and cause it to continue fetching all rows rather than stop at the fetch limit. This has been fixed.

FrontBaseManager 3.2a

Due to a change in Mac OS X 10.1/NSArray, the table definition editor would generate incorrect SQL for altering columns. This has been fixed.

Multiple databases can now be selected from both the list and icon view of the Monitoring panel for the purpose of de-monitoring.

A preference has been added which allows the user to specify whether double-clicking on an object in the schema object browser opens the content editor for that object or opens the definition editor.

FrontBase Distribution 3.2

FrontBase 3.2 represents a major revamp of FrontBase 2.x, a product renowned by its thousands of users, with many enhancements and improvements. Some of the major areas to benefit from this revamp are:

  1. Performance
  2. Transaction logging
  3. Tuning
  4. Compatibility
  5. Full text searching
  6. Replication
  7. Clustering
  8. Memory durability
  9. Administration tool

1. Performance

The world-class performance sported by FrontBase 2.x has been increased once again. FrontBase 3.2 now uses a block-size of 2048 bytes for low-level disk access, which, in most cases, yields a 100% performance boost. This also enables up to 4 TB databases.

To ensure data integrity and crash resiliency, FrontBase has always been very stringent with transaction synchronization (i.e. a COMMIT has to succeed all the way to the disk before a client can continue execution.) An advanced transaction logging mechanism (see below) removes this requirement in FrontBase 3.2, which allows for an instantly recognizable performance boost on the client side. This performance boost does not violate any data integrity and disk synchronization rules.

2. Transaction logging

FrontBase 3.2 offers an advanced transaction logging mechanism that, in the usual FrontBase ease-of-use style, requires virtually no configuration or administration. It just works!

The transaction logging mechanism is:

3. Tuning

FrontBase 3.2 offers an extensive repertoire of statistical and "performance indicators" - information which allows for an easy and efficient tuning of memory usage, I/O bandwidth and caches. It is now easier than ever to get the best possible FrontBase performance out of your hardware.

4. Compatibility

FrontBase 3.2 offers binary compatibility of database files between Mac OS X and Solaris, enabling a very efficient development/deployment and trouble-shooting environment.

5. Full text searching

LookSee™ introduces a new, unprecedented, full text search feature that allows for blindingly fast searches in ASCII, HTML and XML documents. The query constructs of LookSee are fully integrated with the normal SQL query constructs and allows for an uncomplicated yet optimal result set reduction.

LookSee also offers the RANK and DETAILS function which further aids in determining the quality of a given query while, at the same time, providing an extremely flexible way of tailoring information flowing back to client applications e.g. for highlighting search results in the underlying documents.

6. Replication

Replication, available in FrontBase since version 2.0 was released, has been significantly improved in FrontBase 3.2. The new transaction logging mechanism (described above) is the foundation for replication and security and has, in particular, been strengthened. It is now impossible to have "random" databases put together in a replicated setup - the databases have to have a common past.

7. Clustering

Clustering has also benefited from the new transaction logging mechanism and is now more robust than ever. Configuration and installation has, in addition, been simplified.

The JDBC driver supplied by FrontBase will automatically switch to a different cluster member in case the otherwise targeted member fails.

8. Memory durability

FrontBase 3.2 deploys numerous new algorithms and strategies related to dynamic memory usage, the results become obvious very quickly: less memory consumption and highly improved long-term stability.

9. Administration tool

With FrontBase 3.2 comes the brand new FrontBaseManager (see sep. doc.), the result of user feedback and a one man year development effort, which offers an unprecedented feature set, including a true first for Mac OS X: a genuinely multi-threaded Aqua application for administrating databases.