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