OpenLink Driver Objectives

OpenLink Software's ODBC data access technologies simplify client and server computing.
These technologies are based on the principle of interoperability.
This principle dictates that one client application can access diverse, back-end database management systems, without knowledge of proprietary database protocols.
Thereby, this powerful technology allows application developers to develop, compile, and ship applications, which speak to any, ODBC-compliant data source.
The application developer does not need to cater to any specific vendor's DBMS.
Moreover, application developers do not need to attend to any specific client/server architecture.
The application and DBMS may reside on one or more machines.
These machines may comprise similar or dissimilar operating systems and hardware.

OpenLink Software's ODBC data access technologies meet their objectives, because they are based on Microsoft's ODBC specification.
The specification defines the ability to:

Connect and disconnect to ODBC-compliant data sources.

Retrieve SQL data from ODBC data sources.

Obtain an ODBC driver's capabilities and characteristics.

Obtain and manipulate ODBC driver options.

Prepare and execute SQL statements.

Retrieve SQL result sets and process results dynamically.

Retrieve result metadata and process metadata dynamically

OpenLink Driver Features

OpenLink's Single-Tier and Multi-Tier Data Access Drivers provide ODBC 1.0-3.0 compliance.
The two driver formats also provide the following features:

Standard ODBC Architecture

ODBC data access comprises the following, four components:

Application

Most end users use ODBC-compliant applications to access their data stores.
ODBC-compliant applications are executables, which issue ODBC API calls.
These API calls are implemented by ODBC drivers that are customized for use with the data store.
These calls enable the application to connect to the data store and query the data store via the ODBC driver.

Driver Manager

The driver manager is a library, which manages communications between applications and ODBC drivers.
It responds to all ODBC connection requests made by applications, and it loads the ODBC drivers that are associated with the requests.
Once the drivers are loaded, the driver manager translates applications' function calls into the corresponding ODBC API calls, and it issues these calls to the drivers.
When the applications complete their requests, the driver manager terminates the connections and unloads the drivers.

Users may encounter the following driver managers on Mac client systems:

OpenLink's Mac Classic client installer provides its own driver manager for this platform. Users may also encounter another driver manager created by Visigenic and maintained by Intersolv, Merant, and Data Direct respectively.

ODBC Drivers

ODBC drivers are libraries.
These libraries implement ODBC API functions, which enable applications to speak to databases.
Typically, applications are linked against driver managers, which load the appropriate driver libraries.
However, applications may be linked directly to drivers.
In this instance, driver libraries perform driver manager library functions.

Data sources

The term data source has two, distinct meanings.
First, data source refers to the actual flat files, spreadsheets, or database management systems, which store data.
Second, data source refers to the collection of parameters that applications use to establish connections to data stores.
This data source passes a driver name, database name, server hostname, and other parameters, which are necessary to identify a database or similar storage entity.

ODBC Driver Architecture with Driver Manager

Figure 1-1 illustrates the default architecture for ODBC connectivity.
The default architecture employs both a driver manager and ODBC drivers.

ODBC Driver Architecture without Driver Manager

Figure 1-2 illustrates ODBC connectivity without a driver manager component.
ODBC connectivity is possible, in the absence of a driver manager, if the client application is linked directly to the ODBC driver.
In some instances, a symbolic link is created, which uses a driver manager library name to point to an ODBC driver library.

OpenLink ODBC Driver Architecture

OpenLink Software provides two ODBC driver formats.
Use of these drivers requires knowledge of the following items:

Environment Variables

Client Libraries

Header Files

Configuration Files

Administrative Assistants

Server Components

Environment Variables

Environment variables pass the locations of files and directories, which the operating system or applications need to accomplish tasks.
Users do not need to set environment variables on Mac Classic and Mac OS X operating systems.
Users do need to set environment variables on Darwin.

The following table lists environment variables, which must be set on Darwin clients.

Passes the full path to OpenLink's JAVA archive (.jar) files. These files compose the OpenLink JDBC client. This variable is not required for ODBC connectivity.

PATH

Passes the full path to directories, which contain executables. This variable must include the OpenLink /bin sub-directory.

ODBCINI

Passes the full path to the odbc.ini file, which resides in the OpenLink /bin sub-directory.

ODBCINSTINI

Passes the full path to the odbcinst.ini file, which resides in the OpenLink /bin sub-directory.

OPENLINKINI

Passes the full path to the openlink.ini file, which resides in the OpenLink /bin sub-directory.

LD LIBRARY_PATH

Passes the full path to various library directories on Darwin computers. This variable must include the OpenLink /lib sub-directory.

Setting Environment Variables on Darwin

OpenLink's Darwin installers create openlink.sh and openlink.csh files in the root of the installation.
These files contain all the environment variables, which need to be set for OpenLink client connectivity.
Users must execute these files in the appropriate shell.
C shell users may execute openlink.csh.
Bash and Bourne shell users may execute openlink.sh.
Users with different shells are encouraged to switch to C, Bash, or Bourne before executing the files.

Expert users may set and export the appropriate variables using the Darwin command line.
For example:

export ODBCINI=/usr/openlink/bin/odbc.ini

Users may also add the variables to their .profiles to insure that the variables are set at login to their client systems.

Client Libraries

The following chart depicts a list of common Darwin libraries.
Each of these files appears in the /lib sub-directory of the OpenLink client installation.
Click here to see a complete list of OpenLink libraries by platform.

Server Components

OpenLink's Multi-Tier drivers implement a client/server connectivity model.
The Multi-Tier client comprises a driver manager and client-side ODBC driver.
The Multi-Tier server component comprises a request broker and one or more database agents.

The request broker is a generic, listening process.
It responds to ODBC requests made by the Multi-Tier client driver.
The broker reviews these requests and spawns the appropriate database agent.
The database agent is the only portion of the Multi-Tier product portfolio that is written to a specific CLI.
Specifically, the database agent speaks the CLI of the database to which it is meant to connect.
Hence, the agent is able to submit the SQL request to the database, retrieve its results, and convey those results to the client application.

Configuring OpenLink Data Source Names

Users must create ODBC data source names to establish connectivity between client applications and SQL data stores.
ODBC data source names are collections of parameters, which enable the OpenLink driver to identify and connect to the data store.
There are several means, which users may employ to create ODBC data source names.

Configuring Darwin Data Source Names

There are three methods, which users may employ to configure Darwin data source names.
Expert users may configure the odbc.ini file using vi or a similar text editor.
Novice users may use the HTTP-Based iODBC Data Sources Administrator, or they may use the Multi-Tier Administrative Assistant.

The odbc.ini File

The odbc.ini file appears in the /bin sub-directory of the OpenLink client installation.
Users may open this file with vi or a similar text editor.
The following table describes sections, which users will encounter in odbc.ini.

This section names each of the ODBC data sources that appear in the odbc.ini file. It also pairs the appropriate ODBC driver name with the data source name.

Data Source Specifications

This section lists the actual data source names. Each data source name is composed of a formal name and a parameter list.

ODBC Data Sources

The ODBC Data Sources section lists the names of the individual data sources and pairs the names with the appropriate ODBC client driver.
These data sources names are associated with formal data source specifications, which appear later in the file.

Passes a descriptive data source title. This title must match the title passed under the [ODBC Data Sources] heading.

Driver

Passes the full path to the ODBC client driver.

ServerType

Passes a valid OpenLink domain alias. This domain alias must match a valid domain alias in the Single-Tier openlink.ini file or Multi-Tier oplrqb.ini file. The drivers use these domain aliases as starting points from which to assess rules, environment variables, and agent binaries to instantiate for connections.

Username

Passes a valid database username. If the Multi-Tier OPSYSLOGIN parameter is enabled, this parameter passes a valid operating system username.

Password

Passes a valid database password. If the Multi-Tier OPSYSLOGIN parameter is enabled, this parameter passes a valid operating system password.

Database

Passes the name of a database or Oracle SID. Progress users should pass the full path to their databases.

Passes the hostname or IP address of the machine, which contains the OpenLink request broker.

Port

Passes the TCP port, on which the request broker listens. This TCP port is associated with the ListenPort parameter, and it appears in the [Protocol TCP] section of the Multi-Tier Rules Book (oplrqb.ini).

OpenLink produces the HTTP-Based iODBC Data Sources Administrator for Darwin and other platforms.
This Web-based administrator is a stand-alone GUI interface to the iODBC driver manager.
It is similar to the Microsoft ODBC Data Sources Administrator, and it allows users to create OpenLink and non-OpenLink data source names.

Use the following instructions to create data source names with the iODBC Data Sources Administrator.

cd into the /bin/w3config sub-directory of the client's OpenLink installation.

Use a text editor to open the www_sv.ini file.

Locate the [Startup] section.

Record the value passed to HttpPort.
For example: [Startup] HttpPort = 8000

Passes a valid database username. If the Multi-Tier OPSYSLOGIN parameter is enabled, this parameter passes a valid operating system username.

Read-only connection

Passes a Yes or No value to enable or disable READONLY access to the data store.

No Login Dialog Box

Enables or disables the login popup box.

Defer Fetching of long data

Passes a Yes or No value to enable or disable deferred fetching. Deferred fetching causes large, binary objects to be fetched after other, smaller data. This enhances performance.

Row buffer size

Passes an integer, which represents the number of rows that the driver will return during an individual fetch operation.

Jet Fix

Passes a Yes or No value to enable or disable JetFix . JetFix facilitates translation of data types by Microsoft's Jet Engine. This feature is intended for use with MS Access client applications.

Environment

Passes a valid OpenLink domain alias. This domain alias must match a valid domain alias in the Single-Tier openlink.ini file. The drivers use these domain aliases as starting points from which to assess rules, environment variables, and agent binaries to instantiate for connections.

Note:* The Server parameter name changes to reflect the database to which you are trying to connect.
For instance, the setup routine will replace Server with Net 8 Service Name, if you choose an Oracle Single-Tier driver.

Passes a valid OpenLink domain alias. This domain alias must match a valid domain alias in the Multi-Tier oplrqb.ini file. The drivers use these domain aliases as starting points from which to assess rules, environment variables, and agent binaries to instantiate for connections.

Hostname

Passes the hostname or IP address of the machine, which contains the OpenLink request broker.

Port

Passes the TCP port, on which the request broker listens. This TCP port is associated with the ListenPort parameter, and it appears in the [Protocol TCP] section of the Multi-Tier Rules Book (oplrqb.ini).

Protocol

Passes a valid OpenLink network protocol. The default is TCP/IP.

Database Name

Passes the name of a database or Oracle SID. Progress users should pass the full path to their databases.

Passes a valid database username. If the Multi-Tier OPSYSLOGIN parameter is enabled, this parameter passes a valid operating system username.

Read-only Connection

Passes a Yes or No value to enable or disable READONLY access to the data store.

No Login Dialog Box

Enables or disables login popup box.

Defer Fetching of long data

Passes a Yes or No value to enable or disable deferred fetching. Deferred fetching causes large, binary objects to be fetched after other, smaller data. This enhances performance.

Row buffer size

Passes an integer, which represents the number of rows that the driver will return during an individual fetch.

Note:* The Server parameter name changes to reflect the database to which you are trying to connect.
For instance, the setup routine will replace Server with Net 8 Service Name, if you choose an Oracle domain.

Click the Save button, which appears on the sixth setup screen.

Click the Finish button, which appears on the last setup screen.

The Multi-Tier Administrative Assistant

OpenLink produces the Multi-Tier Administrative Assistant for all server operating systems, which it supports.
This Web-based assistant is powered by OpenLink's server components, and it provides utilities to configure these components.
However, the assistant also provides a GUI interface to the iODBC driver manager.
This interface is similar to the Microsoft ODBC Data Sources Administrator, and it allows users to create OpenLink data source names.

Use the following instructions to create data source names with the Multi-Tier Administrative Assistant.

cd into the /bin/w3config sub-directory of the server's OpenLink installation.

Use a text editor to open the www_sv.ini file.

Locate the [Startup] section.

Record the value passed to HttpPort.
For example: [Startup] HttpPort = 8000

Passes a valid OpenLink domain alias. This domain alias must match a valid domain alias in the Multi-Tier oplrqb.ini file. The drivers use these domain aliases as starting points from which to assess rules, environment variables, and agent binaries to instantiate for connections.

Hostname

Passes the hostname or IP address of the machine, which contains the OpenLink request broker.

Port

Passes the TCP port, on which the request broker listens. This TCP port is associated with the ListenPort parameter, and it appears in the [Protocol TCP] section of the Multi-Tier Rules Book (oplrqb.ini).

Protocol

Passes a valid OpenLink network protocol. The default is TCP/IP.

Database Name

Passes the name of a database or Oracle SID. Progress users should pass the full path to their databases.

Passes a valid database username. If the Multi-Tier OPSYSLOGIN parameter is enabled, this parameter passes a valid operating system username.

Read-only Connection

Passes a Yes or No value to enable or disable READONLY access to the data store.

No Login Dialog Box

Enables or disables login popup box.

Defer Fetching of long data

Passes a Yes or No value to enable or disable deferred fetching. Deferred fetching causes large, binary objects to be fetched after other, smaller data. This enhances performance.

Row buffer size

Passes an integer, which represents the number of rows that the driver will return during an individual fetch.

Note:* The Server parameter name changes to reflect the database to which you are trying to connect.
For instance, the setup routine will replace Server with Net 8 Service Name, if you choose an Oracle domain.

Passes a valid OpenLink domain alias. This domain alias must match a valid domain alias in the Multi-Tier oplrqb.ini file. The drivers use these domain aliases as starting points from which to assess rules, environment variables, and agent binaries to instantiate for connections.

Hostname

Passes the hostname or IP address of the machine, which contains the OpenLink request broker.

Port

Passes the TCP port, on which the request broker listens. This TCP port is associated with the ListenPort parameter, and it appears in the [Protocol TCP] section of the Multi-Tier Rules Book (oplrqb.ini).

Protocol

Passes a valid OpenLink network protocol. The default is TCP/IP.

Database Name

Passes the name of a database or Oracle SID. Progress users should pass the full path to their databases.

Passes a valid database username. If the Multi-Tier OPSYSLOGIN parameter is enabled, this parameter passes a valid operating system username.

Read-only Connection

Passes a Yes or No value to enable or disable READONLY access to the data store.

No Login Dialog Box

Enables or disables login popup box.

Defer Fetching of long data

Passes a Yes or No value to enable or disable deferred fetching. Deferred fetching causes large, binary objects to be fetched after other, smaller data. This enhances performance.

Row buffer size

Passes an integer, which represents the number of rows that the driver will return during an individual fetch.

Note:* The Optional Server parameter name changes to reflect the database to which you are trying to connect.
For instance, the setup routine will replace Server with Net 8 Service Name, if you choose an Oracle domain.

Click OK to save your data source name.

Configuring Mac OS X Data Source Names

There are two methods, which users may employ to configure Mac OS X data source names.
Expert users may configure the ODBC.preference file with TextEdit or a similar text editor.
Novice users may use an Aqua GUI ODBC Administrator.

The ODBC.preference File*

The ODBC.preference file appears in the /Library/Preferences directory.
Users may open this file with TextEdit or a similar text editor.
The following table describes sections, which users will encounter in ODBC.preference.

This section names each of the ODBC data sources that appear in the ODBC.preference file. It also pairs the appropriate ODBC driver name with the data source name.

Data Source Specifications

This section lists the actual data source names. Each data source name is composed of a formal name and a parameter list.

ODBC Data Sources

The ODBC Data Sources section lists the names of the individual data sources and pairs the names with the appropriate ODBC client driver.
These data sources names are associated with formal data source specifications, which appear later in the file.

Passes a valid OpenLink domain alias. This domain alias must match a valid domain alias in the Multi-Tier oplrqb.ini file. The drivers use these domain aliases as starting points from which to assess rules, environment variables, and agent binaries to instantiate for connections.

Hostname

Passes the hostname or IP address of the machine, which contains the OpenLink request broker.

Port

Passes the TCP port, on which the request broker listens. This TCP port is associated with the ListenPort parameter, and it appears in the [Protocol TCP] section of the Multi-Tier Rules Book (oplrqb.ini).

Protocol

Passes a valid OpenLink network protocol. The default is TCP/IP.

Database Name

Passes the name of a database or Oracle SID. Progress users should pass the full path to their databases.

Passes a valid database username. If the Multi-Tier OPSYSLOGIN parameter is enabled, this parameter passes a valid operating system username.

Read-only Connection

Passes a Yes or No value to enable or disable READONLY access to the data store.

No Login Dialog Box

Enables or disables login popup box.

Defer Fetching of long data

Passes a Yes or No value to enable or disable deferred fetching. Deferred fetching causes large, binary objects to be fetched after other, smaller data. This enhances performance.

Row buffer size

Passes an integer, which represents the number of rows that the driver will return during an individual fetch.

All OpenLink Single-Tier drivers recognize a common subset of specifications parameters.
Individual Single-Tier drivers recognize an additional set of parameters, which are specialized for the database to which they connect.

Passes a descriptive data source title. This title must match the title passed under the [ODBC Data Sources] heading.

Driver

Passes the full path to the ODBC client driver.

Description

Passes a description of the use or nature of the data source name.

Cursor_Sensitivity

Passes a Yes or No value to enable or disable the row version cache, which is used with dynamic cursors.

FetchBufferSize

Passes an integer, which represents the number of rows that the driver will return during individual fetch operations.

InitialSQL

Passes a path to a file containing SQL statements. These statements are issued against the database upon initial connection. InitialSQL scripts usually contain statements, which set ISOLATION levels.

Username

Passes a valid database username.

Password

Passes a valid database password

MaxRows

Passes an integer, which limits the maximum number of rows that may be returned.

NoAutoCommit

Passes a Yes or No value, which enables or disables the driver's autocommit behaviour.

NoLoginBox

Passes a Yes or No value to disable or enable the login pop-up box.

NoRowsetSizeLimit

Passes a Yes or No value to enable or disable rowset size limits. Default rowset size limits are enforced by the cursor library. These limits prevent the driver from consuming all available memory in the event that rowsets are inordinately large.

ReadOnly

Passes a Yes or No value to enable or disable READONLY access to the data store.

Promotes efficient processing of Oracle catalog calls such as SQLForeignKey () and SQLPrimaryKeys (). The appropriate odbccat#.sql script must be run before OraCatalogs is enabled. There is one odbccat#.sql script for each Oracle database version.

ShowRemarks

Retrieves contents of SQLColumns REMARKS field.

UserTblsFirst

Causes user tables to appear at beginning of SQLTables() table name listing.

CountProcParms

Insures that number of parameters passed by stored procedures matches the number of parameters expected by SQLProcedures.

OCIPrefetchRows

Passes an integer value, which represents the number of rows to prefetch.

OCIPrefetchMemory

Passes an integer value, which represents the amount of memory to use for prefetch operations.

Aqua GUI ODBC Administrators

Users may encounter one of three, Aqua GUI ODBC administrators on Mac OS X.
Users may encounter the ODBC Administrator, the iODBC Administrator, or Data Direct's ODBC Configure.
Different driver managers are installed by different OpenLink install bundles and client applications.

The ODBC Administrator ships with Apple's Jaguar installers.
Users will find the ODBC Administrator's icon in their /Applications/Utilities folder.
This administrator is an Apple-native interface to the iODBC dylibs driver manager.
Apple dylibs are dynamic shared libraries.
One copy of a .dylib or dynamic library may be shared by multiple applications simultaneously.
These libraries are similar in theory to Unix dynamic libraries.
However, their use and implementation are different.

The iODBC Administrator ships with OpenLink Software's driver installers.
Users will find the iODBC Administrator's icon in their /Applications folder.
This administrator is an OpenLink-native interface to the iODBC frameworks driver manager.
Apple frameworks are special bundles or packages, which contain dynamic shared libraries, header files, documentation, and other resources that are necessary to use the library.

The ODBC Configure administrator ships with FileMaker 6.
Users will find the ODBC Configure icon in /Applications/Data Direct ODBC Folder.
This administrator is a Data Direct-native interface to the Data Direct's Carbon-based, CFM driver manager.
Carbon is an older, Mac OS application environment and API, which Apple modified for use with Mac OS X operating systems.
The CFM driver manager is based on Apple's CFM technology.
CFM is an abbreviation for Code Fragment Manager.
The Code Fragment Manager loads code fragments (libraries, applications, code, etc.) and prepares them for execution.

The following instructions will enable users to create OpenLink data sources using any ODBC administrator.

Open the appropriate administrator.

Click on the System, User, or File tab.

Click Add.

Select the appropriate OpenLink Single-Tier or Multi-Tier driver.

Click Finish.

Use the ODBC Setup dialog to provide connection parameters and to disable or enable optional features.

Passes a descriptive data source title. This title must match the title passed under the [ODBC Data Sources] heading.

Driver

Passes the full path to the ODBC client driver.

Description

Passes a description of the use or nature of the data source name.

Cursor_Sensitivity

Passes a Yes or No value to enable or disable the row version cache, which is used with dynamic cursors.

FetchBufferSize

Passes an integer, which represents the number of rows that the driver will return during individual fetch operations.

InitialSQL

Passes a path to a file containing SQL statements. These statements are issued against the database upon initial connection. InitialSQL scripts usually contain statements, which set ISOLATION levels.

Username

Passes a valid database username.

Password

Passes a valid database password

MaxRows

Passes an integer, which limits the maximum number of rows that may be returned.

NoAutoCommit

Passes a Yes or No value, which enables or disables the driver's autocommit behaviour.

NoLoginBox

Passes a Yes or No value to disable or enable the login pop-up box.

NoRowsetSizeLimit

Passes a Yes or No value to enable or disable rowset size limits. Default rowset size limits are enforced by the cursor library. These limits prevent the driver from consuming all available memory in the event that rowsets are inordinately large.

ReadOnly

Passes a Yes or No value to enable or disable READONLY access to the data store.

Passes a Yes or No value to enable or disable deferred fetching. Deferred fetching causes large, binary objects to be fetched after other, smaller data. This enhances performance.

Note:* The Optional Server parameter name changes to reflect the database to which you are trying to connect.
For instance, the setup routine will replace Server with Net 8 Service Name, if you choose an Oracle domain.

Passes the hostname or IP address of the machine, which contains the database server.

Port

Passes the TCP port, on which the database server or PostgreSQL postmaster listens.

Username

Passes a valid database username.

Password

Passes a valid database password.

Row buffer size

Passes an integer, which represents the number of rows that the driver will return during an individual fetch.

Hide login dialog

Enables or disables the login popup box.

Read only connection

Enables or disables READONLY access to the data store.

Database

Passes the name of a database or Oracle SID. Progress users should pass the full path to their databases.

Initialization SQL

Passes a path to a file containing SQL statements. These statements are issued against the database upon initial connection. InitialSQL scripts usually contain statements, which set ISOLATION levels.

Max rows override

Passes an integer, which represents the number of rows that the driver will return during individual fetch operations.

Disable autocommit

Enables or disables the driver's autocommit behavior.

Disable rowset size limit

Enables or disables rowset size limits. Default rowset size limits are enforced by the cursor library. These limits prevent the driver from consuming all available memory in the event that rowsets are inordinately large.

High cursor sensitivity

Enables or disables the row version cache, which is used with dynamic cursors.

Defer Fetching of long data

Enables or disables deferred fetching. Deferred fetching causes large, binary objects to be fetched after other data. This enhances performance.

Insures that number of parameters passed by stored procedures matches the number of parameters expected by SQLProcedures.

Custom catalog views

Oracle

Promotes efficient processing of Oracle catalog calls such as SQLForeignKey () and SQLPrimaryKeys (). The appropriate odbccat#.sql script must be run before OraCatalogs is enabled. There is one odbccat#.sql script for each Oracle database version.

Net Service

Oracle

Passes the name of a valid Oracle Net Service.

Net Service name

Oracle

Passes the name of a valid Oracle Net Service.

OCIPrefetch Memory

Oracle

Passes an integer value, which represents the amount of memory to use for prefetch operations.

OCIPrefetch Rows

Oracle

Passes an integer value, which represents the number of rows to prefetch.

Oracle directory

Oracle

Passes the full path to the Oracle home directory.

Service name/SID

Oracle

Passes the name of a valid Oracle SID.

Show remarks

Oracle

Retrieves content of SQLColumns REMARKS field.

Use Oracle 8i release 8.0 Compatible Identification

Oracle

User's own tables first in SQLTables

Oracle

Causes user tables to appear at beginning of SQLTables() table name listing.

Click OK to save your data source name.

Developing ODBC Compliant Applications

OpenLink Software's Software Development Kits (SDK's) provide powerful tools for Apple applications developers.
While Apple SDK's provide only the dylibs format driver manager, OpenLink's SDK's provide both the dylibs and frameworks format driver managers.
This distinction is critical.
The frameworks format driver manager provides the applications developer with versatility that is not available with dylibs.

Frameworks bundles contain multiple revisions of the iODBC driver manager.
Moreover, the driver manager library name points to the latest revision of the component.
Therefore, developers do not need to set environment variables to point to the appropriate file.
However, applications developers can choose to instantiate legacy revisions.
In other words, developers can hard link applications to older driver managers to access functionality that is not present in recent revisions.

Finally, OpenLink's SDK's enable developers to build Classic, Carbon, and Cocoa native applications.
Furthermore, OpenLink's SDK's assist developers who need to migrate applications from the Classic API to Carbon.
And, OpenLink aids developers who need to compile applications, which run on both Classic and Mac OS X.
To proceed, developers simply link their applications against OpenLink's iODBC libraries.
The resulting binary issues calls to the iODBC CFM Bridge.
This bridge ships with OpenLink's iODBC bundles, and it exists in Classic and OS X formats.
It identifies the correct driver manager format, which to load.