00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include "ocilib_internal.h"
00036
00037
00038
00039
00040 OCI_Library OCILib;
00041
00042 OCI_SQLCmdInfo SQLCmds[OCI_SQLCMD_COUNT] =
00043 {
00044 {OCI_SFC_CREATE_TABLE, MT("CREATE TABLE") },
00045 {OCI_SFC_SET_ROLE, MT("SET ROLE") },
00046 {OCI_SFC_INSERT, MT("INSERT") },
00047 {OCI_SFC_SELECT, MT("SELECT") },
00048 {OCI_SFC_UPDATE, MT("UPDATE") },
00049 {OCI_SFC_DROP_ROLE, MT("DROP ROLE") },
00050 {OCI_SFC_DROP_VIEW, MT("DROP VIEW") },
00051 {OCI_SFC_DROP_TABLE, MT("DROP TABLE") },
00052 {OCI_SFC_DELETE, MT("DELETE") },
00053 {OCI_SFC_CREATE_VIEW, MT("CREATE VIEW") },
00054 {OCI_SFC_DROP_USER, MT("DROP USER") },
00055 {OCI_SFC_CREATE_ROLE, MT("CREATE ROLE") },
00056 {OCI_SFC_CREATE_SEQUENCE, MT("CREATE SEQUENCE") },
00057 {OCI_SFC_ALTER_SEQUENCE, MT("ALTER SEQUENCE") },
00058 {OCI_SFC_DROP_SEQUENCE, MT("DROP SEQUENCE") },
00059 {OCI_SFC_CREATE_SCHEMA, MT("CREATE SCHEMA") },
00060 {OCI_SFC_CREATE_CLUSTER, MT("CREATE CLUSTER") },
00061 {OCI_SFC_CREATE_USER, MT("CREATE USER") },
00062 {OCI_SFC_CREATE_INDEX, MT("CREATE INDEX") },
00063 {OCI_SFC_DROP_INDEX, MT("DROP INDEX") },
00064 {OCI_SFC_DROP_CLUSTER, MT("DROP CLUSTER") },
00065 {OCI_SFC_VALIDATE_INDEX, MT("VALIDATE INDEX") },
00066 {OCI_SFC_CREATE_PROCEDURE, MT("CREATE PROCEDURE") },
00067 {OCI_SFC_ALTER_PROCEDURE, MT("ALTER PROCEDURE") },
00068 {OCI_SFC_ALTER_TABLE, MT("ALTER TABLE") },
00069 {OCI_SFC_EXPLAIN, MT("EXPLAIN") },
00070 {OCI_SFC_GRANT, MT("GRANT") },
00071 {OCI_SFC_REVOKE, MT("REVOKE") },
00072 {OCI_SFC_CREATE_SYNONYM, MT("CREATE SYNONYM") },
00073 {OCI_SFC_DROP_SYNONYM, MT("DROP SYNONYM") },
00074 {OCI_SFC_ALTER_SYSTEM_SWITCHLOG, MT("ALTER SYSTEM SWITCHLOG") },
00075 {OCI_SFC_SET_TRANSACTION, MT("SET TRANSACTION") },
00076 {OCI_SFC_PLSQL_EXECUTE, MT("PL/SQL EXECUTE") },
00077 {OCI_SFC_LOCK, MT("LOCK") },
00078 {OCI_SFC_NOOP, MT("NOOP") },
00079 {OCI_SFC_RENAME, MT("RENAME") },
00080 {OCI_SFC_COMMENT, MT("COMMENT") },
00081 {OCI_SFC_AUDIT, MT("AUDIT") },
00082 {OCI_SFC_NO_AUDIT, MT("NO AUDIT") },
00083 {OCI_SFC_ALTER_INDEX, MT("ALTER INDEX") },
00084 {OCI_SFC_CREATE_EXTERNAL_DATABASE, MT("CREATE EXTERNAL DATABASE") },
00085 {OCI_SFC_DROP_EXTERNALDATABASE, MT("DROP EXTERNALDATABASE") },
00086 {OCI_SFC_CREATE_DATABASE, MT("CREATE DATABASE") },
00087 {OCI_SFC_ALTER_DATABASE, MT("ALTER DATABASE") },
00088 {OCI_SFC_CREATE_ROLLBACK_SEGMENT, MT("CREATE ROLLBACK SEGMENT") },
00089 {OCI_SFC_ALTER_ROLLBACK_SEGMENT, MT("ALTER ROLLBACK SEGMENT") },
00090 {OCI_SFC_DROP_ROLLBACK_SEGMENT, MT("DROP ROLLBACK SEGMENT") },
00091 {OCI_SFC_CREATE_TABLESPACE, MT("CREATE TABLESPACE") },
00092 {OCI_SFC_ALTER_TABLESPACE, MT("ALTER TABLESPACE") },
00093 {OCI_SFC_DROP_TABLESPACE, MT("DROP TABLESPACE") },
00094 {OCI_SFC_ALTER_SESSION, MT("ALTER SESSION") },
00095 {OCI_SFC_ALTER_USER, MT("ALTER USER") },
00096 {OCI_SFC_COMMIT_WORK, MT("COMMIT (WORK)") },
00097 {OCI_SFC_ROLLBACK, MT("ROLLBACK") },
00098 {OCI_SFC_SAVEPOINT, MT("SAVEPOINT") },
00099 {OCI_SFC_CREATE_CONTROL_FILE, MT("CREATE CONTROL FILE") },
00100 {OCI_SFC_ALTER_TRACING, MT("ALTER TRACING") },
00101 {OCI_SFC_CREATE_TRIGGER, MT("CREATE TRIGGER") },
00102 {OCI_SFC_ALTER_TRIGGER, MT("ALTER TRIGGER") },
00103 {OCI_SFC_DROP_TRIGGER, MT("DROP TRIGGER") },
00104 {OCI_SFC_ANALYZE_TABLE, MT("ANALYZE TABLE") },
00105 {OCI_SFC_ANALYZE_INDEX, MT("ANALYZE INDEX") },
00106 {OCI_SFC_ANALYZE_CLUSTER, MT("ANALYZE CLUSTER") },
00107 {OCI_SFC_CREATE_PROFILE, MT("CREATE PROFILE") },
00108 {OCI_SFC_DROP_PROFILE, MT("DROP PROFILE") },
00109 {OCI_SFC_ALTER_PROFILE, MT("ALTER PROFILE") },
00110 {OCI_SFC_DROP_PROCEDURE, MT("DROP PROCEDURE") },
00111 {OCI_SFC_ALTER_RESOURCE_COST, MT("ALTER RESOURCE COST") },
00112 {OCI_SFC_CREATE_SNAPSHOT_LOG, MT("CREATE SNAPSHOT LOG") },
00113 {OCI_SFC_ALTER_SNAPSHOT_LOG, MT("ALTER SNAPSHOT LOG") },
00114 {OCI_SFC_DROP_SNAPSHOT_LOG, MT("DROP SNAPSHOT LOG") },
00115 {OCI_SFC_DROP_SUMMARY, MT("DROP SUMMARY") },
00116 {OCI_SFC_CREATE_SNAPSHOT, MT("CREATE SNAPSHOT") },
00117 {OCI_SFC_ALTER_SNAPSHOT, MT("ALTER SNAPSHOT") },
00118 {OCI_SFC_DROP_SNAPSHOT, MT("DROP SNAPSHOT") },
00119 {OCI_SFC_CREATE_TYPE, MT("CREATE TYPE") },
00120 {OCI_SFC_DROP_TYPE, MT("DROP TYPE") },
00121 {OCI_SFC_ALTER_ROLE, MT("ALTER ROLE") },
00122 {OCI_SFC_ALTER_TYPE, MT("ALTER TYPE") },
00123 {OCI_SFC_CREATE_TYPE_BODY, MT("CREATE TYPE BODY") },
00124 {OCI_SFC_ALTER_TYPE_BODY, MT("ALTER TYPE BODY") },
00125 {OCI_SFC_DROP_TYPE_BODY, MT("DROP TYPE BODY") },
00126 {OCI_SFC_DROP_LIBRARY, MT("DROP LIBRARY") },
00127 {OCI_SFC_TRUNCATE_TABLE, MT("TRUNCATE TABLE") },
00128 {OCI_SFC_TRUNCATE_CLUSTER, MT("TRUNCATE CLUSTER") },
00129 {OCI_SFC_CREATE_BITMAPFILE, MT("CREATE BITMAPFILE") },
00130 {OCI_SFC_ALTER_VIEW, MT("ALTER VIEW") },
00131 {OCI_SFC_DROP_BITMAPFILE, MT("DROP BITMAPFILE") },
00132 {OCI_SFC_SET_CONSTRAINTS, MT("SET CONSTRAINTS") },
00133 {OCI_SFC_CREATE_FUNCTION, MT("CREATE FUNCTION") },
00134 {OCI_SFC_ALTER_FUNCTION, MT("ALTER FUNCTION") },
00135 {OCI_SFC_DROP_FUNCTION, MT("DROP FUNCTION") },
00136 {OCI_SFC_CREATE_PACKAGE, MT("CREATE PACKAGE") },
00137 {OCI_SFC_ALTER_PACKAGE, MT("ALTER PACKAGE") },
00138 {OCI_SFC_DROP_PACKAGE, MT("DROP PACKAGE") },
00139 {OCI_SFC_CREATE_PACKAGE_BODY, MT("CREATE PACKAGE BODY") },
00140 {OCI_SFC_ALTER_PACKAGE_BODY, MT("ALTER PACKAGE BODY") },
00141 {OCI_SFC_DROP_PACKAGE_BODY, MT("DROP PACKAGE BODY") },
00142 {OCI_SFC_CREATE_DIRECTORY, MT("CREATE DIRECTORY") },
00143 {OCI_SFC_DROP_DIRECTORY, MT("DROP DIRECTORY") },
00144 {OCI_SFC_CREATE_LIBRARY, MT("CREATE LIBRARY") },
00145 {OCI_SFC_CREATE_JAVA, MT("CREATE JAVA") },
00146 {OCI_SFC_ALTER_JAVA, MT("ALTER JAVA") },
00147 {OCI_SFC_DROP_JAVA, MT("DROP JAVA") },
00148 {OCI_SFC_CREATE_OPERATOR, MT("CREATE OPERATOR") },
00149 {OCI_SFC_CREATE_INDEXTYPE, MT("CREATE INDEXTYPE") },
00150 {OCI_SFC_DROP_INDEXTYPE, MT("DROP INDEXTYPE") },
00151 {OCI_SFC_ALTER_INDEXTYPE, MT("ALTER INDEXTYPE") },
00152 {OCI_SFC_DROP_OPERATOR, MT("DROP OPERATOR") },
00153 {OCI_SFC_ASSOCIATE_STATISTICS, MT("ASSOCIATE STATISTICS") },
00154 {OCI_SFC_DISASSOCIATE_STATISTICS, MT("DISASSOCIATE STATISTICS") },
00155 {OCI_SFC_CALL_METHOD, MT("CALL METHOD") },
00156 {OCI_SFC_CREATE_SUMMARY, MT("CREATE SUMMARY") },
00157 {OCI_SFC_ALTER_SUMMARY, MT("ALTER SUMMARY") },
00158 {OCI_SFC_CREATE_DIMENSION, MT("CREATE DIMENSION") },
00159 {OCI_SFC_ALTER_DIMENSION, MT("ALTER DIMENSION") },
00160 {OCI_SFC_DROP_DIMENSION, MT("DROP DIMENSION") },
00161 {OCI_SFC_CREATE_CONTEXT, MT("CREATE CONTEXT") },
00162 {OCI_SFC_DROP_CONTEXT, MT("DROP CONTEXT") },
00163 {OCI_SFC_ALTER_OUTLINE, MT("ALTER OUTLINE") },
00164 {OCI_SFC_CREATE_OUTLINE, MT("CREATE OUTLINE") },
00165 {OCI_SFC_DROP_OUTLINE, MT("DROP OUTLINE") },
00166 {OCI_SFC_UPDATE_INDEXES, MT("UPDATE INDEXES") },
00167 {OCI_SFC_ALTER_OPERATOR, MT("ALTER OPERATOR") }
00168 };
00169
00170 #ifdef OCI_IMPORT_RUNTIME
00171
00172
00173
00174 OCIENVCREATE OCIEnvCreate = NULL;
00175 OCISERVERATTACH OCIServerAttach = NULL;
00176 OCISERVERDETACH OCIServerDetach = NULL;
00177 OCIHANDLEALLOC OCIHandleAlloc = NULL;
00178 OCIHANDLEFREE OCIHandleFree = NULL;
00179 OCIDESCRIPTORALLOC OCIDescriptorAlloc = NULL;
00180 OCIDESCRIPTORFREE OCIDescriptorFree = NULL;
00181 OCISESSIONBEGIN OCISessionBegin = NULL;
00182 OCISESSIONEND OCISessionEnd = NULL;
00183 OCIPASSWORDCHANGE OCIPasswordChange = NULL;
00184 OCIBINDBYPOS OCIBindByPos = NULL;
00185 OCIBINDBYNAME OCIBindByName = NULL;
00186 OCIBINDDYNAMIC OCIBindDynamic = NULL;
00187 OCIBINDOBJECT OCIBindObject = NULL;
00188 OCIDEFINEBYPOS OCIDefineByPos = NULL;
00189 OCIDEFINEOBJECT OCIDefineObject = NULL;
00190 OCISTMTPREPARE OCIStmtPrepare = NULL;
00191 OCISTMTEXECUTE OCIStmtExecute = NULL;
00192 OCISTMTFETCH OCIStmtFetch = NULL;
00193 OCISTMTFETCH2 OCIStmtFetch2 = NULL;
00194 OCISTMTGETPIECEINFO OCIStmtGetPieceInfo = NULL;
00195 OCISTMTSETPIECEINFO OCIStmtSetPieceInfo = NULL;
00196 OCIPARAMGET OCIParamGet = NULL;
00197 OCIPARAMSET OCIParamSet = NULL;
00198 OCITRANSSTART OCITransStart = NULL;
00199 OCITRANSDETACH OCITransDetach = NULL;
00200 OCITRANSPREPARE OCITransPrepare = NULL;
00201 OCITRANSFORGET OCITransForget = NULL;
00202 OCITRANSCOMMIT OCITransCommit = NULL;
00203 OCITRANSROLLBACK OCITransRollback = NULL;
00204 OCIERRORGET OCIErrorGet = NULL;
00205 OCILOBCREATETEMPORARY OCILobCreateTemporary = NULL;
00206 OCILOBFREETEMPORARY OCILobFreeTemporary = NULL;
00207 OCILOBISTEMPORARY OCILobIsTemporary = NULL;
00208 OCILOBAPPEND OCILobAppend = NULL;
00209 OCILOBCOPY OCILobCopy = NULL;
00210 OCILOBGETLENGTH OCILobGetLength = NULL;
00211 OCILOBGETCHUNKSIZE OCILobGetChunkSize = NULL;
00212 OCILOBREAD OCILobRead = NULL;
00213 OCILOBWRITE OCILobWrite = NULL;
00214 OCILOBTRIM OCILobTrim = NULL;
00215 OCILOBERASE OCILobErase = NULL;
00216 OCILOBOPEN OCILobOpen = NULL;
00217 OCILOBCLOSE OCILobClose = NULL;
00218 OCILOBLOCATORASSIGN OCILobLocatorAssign = NULL;
00219 OCILOBASSIGN OCILobAssign = NULL;
00220 OCILOBISEQUAL OCILobIsEqual = NULL;
00221 OCILOBFLUSHBUFFER OCILobFlushBuffer = NULL;
00222 OCILOBENABLEBUFFERING OCILobEnableBuffering = NULL;
00223 OCILOBDISABLEBUFFERING OCILobDisableBuffering = NULL;
00224 OCILOBGETSTORAGELIMIT OCILobGetStorageLimit = NULL;
00225 OCILOBFILEOPEN OCILobFileOpen = NULL;
00226 OCILOBFILECLOSE OCILobFileClose = NULL;
00227 OCILOBFILECLOSEALL OCILobFileCloseAll = NULL;
00228 OCILOBFILEISOPEN OCILobFileIsOpen = NULL;
00229 OCILOBFILEEXISTS OCILobFileExists = NULL;
00230 OCILOBFIELGETNAME OCILobFileGetName = NULL;
00231 OCILOBFILESETNAME OCILobFileSetName = NULL;
00232 OCILOBLOADFROMFILE OCILobLoadFromFile = NULL;
00233 OCILOBWRITEAPPEND OCILobWriteAppend = NULL;
00234 OCISERVERVERSION OCIServerVersion = NULL;
00235 OCIBREAK OCIBreak = NULL;
00236 OCIATTRGET OCIAttrGet = NULL;
00237 OCIATTRSET OCIAttrSet = NULL;
00238 OCIDATEASSIGN OCIDateAssign = NULL;
00239 OCIDATETOTEXT OCIDateToText = NULL;
00240 OCIDATEFROMTEXT OCIDateFromText = NULL;
00241 OCIDATECOMPARE OCIDateCompare = NULL;
00242 OCIDATEADDMONTHS OCIDateAddMonths = NULL;
00243 OCIDATEADDDAYS OCIDateAddDays = NULL;
00244 OCIDATELASTDAY OCIDateLastDay = NULL;
00245 OCIDATEDAYSBETWEEN OCIDateDaysBetween = NULL;
00246 OCIDATEZONETOZONE OCIDateZoneToZone = NULL;
00247 OCIDATENEXTDAY OCIDateNextDay = NULL;
00248 OCIDATECHECK OCIDateCheck = NULL;
00249 OCIDATESYSDATE OCIDateSysDate = NULL;
00250 OCIDESCRIBEANY OCIDescribeAny = NULL;
00251 OCIINTERVALASSIGN OCIIntervalAssign = NULL;
00252 OCIINTERVALCHECK OCIIntervalCheck = NULL;
00253 OCIINTERVALCOMPARE OCIIntervalCompare = NULL;
00254 OCIINTERVALFROMTEXT OCIIntervalFromText = NULL;
00255 OCIINTERVALTOTEXT OCIIntervalToText = NULL;
00256 OCIINTERVALFROMTZ OCIIntervalFromTZ = NULL;
00257 OCIINTERVALGETDAYSECOND OCIIntervalGetDaySecond = NULL;
00258 OCIINTERVALGETYEARMONTH OCIIntervalGetYearMonth = NULL;
00259 OCIINTERVALSETDAYSECOND OCIIntervalSetDaySecond = NULL;
00260 OCIINTERVALSETYEARMONTH OCIIntervalSetYearMonth = NULL;
00261 OCIINTERVALSUBTRACT OCIIntervalSubtract = NULL;
00262 OCIINTERVALADD OCIIntervalAdd = NULL;
00263 OCIDATETIMEASSIGN OCIDateTimeAssign = NULL;
00264 OCIDATETIMECHECK OCIDateTimeCheck = NULL;
00265 OCIDATETIMECOMPARE OCIDateTimeCompare = NULL;
00266 OCIDATETIMECONSTRUCT OCIDateTimeConstruct = NULL;
00267 OCIDATETIMECONVERT OCIDateTimeConvert = NULL;
00268 OCIDATETIMEFROMARRAY OCIDateTimeFromArray = NULL;
00269 OCIDATETIMETOARRAY OCIDateTimeToArray = NULL;
00270 OCIDATETIMEFROMTEXT OCIDateTimeFromText = NULL;
00271 OCIDATETIMETOTEXT OCIDateTimeToText = NULL;
00272 OCIDATETIMEGETDATE OCIDateTimeGetDate = NULL;
00273 OCIDATETIMEGETTIME OCIDateTimeGetTime = NULL;
00274 OCIDATETIMEGETTIMEZONENAME OCIDateTimeGetTimeZoneName = NULL;
00275 OCIDATETIMEGETTIMEZONEOFFSET OCIDateTimeGetTimeZoneOffset = NULL;
00276 OCIDATETIMEINTERVALADD OCIDateTimeIntervalAdd = NULL;
00277 OCIDATETIMEINTERVALSUB OCIDateTimeIntervalSub = NULL;
00278 OCIDATETIMESUBTRACT OCIDateTimeSubtract = NULL;
00279 OCIDATETIMESYSTIMESTAMP OCIDateTimeSysTimeStamp = NULL;
00280 OCIARRAYDESCRIPTORALLOC OCIArrayDescriptorAlloc = NULL;
00281 OCIARRAYDESCRIPTORFREE OCIArrayDescriptorFree = NULL;
00282 OCICLIENTVERSION OCIClientVersion = NULL;
00283 OCITYPEBYNAME OCITypeByName = NULL;
00284 OCINUMBERTOINT OCINumberToInt = NULL;
00285 OCINUMBERFROMINT OCINumberFromInt = NULL;
00286 OCINUMBERTOREAL OCINumberToReal = NULL;
00287 OCINUMBERFROMREAL OCINumberFromReal = NULL;
00288 OCINUMBERTOTEXT OCINumberToText = NULL;
00289 OCINUMBERFROMTEXT OCINumberFromText = NULL;
00290 OCISTRINGPTR OCIStringPtr = NULL;
00291 OCISTRINGASSIGNTEXT OCIStringAssignText = NULL;
00292 OCIRAWPTR OCIRawPtr = NULL;
00293 OCIRAWASSIGNBYTES OCIRawAssignBytes = NULL;
00294 OCIRAWALLOCSIZE OCIRawAllocSize = NULL;
00295 OCIRAWSIZE OCIRawSize = NULL;
00296 OCIOBJECTNEW OCIObjectNew = NULL;
00297 OCIOBJECTFREE OCIObjectFree = NULL;
00298 OCIOBJECTSETATTR OCIObjectSetAttr = NULL;
00299 OCIOBJECTGETATTR OCIObjectGetAttr = NULL;
00300 OCIOBJECTPIN OCIObjectPin = NULL;
00301 OCIOBJECTUNPIN OCIObjectUnpin = NULL;
00302 OCIOBJECTCOPY OCIObjectCopy = NULL;
00303 OCIOBJECTGETOBJECTREF OCIObjectGetObjectRef = NULL;
00304 OCIOBJECTGETPROPERTY OCIObjectGetProperty = NULL;
00305 OCIOBJECTGETIND OCIObjectGetInd = NULL;
00306 OCIREFASSIGN OCIRefAssign = NULL;
00307 OCIREFISNULL OCIRefIsNull = NULL;
00308 OCIREFCLEAR OCIRefClear = NULL;
00309 OCIREFTOHEX OCIRefToHex = NULL;
00310 OCIREFHEXSIZE OCIRefHexSize = NULL;
00311 OCITHREADPROCESSINIT OCIThreadProcessInit = NULL;
00312 OCITHREADINIT OCIThreadInit = NULL;
00313 OCITHREADTERM OCIThreadTerm = NULL;
00314 OCITHREADIDINIT OCIThreadIdInit = NULL;
00315 OCITHREADIDDESTROY OCIThreadIdDestroy = NULL;
00316 OCITHREADHNDINIT OCIThreadHndInit = NULL;
00317 OCITHREADHNDDESTROY OCIThreadHndDestroy = NULL;
00318 OCITHREADCREATE OCIThreadCreate = NULL;
00319 OCITHREADJOIN OCIThreadJoin = NULL;
00320 OCITHREADCLOSE OCIThreadClose = NULL;
00321 OCITHREADMUTEXINIT OCIThreadMutexInit = NULL;
00322 OCITHREADMUTEXDESTROY OCIThreadMutexDestroy = NULL;
00323 OCITHREADMUTEXACQUIRE OCIThreadMutexAcquire = NULL;
00324 OCITHREADMUTEXRELEASE OCIThreadMutexRelease = NULL;
00325 OCITHREADKEYINIT OCIThreadKeyInit = NULL;
00326 OCITHREADKEYDESTROY OCIThreadKeyDestroy = NULL;
00327 OCITHREADKEYSET OCIThreadKeySet = NULL;
00328 OCITHREADKEYGET OCIThreadKeyGet = NULL;
00329 OCICONNECTIONPOOLCREATE OCIConnectionPoolCreate = NULL;
00330 OCICONNECTIONPOOLDESTROY OCIConnectionPoolDestroy = NULL;
00331 OCISESSIONPOOLCREATE OCISessionPoolCreate = NULL;
00332 OCISESSIONPOOLDESTROY OCISessionPoolDestroy = NULL;
00333 OCISESSIONGET OCISessionGet = NULL;
00334 OCISESSIONRELEASE OCISessionRelease = NULL;
00335 OCICOLLSIZE OCICollSize = NULL;
00336 OCICOLLMAX OCICollMax = NULL;
00337 OCICOLLGETITEM OCICollGetElem = NULL;
00338 OCICOLLASSIGNELEM OCICollAssignElem = NULL;
00339 OCICOLLASSIGN OCICollAssign = NULL;
00340 OCICOLLAPPEND OCICollAppend = NULL;
00341 OCICOLLTRIM OCICollTrim = NULL;
00342 OCIITERCREATE OCIIterCreate = NULL;
00343 OCIITERDELETE OCIIterDelete = NULL;
00344 OCIITERINIT OCIIterInit = NULL;
00345 OCIITERNEXT OCIIterNext = NULL;
00346 OCIITERPREV OCIIterPrev = NULL;
00347 OCIDIRPATHABORT OCIDirPathAbort = NULL;
00348 OCIDIRPATHDATASAVE OCIDirPathDataSave = NULL;
00349 OCIDIRPATHFINISH OCIDirPathFinish = NULL;
00350 OCIDIRPATHPREPARE OCIDirPathPrepare = NULL;
00351 OCIDIRPATHLOADSTREAM OCIDirPathLoadStream = NULL;
00352 OCIDIRPATHCOLARRAYENTRYSET OCIDirPathColArrayEntrySet = NULL;
00353 OCIDIRPATHCOLARRAYRESET OCIDirPathColArrayReset = NULL;
00354 OCIDIRPATHCOLARRAYTOSTREAM OCIDirPathColArrayToStream = NULL;
00355 OCIDIRPATHSTREAMRESET OCIDirPathStreamReset = NULL;
00356 OCIDIRPATHFLUSHROW OCIDirPathFlushRow = NULL;
00357 OCICACHEFREE OCICacheFree = NULL;
00358 OCIPING OCIPing = NULL;
00359
00360 OCIDBSTARTUP OCIDBStartup = NULL;
00361 OCIDBSHUTDOWN OCIDBShutdown = NULL;
00362
00363 OCISTMTPREPARE2 OCIStmtPrepare2 = NULL;
00364 OCISTMTRELEASE OCIStmtRelease = NULL;
00365
00366 OCISUBSCRIPTIONREGISTER OCISubscriptionRegister = NULL;
00367 OCISUBSCRIPTIONUNREGISTER OCISubscriptionUnRegister = NULL;
00368
00369 OCIAQENQ OCIAQEnq = NULL;
00370 OCIAQDEQ OCIAQDeq = NULL;
00371 OCIAQLISTEN OCIAQListen = NULL;
00372
00373 #ifdef ORAXB8_DEFINED
00374
00375 OCILOBCOPY2 OCILobCopy2 = NULL;
00376 OCILOBERASE2 OCILobErase2 = NULL;
00377 OCILOBGETLENGTH2 OCILobGetLength2 = NULL;
00378 OCILOBLOADFROMFILE2 OCILobLoadFromFile2 = NULL;
00379 OCILOBREAD2 OCILobRead2 = NULL;
00380 OCILOBTRIM2 OCILobTrim2 = NULL;
00381 OCILOBWRITE2 OCILobWrite2 = NULL;
00382 OCILOBWRITEAPPEND2 OCILobWriteAppend2 = NULL;
00383
00384 #endif
00385
00386 #endif
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396 boolean OCI_KeyMapFree
00397 (
00398 void
00399 )
00400 {
00401 boolean res = TRUE;
00402 OCI_HashEntry *e = NULL;
00403 OCI_HashValue *v = NULL;
00404 int i, n, nb_err = 0;
00405
00406 OCI_CHECK(OCILib.key_map == NULL, TRUE)
00407
00408 n = OCI_HashGetSize(OCILib.key_map);
00409
00410 for (i = 0; i < n; i++)
00411 {
00412 e = OCI_HashGetEntry(OCILib.key_map, i);
00413
00414 while (e != NULL)
00415 {
00416 v = e->values;
00417
00418 while (v != NULL)
00419 {
00420 if (FALSE == OCI_ThreadKeyFree((OCI_ThreadKey *) (v->value.p_void)))
00421 nb_err++;
00422
00423 v = v->next;
00424 }
00425
00426 e = e->next;
00427 }
00428 }
00429
00430 res = (OCI_HashFree(OCILib.key_map) && (nb_err == 0));
00431
00432 OCILib.key_map = NULL;
00433
00434 return res;
00435 }
00436
00437
00438
00439
00440
00441 void OCI_SetStatus
00442 (
00443 boolean res
00444 )
00445 {
00446 OCI_Error *err = OCI_ErrorGet(FALSE, FALSE);
00447
00448 if (err != NULL)
00449 {
00450 err->raise = (res == FALSE);
00451 }
00452 }
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462 boolean OCI_API OCI_Initialize
00463 (
00464 POCI_ERROR err_handler,
00465 const mtext *lib_path,
00466 unsigned int mode
00467 )
00468 {
00469 boolean res = TRUE;
00470 ub4 oci_mode = OCI_ENV_MODE | OCI_OBJECT;
00471
00472 #ifdef OCI_IMPORT_RUNTIME
00473
00474 char path[OCI_SIZE_BUFFER+1];
00475
00476 size_t len = (size_t) 0;
00477
00478 #endif
00479
00480
00481
00482 if (OCILib.loaded == TRUE)
00483 return TRUE;
00484
00485 memset(&OCILib, 0, sizeof(OCI_Library));
00486
00487 OCILib.error_handler = err_handler;
00488
00489 OCILib.version_compile = OCI_VERSION_COMPILE;
00490 OCILib.version_runtime = OCI_VERSION_RUNTIME;
00491
00492 OCILib.env_mode = mode;
00493
00494 #ifdef OCI_CHARSET_ANSI
00495
00496
00497
00498 {
00499 char *str = getenv("NLS_LANG");
00500
00501 if (str != NULL)
00502 {
00503 char nls_lang[OCI_SIZE_OBJ_NAME+1] = "";
00504
00505 strncat(nls_lang, str, OCI_SIZE_OBJ_NAME);
00506
00507 for (str = nls_lang; *str != 0; str++)
00508 *str = (char) toupper(*str);
00509
00510 OCILib.nls_utf8 = (strstr(nls_lang, "UTF8") != NULL);
00511 }
00512 }
00513
00514 #endif
00515
00516 #ifdef OCI_IMPORT_LINKAGE
00517
00518 OCI_NOT_USED(lib_path);
00519
00520 #if defined(OCI_BIG_UINT_ENABLED)
00521
00522 OCILib.use_lob_ub8 = TRUE;
00523
00524 #endif
00525
00526 #if defined(OCI_STMT_SCROLLABLE_READONLY)
00527
00528 OCILib.use_scrollable_cursors = TRUE;
00529
00530 #endif
00531
00532 #else
00533
00534 memset(path, 0, sizeof(path));
00535
00536 #if defined(OCI_CHARSET_WIDE)
00537
00538 if (lib_path != NULL && lib_path[0] != 0)
00539 len = wcstombs(path, lib_path, sizeof(path));
00540
00541 #else
00542
00543 if (lib_path != NULL && lib_path[0] != 0)
00544 {
00545 strncat(path, lib_path, sizeof(path));
00546
00547 len = strlen(path);
00548 }
00549
00550 #endif
00551
00552 if ((len > (size_t) 0) &&
00553 (len < sizeof(path)) &&
00554 (path[len - (size_t) 1] != OCI_CHAR_SLASH))
00555 {
00556 path[len] = OCI_CHAR_SLASH;
00557 len++;
00558 }
00559
00560 strncat(path, OCI_DL_ANSI_NAME, sizeof(path) - len);
00561
00562 OCILib.lib_handle = LIB_OPEN(path);
00563
00564 if (OCILib.lib_handle != NULL)
00565 {
00566
00567
00568
00569
00570
00571
00572 LIB_SYMBOL(OCILib.lib_handle, "OCIEnvCreate", OCIEnvCreate,
00573 OCIENVCREATE);
00574
00575 LIB_SYMBOL(OCILib.lib_handle, "OCIServerAttach", OCIServerAttach,
00576 OCISERVERATTACH);
00577 LIB_SYMBOL(OCILib.lib_handle, "OCIServerDetach", OCIServerDetach,
00578 OCISERVERDETACH);
00579
00580 LIB_SYMBOL(OCILib.lib_handle, "OCIHandleAlloc", OCIHandleAlloc,
00581 OCIHANDLEALLOC);
00582 LIB_SYMBOL(OCILib.lib_handle, "OCIHandleFree", OCIHandleFree,
00583 OCIHANDLEFREE);
00584
00585 LIB_SYMBOL(OCILib.lib_handle, "OCIDescriptorAlloc", OCIDescriptorAlloc,
00586 OCIDESCRIPTORALLOC);
00587 LIB_SYMBOL(OCILib.lib_handle, "OCIDescriptorFree", OCIDescriptorFree,
00588 OCIDESCRIPTORFREE);
00589
00590 LIB_SYMBOL(OCILib.lib_handle, "OCIAttrSet", OCIAttrSet,
00591 OCIATTRSET);
00592 LIB_SYMBOL(OCILib.lib_handle, "OCIAttrGet", OCIAttrGet,
00593 OCIATTRGET);
00594
00595 LIB_SYMBOL(OCILib.lib_handle, "OCIParamSet", OCIParamSet,
00596 OCIPARAMSET);
00597 LIB_SYMBOL(OCILib.lib_handle, "OCIParamGet", OCIParamGet,
00598 OCIPARAMGET);
00599
00600 LIB_SYMBOL(OCILib.lib_handle, "OCISessionBegin", OCISessionBegin,
00601 OCISESSIONBEGIN);
00602 LIB_SYMBOL(OCILib.lib_handle, "OCISessionEnd", OCISessionEnd,
00603 OCISESSIONEND);
00604
00605 LIB_SYMBOL(OCILib.lib_handle, "OCIPasswordChange", OCIPasswordChange,
00606 OCIPASSWORDCHANGE);
00607
00608 LIB_SYMBOL(OCILib.lib_handle, "OCITransStart", OCITransStart,
00609 OCITRANSSTART);
00610 LIB_SYMBOL(OCILib.lib_handle, "OCITransDetach", OCITransDetach,
00611 OCITRANSDETACH);
00612 LIB_SYMBOL(OCILib.lib_handle, "OCITransPrepare", OCITransPrepare,
00613 OCITRANSPREPARE);
00614 LIB_SYMBOL(OCILib.lib_handle, "OCITransForget", OCITransForget,
00615 OCITRANSFORGET);
00616 LIB_SYMBOL(OCILib.lib_handle, "OCITransCommit", OCITransCommit,
00617 OCITRANSCOMMIT);
00618 LIB_SYMBOL(OCILib.lib_handle, "OCITransRollback", OCITransRollback,
00619 OCITRANSROLLBACK);
00620
00621 LIB_SYMBOL(OCILib.lib_handle, "OCIErrorGet", OCIErrorGet,
00622 OCIERRORGET);
00623 LIB_SYMBOL(OCILib.lib_handle, "OCIServerVersion", OCIServerVersion,
00624 OCISERVERVERSION);
00625 LIB_SYMBOL(OCILib.lib_handle, "OCIBreak", OCIBreak,
00626 OCIBREAK);
00627
00628 LIB_SYMBOL(OCILib.lib_handle, "OCIBindByPos", OCIBindByPos,
00629 OCIBINDBYPOS);
00630 LIB_SYMBOL(OCILib.lib_handle, "OCIBindByName", OCIBindByName,
00631 OCIBINDBYNAME);
00632 LIB_SYMBOL(OCILib.lib_handle, "OCIBindDynamic", OCIBindDynamic,
00633 OCIBINDDYNAMIC);
00634 LIB_SYMBOL(OCILib.lib_handle, "OCIBindObject", OCIBindObject,
00635 OCIBINDOBJECT);
00636
00637 LIB_SYMBOL(OCILib.lib_handle, "OCIDefineByPos", OCIDefineByPos,
00638 OCIDEFINEBYPOS);
00639 LIB_SYMBOL(OCILib.lib_handle, "OCIDefineObject", OCIDefineObject,
00640 OCIDEFINEOBJECT);
00641
00642 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtPrepare", OCIStmtPrepare,
00643 OCISTMTPREPARE);
00644 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtExecute", OCIStmtExecute,
00645 OCISTMTEXECUTE);
00646 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtFetch", OCIStmtFetch,
00647 OCISTMTFETCH);
00648 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtFetch2", OCIStmtFetch2,
00649 OCISTMTFETCH2);
00650
00651 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtGetPieceInfo", OCIStmtGetPieceInfo,
00652 OCISTMTGETPIECEINFO);
00653 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtSetPieceInfo", OCIStmtSetPieceInfo,
00654 OCISTMTSETPIECEINFO);
00655
00656 LIB_SYMBOL(OCILib.lib_handle, "OCILobCreateTemporary", OCILobCreateTemporary,
00657 OCILOBCREATETEMPORARY);
00658 LIB_SYMBOL(OCILib.lib_handle, "OCILobFreeTemporary", OCILobFreeTemporary,
00659 OCILOBFREETEMPORARY);
00660 LIB_SYMBOL(OCILib.lib_handle, "OCILobIsTemporary", OCILobIsTemporary,
00661 OCILOBISTEMPORARY);
00662 LIB_SYMBOL(OCILib.lib_handle, "OCILobRead", OCILobRead,
00663 OCILOBREAD);
00664 LIB_SYMBOL(OCILib.lib_handle, "OCILobWrite", OCILobWrite,
00665 OCILOBWRITE);
00666 LIB_SYMBOL(OCILib.lib_handle, "OCILobCopy", OCILobCopy,
00667 OCILOBCOPY);
00668 LIB_SYMBOL(OCILib.lib_handle, "OCILobTrim", OCILobTrim,
00669 OCILOBTRIM);
00670 LIB_SYMBOL(OCILib.lib_handle, "OCILobErase", OCILobErase,
00671 OCILOBERASE);
00672 LIB_SYMBOL(OCILib.lib_handle, "OCILobAppend", OCILobAppend,
00673 OCILOBAPPEND);
00674 LIB_SYMBOL(OCILib.lib_handle, "OCILobGetLength", OCILobGetLength,
00675 OCILOBGETLENGTH);
00676 LIB_SYMBOL(OCILib.lib_handle, "OCILobGetChunkSize", OCILobGetChunkSize,
00677 OCILOBGETCHUNKSIZE);
00678 LIB_SYMBOL(OCILib.lib_handle, "OCILobOpen", OCILobOpen,
00679 OCILOBOPEN);
00680 LIB_SYMBOL(OCILib.lib_handle, "OCILobClose", OCILobClose,
00681 OCILOBCLOSE);
00682
00683 #ifdef ORAXB8_DEFINED
00684
00685 LIB_SYMBOL(OCILib.lib_handle, "OCILobCopy2", OCILobCopy2,
00686 OCILOBCOPY2);
00687 LIB_SYMBOL(OCILib.lib_handle, "OCILobErase2", OCILobErase2,
00688 OCILOBERASE2);
00689 LIB_SYMBOL(OCILib.lib_handle, "OCILobGetLength2", OCILobGetLength2,
00690 OCILOBGETLENGTH2);
00691 LIB_SYMBOL(OCILib.lib_handle, "OCILobLoadFromFile2", OCILobLoadFromFile2,
00692 OCILOBLOADFROMFILE2);
00693 LIB_SYMBOL(OCILib.lib_handle, "OCILobRead2", OCILobRead2,
00694 OCILOBREAD2);
00695 LIB_SYMBOL(OCILib.lib_handle, "OCILobTrim2", OCILobTrim2,
00696 OCILOBTRIM2);
00697 LIB_SYMBOL(OCILib.lib_handle, "OCILobWrite2", OCILobWrite2,
00698 OCILOBWRITE2);
00699 LIB_SYMBOL(OCILib.lib_handle, "OCILobWriteAppend2", OCILobWriteAppend2,
00700 OCILOBWRITEAPPEND2);
00701
00702 #endif
00703
00704 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileOpen", OCILobFileOpen,
00705 OCILOBFILEOPEN);
00706 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileClose", OCILobFileClose,
00707 OCILOBFILECLOSE);
00708 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileCloseAll", OCILobFileCloseAll,
00709 OCILOBFILECLOSEALL);
00710 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileIsOpen", OCILobFileIsOpen,
00711 OCILOBFILEISOPEN);
00712 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileExists", OCILobFileExists,
00713 OCILOBFILEEXISTS);
00714 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileGetName", OCILobFileGetName,
00715 OCILOBFIELGETNAME);
00716 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileSetName", OCILobFileSetName,
00717 OCILOBFILESETNAME);
00718 LIB_SYMBOL(OCILib.lib_handle, "OCILobLoadFromFile", OCILobLoadFromFile,
00719 OCILOBLOADFROMFILE);
00720 LIB_SYMBOL(OCILib.lib_handle, "OCILobWriteAppend", OCILobWriteAppend,
00721 OCILOBWRITEAPPEND);
00722 LIB_SYMBOL(OCILib.lib_handle, "OCILobIsEqual", OCILobIsEqual,
00723 OCILOBISEQUAL);
00724 LIB_SYMBOL(OCILib.lib_handle, "OCILobAssign", OCILobAssign,
00725 OCILOBASSIGN);
00726 LIB_SYMBOL(OCILib.lib_handle, "OCILobLocatorAssign", OCILobLocatorAssign,
00727 OCILOBLOCATORASSIGN);
00728 LIB_SYMBOL(OCILib.lib_handle, "OCILobFlushBuffer", OCILobFlushBuffer,
00729 OCILOBFLUSHBUFFER);
00730 LIB_SYMBOL(OCILib.lib_handle, "OCILobGetStorageLimit", OCILobGetStorageLimit,
00731 OCILOBGETSTORAGELIMIT);
00732 LIB_SYMBOL(OCILib.lib_handle, "OCILobEnableBuffering", OCILobEnableBuffering,
00733 OCILOBENABLEBUFFERING);
00734 LIB_SYMBOL(OCILib.lib_handle, "OCILobDisableBuffering", OCILobDisableBuffering,
00735 OCILOBDISABLEBUFFERING);
00736
00737 LIB_SYMBOL(OCILib.lib_handle, "OCIDateAssign", OCIDateAssign,
00738 OCIDATEASSIGN);
00739 LIB_SYMBOL(OCILib.lib_handle, "OCIDateToText", OCIDateToText,
00740 OCIDATETOTEXT);
00741 LIB_SYMBOL(OCILib.lib_handle, "OCIDateFromText", OCIDateFromText,
00742 OCIDATEFROMTEXT);
00743 LIB_SYMBOL(OCILib.lib_handle, "OCIDateCompare", OCIDateCompare,
00744 OCIDATECOMPARE);
00745 LIB_SYMBOL(OCILib.lib_handle, "OCIDateAddMonths", OCIDateAddMonths,
00746 OCIDATEADDMONTHS);
00747 LIB_SYMBOL(OCILib.lib_handle, "OCIDateAddDays", OCIDateAddDays,
00748 OCIDATEADDDAYS);
00749 LIB_SYMBOL(OCILib.lib_handle, "OCIDateLastDay", OCIDateLastDay,
00750 OCIDATELASTDAY);
00751 LIB_SYMBOL(OCILib.lib_handle, "OCIDateDaysBetween", OCIDateDaysBetween,
00752 OCIDATEDAYSBETWEEN);
00753 LIB_SYMBOL(OCILib.lib_handle, "OCIDateZoneToZone", OCIDateZoneToZone,
00754 OCIDATEZONETOZONE);
00755 LIB_SYMBOL(OCILib.lib_handle, "OCIDateNextDay", OCIDateNextDay,
00756 OCIDATENEXTDAY);
00757 LIB_SYMBOL(OCILib.lib_handle, "OCIDateCheck", OCIDateCheck,
00758 OCIDATECHECK);
00759 LIB_SYMBOL(OCILib.lib_handle, "OCIDateSysDate", OCIDateSysDate,
00760 OCIDATESYSDATE);
00761 LIB_SYMBOL(OCILib.lib_handle, "OCIDescribeAny", OCIDescribeAny,
00762 OCIDESCRIBEANY);
00763
00764 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalAssign", OCIIntervalAssign,
00765 OCIINTERVALASSIGN);
00766 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalCheck", OCIIntervalCheck,
00767 OCIINTERVALCHECK);
00768 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalCompare", OCIIntervalCompare,
00769 OCIINTERVALCOMPARE);
00770 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalFromText", OCIIntervalFromText,
00771 OCIINTERVALFROMTEXT);
00772 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalToText", OCIIntervalToText,
00773 OCIINTERVALTOTEXT);
00774 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalFromTZ", OCIIntervalFromTZ,
00775 OCIINTERVALFROMTZ);
00776 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalGetDaySecond", OCIIntervalGetDaySecond,
00777 OCIINTERVALGETDAYSECOND);
00778 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalGetYearMonth", OCIIntervalGetYearMonth,
00779 OCIINTERVALGETYEARMONTH);
00780 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalSetDaySecond", OCIIntervalSetDaySecond,
00781 OCIINTERVALSETDAYSECOND);
00782 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalSetYearMonth", OCIIntervalSetYearMonth,
00783 OCIINTERVALSETYEARMONTH);
00784 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalSubtract", OCIIntervalSubtract,
00785 OCIINTERVALSUBTRACT);
00786 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalAdd", OCIIntervalAdd,
00787 OCIINTERVALADD);
00788
00789 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeAssign", OCIDateTimeAssign,
00790 OCIDATETIMEASSIGN);
00791 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeCheck", OCIDateTimeCheck,
00792 OCIDATETIMECHECK);
00793 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeCompare", OCIDateTimeCompare,
00794 OCIDATETIMECOMPARE);
00795 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeConstruct", OCIDateTimeConstruct,
00796 OCIDATETIMECONSTRUCT);
00797 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeConvert", OCIDateTimeConvert,
00798 OCIDATETIMECONVERT);
00799 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeFromArray", OCIDateTimeFromArray,
00800 OCIDATETIMEFROMARRAY);
00801 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeToArray", OCIDateTimeToArray,
00802 OCIDATETIMETOARRAY);
00803 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeFromText", OCIDateTimeFromText,
00804 OCIDATETIMEFROMTEXT);
00805 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeToText", OCIDateTimeToText,
00806 OCIDATETIMETOTEXT);
00807 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeGetDate", OCIDateTimeGetDate,
00808 OCIDATETIMEGETDATE);
00809 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeGetTime", OCIDateTimeGetTime,
00810 OCIDATETIMEGETTIME);
00811 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeGetTimeZoneName", OCIDateTimeGetTimeZoneName,
00812 OCIDATETIMEGETTIMEZONENAME);
00813 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeGetTimeZoneOffset", OCIDateTimeGetTimeZoneOffset,
00814 OCIDATETIMEGETTIMEZONEOFFSET);
00815 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeIntervalAdd", OCIDateTimeIntervalAdd,
00816 OCIDATETIMEINTERVALADD);
00817 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeIntervalSub", OCIDateTimeIntervalSub,
00818 OCIDATETIMEINTERVALSUB);
00819 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeSubtract", OCIDateTimeSubtract,
00820 OCIDATETIMESUBTRACT);
00821 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeSysTimeStamp", OCIDateTimeSysTimeStamp,
00822 OCIDATETIMESYSTIMESTAMP);
00823
00824 LIB_SYMBOL(OCILib.lib_handle, "OCITypeByName", OCITypeByName,
00825 OCITYPEBYNAME);
00826
00827 LIB_SYMBOL(OCILib.lib_handle, "OCINumberToInt", OCINumberToInt,
00828 OCINUMBERTOINT);
00829 LIB_SYMBOL(OCILib.lib_handle, "OCINumberFromInt", OCINumberFromInt,
00830 OCINUMBERFROMINT);
00831
00832 LIB_SYMBOL(OCILib.lib_handle, "OCINumberToReal", OCINumberToReal,
00833 OCINUMBERTOREAL);
00834 LIB_SYMBOL(OCILib.lib_handle, "OCINumberFromReal", OCINumberFromReal,
00835 OCINUMBERFROMREAL);
00836
00837 LIB_SYMBOL(OCILib.lib_handle, "OCINumberToText", OCINumberToText,
00838 OCINUMBERTOTEXT);
00839 LIB_SYMBOL(OCILib.lib_handle, "OCINumberFromText", OCINumberFromText,
00840 OCINUMBERFROMTEXT);
00841
00842 LIB_SYMBOL(OCILib.lib_handle, "OCIStringPtr", OCIStringPtr,
00843 OCISTRINGPTR);
00844 LIB_SYMBOL(OCILib.lib_handle, "OCIStringAssignText", OCIStringAssignText,
00845 OCISTRINGASSIGNTEXT);
00846
00847 LIB_SYMBOL(OCILib.lib_handle, "OCIRawPtr", OCIRawPtr,
00848 OCIRAWPTR);
00849 LIB_SYMBOL(OCILib.lib_handle, "OCIRawAssignBytes", OCIRawAssignBytes,
00850 OCIRAWASSIGNBYTES);
00851 LIB_SYMBOL(OCILib.lib_handle, "OCIRawAllocSize", OCIRawAllocSize,
00852 OCIRAWALLOCSIZE);
00853 LIB_SYMBOL(OCILib.lib_handle, "OCIRawSize", OCIRawSize,
00854 OCIRAWSIZE);
00855
00856 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectNew", OCIObjectNew,
00857 OCIOBJECTNEW);
00858 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectFree", OCIObjectFree,
00859 OCIOBJECTFREE);
00860 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectSetAttr", OCIObjectSetAttr,
00861 OCIOBJECTSETATTR);
00862 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectGetAttr", OCIObjectGetAttr,
00863 OCIOBJECTGETATTR);
00864 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectPin", OCIObjectPin,
00865 OCIOBJECTPIN);
00866 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectUnpin", OCIObjectUnpin,
00867 OCIOBJECTUNPIN);
00868 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectCopy", OCIObjectCopy,
00869 OCIOBJECTCOPY);
00870 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectGetObjectRef", OCIObjectGetObjectRef,
00871 OCIOBJECTGETOBJECTREF);
00872 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectGetProperty", OCIObjectGetProperty,
00873 OCIOBJECTGETPROPERTY);
00874 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectGetInd", OCIObjectGetInd,
00875 OCIOBJECTGETIND);
00876
00877 LIB_SYMBOL(OCILib.lib_handle, "OCIRefAssign", OCIRefAssign,
00878 OCIREFASSIGN);
00879 LIB_SYMBOL(OCILib.lib_handle, "OCIRefIsNull", OCIRefIsNull,
00880 OCIREFISNULL);
00881 LIB_SYMBOL(OCILib.lib_handle, "OCIRefClear", OCIRefClear,
00882 OCIREFCLEAR);
00883 LIB_SYMBOL(OCILib.lib_handle, "OCIRefToHex", OCIRefToHex,
00884 OCIREFTOHEX);
00885 LIB_SYMBOL(OCILib.lib_handle, "OCIRefHexSize", OCIRefHexSize,
00886 OCIREFHEXSIZE);
00887
00888 LIB_SYMBOL(OCILib.lib_handle, "OCIArrayDescriptorAlloc", OCIArrayDescriptorAlloc,
00889 OCIARRAYDESCRIPTORALLOC);
00890 LIB_SYMBOL(OCILib.lib_handle, "OCIArrayDescriptorFree", OCIArrayDescriptorFree,
00891 OCIARRAYDESCRIPTORFREE);
00892
00893 LIB_SYMBOL(OCILib.lib_handle, "OCIClientVersion", OCIClientVersion,
00894 OCICLIENTVERSION);
00895
00896 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadProcessInit", OCIThreadProcessInit,
00897 OCITHREADPROCESSINIT);
00898 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadInit", OCIThreadInit,
00899 OCITHREADINIT);
00900 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadTerm", OCIThreadTerm,
00901 OCITHREADTERM);
00902
00903 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadIdInit", OCIThreadIdInit,
00904 OCITHREADIDINIT);
00905 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadIdDestroy", OCIThreadIdDestroy,
00906 OCITHREADIDDESTROY);
00907 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadHndInit", OCIThreadHndInit,
00908 OCITHREADHNDINIT);
00909 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadHndDestroy", OCIThreadHndDestroy,
00910 OCITHREADHNDDESTROY);
00911 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadCreate", OCIThreadCreate,
00912 OCITHREADCREATE);
00913 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadJoin", OCIThreadJoin,
00914 OCITHREADJOIN);
00915 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadClose", OCIThreadClose,
00916 OCITHREADCLOSE);
00917
00918 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadMutexInit", OCIThreadMutexInit,
00919 OCITHREADMUTEXINIT);
00920 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadMutexDestroy", OCIThreadMutexDestroy,
00921 OCITHREADMUTEXDESTROY);
00922 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadMutexAcquire", OCIThreadMutexAcquire,
00923 OCITHREADMUTEXACQUIRE);
00924 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadMutexRelease", OCIThreadMutexRelease,
00925 OCITHREADMUTEXRELEASE);
00926
00927 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadKeyInit", OCIThreadKeyInit,
00928 OCITHREADKEYINIT);
00929 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadKeyDestroy", OCIThreadKeyDestroy,
00930 OCITHREADKEYDESTROY);
00931 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadKeySet", OCIThreadKeySet,
00932 OCITHREADKEYSET);
00933 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadKeyGet", OCIThreadKeyGet,
00934 OCITHREADKEYGET);
00935
00936 LIB_SYMBOL(OCILib.lib_handle, "OCIConnectionPoolCreate", OCIConnectionPoolCreate,
00937 OCICONNECTIONPOOLCREATE);
00938 LIB_SYMBOL(OCILib.lib_handle, "OCIConnectionPoolDestroy", OCIConnectionPoolDestroy,
00939 OCICONNECTIONPOOLDESTROY);
00940
00941 LIB_SYMBOL(OCILib.lib_handle, "OCISessionPoolCreate", OCISessionPoolCreate,
00942 OCISESSIONPOOLCREATE);
00943 LIB_SYMBOL(OCILib.lib_handle, "OCISessionPoolDestroy", OCISessionPoolDestroy,
00944 OCISESSIONPOOLDESTROY);
00945
00946 LIB_SYMBOL(OCILib.lib_handle, "OCISessionGet", OCISessionGet,
00947 OCISESSIONGET);
00948 LIB_SYMBOL(OCILib.lib_handle, "OCISessionRelease", OCISessionRelease,
00949 OCISESSIONRELEASE);
00950
00951 LIB_SYMBOL(OCILib.lib_handle, "OCICollSize", OCICollSize,
00952 OCICOLLSIZE);
00953 LIB_SYMBOL(OCILib.lib_handle, "OCICollMax", OCICollMax,
00954 OCICOLLMAX);
00955 LIB_SYMBOL(OCILib.lib_handle, "OCICollGetElem", OCICollGetElem,
00956 OCICOLLGETITEM);
00957 LIB_SYMBOL(OCILib.lib_handle, "OCICollAssignElem", OCICollAssignElem,
00958 OCICOLLASSIGNELEM);
00959 LIB_SYMBOL(OCILib.lib_handle, "OCICollAssign", OCICollAssign,
00960 OCICOLLASSIGN);
00961 LIB_SYMBOL(OCILib.lib_handle, "OCICollAppend", OCICollAppend,
00962 OCICOLLAPPEND);
00963 LIB_SYMBOL(OCILib.lib_handle, "OCICollTrim", OCICollTrim,
00964 OCICOLLTRIM);
00965
00966 LIB_SYMBOL(OCILib.lib_handle, "OCIIterCreate", OCIIterCreate,
00967 OCIITERCREATE);
00968 LIB_SYMBOL(OCILib.lib_handle, "OCIIterDelete", OCIIterDelete,
00969 OCIITERDELETE);
00970 LIB_SYMBOL(OCILib.lib_handle, "OCIIterInit", OCIIterInit,
00971 OCIITERINIT);
00972 LIB_SYMBOL(OCILib.lib_handle, "OCIIterNext", OCIIterNext,
00973 OCIITERNEXT);
00974 LIB_SYMBOL(OCILib.lib_handle, "OCIIterPrev", OCIIterPrev,
00975 OCIITERPREV);
00976
00977 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathAbort", OCIDirPathAbort,
00978 OCIDIRPATHABORT);
00979 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathDataSave", OCIDirPathDataSave,
00980 OCIDIRPATHDATASAVE);
00981 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathFinish", OCIDirPathFinish,
00982 OCIDIRPATHFINISH);
00983 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathPrepare", OCIDirPathPrepare,
00984 OCIDIRPATHPREPARE);
00985 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathLoadStream", OCIDirPathLoadStream,
00986 OCIDIRPATHLOADSTREAM);
00987 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathColArrayEntrySet", OCIDirPathColArrayEntrySet,
00988 OCIDIRPATHCOLARRAYENTRYSET);
00989 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathColArrayReset", OCIDirPathColArrayReset,
00990 OCIDIRPATHCOLARRAYRESET);
00991 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathColArrayToStream", OCIDirPathColArrayToStream,
00992 OCIDIRPATHCOLARRAYTOSTREAM);
00993 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathStreamReset", OCIDirPathStreamReset,
00994 OCIDIRPATHSTREAMRESET);
00995 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathFlushRow", OCIDirPathFlushRow,
00996 OCIDIRPATHFLUSHROW);
00997
00998 LIB_SYMBOL(OCILib.lib_handle, "OCICacheFree", OCICacheFree,
00999 OCICACHEFREE);
01000
01001 LIB_SYMBOL(OCILib.lib_handle, "OCIDBStartup", OCIDBStartup,
01002 OCIDBSTARTUP);
01003 LIB_SYMBOL(OCILib.lib_handle, "OCIDBShutdown", OCIDBShutdown,
01004 OCIDBSHUTDOWN);
01005
01006 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtPrepare2", OCIStmtPrepare2,
01007 OCISTMTPREPARE2);
01008 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtRelease", OCIStmtRelease,
01009 OCISTMTRELEASE);
01010
01011 LIB_SYMBOL(OCILib.lib_handle, "OCISubscriptionRegister", OCISubscriptionRegister,
01012 OCISUBSCRIPTIONREGISTER);
01013 LIB_SYMBOL(OCILib.lib_handle, "OCISubscriptionUnRegister", OCISubscriptionUnRegister,
01014 OCISUBSCRIPTIONUNREGISTER);
01015
01016 LIB_SYMBOL(OCILib.lib_handle, "OCIAQEnq", OCIAQEnq,
01017 OCIAQENQ);
01018 LIB_SYMBOL(OCILib.lib_handle, "OCIAQDeq", OCIAQDeq,
01019 OCIAQDEQ);
01020 LIB_SYMBOL(OCILib.lib_handle, "OCIAQListen", OCIAQListen,
01021 OCIAQLISTEN);
01022
01023
01024
01025 if (OCIArrayDescriptorFree != NULL)
01026 {
01027 OCILib.version_runtime = OCI_11_1;
01028 }
01029 else if (OCIClientVersion != NULL)
01030 {
01031 OCILib.version_runtime = OCI_10_2;
01032 }
01033 else if (OCILobWrite2 != NULL)
01034 {
01035 OCILib.version_runtime = OCI_10_1;
01036 }
01037 else if (OCIStmtPrepare2 != NULL)
01038 {
01039 OCILib.version_runtime = OCI_9_2;
01040 }
01041 else if (OCIDateTimeGetTimeZoneName != NULL)
01042 {
01043 OCILib.version_runtime = OCI_9_0;
01044 }
01045 else if (OCIThreadProcessInit != NULL)
01046 {
01047 OCILib.version_runtime = OCI_8_1;
01048 }
01049 else if (OCIEnvCreate != NULL)
01050 {
01051 OCILib.version_runtime = OCI_8_0;
01052 }
01053 else
01054 {
01055 LIB_CLOSE(OCILib.lib_handle);
01056
01057 OCI_ExceptionLoadingSymbols();
01058
01059 res = FALSE;
01060 }
01061 }
01062 else
01063 {
01064 OCI_ExceptionLoadingSharedLib();
01065
01066 res = FALSE;
01067 }
01068
01069 if (res == TRUE)
01070 {
01071
01072 #if defined(OCI_BIG_UINT_ENABLED)
01073
01074 if ((OCILib.version_runtime >= OCI_10_1) && (OCILobCopy2 != NULL))
01075 {
01076 OCILib.use_lob_ub8 = TRUE;
01077 }
01078
01079 #endif
01080
01081 #if defined(OCI_STMT_SCROLLABLE_READONLY)
01082
01083 if ((OCILib.version_runtime >= OCI_9_0) && (OCIStmtFetch2 != NULL))
01084 {
01085 OCILib.use_scrollable_cursors = TRUE;
01086 }
01087
01088 #endif
01089
01090 }
01091
01092 #endif
01093
01094 #if defined(OCI_CHARSET_WIDE)
01095
01096
01097
01098 if ((res == TRUE) && (OCILib.version_runtime < OCI_9_0))
01099 {
01100 OCI_ExceptionNotAvailable(NULL, OCI_FEATURE_WIDE_USERDATA);
01101
01102 res = FALSE;
01103 }
01104
01105 #endif
01106
01107
01108
01109 if (res == TRUE)
01110 {
01111
01112
01113 if (mode & OCI_ENV_THREADED)
01114 oci_mode |= OCI_THREADED;
01115
01116 if (mode & OCI_ENV_EVENTS)
01117 oci_mode |= OCI_EVENTS;
01118
01119
01120
01121 res = res && (OCI_SUCCESS == OCIEnvCreate(&OCILib.env, oci_mode,
01122 (dvoid *) NULL, NULL, NULL, NULL,
01123 (size_t) 0, (dvoid **) NULL));
01124
01125 if (res == FALSE)
01126 {
01127 OCI_ExceptionOCIEnvironment();
01128 }
01129
01130
01131
01132 res = res && (OCI_SUCCESS == OCI_HandleAlloc((dvoid *) OCILib.env,
01133 (dvoid **) (void *) &OCILib.err,
01134 (ub4) OCI_HTYPE_ERROR,
01135 (size_t) 0, (dvoid **) NULL));
01136 }
01137
01138
01139
01140 if (res == TRUE)
01141 {
01142 if (OCI_LIB_THREADED)
01143 {
01144 OCIThreadProcessInit();
01145
01146 res = (OCI_SUCCESS == OCIThreadInit(OCILib.env, OCILib.err));
01147 }
01148
01149
01150
01151 OCILib.key_errs = OCI_ThreadKeyCreateInternal((POCI_THREADKEYDEST) OCI_ErrorFree);
01152
01153
01154
01155 if (res == TRUE)
01156 {
01157 OCILib.cons = OCI_ListCreate(OCI_IPC_CONNECTION);
01158
01159 res = (OCILib.cons != NULL);
01160 }
01161
01162
01163
01164 if (res == TRUE)
01165 {
01166
01167 OCILib.pools = OCI_ListCreate(OCI_IPC_POOL);
01168
01169 res = (OCILib.pools != NULL);
01170 }
01171
01172 #if OCI_VERSION_COMPILE >= OCI_10_2
01173
01174
01175
01176 if (res == TRUE)
01177 {
01178
01179 OCILib.subs = OCI_ListCreate(OCI_IPC_NOTIFY);
01180
01181 res = (OCILib.subs != NULL);
01182 }
01183 #endif
01184
01185 if (res == TRUE)
01186 {
01187
01188 OCILib.arrs = OCI_ListCreate(OCI_IPC_ARRAY);
01189
01190 res = (OCILib.arrs != NULL);
01191 }
01192 }
01193
01194 if (res == TRUE)
01195 OCILib.loaded = TRUE;
01196
01197 return res;
01198 }
01199
01200
01201
01202
01203
01204 boolean OCI_API OCI_Cleanup
01205 (
01206 void
01207 )
01208 {
01209 boolean res = TRUE;
01210
01211
01212
01213 OCI_ListForEach(OCILib.arrs, (POCI_LIST_FOR_EACH) OCI_ArrayClose);
01214 OCI_ListClear(OCILib.arrs);
01215
01216
01217
01218 OCI_ListForEach(OCILib.subs, (POCI_LIST_FOR_EACH) OCI_SubscriptionClose);
01219 OCI_ListClear(OCILib.subs);
01220
01221
01222
01223 OCI_ListForEach(OCILib.cons, (POCI_LIST_FOR_EACH) OCI_ConnectionClose);
01224 OCI_ListClear(OCILib.cons);
01225
01226
01227
01228 OCI_ListForEach(OCILib.pools, (POCI_LIST_FOR_EACH) OCI_PoolClose);
01229 OCI_ListClear(OCILib.pools);
01230
01231
01232
01233 OCI_KeyMapFree();
01234
01235 OCI_ListFree(OCILib.cons);
01236 OCI_ListFree(OCILib.pools);
01237 OCI_ListFree(OCILib.subs);
01238 OCI_ListFree(OCILib.arrs);
01239
01240 OCILib.cons = NULL;
01241 OCILib.pools = NULL;
01242 OCILib.subs = NULL;
01243 OCILib.key_map = NULL;
01244
01245
01246
01247 if (OCI_LIB_THREADED)
01248 {
01249 OCI_CALL0
01250 (
01251 res, OCILib.err,
01252
01253 OCIThreadTerm(OCILib.env, OCILib.err)
01254 )
01255 }
01256
01257
01258
01259 if (OCILib.key_errs != NULL)
01260 {
01261 OCI_ThreadKey *key = OCILib.key_errs;
01262 OCI_Error *err = OCI_ErrorGet(FALSE, FALSE);
01263
01264 OCILib.key_errs = NULL;
01265
01266 OCI_ErrorFree(err);
01267 OCI_ThreadKeySet(key, NULL);
01268 OCI_ThreadKeyFree(key);
01269 }
01270
01271
01272
01273 OCILib.loaded = FALSE;
01274
01275
01276
01277 if (OCILib.err != NULL)
01278 OCI_HandleFree(OCILib.err, OCI_HTYPE_ERROR);
01279
01280
01281
01282
01283
01284
01285 if (OCILib.env != NULL)
01286 OCIHandleFree(OCILib.env, OCI_HTYPE_ENV);
01287
01288 #ifdef OCI_IMPORT_RUNTIME
01289
01290 if (OCILib.lib_handle != NULL)
01291 LIB_CLOSE(OCILib.lib_handle);
01292
01293 #endif
01294
01295
01296
01297 if (OCILib.nb_hndlp > 0)
01298 {
01299 OCI_ExceptionUnfreedData(OCI_HDLE_HANDLE, OCILib.nb_hndlp);
01300 res = FALSE;
01301 }
01302
01303
01304
01305 if (OCILib.nb_descp > 0)
01306 {
01307 OCI_ExceptionUnfreedData(OCI_HDLE_DESCRIPTOR, OCILib.nb_descp);
01308 res = FALSE;
01309 }
01310
01311
01312
01313 if (OCILib.nb_objinst > 0)
01314 {
01315 OCI_ExceptionUnfreedData(OCI_HDLE_OBJECT, OCILib.nb_objinst);
01316 res = FALSE;
01317 }
01318
01319 memset(&OCILib, 0, sizeof(OCILib));
01320
01321 return res;
01322 }
01323
01324
01325
01326
01327
01328 unsigned int OCI_API OCI_GetOCICompileVersion
01329 (
01330 void
01331 )
01332 {
01333 return (unsigned int) OCILib.version_compile;
01334 }
01335
01336
01337
01338
01339
01340 unsigned int OCI_API OCI_GetOCIRuntimeVersion
01341 (
01342 void
01343 )
01344 {
01345 return (unsigned int) OCILib.version_runtime;
01346 }
01347
01348
01349
01350
01351
01352 unsigned int OCI_API OCI_GetImportMode
01353 (
01354 void
01355 )
01356 {
01357 return (unsigned int) OCI_IMPORT_MODE;
01358 }
01359
01360
01361
01362
01363
01364 unsigned int OCI_API OCI_GetCharsetMetaData
01365 (
01366 void
01367 )
01368 {
01369 return (unsigned int) OCI_CHAR_MTEXT;
01370 }
01371
01372
01373
01374
01375
01376 unsigned int OCI_API OCI_GetCharsetUserData
01377 (
01378 void
01379 )
01380 {
01381 return (unsigned int) OCI_CHAR_DTEXT;
01382 }
01383
01384
01385
01386
01387
01388 OCI_Error * OCI_API OCI_GetLastError
01389 (
01390 void
01391 )
01392 {
01393 OCI_Error *err = NULL;
01394
01395 if ((OCILib.loaded == FALSE) || (OCI_LIB_CONTEXT))
01396 {
01397 err = OCI_ErrorGet(TRUE, FALSE);
01398
01399 if (err != NULL)
01400 {
01401 if (err->raise == FALSE)
01402 err = NULL;
01403 }
01404 }
01405
01406 return err;
01407 }
01408
01409
01410
01411
01412
01413 void OCI_API OCI_EnableWarnings
01414 (
01415 boolean value
01416 )
01417 {
01418 OCILib.warnings_on = value;
01419 }
01420
01421
01422
01423
01424
01425 void OCI_API OCI_SetErrorHandler
01426 (
01427 POCI_ERROR handler
01428 )
01429 {
01430 OCILib.error_handler = handler;
01431 }
01432
01433
01434
01435
01436
01437 boolean OCI_API OCI_DatabaseStartup
01438 (
01439 const mtext *db,
01440 const mtext *user,
01441 const mtext *pwd,
01442 unsigned int sess_mode,
01443 unsigned int start_mode,
01444 unsigned int start_flag,
01445 const mtext *spfile
01446 )
01447 {
01448 boolean res = TRUE;
01449 OCI_Connection *con = NULL;
01450
01451 OCI_CHECK_REMOTE_DBS_CONTROL_ENABLED(FALSE);
01452
01453 #if OCI_VERSION_COMPILE >= OCI_10_2
01454
01455 if (start_mode & OCI_DB_SPM_START)
01456 {
01457 OCIAdmin *adm = NULL;
01458
01459
01460
01461 con = OCI_ConnectionCreate(db, user, pwd, sess_mode | OCI_PRELIM_AUTH);
01462
01463 if (con != NULL)
01464 {
01465 if ((res == TRUE) && (spfile != NULL) && (spfile[0] != 0))
01466 {
01467 void *ostr = NULL;
01468 int osize = -1;
01469
01470
01471
01472 res = (OCI_SUCCESS == OCI_HandleAlloc((dvoid *) OCILib.env,
01473 (dvoid **) (void *) &adm,
01474 (ub4) OCI_HTYPE_ADMIN,
01475 (size_t) 0, (dvoid **) NULL));
01476
01477
01478
01479 ostr = OCI_GetInputMetaString(spfile, &osize);
01480
01481 OCI_CALL2
01482 (
01483 res, con,
01484
01485 OCIAttrSet((dvoid *) adm, (ub4) OCI_HTYPE_ADMIN,
01486 (dvoid *) ostr, (ub4) osize,
01487 (ub4) OCI_ATTR_ADMIN_PFILE, con->err)
01488 )
01489
01490 OCI_ReleaseMetaString(ostr);
01491 }
01492
01493
01494
01495 OCI_CALL2
01496 (
01497 res, con,
01498
01499 OCIDBStartup(con->cxt, con->err, (OCIAdmin *) adm,
01500 OCI_DEFAULT, start_flag)
01501 )
01502
01503
01504
01505 if (adm != NULL)
01506 {
01507 OCI_HandleFree(OCILib.err, OCI_HTYPE_ADMIN);
01508 }
01509
01510
01511
01512 OCI_ConnectionFree(con);
01513 }
01514 else
01515 res = FALSE;
01516 }
01517
01518 if (res == TRUE)
01519 {
01520
01521
01522 con = OCI_ConnectionCreate(db, user, pwd, sess_mode);
01523
01524
01525
01526 if (con != NULL)
01527 {
01528 OCI_Statement *stmt = OCI_StatementCreate(con);
01529
01530
01531
01532 if (start_mode & OCI_DB_SPM_MOUNT)
01533 res = (res && OCI_ExecuteStmt(stmt, MT("ALTER DATABASE MOUNT")));
01534
01535
01536
01537 if (start_mode & OCI_DB_SPM_OPEN)
01538 res = (res && OCI_ExecuteStmt(stmt, MT("ALTER DATABASE OPEN")));
01539
01540 OCI_StatementFree(stmt);
01541
01542
01543
01544 OCI_ConnectionFree(con);
01545 }
01546 else
01547 res = FALSE;
01548 }
01549
01550 #else
01551
01552 res = FALSE;
01553
01554 OCI_NOT_USED(db);
01555 OCI_NOT_USED(user);
01556 OCI_NOT_USED(pwd);
01557 OCI_NOT_USED(sess_mode);
01558 OCI_NOT_USED(start_mode);
01559 OCI_NOT_USED(start_flag);
01560 OCI_NOT_USED(spfile);
01561 OCI_NOT_USED(con);
01562
01563 #endif
01564
01565 OCI_RESULT(res);
01566
01567 return res;
01568 }
01569
01570
01571
01572
01573
01574 boolean OCI_API OCI_DatabaseShutdown
01575 (
01576 const mtext *db,
01577 const mtext *user,
01578 const mtext *pwd,
01579 unsigned int sess_mode,
01580 unsigned int shut_mode,
01581 unsigned int shut_flag
01582 )
01583 {
01584 boolean res = TRUE;
01585 OCI_Connection *con = NULL;
01586
01587 OCI_CHECK_REMOTE_DBS_CONTROL_ENABLED(FALSE);
01588
01589 #if OCI_VERSION_COMPILE >= OCI_10_2
01590
01591
01592
01593 con = OCI_ConnectionCreate(db, user, pwd, sess_mode);
01594
01595 if (con != NULL)
01596 {
01597
01598
01599 if ((con->trs != NULL) && (shut_flag == OCI_DB_SDF_ABORT))
01600 {
01601 OCI_TransactionFree(con->trs);
01602
01603 con->trs = NULL;
01604 }
01605
01606
01607
01608 if (shut_mode & OCI_DB_SDM_SHUTDOWN)
01609 {
01610
01611
01612 OCI_CALL2
01613 (
01614 res, con,
01615
01616 OCIDBShutdown(con->cxt, con->err, (OCIAdmin *) NULL, shut_flag)
01617 )
01618 }
01619
01620
01621
01622 if ((res == TRUE) && (shut_flag != OCI_DB_SDF_ABORT))
01623 {
01624 OCI_Statement *stmt = OCI_StatementCreate(con);
01625
01626
01627
01628 if (shut_mode & OCI_DB_SDM_CLOSE)
01629 res = (res && OCI_ExecuteStmt(stmt, MT("ALTER DATABASE CLOSE NORMAL")));
01630
01631
01632
01633 if (shut_mode & OCI_DB_SDM_DISMOUNT)
01634 res = (res && OCI_ExecuteStmt(stmt,MT( "ALTER DATABASE DISMOUNT")));
01635
01636 OCI_StatementFree(stmt);
01637
01638
01639
01640 if (con->trs != NULL)
01641 {
01642 OCI_TransactionFree(con->trs);
01643
01644 con->trs = NULL;
01645 }
01646
01647
01648
01649 OCI_CALL2
01650 (
01651 res, con,
01652
01653 OCIDBShutdown(con->cxt, con->err, (OCIAdmin *) 0, OCI_DBSHUTDOWN_FINAL)
01654 )
01655 }
01656
01657
01658
01659 OCI_ConnectionFree(con);
01660 }
01661 else
01662 res = FALSE;
01663
01664 #else
01665
01666 res = FALSE;
01667
01668 OCI_NOT_USED(db);
01669 OCI_NOT_USED(user);
01670 OCI_NOT_USED(pwd);
01671 OCI_NOT_USED(sess_mode);
01672 OCI_NOT_USED(shut_mode);
01673 OCI_NOT_USED(shut_flag);
01674 OCI_NOT_USED(con);
01675
01676 #endif
01677
01678 OCI_RESULT(res);
01679
01680 return res;
01681 }