@@ -84,45 +84,10 @@ try : env_(env), pool_(NULL),
84
84
envh_(envh), errh_(NULL ), auth_(NULL ), svch_(NULL ), sessh_(NULL ),
85
85
hasTxn_(false )
86
86
{
87
- ub4 mode = externalAuth ? OCI_SESSGET_CREDEXT : OCI_DEFAULT;
88
87
89
- ociCallEnv (OCIHandleAlloc ((void *)envh_, (dvoid **)&errh_,
90
- OCI_HTYPE_ERROR, 0 , (dvoid **)0 ), envh_);
91
-
92
- ociCallEnv (OCIHandleAlloc ((void *)envh_, (dvoid **)&auth_,
93
- OCI_HTYPE_AUTHINFO, 0 , (dvoid **)0 ), envh_);
94
-
95
- if (externalAuth)
96
- {
97
- if (password.length () || user.length ())
98
- throw ExceptionImpl (DpiErrExtAuth);
99
- }
100
- else
101
- {
102
- ociCall (OCIAttrSet ((void *)auth_, OCI_HTYPE_AUTHINFO,
103
- (void *)user.data (), (ub4) user.length (),
104
- OCI_ATTR_USERNAME, errh_), errh_);
105
-
106
- ociCall (OCIAttrSet ((void *)auth_, OCI_HTYPE_AUTHINFO,
107
- (void *)password.data (), (ub4) password.length (),
108
- OCI_ATTR_PASSWORD, errh_), errh_);
109
- }
110
-
111
- // If connection class provided, set it on auth handle
112
- if (connClass.length () )
113
- {
114
- ociCall (OCIAttrSet ((void *)auth_, OCI_HTYPE_AUTHINFO,
115
- (void *)connClass.data (), (ub4) connClass.length (),
116
- OCI_ATTR_CONNECTION_CLASS, errh_), errh_);
117
- }
118
-
119
- ociCall (OCISessionGet (envh_, errh_, &svch_, auth_,
120
- (OraText *)connString.data (),
121
- (ub4) connString.length (), NULL , 0 , NULL , NULL , NULL ,
122
- mode), errh_);
123
-
124
- ociCall (OCIAttrGet (svch_, OCI_HTYPE_SVCCTX, &sessh_, 0 ,
125
- OCI_ATTR_SESSION, errh_),errh_);
88
+ this ->initConnImpl ( false , externalAuth, connClass,
89
+ ( OraText * ) connString.data (),
90
+ ( ub4 ) connString.length (), user, password );
126
91
127
92
this ->stmtCacheSize (stmtCacheSize);
128
93
}
@@ -133,8 +98,6 @@ catch (...)
133
98
throw ;
134
99
}
135
100
136
-
137
-
138
101
/* ****************************************************************************/
139
102
/*
140
103
DESCRIPTION
@@ -163,28 +126,8 @@ try : env_(NULL), pool_(pool),
163
126
envh_(envh), errh_(NULL ), auth_(NULL ),
164
127
svch_(NULL ), sessh_(NULL ), hasTxn_(false )
165
128
{
166
- ub4 mode = externalAuth ? (OCI_SESSGET_CREDEXT | OCI_SESSGET_SPOOL) :
167
- OCI_SESSGET_SPOOL;
168
- ociCallEnv (OCIHandleAlloc ((void *)envh_, (dvoid **)&errh_,
169
- OCI_HTYPE_ERROR, 0 , (dvoid **)0 ), envh_);
170
- ociCallEnv (OCIHandleAlloc ((void *)envh_, (dvoid **)&auth_,
171
- OCI_HTYPE_AUTHINFO, 0 , (dvoid **)0 ), envh_);
172
-
173
- // If connection class provided, set it on auth handle
174
- if (connClass.length () )
175
- {
176
- ociCall (OCIAttrSet ((void *)auth_, OCI_HTYPE_AUTHINFO,
177
- (void *)connClass.data (), (ub4) connClass.length (),
178
- OCI_ATTR_CONNECTION_CLASS, errh_), errh_);
179
- }
180
-
181
- ociCall (OCISessionGet (envh_, errh_, &svch_, auth_,
182
- poolName, poolNameLen,
183
- NULL , 0 , NULL , NULL , NULL ,
184
- mode), errh_);
185
-
186
- ociCall (OCIAttrGet (svch_, OCI_HTYPE_SVCCTX, &sessh_, 0 , OCI_ATTR_SESSION,
187
- errh_), errh_);
129
+ this ->initConnImpl ( true , externalAuth, connClass, poolName, poolNameLen,
130
+ " " , " " );
188
131
}
189
132
190
133
catch (...)
@@ -292,6 +235,21 @@ void ConnImpl::stmtCacheSize(unsigned int stmtCacheSize)
292
235
}
293
236
294
237
238
+ /* ****************************************************************************/
239
+ /*
240
+ DESCRIPTION
241
+ Get the DBCHARSET ID
242
+
243
+ PARAMETERS:
244
+ -NONE-
245
+
246
+ RETURNS:
247
+ Byte expansion ratio (int)
248
+ */
249
+ int ConnImpl::getByteExpansionRation ()
250
+ {
251
+ return lxgratio_;
252
+ }
295
253
296
254
/* ****************************************************************************/
297
255
/*
@@ -522,6 +480,91 @@ void ConnImpl::breakExecution()
522
480
PRIVATE METHODS
523
481
---------------------------------------------------------------------------*/
524
482
483
+ /* ****************************************************************************/
484
+ /*
485
+ DESCRIPTION
486
+ Constructor for the ConnImpl class created from an Env object.
487
+
488
+ PARAMETERS:
489
+ pool - This flag says whether pool scenario or not
490
+ externalAuth - flag for externalAuth
491
+ connClass - connClass name
492
+ poolNmRconnStr - poolName or connectString
493
+ user - userid in case of non-pool scenario
494
+ password - password in case of non-pool scenario
495
+
496
+ RETURNS:
497
+ nothing
498
+ */
499
+
500
+ void ConnImpl::initConnImpl ( bool pool, bool externalAuth,
501
+ const string& connClass, OraText *poolNmRconnStr,
502
+ ub4 nameLen, const string &user, const string &password )
503
+ {
504
+ OCIServer *srvh = NULL ;
505
+ ub4 mode = 0 ;
506
+ ub2 csid_ = 0 ;
507
+
508
+ if ( pool )
509
+ mode = externalAuth ? ( OCI_SESSGET_CREDEXT | OCI_SESSGET_SPOOL ) :
510
+ OCI_SESSGET_SPOOL;
511
+ else
512
+ mode = externalAuth ? OCI_SESSGET_CREDEXT : OCI_DEFAULT;
513
+
514
+ ociCallEnv ( OCIHandleAlloc ( ( void * ) envh_, ( dvoid ** )&errh_,
515
+ OCI_HTYPE_ERROR, 0 , ( dvoid ** ) 0 ), envh_ );
516
+
517
+ ociCallEnv ( OCIHandleAlloc ( ( void * ) envh_, ( dvoid ** ) &auth_,
518
+ OCI_HTYPE_AUTHINFO, 0 , ( dvoid ** ) 0 ),
519
+ envh_ );
520
+
521
+ if ( externalAuth && ( !pool ) )
522
+ {
523
+ if ( password.length () || user.length () )
524
+ throw ExceptionImpl ( DpiErrExtAuth );
525
+ }
526
+
527
+ if ( !pool )
528
+ {
529
+ ociCall ( OCIAttrSet ( ( void * ) auth_, OCI_HTYPE_AUTHINFO,
530
+ ( void * ) user.data (), ( ub4 ) user.length (),
531
+ OCI_ATTR_USERNAME, errh_ ), errh_ );
532
+
533
+ ociCall ( OCIAttrSet ( ( void * ) auth_, OCI_HTYPE_AUTHINFO,
534
+ ( void * ) password.data (),
535
+ ( ub4 ) password.length (),
536
+ OCI_ATTR_PASSWORD, errh_ ), errh_ );
537
+ }
538
+
539
+ // If connection class provided, set it on auth handle
540
+ if ( connClass.length () )
541
+ {
542
+ ociCall ( OCIAttrSet ( ( void * ) auth_, OCI_HTYPE_AUTHINFO,
543
+ ( void * ) connClass.data (),
544
+ ( ub4 ) connClass.length (),
545
+ OCI_ATTR_CONNECTION_CLASS, errh_ ), errh_ );
546
+ }
547
+
548
+ ociCall ( OCISessionGet ( envh_, errh_, &svch_, auth_, poolNmRconnStr,
549
+ ( ub4 ) nameLen, NULL , 0 , NULL , NULL , NULL ,
550
+ mode ), errh_ );
551
+
552
+ ociCall ( OCIAttrGet ( svch_, OCI_HTYPE_SVCCTX, &sessh_, 0 ,
553
+ OCI_ATTR_SESSION, errh_ ), errh_ );
554
+
555
+ // Initialize the server handle from service handle
556
+ ociCall ( OCIAttrGet ( svch_, OCI_HTYPE_SVCCTX, ( void * ) &srvh, 0 ,
557
+ ( ub4 ) OCI_ATTR_SERVER, errh_ ), errh_ );
558
+
559
+ // Get the DBCHARSET from server
560
+ ociCall ( OCIAttrGet ( srvh, ( ub4 ) OCI_HTYPE_SERVER, ( void * ) &csid_,
561
+ ( ub4 * ) 0 , ( ub4 ) OCI_ATTR_CHARSET_ID, errh_ ),
562
+ errh_ );
563
+ if ( csid_ == DPI_AL32UTF8 )
564
+ lxgratio_ = 1 ;
565
+ else
566
+ lxgratio_ = 3 ;
567
+ }
525
568
526
569
/* ****************************************************************************/
527
570
/*
0 commit comments