Opened 17 years ago

Closed 17 years ago

#55 closed defect (fixed)

ODBC: Native Linux drivers for Oracle, Sybase

Reported by: gavincramer Owned by: gavincramer
Priority: major Milestone: 3.3.0
Component: ODBC Provider Version: 3.2.0
Severity: 3 Keywords:
Cc: External ID:

Description

ODBC Provider does not work on Linux with the native (vendor-provided) drivers for Oracle 10gR2 or Sybase 15.0. Failures are due to odd behaviour or defects in the drivers. Examples: Oracle's driver can return zero-sized varchar2 columns on some obscure system tables; Sybase' driver advertises support for schemas, but returns none (and the caller must know to specify a different "owner" object, "dbo" by default).

Fixes and workarounds will need to be made to make at least basic functionality work with these ODBC drivers.

Change History (2)

comment:1 by gavincramer, 17 years ago

Status: newassigned

comment:2 by gavincramer, 17 years ago

Resolution: fixed
Status: assignedclosed

This enables ODBC Provider to use native (vendor-supplied) drivers on Linux for Oracle 10gR2 and Sybase 15.0. Various oddities and defects in each driver needed workarounds.

This change makes header files changes that make it highly adviseable to do a FULL REBUILD of the GenericRdbms component after synchronising files.

Unit tests for ODBC-Oracle have been redirected to use only the native Oracle ODBC driver, and not Easysoft's driver. Easysoft is no longer supported, although tests for it may be turned back on at some point, just to check for regression. Previously suppressed (on Linux) tests for views and column types have now been turned on to take advantage of the native Oracle driver.

The FDO ODBC convention of using a DSN's "UserId" field to name a targetted schema is now supported on Linux. It was previously only used on Windows. This gets around a weakness in Oracle's ODBC drivers wherein, by default, all schemas were visible (causing poor performance and often unexpected behaviour).

A new suite of unit tests "OdbcSybaseTests", exercise basic database creation, data insertion and selection.

Example content for /etc/odbc/ini for Oracle and Sybase respectively...


[GraniteOracleFdoTest] Application Attributes = T Attributes = W BatchAutocommitMode = IfAllSuccessful BindAsFLOAT = F CloseCursor = F DisableDPM = F DisableMTS = T Driver = Oracle 10g ODBC driver DSN = GraniteOracleFdoTest EXECSchemaOpt = EXECSyntax = T Failover = T FailoverDelay = 10 FailoverRetryCount = 10 FetchBufferSize = 64000 ForceWCHAR = F Lobs = T Longs = T MetadataIdDefault = F QueryTimeout = T ResultSets = T ServerName = R102 SQLGetData extensions = F Translation DLL = Translation Option = 0 DisableRULEHint = T UserID = FDO_GAVIN_ODBC

[GraniteSybaseFdoTest] Description = Sybase ODBC Data Source UserID = sa Password = youllhavetoguess Driver = Adaptive Server Enterprise Server = OTWGCRH Port = 5000 Database = fdo_gavin_odbc UseCursor = 1


Example content for /etc/odbcinst.ini...


[Oracle 10g ODBC driver] Description = Oracle ODBC driver for Oracle 10g Driver = /opt/oracle/product/10.2.0/instantclient/libsqora.so.10.1 Setup = FileUsage = CPTimeout = CPReuse =

[Adaptive Server Enterprise] Description = Sybase ODBC Driver Driver = /opt/sybase/DataAccess/ODBC/lib/libsybdrvodb.so FileUsage = 1


Reviewed by: Dan Stoica

Log (includes changes from 3.2.x branch for Ticket #55 and Ticket #59):

Revision: 2730 Author: gavincramer Date: 2:32:48 PM, Wednesday, April 11, 2007 Message: Ticket #55 ODBC: Native Linux drivers for Oracle, Sybase Ticket #59 ODBC: Native Linux drivers for Sybase 12.5.4, 15.0 - autogenerated columns


Modified : /trunk/Providers/GenericRdbms/Inc/Rdbi/vndr_info.h Modified : /trunk/Providers/GenericRdbms/Src/ODBC/Fdo/FdoRdbmsOdbcConnection.cpp Modified : /trunk/Providers/GenericRdbms/Src/ODBC/SchemaMgr/Ph/Mgr.cpp Modified : /trunk/Providers/GenericRdbms/Src/ODBC/SchemaMgr/Ph/Mgr.h Modified : /trunk/Providers/GenericRdbms/Src/ODBC/SchemaMgr/Ph/Rd/OraColumnReader.cpp Modified : /trunk/Providers/GenericRdbms/Src/ODBCDriver/col_.c Modified : /trunk/Providers/GenericRdbms/Src/ODBCDriver/connect.c Modified : /trunk/Providers/GenericRdbms/Src/ODBCDriver/constants.h Modified : /trunk/Providers/GenericRdbms/Src/ODBCDriver/execute.c Modified : /trunk/Providers/GenericRdbms/Src/ODBCDriver/objects_.c Modified : /trunk/Providers/GenericRdbms/Src/ODBCDriver/structs.h Modified : /trunk/Providers/GenericRdbms/Src/ODBCDriver/users_.c Modified : /trunk/Providers/GenericRdbms/Src/ODBCDriver/vndr_info.c Modified : /trunk/Providers/GenericRdbms/Src/UnitTest/Common/FdoInsertTest.h Modified : /trunk/Providers/GenericRdbms/Src/UnitTest/Odbc/OdbcBaseSetup.cpp Modified : /trunk/Providers/GenericRdbms/Src/UnitTest/Odbc/OdbcBaseSetup.h Modified : /trunk/Providers/GenericRdbms/Src/UnitTest/Odbc/OdbcConnectionUtil.cpp Modified : /trunk/Providers/GenericRdbms/Src/UnitTest/Odbc/OdbcFdoConnectTest.cpp Modified : /trunk/Providers/GenericRdbms/Src/UnitTest/Odbc/OdbcFdoDeleteTest.cpp Modified : /trunk/Providers/GenericRdbms/Src/UnitTest/Odbc/OdbcFdoDeleteTest.h Modified : /trunk/Providers/GenericRdbms/Src/UnitTest/Odbc/OdbcFdoInsertTest.cpp Modified : /trunk/Providers/GenericRdbms/Src/UnitTest/Odbc/OdbcFdoInsertTest.h Modified : /trunk/Providers/GenericRdbms/Src/UnitTest/Odbc/OdbcFdoSelectTest.cpp Modified : /trunk/Providers/GenericRdbms/Src/UnitTest/Odbc/OdbcFdoSelectTest.h

Note: See TracTickets for help on using tickets.