Fixing Build failure.
[csql.git] / src / odbc / odbcEnv.cxx
blobd422149edae8cb817085f768f4f7daf5123ff69d
1 /* Class CSqlOdbcEnv
2 Description: Environment Handle manager.
4 ODBC API's:
5 CSqlOdbcEnv::SQLAllocHandle();
6 CSqlOdbcEnv::SQLFreeHandle();
7 CSqlOdbcEnv::SQLSetEnvAttr();
9 Other Functions:
10 CSqlOdbcEnv::CSqlOdbcEnv();
13 #include "odbcCommon.h"
15 // Constructor
16 CSqlOdbcEnv::CSqlOdbcEnv( void ) :
17 handleType_( SQL_HANDLE_ENV ),
18 state_( E1 ),
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 ) );
29 // Static function
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;
38 return( SQL_ERROR );
41 // Allocate Environment.
42 *outputHandle = (SQLHANDLE*) new CSqlOdbcEnv;
43 if( *outputHandle == NULL )
45 globalError.set((int) ERROR_MEMALLOC );
46 globalError.printStr( SQL_OV_ODBC3 );
47 return( SQL_ERROR );
50 return( SQL_SUCCESS );
53 SQLRETURN SQLFreeEnv(
54 SQLHENV EnvironmentHandle)
56 return( CSqlOdbcEnv::SQLFreeHandle( EnvironmentHandle ) );
59 // Static function
60 SQLRETURN CSqlOdbcEnv::SQLFreeHandle(
61 SQLHANDLE inputHandle) // IN
63 CSqlOdbcEnv *inputEnv = (CSqlOdbcEnv*) inputHandle;
65 // Validate handle
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 )
71 return( SQL_ERROR );
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
97 // Start with NO_ERR
98 err_.set( NO_ERR );
100 // Stop if odbcVersion not set.
101 if( odbcVersion_ == 0 )
103 err_.set( ERROR_FUNCSEQ );
104 return( SQL_ERROR );
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 )
118 return( SQL_ERROR );
120 else return ( SQL_ERROR );
121 iter++;
124 return( SQL_SUCCESS );
127 SQLRETURN SQLSetEnvAttr(
128 SQLHENV inputEnv, // IN
129 SQLINTEGER Attribute, // IN
130 SQLPOINTER Value, // IN
131 SQLINTEGER StringLength) // IN
133 // Validate handle
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
145 // Start with NO_ERR
146 err_.set( NO_ERR );
148 // Check whether we can proceed.
149 if( chkStateForSQLSetEnvAttr() != SQL_SUCCESS )
150 return( SQL_ERROR );
152 switch( attribute )
154 case SQL_ATTR_ODBC_VERSION:
155 switch( (SQLINTEGER) value )
157 case SQL_OV_ODBC2:
158 case SQL_OV_ODBC3: break;
159 default:
160 err_.set( ERROR_OPTCHANGE );
161 return( SQL_ERROR );
163 odbcVersion_ = (SQLUINTEGER) value;
164 break;
166 case SQL_ATTR_OUTPUT_NTS:
167 if( (SQLINTEGER) value == SQL_TRUE )
168 return( SQL_SUCCESS );
169 else
171 err_.set( ERROR_OPTFEATURE_NOTIMP );
172 return( SQL_ERROR );
174 break;
176 default: err_.set( ERROR_OPTRANGE );
177 return( SQL_ERROR );
180 return( SQL_SUCCESS );
183 SQLRETURN SQLGetEnvAttr(
184 SQLHENV EnvironmentHandle,
185 SQLINTEGER Attribute,
186 SQLPOINTER Value,
187 SQLINTEGER BufferLength,
188 SQLINTEGER *StringLength)
190 // Validate handle
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,
199 SQLPOINTER value,
200 SQLINTEGER bufferLength,
201 SQLINTEGER *stringLength)
203 // Start with NO_ERR
204 err_.set( NO_ERR );
206 // Can we proceed.? Always ( in all states)
208 switch( attribute )
210 case SQL_ATTR_ODBC_VERSION:
211 *((SQLUINTEGER*) value) = odbcVersion_;
212 break;
214 case SQL_ATTR_OUTPUT_NTS:
215 *((SQLUINTEGER*) value) = SQL_TRUE;
216 break;
218 default: err_.set( ERROR_OPTRANGE );
219 return( SQL_ERROR );
222 return( SQL_SUCCESS );