<?xml version="1.0"?>

<st-source>
<!-- 
Name: ODBCThapiEXDI
Notice: Copyright © 2002 Cincom Systems, Inc.  All Rights Reserved.
Comment: Provides a THAPI (threaded interconnect) interface to the ODBC client libraries.

To create a new thread connection simply use ODBCConnection>>newBeThreaded.

Further information on the EXDI can be found in the "Database Application Developer''s Guide" (located in the /doc subdirectory of the VisualWorks installation).  For additional information on the threaded interconnect, see the "DLL and C Connect User''s Guide".
DbIdentifier: bear73
DbTrace: 41431
DevelopmentPrerequisites: #(#(#any 'ODBCEXDI' '') #(#any 'DLLCC' ''))
PackageName: ODBCThapiEXDI
Parcel: #('ODBCThapiEXDI')
ParcelName: ODBCThapiEXDI
PrerequisiteParcels: #(#('ODBCEXDI' ''))
PrintStringCache: (5i.4 - 0.3,bobw)
Version: 7.2
Date: 1:18:12 pm October 20, 2003
 -->
<time-stamp>From VisualWorks®, 7.2 of October 20, 2003 on October 20, 2003 at 1:18:12 pm</time-stamp>


<do-it>(Dialog confirm: 'You are filing-in a Parcel source file!\\While this is possible it will not have\the same effect as loading the parcel.\None of the Parcel''s prerequisites will\be loaded and none of its load actions\will be performed.\\Are you sure you want to file-in?' withCRs) ifFalse: [self error: 'Parcel file-in abandoned.  Choose terminate or close.']</do-it>

<class>
<name>ODBCThreadedConnection</name>
<environment>Database</environment>
<super>Database.ODBCConnection</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>accessProtect </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Database-ODBC</category>
<attributes>
<package>ODBCThapiEXDI</package>
</attributes>
</class>

<class>
<name>ODBCThreadedSession</name>
<environment>Database</environment>
<super>Database.ODBCSession</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>accessProtect </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Database-ODBC</category>
<attributes>
<package>ODBCThapiEXDI</package>
</attributes>
</class>

<class>
<name>ODBCCLIThreadedInterface</name>
<environment>Database</environment>
<super>Database.ODBCCLIInterface</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports>
			Database.ODBCCLIThreadedInterfaceDictionary.*
			</imports>
<category>Database-External-Libraries</category>
<attributes>
<includeFiles></includeFiles>
<includeDirectories></includeDirectories>
<libraryFiles></libraryFiles>
<libraryDirectories></libraryDirectories>
<beVirtual>true</beVirtual>
<optimizationLevel>full</optimizationLevel>
<package>ODBCThapiEXDI</package>
</attributes>
</class>

<class>
<name>ODBCCLINTThreadedInterface</name>
<environment>Database</environment>
<super>Database.ODBCCLIThreadedInterface</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars></inst-vars>
<class-inst-vars></class-inst-vars>
<imports>
			Database.ODBCCLINTThreadedInterfaceDictionary.*
			</imports>
<category>Database-External-Libraries</category>
<attributes>
<includeFiles></includeFiles>
<includeDirectories></includeDirectories>
<libraryFiles><item>odbc32.dll</item></libraryFiles>
<libraryDirectories></libraryDirectories>
<beVirtual>true</beVirtual>
<optimizationLevel>full</optimizationLevel>
<package>ODBCThapiEXDI</package>
</attributes>
</class>

<shared-variable>
<name>RegisteredODBCThreadedSessions</name>
<environment>Database.ODBCThreadedSession</environment>
<private>false</private>
<constant>false</constant>
<category>As yet unclassified</category>
<attributes>
<package>ODBCThapiEXDI</package>
</attributes>
</shared-variable>

<shared-variable>
<name>RegisteredODBCThreadedConnections</name>
<environment>Database.ODBCThreadedConnection</environment>
<private>false</private>
<constant>false</constant>
<category>As yet unclassified</category>
<attributes>
<package>ODBCThapiEXDI</package>
</attributes>
</shared-variable>

<methods>
<class-id>Database.ODBCThreadedConnection</class-id> <category>connections</category>

<body package="ODBCThapiEXDI">getSession
	"Answer an instance of the driver's subclass of ExternalDatabaseSession."
	"this needs access protection when multiple processes contain sessions
	which were obtained from a common connection"

	accessProtect critical: [^super getSession].</body>
</methods>

<methods>
<class-id>Database.ODBCThreadedConnection</class-id> <category>initialize-release</category>

<body package="ODBCThapiEXDI">initialize

	super initialize.
	accessProtect := Semaphore forMutualExclusion.</body>
</methods>

<methods>
<class-id>Database.ODBCThreadedConnection class</class-id> <category>private-registry</category>

<body package="ODBCThapiEXDI">registry

	^RegisteredODBCThreadedConnections</body>

<body package="ODBCThapiEXDI">registry: aCollection

	RegisteredODBCThreadedConnections := aCollection</body>
</methods>

<methods>
<class-id>Database.ODBCThreadedConnection class</class-id> <category>class initialization</category>

<body package="ODBCThapiEXDI">initialize
	"ODBCThreadedConnection initialize"

	super initialize.</body>

<body package="ODBCThapiEXDI">initializeInterfaceMapping

	xifMap := IdentityDictionary new.
	xifMap at: #nt put: #ODBCCLINTThreadedInterface.
	xifMap at: #win95 put: #ODBCCLINTThreadedInterface.
	xifMap at: #unknown put: #ODBCCLINTThreadedInterface</body>
</methods>

<methods>
<class-id>Database.ODBCThreadedConnection class</class-id> <category>accessing</category>

<body package="ODBCThapiEXDI">kind
	"Answer a symbol representing the type of DMBS the receiver provides services for."

	^#'ODBC 3.0 Threaded (Generic)'</body>

<body package="ODBCThapiEXDI">sessionClass
	"Answer the class to use for session objects associated with receiver."

	^ODBCThreadedSession</body>

<body package="ODBCThapiEXDI">version

	^'Database Connect for ODBC Threaded - Release 3.5'</body>
</methods>

<methods>
<class-id>Database.ODBCThreadedConnection class</class-id> <category>threading</category>

<body package="ODBCThapiEXDI">isThreaded

		^true</body>
</methods>

<methods>
<class-id>Database.ODBCThreadedSession</class-id> <category>initialize-release</category>

<body package="ODBCThapiEXDI">initialize

	super initialize.
	accessProtect := Semaphore forMutualExclusion.</body>
</methods>

<methods>
<class-id>Database.ODBCThreadedSession class</class-id> <category>accessing</category>

<body package="ODBCThapiEXDI">connectionClass
	"Answer the class to use for connection objects associated with receiver."

	^ODBCThreadedConnection</body>
</methods>

<methods>
<class-id>Database.ODBCThreadedSession class</class-id> <category>class initialization</category>

<body package="ODBCThapiEXDI">initialize
	"ODBCThreadedSession initialize"

	super initialize.</body>
</methods>

<methods>
<class-id>Database.ODBCThreadedSession class</class-id> <category>private-registry</category>

<body package="ODBCThapiEXDI">registry

	^RegisteredODBCThreadedSessions</body>

<body package="ODBCThapiEXDI">registry: aCollection

	RegisteredODBCThreadedSessions := aCollection</body>
</methods>

<methods>
<class-id>Database.ODBCCLIThreadedInterface class</class-id> <category>class initialization</category>

<body package="ODBCThapiEXDI">initialize

	super initialize</body>
</methods>

<methods>
<class-id>Database.ODBCCLINTThreadedInterface class</class-id> <category>class initialization</category>

<body package="ODBCThapiEXDI">initialize

	super initialize</body>
</methods>

<methods>
<class-id>Database.ODBCConnection class</class-id> <category>threading</category>

<body package="ODBCThapiEXDI">isThreaded

		^false</body>

<body package="ODBCThapiEXDI">newBeThreaded
	"return a new instance that will run under thapi"
	^self threadedConnectionClass new</body>

<body package="ODBCThapiEXDI">threadedConnectionClass

	^ODBCThreadedConnection</body>
</methods>

<methods>
<class-id>Database.ODBCCLIThreadedInterface</class-id> <category>procedures</category>

<body package="ODBCThapiEXDI">SQLAllocConnect: henv with: phdbc
	&lt;C: RETCODE _threaded SQLAllocConnect(HENV henv, HDBC * phdbc)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLAllocEnv: phenv
	&lt;C: RETCODE _threaded SQLAllocEnv(HENV * phenv)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLAllocStmt: hdbc with: phstmt
	&lt;C: RETCODE _threaded SQLAllocStmt(HDBC hdbc, HSTMT * phstmt)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLBindCol: hstmt with: icol with: fCType with: rgbValue with: cbValueMax with: pcbValue
	&lt;C: RETCODE _threaded SQLBindCol(HSTMT hstmt, UWORD icol, SWORD fCType, PTR rgbValue, SDWORD cbValueMax, SDWORD * pcbValue)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLBindParameter: hstmt with: ipar with: fParamType with: fCType with: fSqlType with: cbColDef with: ibScale with: rgbValue with: cbValueMax with: pcbValue
	&lt;C: RETCODE _threaded SQLBindParameter(HSTMT hstmt, UWORD ipar, SWORD fParamType, SWORD fCType, SWORD fSqlType, UDWORD cbColDef, SWORD ibScale, PTR rgbValue, SDWORD cbValueMax, SDWORD * pcbValue)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLBrowseConnect: hdbc with: szConnStrIn with: cbConnStrIn with: szConnStrOut with: cbConnStrOutMax with: pcbConnStrOut
	&lt;C: RETCODE _threaded SQLBrowseConnect(HDBC hdbc, UCHAR * szConnStrIn, SWORD cbConnStrIn, UCHAR * szConnStrOut, SWORD cbConnStrOutMax, SWORD * pcbConnStrOut)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLCancel: hstmt
	&lt;C: RETCODE _threaded SQLCancel(HSTMT hstmt)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLColAttributes: hstmt with: icol with: fDescType with: rgbDesc with: cbDescMax with: pcbDesc with: pfDesc
	&lt;C: RETCODE _threaded SQLColAttributes(HSTMT hstmt, UWORD icol, UWORD fDescType, PTR rgbDesc, SWORD cbDescMax, SWORD * pcbDesc, SDWORD * pfDesc)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLColumnPrivileges: hstmt with: szTableQualifier with: cbTableQualifier with: szTableOwner with: cbTableOwner with: szTableName with: cbTableName with: szColumnName with: cbColumnName
	&lt;C: RETCODE _threaded SQLColumnPrivileges(HSTMT hstmt, UCHAR * szTableQualifier, SWORD cbTableQualifier, UCHAR * szTableOwner, SWORD cbTableOwner, UCHAR * szTableName, SWORD cbTableName, UCHAR * szColumnName, SWORD cbColumnName)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLColumns: hstmt with: szTableQualifier with: cbTableQualifier with: szTableOwner with: cbTableOwner with: szTableName with: cbTableName with: szColumnName with: cbColumnName
	&lt;C: RETCODE _threaded SQLColumns(HSTMT hstmt, UCHAR * szTableQualifier, SWORD cbTableQualifier, UCHAR * szTableOwner, SWORD cbTableOwner, UCHAR * szTableName, SWORD cbTableName, UCHAR * szColumnName, SWORD cbColumnName)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLConnect: hdbc with: szDSN with: cbDSN with: szUID with: cbUID with: szAuthStr with: cbAuthStr
	&lt;C: RETCODE _threaded SQLConnect(HDBC hdbc, UCHAR * szDSN, SWORD cbDSN, UCHAR * szUID, SWORD cbUID, UCHAR * szAuthStr, SWORD cbAuthStr)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLDataSources: henv with: fDirection with: szDSN with: cbDSNMax with: pcbDSN with: szDescription with: cbDescriptionMax with: pcbDescription
	&lt;C: RETCODE _threaded SQLDataSources(HENV henv, UWORD fDirection, UCHAR * szDSN, SWORD cbDSNMax, SWORD * pcbDSN, UCHAR * szDescription, SWORD cbDescriptionMax, SWORD * pcbDescription)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLDescribeCol: hstmt with: icol with: szColName with: cbColNameMax with: pcbColName with: pfSqlType with: pcbColDef with: pibScale with: pfNullable
	&lt;C: RETCODE _threaded SQLDescribeCol(HSTMT hstmt, UWORD icol, UCHAR * szColName, SWORD cbColNameMax, SWORD * pcbColName, SWORD * pfSqlType, UDWORD * pcbColDef, SWORD * pibScale, SWORD * pfNullable)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLDescribeParam: hstmt with: ipar with: pfSqlType with: pcbColDef with: pibScale with: pfNullable
	&lt;C: RETCODE _threaded SQLDescribeParam(HSTMT hstmt, UWORD ipar, SWORD * pfSqlType, UDWORD * pcbColDef, SWORD * pibScale, SWORD * pfNullable)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLDisconnect: hdbc
	&lt;C: RETCODE _threaded SQLDisconnect(HDBC hdbc)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLDriverConnect: hdbc with: hwnd with: szConnStrIn with: cbConnStrIn with: szConnStrOut with: cbConnStrOutMax with: pcbConnStrOut with: fDriverCompletion
	&lt;C: RETCODE _threaded SQLDriverConnect(HDBC hdbc, HWND hwnd, UCHAR * szConnStrIn, SWORD cbConnStrIn, UCHAR * szConnStrOut, SWORD cbConnStrOutMax, SWORD * pcbConnStrOut, UWORD fDriverCompletion)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLDrivers: henv with: fDirection with: szDriverDesc with: cbDriverDescMax with: pcbDriverDesc with: szDriverAttributes with: cbDrvrAttrMax with: pcbDrvrAttr
	&lt;C: RETCODE _threaded SQLDrivers(HENV henv, UWORD fDirection, UCHAR * szDriverDesc, SWORD cbDriverDescMax, SWORD * pcbDriverDesc, UCHAR * szDriverAttributes, SWORD cbDrvrAttrMax, SWORD * pcbDrvrAttr)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLError: henv with: hdbc with: hstmt with: szSqlState with: pfNativeError with: szErrorMsg with: cbErrorMsgMax with: pcbErrorMsg
	&lt;C: RETCODE _threaded SQLError(HENV henv, HDBC hdbc, HSTMT hstmt, UCHAR * szSqlState, SDWORD * pfNativeError, UCHAR * szErrorMsg, SWORD cbErrorMsgMax, SWORD * pcbErrorMsg)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLExecDirect: hstmt with: szSqlStr with: cbSqlStr
	&lt;C: RETCODE _threaded SQLExecDirect(HSTMT hstmt, UCHAR * szSqlStr, SDWORD cbSqlStr)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLExecute: hstmt
	&lt;C: RETCODE _threaded SQLExecute(HSTMT hstmt)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLExtendedFetch: hstmt with: fFetchType with: irow with: pcrow with: rgfRowStatus
	&lt;C: RETCODE _threaded SQLExtendedFetch(HSTMT hstmt, UWORD fFetchType, SDWORD irow, UDWORD * pcrow, UWORD * rgfRowStatus)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLFetch: hstmt
	&lt;C: RETCODE _threaded SQLFetch(HSTMT hstmt)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLForeignKeys: hstmt with: szPkTableQualifier with: cbPkTableQualifier with: szPkTableOwner with: cbPkTableOwner with: szPkTableName with: cbPkTableName with: szFkTableQualifier with: cbFkTableQualifier with: szFkTableOwner with: cbFkTableOwner with: szFkTableName with: cbFkTableName
	&lt;C: RETCODE _threaded SQLForeignKeys(HSTMT hstmt, UCHAR * szPkTableQualifier, SWORD cbPkTableQualifier, UCHAR * szPkTableOwner, SWORD cbPkTableOwner, UCHAR * szPkTableName, SWORD cbPkTableName, UCHAR * szFkTableQualifier, SWORD cbFkTableQualifier, UCHAR * szFkTableOwner, SWORD cbFkTableOwner, UCHAR * szFkTableName, SWORD cbFkTableName)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLFreeConnect: hdbc
	&lt;C: RETCODE _threaded SQLFreeConnect(HDBC hdbc)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLFreeEnv: henv
	&lt;C: RETCODE _threaded SQLFreeEnv(HENV henv)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLFreeStmt: hstmt with: fOption
	&lt;C: RETCODE _threaded SQLFreeStmt(HSTMT hstmt, UWORD fOption)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLGetConnectOption: hdbc with: fOption with: pvParam
	&lt;C: RETCODE _threaded SQLGetConnectOption(HDBC hdbc, UWORD fOption, PTR pvParam)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLGetCursorName: hstmt with: szCursor with: cbCursorMax with: pcbCursor
	&lt;C: RETCODE _threaded SQLGetCursorName(HSTMT hstmt, UCHAR * szCursor, SWORD cbCursorMax, SWORD * pcbCursor)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLGetData: hstmt with: icol with: fCType with: rgbValue with: cbValueMax with: pcbValue
	&lt;C: RETCODE _threaded SQLGetData(HSTMT hstmt, UWORD icol, SWORD fCType, PTR rgbValue, SDWORD cbValueMax, SDWORD * pcbValue)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLGetFunctions: hdbc with: fFunction with: pfExists
	&lt;C: RETCODE _threaded SQLGetFunctions(HDBC hdbc, UWORD fFunction, UWORD * pfExists)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLGetInfo: hdbc with: fInfoType with: rgbInfoValue with: cbInfoValueMax with: pcbInfoValue
	&lt;C: RETCODE _threaded SQLGetInfo(HDBC hdbc, UWORD fInfoType, PTR rgbInfoValue, SWORD cbInfoValueMax, SWORD * pcbInfoValue)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLGetStmtOption: hstmt with: fOption with: pvParam
	&lt;C: RETCODE _threaded SQLGetStmtOption(HSTMT hstmt, UWORD fOption, PTR pvParam)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLGetTypeInfo: hstmt with: fSqlType
	&lt;C: RETCODE _threaded SQLGetTypeInfo(HSTMT hstmt, SWORD fSqlType)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLMoreResults: hstmt
	&lt;C: RETCODE _threaded SQLMoreResults(HSTMT hstmt)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLNativeSql: hdbc with: szSqlStrIn with: cbSqlStrIn with: szSqlStr with: cbSqlStrMax with: pcbSqlStr
	&lt;C: RETCODE _threaded SQLNativeSql(HDBC hdbc, UCHAR * szSqlStrIn, SDWORD cbSqlStrIn, UCHAR * szSqlStr, SDWORD cbSqlStrMax, SDWORD * pcbSqlStr)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLNumParams: hstmt with: pcpar
	&lt;C: RETCODE _threaded SQLNumParams(HSTMT hstmt, SWORD * pcpar)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLNumResultCols: hstmt with: pccol
	&lt;C: RETCODE _threaded SQLNumResultCols(HSTMT hstmt, SWORD * pccol)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLParamData: hstmt with: prgbValue
	&lt;C: RETCODE _threaded SQLParamData(HSTMT hstmt, PTR * prgbValue)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLParamOptions: hstmt with: crow with: pirow
	&lt;C: RETCODE _threaded SQLParamOptions(HSTMT hstmt, UDWORD crow, UDWORD * pirow)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLPrepare: hstmt with: szSqlStr with: cbSqlStr
	&lt;C: RETCODE _threaded SQLPrepare(HSTMT hstmt, UCHAR * szSqlStr, SDWORD cbSqlStr)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLPrimaryKeys: hstmt with: szTableQualifier with: cbTableQualifier with: szTableOwner with: cbTableOwner with: szTableName with: cbTableName
	&lt;C: RETCODE _threaded SQLPrimaryKeys(HSTMT hstmt, UCHAR * szTableQualifier, SWORD cbTableQualifier, UCHAR * szTableOwner, SWORD cbTableOwner, UCHAR * szTableName, SWORD cbTableName)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLProcedureColumns: hstmt with: szProcQualifier with: cbProcQualifier with: szProcOwner with: cbProcOwner with: szProcName with: cbProcName with: szColumnName with: cbColumnName
	&lt;C: RETCODE _threaded SQLProcedureColumns(HSTMT hstmt, UCHAR * szProcQualifier, SWORD cbProcQualifier, UCHAR * szProcOwner, SWORD cbProcOwner, UCHAR * szProcName, SWORD cbProcName, UCHAR * szColumnName, SWORD cbColumnName)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLProcedures: hstmt with: szProcQualifier with: cbProcQualifier with: szProcOwner with: cbProcOwner with: szProcName with: cbProcName
	&lt;C: RETCODE _threaded SQLProcedures(HSTMT hstmt, UCHAR * szProcQualifier, SWORD cbProcQualifier, UCHAR * szProcOwner, SWORD cbProcOwner, UCHAR * szProcName, SWORD cbProcName)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLPutData: hstmt with: rgbValue with: cbValue
	&lt;C: RETCODE _threaded SQLPutData(HSTMT hstmt, PTR rgbValue, SDWORD cbValue)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLRowCount: hstmt with: pcrow
	&lt;C: RETCODE _threaded SQLRowCount(HSTMT hstmt, SDWORD * pcrow)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLSetConnectOption: hdbc with: fOption with: vParam
	&lt;C: RETCODE _threaded SQLSetConnectOption(HDBC hdbc, UWORD fOption, UDWORD vParam)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLSetCursorName: hstmt with: szCursor with: cbCursor
	&lt;C: RETCODE _threaded SQLSetCursorName(HSTMT hstmt, UCHAR * szCursor, SWORD cbCursor)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLSetParam: hstmt with: ipar with: fCType with: fSqlType with: cbColDef with: ibScale with: rgbValue with: pcbValue
	&lt;C: RETCODE _threaded SQLSetParam(HSTMT hstmt, UWORD ipar, SWORD fCType, SWORD fSqlType, UDWORD cbColDef, SWORD ibScale, PTR rgbValue, SDWORD * pcbValue)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLSetPos: hstmt with: irow with: fOption with: fLock
	&lt;C: RETCODE _threaded SQLSetPos(HSTMT hstmt, UWORD irow, UWORD fOption, UWORD fLock)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLSetScrollOptions: hstmt with: fConcurrency with: crowKeyset with: crowRowset
	&lt;C: RETCODE _threaded SQLSetScrollOptions(HSTMT hstmt, UWORD fConcurrency, SDWORD crowKeyset, UWORD crowRowset)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLSetStmtOption: hstmt with: fOption with: vParam
	&lt;C: RETCODE _threaded SQLSetStmtOption(HSTMT hstmt, UWORD fOption, UDWORD vParam)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLSpecialColumns: hstmt with: fColType with: szTableQualifier with: cbTableQualifier with: szTableOwner with: cbTableOwner with: szTableName with: cbTableName with: fScope with: fNullable
	&lt;C: RETCODE _threaded SQLSpecialColumns(HSTMT hstmt, UWORD fColType, UCHAR * szTableQualifier, SWORD cbTableQualifier, UCHAR * szTableOwner, SWORD cbTableOwner, UCHAR * szTableName, SWORD cbTableName, UWORD fScope, UWORD fNullable)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLStatistics: hstmt with: szTableQualifier with: cbTableQualifier with: szTableOwner with: cbTableOwner with: szTableName with: cbTableName with: fUnique with: fAccuracy
	&lt;C: RETCODE _threaded SQLStatistics(HSTMT hstmt, UCHAR * szTableQualifier, SWORD cbTableQualifier, UCHAR * szTableOwner, SWORD cbTableOwner, UCHAR * szTableName, SWORD cbTableName, UWORD fUnique, UWORD fAccuracy)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLTablePrivileges: hstmt with: szTableQualifier with: cbTableQualifier with: szTableOwner with: cbTableOwner with: szTableName with: cbTableName
	&lt;C: RETCODE _threaded SQLTablePrivileges(HSTMT hstmt, UCHAR * szTableQualifier, SWORD cbTableQualifier, UCHAR * szTableOwner, SWORD cbTableOwner, UCHAR * szTableName, SWORD cbTableName)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLTables: hstmt with: szTableQualifier with: cbTableQualifier with: szTableOwner with: cbTableOwner with: szTableName with: cbTableName with: szTableType with: cbTableType
	&lt;C: RETCODE _threaded SQLTables(HSTMT hstmt, UCHAR * szTableQualifier, SWORD cbTableQualifier, UCHAR * szTableOwner, SWORD cbTableOwner, UCHAR * szTableName, SWORD cbTableName, UCHAR * szTableType, SWORD cbTableType)&gt;
	^self externalAccessFailed</body>

<body package="ODBCThapiEXDI">SQLTransact: henv with: hdbc with: fType
	&lt;C: RETCODE _threaded SQLTransact(HENV henv, HDBC hdbc, UWORD fType)&gt;
	^self externalAccessFailed</body>
</methods>

<initialize>
<class-id>Database.ODBCThreadedConnection</class-id>
</initialize>

<initialize>
<class-id>Database.ODBCThreadedSession</class-id>
</initialize>

<initialize>
<class-id>Database.ODBCCLIThreadedInterface</class-id>
</initialize>

<initialize>
<class-id>Database.ODBCCLINTThreadedInterface</class-id>
</initialize>

<do-it>"Imported Classes:"</do-it>

<do-it>self error: 'Attempting to file-in parcel imports.  Choose terminate or close'</do-it>

<class>
<name>ODBCConnection</name>
<environment>Database</environment>
<super>Database.ExternalDatabaseConnection</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>hdbcHolder supportedFunctions generalInformationCache </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Database-ODBC</category>
<attributes>
<package>ODBCEXDI</package>
</attributes>
</class>

<class>
<name>ODBCCLIInterface</name>
<environment>Database</environment>
<super>External.ExternalInterface</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>encoding </inst-vars>
<class-inst-vars>getSelectorMap fSqlTypeToConversionMap fetchBufferSizeBlocks putSelectorMap fCTypeFromConversionMap fSqlTypeFromConversionMap valueSizeBlocks valuePrecisionBlocks dataChunkSize </class-inst-vars>
<imports>
			Database.ODBCCLIInterfaceDictionary.*
			</imports>
<category>Database-External-Libraries</category>
<attributes>
<includeFiles></includeFiles>
<includeDirectories></includeDirectories>
<libraryFiles></libraryFiles>
<libraryDirectories></libraryDirectories>
<beVirtual>true</beVirtual>
<optimizationLevel>full</optimizationLevel>
<package>ODBCEXDI</package>
</attributes>
</class>

<class>
<name>ODBCSession</name>
<environment>Database</environment>
<super>Database.ExternalDatabaseSession</super>
<private>false</private>
<indexed-type>none</indexed-type>
<inst-vars>hstmtHolder resultsCache bindValuePointers mustResendQueryHolder fetchLongResultsAnyOrder maxLongData sqlStatementOptionCache </inst-vars>
<class-inst-vars></class-inst-vars>
<imports></imports>
<category>Database-ODBC</category>
<attributes>
<package>ODBCEXDI</package>
</attributes>
</class>

</st-source>
