Installation under Win32 is achieved by running the installable executable and following the instructions on screen.
Installation under Linux requires that you first unzip the tarball to a temporary directory and run the install script. The Linux install has a readme.txt which provides more information.
The following ports are supported via Make (or native project) files:
If no user name and password is specified the ISC_USER and ISC_PASSWORD environment variables will be used, if available, during SQLConnect().
When creating a dsn you can specifiy the location of the client library. This allows backwards compatilibity with the gds32.dll used by Firebird 1.0 and InterBase, as well as the fbclient.dll used by Firebird 1.5 and later.
This is achieved by specifying the name of the embedded server library in the client library section.
You can now specify the SQL Dialect that a connection should use.
A combobox now allows you to specifiy the CHARSET to use in a connection.
Quoted Identifiers are a feature of SQL Dialect 3. They allow greater flexibility (and complexity) when working with metadata object names in the database. It is possible to make the driver automatically add double inverted commas (quote marks) to driver generated metadata names. For example:
SELECT A.Test_Field
FROM Mixed_Caps_Table A
ORDER BY A.Test_Field
will be changed to:
SELECT A."Test_Field"
FROM "Mixed_Caps_Table" A
ORDER BY A."Test_Field"
Note: If the following is used then the conversion will be wrong. This will be changed from:
Select A.Test_Field
From Mixed_Caps_Table A
Order By A.Test_Field
to
"Select" A."Test_Field"
"From" "Mixed_Caps_Table" A
"Order" "By" A."Test_Field"
It is recommended that you avoid using quoted identifiers if possible. They should only be used to solve particular problems, such as a requirement to use a metadata name that would otherwise be excluded because it was a reserved word.
It is highly recommended that the ambitious student of these changes should refer to Microsoft's own ODBC documentation for a fuller explanation of their meaning. You can consult this online here.
Returns the following diagnostics:
Implemented support for SQL_TABLE_STAT indicator. If the row in the result set corresponds to a table, the driver sets TYPE to SQL_TABLE_STAT and sets NON_UNIQUE, INDEX_QUALIFIER, INDEX_NAME, ORDINAL_POSITION, COLUMN_NAME, and ASC_OR_DESC to NULL.
Added SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES flags (ODBC 3.0)
If this type is specified it is possible to use MoveFirst (), MoveLast (), MoveNext(), MovePrev(), MovePosition() from ADO or OLEDB.
In C++ it allows use of SQL_FETCH_PREV, SQL_FETCH_NEXT, SQL_FETCH_LAST, SQL_FETCH_FIRST, SQL_FETCH_RELATIVE, SQL_FETCH_ABSOLUTE, SQL_FETCH_BOOKMARK with the SQLFetchScroll() function.
The cursor works against a buffered result set held by the driver.
These functions allow programmatic browsing of available ODBC drivers and data sources.
This supports an iterative method of discovering and enumerating the attributes and attribute values required to connect to a data source.
These are necessary for the old Application Standards Compliance. These functions are deprecated in ODBC 3.0.
This returns the SQL string as modified by the driver. It does not execute the SQL statement.
These Metadata methods have been audited and many mistakes corrected.
Added attribute SQL_ATTR_CURRENT_CATALOG
LIKE can now use an escape character. In a LIKE predicate, the percent sign (%) matches zero or more of any character and the underscore(_) matches any one character. To match an actual percent sign or underscore in a LIKE predicate, an escape character must precede the percent sign or underscore. The escape sequence that defines the LIKE predicate escape character is:
{escape 'escape-character'}
where escape-character is any character supported by the data source. For example:
SELECT Name
FROM Customers
WHERE Name LIKE '\%AAA%' ESCAPE '\'
ODBC allows the use escape sequences for scalar functions. The syntax of this escape sequence is as follows:
{fn scalar-function}
Full support for scalar functions requires the corresponding functions to be implemented in Firebird. At the moment only the following functions are currently supported:
ODBC Function | Firebird Equivalent |
CURRENT_DATE | CURRENT_DATE |
CURRENT_TIME | CURRENT_TIME |
CURRENT_TIMESTAMP | CURRENT_TIMESTAMP |
CURDATE | cast('now' as date) |
CURTIME | cast('now' as time) |
DAYOFMONTH | extract(day from ... |
DAYOFWEEK | extract(weekday from ... |
DAYOFYEAR | extract(yearday from ... |
HOUR | extract(hour from ... |
MINUTE | extract(minute from ... |
MONTH | extract(month from ... |
SECOND | extract(second from ... |
YEAR | extract(year from |
NOW | cast('now' as timestamp) |
CONVERT | cast(value as datatype) |
UPCASE | UPPER |
USER | CURRENT_USER |
For example, the driver will convert this kind of statement:
SELECT {fn UCASE('AaAa')} FROM RDB$DATABASE
into this native Firebird format:
SELECT UPPER('AaAa') FROM RDB$DATABASE
You can use SQLGetInfo to get an up-to-date list of the functions supported. For more information, see Appendix E, "Scalar Functions in Microsoft's ODBC documentation."
This is an alternative syntax for outer joins. It is notably used by Crystal Reports when it generates SQL statements internally. Here is an example using the escape sequence:
SELECT Customers.CustID, Customers.Name, Orders.OrderID, Orders.Status
FROM {oj Customers LEFT OUTER JOIN Orders ON Customers.CustID=Orders.CustID}
WHERE Orders.Status='OPEN'
You may well ask yourself 'Why would I want to use this syntax?' and the answer is that you wouldn't. But if an application tries to generate this sort of statement the driver will execute it correctly.
Previously, something like this:
INSERT INTO MyTable( FldTime ) VALUES( '10:43:12.1234' );
SELECT CAST( FldTime as VARCHAR(14) ) FROM MyTable;
Now gives this result:
10:43:12.1234
instead of truncating the millisecond.
This feature is intended for developers working directly with the ODBC api. Descriptors allow some operations to be optimised, thus improving performance. See the example for SQLCopyDesc() in the Microsoft ODBC documentation for more information.
The BinaryBlob class has been extended. A Clob sub-class has been added and the AsciiBlob class has been removed.
This is required internally to correctly convert binary data between SQL and C datatypes.
The driver now supports multiple local threads via a single connection. This is discussed in more detail in the online help.
Two-phase commit is a Firebird feature that enables a single transaction to span from two to sixteen databases at the same time. The commit must be successful across all databases simultaneously, or it will fail.
What more is there to say? Windows users will find the compiled help here and Linux users can browse the html help here.
This is via methods of the OdbcConnection class.
This allows a file dsn to be used as a source for the connection string. It is mutually exclusive to the DSN switch.
This switch is fully documented in the SQLDriverConnect Function in the Microsoft ODBC driver documentation.
If a connections is successful and this keyword is included in the connection string the driver will save the successful connection parameters to the named DSN. This keyword requires either the DRIVER or FILEDSN keywords to be specified.
See the Microsoft ODBC driver documentation for SQLDriverConnect() for more info on this subject.
Firebird Stored Procedures have two different forms of execution. This feature is explained in more detail in the online help under Procedures in the Usage section. The driver now tries to detect which is the correct way to execute a stored procedure. This is of particular benefit to third party tools such as the Database Wizard in MSVC.
The engine will only allow users to work with database objects that they have been granted permission for. So, user JOE can only use objects that have permissions granted to JOE or to PUBLIC. However, the engine will still allow JOE to see metadata objects in the database, even if he has no permission to actually use them. The driver now prevents this. It verifies that JOE has been granted a permission on an object before revealing its existence in a metadata lookup call.
Each supported platform has build instructions in the relevant subdirectory under 'Builds'.
NOTE: This is not a general support forum for Firebird issues or for ODBC problems in general! It is primarily for development issues. If you have found a bug in the driver this is the place to report it. If you have found an anomaly in the driver this is the place to report the problem. However please make sure that this is a problem related to the ODBC driver and not a general Firebird support problem.