108{
109 ListedByteStringToByteStringMap map;
110 Connection::splitConnStr(_conns, _connlen, map);
111
112 ByteString _DATABASE = map["DATABASE"];
113 ByteString _USER = map["USER"];
114 ByteString _PASSWORD = map["PASSWORD"];
115 ByteString _MODE = map["MODE"];
116
117 ub4 operationMode = OCI_DEFAULT;
118 if (!_MODE.isEmpty()) {
119 if (!_MODE.compareNoCase("SYSDBA"))
120 operationMode = OCI_SYSDBA;
121 else if (!_MODE.compareNoCase("SYSOPER"))
122 operationMode = OCI_SYSOPER;
123 else {
125 return false;
126 }
127 }
128
129 if (_USER.isEmpty()) {
131 return false;
132 }
133
134 for ( ; ; ) {
135 sword status = OCI_SUCCESS;
136
137
139 status = OCIEnvCreate(
141 OCI_ENV_NO_MUTEX
142 | OCI_THREADED | OCI_OBJECT,
147 0,
149 );
150 if (status != OCI_SUCCESS) {
152 break;
153 }
154 }
155
158 if (status != OCI_SUCCESS) {
160 break;
161 }
162 }
163
165 if (status != OCI_SUCCESS) {
167 break;
168 }
169
171 if (status != OCI_SUCCESS) {
173 break;
174 }
175
177 if (status != OCI_SUCCESS) {
179 break;
180 }
181
183 if (status != OCI_SUCCESS) {
185 break;
186 }
187
189 if (status != OCI_SUCCESS) {
191 break;
192 }
193
194 status = OCIServerAttach(
197 _DATABASE.isEmpty()
198 ?
NULL : (text*)_DATABASE.data(),
199 _DATABASE.isEmpty()
200 ? 0 : (sb4) _DATABASE.length(),
201 OCI_DEFAULT
202 );
203 if (status != OCI_SUCCESS) {
205 break;
206 }
208
209#if defined(__DCL_DEBUG) && __TRACE_THIS
210 char buf[256];
211 status = OCINlsGetInfo(
214 (OraText*)buf,
215 sizeof(buf),
216 OCI_NLS_CHARACTER_SET
217 );
218 if (status == OCI_SUCCESS) {
220 }
221 else {
223 }
224 status = OCINlsGetInfo(
227 (OraText*)buf,
228 sizeof(buf),
229 OCI_NLS_LANGUAGE
230 );
231 if (status == OCI_SUCCESS) {
233 }
234 else {
236 }
237 status = OCINlsGetInfo(
240 (OraText*)buf,
241 sizeof(buf),
242 OCI_NLS_ABLANGUAGE
243 );
244 if (status == OCI_SUCCESS) {
246 }
247 else {
249 }
250 status = OCINlsGetInfo(
253 (OraText*)buf,
254 sizeof(buf),
255 OCI_NLS_TERRITORY
256 );
257 if (status == OCI_SUCCESS) {
259 }
260 else {
262 }
263#endif
264
265 status = OCIAttrSet(
267 OCI_HTYPE_SVCCTX,
269 0,
270 OCI_ATTR_SERVER,
272 );
273 if (status != OCI_SUCCESS) {
275 break;
276 }
277
278 status = OCIAttrSet(
280 OCI_HTYPE_SESSION,
281 (void*)_USER.data(),
282 (ub4) _USER.length(),
283 OCI_ATTR_USERNAME,
285 );
286 if (status != OCI_SUCCESS) {
288 break;
289 }
290
291 status = OCIAttrSet(
293 OCI_HTYPE_SESSION,
294 (void*)_PASSWORD.data(),
295 (ub4) _PASSWORD.length(),
296 OCI_ATTR_PASSWORD,
298 );
299 if (status != OCI_SUCCESS) {
301 break;
302 }
303
304 status = OCISessionBegin(
308 OCI_CRED_RDBMS,
309 operationMode
310 );
311 if (status != OCI_SUCCESS) {
313 break;
314 }
315
317 status = OCIAttrSet(
319 OCI_HTYPE_SVCCTX,
321 0,
322 OCI_ATTR_SERVER,
324 );
325 if (status != OCI_SUCCESS) {
327 break;
328 }
329
330 status = OCIAttrSet(
332 OCI_HTYPE_SVCCTX,
334 0,
335 OCI_ATTR_SESSION,
337 );
338 if (status != OCI_SUCCESS) {
340 break;
341 }
342
343 status = OCIAttrSet(
345 OCI_HTYPE_SVCCTX,
347 0,
348 OCI_ATTR_TRANS,
350 );
351 if (status != OCI_SUCCESS) {
353 break;
354 }
355
356 return true;
357 }
358
359
361 return false;
362}
#define __DCL_TRACE1_N(fmt, arg)
sword HandleAlloc(void **_hndlpp, ub4 _type, size_t _xtramem_sz=0, void **_usrmempp=NULL)
@ eInvalidConnectionString