mirror of
https://github.com/atlanticbiomedical/portal-legacy.git
synced 2025-07-02 01:47:28 -04:00
91 lines
3.9 KiB
Plaintext
Executable File
91 lines
3.9 KiB
Plaintext
Executable File
|
|
|
|
Creole ODBC Bridge Driver
|
|
=========================
|
|
|
|
|
|
I. Overview
|
|
-----------
|
|
|
|
In the text below, the word "driver" can get somewhat muddled since there are
|
|
two libraries concerned here (Creole & ODBC). So, we'll use the term "bridge
|
|
driver" to refer to Creole's ODBC bridge driver, and "ODBC driver" to refer to
|
|
an ODBC database driver.
|
|
|
|
The Creole ODBC Bridge driver provides a solution for databases which
|
|
currently have no PHP-native interface. It is currently in an experimental
|
|
stage of development. It has been tested with two ODBC drivers (Sequiter's
|
|
CodeBase ODBC driver and the MySQL ODBC driver (as a baseline test)). To
|
|
use any other ODBC drivers you may need to write your own ODBCAdapter-derived
|
|
class (see below).
|
|
|
|
|
|
II. ODBCAdapter
|
|
---------------
|
|
|
|
Because ODBC itself is a database abstraction library, the bridge driver needed
|
|
a way of hiding ODBC driver-specific behavior. The solution to this was to
|
|
create an adapter layer (akin to how the Propel runtime engine works). Think of
|
|
it as a sub-driver for the bridge driver. Any ODBC driver-specific behavior is
|
|
handled by an ODBCAdapter-derived class. To use a specific adapter class, you
|
|
specify its name via a parameter in the connection string:
|
|
|
|
odbc://localhost/DSN=CodeBase;?adapter=CodeBase
|
|
|
|
The string above will load the following file as the adapter to use with the
|
|
bridge driver: creole/drivers/odbc/adapters/CodeBaseAdapter.php
|
|
|
|
Some ODBC drivers are limited in support for various Creole features. The
|
|
ODBCAdapter also provides a method for emulation of some of these missing
|
|
features:
|
|
|
|
-The emulatePrepareStmt() method provides a switch for enabling prepared
|
|
statement emulation for drivers that do not support (or have trouble with)
|
|
prepared statements. This emulation is disabled by default.
|
|
|
|
-The hasLimitOffset() method provides a switch for enabling LIMIT/OFFSET
|
|
emulation for drivers that do not support this. This emulation is enabled
|
|
by default. The LIMIT/OFFSET emulation was borrowed from the MSSQL Creole
|
|
driver.
|
|
|
|
-The createResultSet() method provides a switch for enabling cached
|
|
result sets. To enable this feature, return an instance of
|
|
ODBCCachedResultSet in the createResultSet() method of your ODBCAdapter-
|
|
derived class. This can be useful as a workaround for ODBC drivers which
|
|
lack support for record count retrieval, reverse/absolute cursor
|
|
scrolling, etc. In most cases, result rows are cached on-demand. So if
|
|
you only read the first couple rows of a result, then only those rows will
|
|
be cached.
|
|
|
|
-The getIdGenerator() method provides a switch for enabling sequence
|
|
emulation. This feature is enabled by default in ODBCAdapter and is
|
|
implemented in the ODBCIdGenerator class. The emulation code was inspired
|
|
by the PEAR::DB nextID() method. If your database supports sequences or
|
|
autoincrement natively, you can return your own IdGenerator-derived class
|
|
instead. Check out some of the other Creole drivers for IdGenerator
|
|
examples.
|
|
|
|
|
|
III. Incomplete Features
|
|
------------------------
|
|
|
|
-The database metadata classes are not fully tested/complete. Specifically,
|
|
the ODBCDatabaseInfo class does not currently set the database name. There
|
|
may be other problems as well.
|
|
|
|
-The Creole CallableStatement class (stored procedures) is not currently
|
|
implemented. No immediate plans to do this in the future, but it looks
|
|
feasible.
|
|
|
|
|
|
IV. Known Issues
|
|
----------------
|
|
|
|
This driver was developed using the PHP v5.0 final build. During the course
|
|
of testing I uncovered several bugs in the php_odbc module. I submitted
|
|
patches for these bugs, but have not yet received word that they were
|
|
committed (they were just submitted this morning). If you want more details
|
|
on the problems I encountered or would like a copy of the patches, please
|
|
e-mail me (dlawson@masterytech.com).
|
|
|