2 Description: Environment Handle manager.
5 CSqlOdbcEnv::SQLAllocHandle();
6 CSqlOdbcEnv::SQLFreeHandle();
7 CSqlOdbcEnv::SQLSetEnvAttr();
10 CSqlOdbcEnv::CSqlOdbcEnv();
13 #include "odbcCommon.h"
16 CSqlOdbcEnv::CSqlOdbcEnv( void ) :
17 handleType_( SQL_HANDLE_ENV
),
19 err_( SQL_HANDLE_ENV
),
20 odbcVersion_( SQL_OV_ODBC3
)
23 SQLRETURN
SQLAllocEnv(
24 SQLHENV
*EnvironmentHandle
)
26 return( CSqlOdbcEnv::SQLAllocHandle( (SQLHANDLE
) SQL_NULL_HANDLE
, EnvironmentHandle
) );
30 SQLRETURN
CSqlOdbcEnv::SQLAllocHandle(
31 SQLHANDLE inputHandle
, // IN
32 SQLHANDLE
*outputHandle
) // OUT
34 // Error in parameters
35 if( inputHandle
!= SQL_NULL_HANDLE
)
37 *outputHandle
= SQL_NULL_HENV
;
41 // Allocate Environment.
42 *outputHandle
= (SQLHANDLE
*) new CSqlOdbcEnv
;
43 if( *outputHandle
== NULL
)
45 globalError
.set((int) ERROR_MEMALLOC
);
46 globalError
.printStr( SQL_OV_ODBC3
);
50 return( SQL_SUCCESS
);
54 SQLHENV EnvironmentHandle
)
56 return( CSqlOdbcEnv::SQLFreeHandle( EnvironmentHandle
) );
60 SQLRETURN
CSqlOdbcEnv::SQLFreeHandle(
61 SQLHANDLE inputHandle
) // IN
63 CSqlOdbcEnv
*inputEnv
= (CSqlOdbcEnv
*) inputHandle
;
66 if( isValidHandle( inputEnv
, SQL_HANDLE_ENV
) != SQL_SUCCESS
)
67 return( SQL_INVALID_HANDLE
);
69 // Check whether we can proceed.
70 if( inputEnv
->chkStateForSQLFreeHandle() != SQL_SUCCESS
)
73 inputEnv
->handleType_
= -1; // Make object invalid.
74 delete inputEnv
; // Delete Environment.
76 return( SQL_SUCCESS
);
79 SQLRETURN
SQLTransact(
80 SQLHENV EnvironmentHandle
,
81 SQLHDBC ConnectionHandle
,
82 SQLUSMALLINT CompletionType
)
84 // Call SQLEndTrans() on handle whichever is valid
85 if( isValidHandle( EnvironmentHandle
, SQL_HANDLE_ENV
) == SQL_SUCCESS
)
86 return( ((CSqlOdbcEnv
*) EnvironmentHandle
)->SQLEndTran( CompletionType
) );
88 if( isValidHandle( ConnectionHandle
, SQL_HANDLE_DBC
) == SQL_SUCCESS
)
89 return( ((CSqlOdbcDbc
*) ConnectionHandle
)->SQLEndTran( CompletionType
) );
91 return( SQL_INVALID_HANDLE
);
94 SQLRETURN
CSqlOdbcEnv::SQLEndTran(
95 SQLSMALLINT completionType
) // IN
100 // Stop if odbcVersion not set.
101 if( odbcVersion_
== 0 )
103 err_
.set( ERROR_FUNCSEQ
);
107 // If no connection objects ?
108 if( dbcList_
.size() == 0 )
109 return( SQL_SUCCESS
);
111 // For each connect obj, call SQLEndTran
112 std::vector
<CSqlOdbcDbc
*>::iterator iter
;
113 iter
= dbcList_
.begin();
114 while( iter
!= dbcList_
.end() )
116 if( (*iter
)->chkStateForSQLEndTran() == SQL_SUCCESS
) {
117 if( (*iter
)->SQLEndTran( completionType
) == SQL_ERROR
)
120 else return ( SQL_ERROR
);
124 return( SQL_SUCCESS
);
127 SQLRETURN
SQLSetEnvAttr(
128 SQLHENV inputEnv
, // IN
129 SQLINTEGER Attribute
, // IN
130 SQLPOINTER Value
, // IN
131 SQLINTEGER StringLength
) // IN
134 if( isValidHandle( inputEnv
, SQL_HANDLE_ENV
) != SQL_SUCCESS
)
135 return( SQL_INVALID_HANDLE
);
137 return( ((CSqlOdbcEnv
*)inputEnv
)->SQLSetEnvAttr( Attribute
, Value
, StringLength
) );
140 SQLRETURN
CSqlOdbcEnv::SQLSetEnvAttr(
141 SQLINTEGER attribute
, // IN
142 SQLPOINTER value
, // IN
143 SQLINTEGER stringLength
) // IN
148 // Check whether we can proceed.
149 if( chkStateForSQLSetEnvAttr() != SQL_SUCCESS
)
154 case SQL_ATTR_ODBC_VERSION
:
155 switch( (SQLINTEGER
) value
)
158 case SQL_OV_ODBC3
: break;
160 err_
.set( ERROR_OPTCHANGE
);
163 odbcVersion_
= (SQLUINTEGER
) value
;
166 case SQL_ATTR_OUTPUT_NTS
:
167 if( (SQLINTEGER
) value
== SQL_TRUE
)
168 return( SQL_SUCCESS
);
171 err_
.set( ERROR_OPTFEATURE_NOTIMP
);
176 default: err_
.set( ERROR_OPTRANGE
);
180 return( SQL_SUCCESS
);
183 SQLRETURN
SQLGetEnvAttr(
184 SQLHENV EnvironmentHandle
,
185 SQLINTEGER Attribute
,
187 SQLINTEGER BufferLength
,
188 SQLINTEGER
*StringLength
)
191 if( isValidHandle( EnvironmentHandle
, SQL_HANDLE_ENV
) != SQL_SUCCESS
)
192 return( SQL_INVALID_HANDLE
);
194 return( ((CSqlOdbcEnv
*)EnvironmentHandle
)->SQLGetEnvAttr( Attribute
, Value
, BufferLength
, StringLength
) );
197 SQLRETURN
CSqlOdbcEnv::SQLGetEnvAttr(
198 SQLINTEGER attribute
,
200 SQLINTEGER bufferLength
,
201 SQLINTEGER
*stringLength
)
206 // Can we proceed.? Always ( in all states)
210 case SQL_ATTR_ODBC_VERSION
:
211 *((SQLUINTEGER
*) value
) = odbcVersion_
;
214 case SQL_ATTR_OUTPUT_NTS
:
215 *((SQLUINTEGER
*) value
) = SQL_TRUE
;
218 default: err_
.set( ERROR_OPTRANGE
);
222 return( SQL_SUCCESS
);