📄 library.c
字号:
/*
+----------------------------------------------------------------------+
| |
| OCILIB - C Driver for Oracle |
| |
| (C Wrapper for Oracle OCI) |
| |
+----------------------------------------------------------------------+
| Website : http://ocilib.net |
+----------------------------------------------------------------------+
| Copyright (c) 2007-2009 Vincent ROGIER |
+----------------------------------------------------------------------+
| This library is free software; you can redistribute it and/or |
| modify it under the terms of the GNU Library General Public |
| License as published by the Free Software Foundation; either |
| version 2 of the License, or (at your option) any later version. |
| |
| This library is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| Library General Public License for more details. |
| |
| You should have received a copy of the GNU Library General Public |
| License along with this library; if not, write to the Free |
| Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
+----------------------------------------------------------------------+
| Author: Vincent ROGIER <vince.rogier@gmail.com> |
+----------------------------------------------------------------------+
*/
/* ------------------------------------------------------------------------ *
* $Id: library.c, v 3.2.0 2009/04/20 00:00 Vince $
* ------------------------------------------------------------------------ */
#include "ocilib_internal.h"
/* ************************************************************************ *
* INTERNAL VARIABLES
* ************************************************************************ */
OCI_Library OCILib;
#ifdef OCI_IMPORT_RUNTIME
OCIENVCREATE OCIEnvCreate = NULL;
OCISERVERATTACH OCIServerAttach = NULL;
OCISERVERDETACH OCIServerDetach = NULL;
OCIHANDLEALLOC OCIHandleAlloc = NULL;
OCIHANDLEFREE OCIHandleFree = NULL;
OCIDESCRIPTORALLOC OCIDescriptorAlloc = NULL;
OCIDESCRIPTORFREE OCIDescriptorFree = NULL;
OCISESSIONBEGIN OCISessionBegin = NULL;
OCISESSIONEND OCISessionEnd = NULL;
OCIPASSWORDCHANGE OCIPasswordChange = NULL;
OCIBINDBYPOS OCIBindByPos = NULL;
OCIBINDBYNAME OCIBindByName = NULL;
OCIBINDDYNAMIC OCIBindDynamic = NULL;
OCIBINDOBJECT OCIBindObject = NULL;
OCIDEFINEBYPOS OCIDefineByPos = NULL;
OCIDEFINEOBJECT OCIDefineObject = NULL;
OCISTMTPREPARE OCIStmtPrepare = NULL;
OCISTMTEXECUTE OCIStmtExecute = NULL;
OCISTMTFETCH OCIStmtFetch = NULL;
OCISTMTFETCH2 OCIStmtFetch2 = NULL;
OCISTMTGETPIECEINFO OCIStmtGetPieceInfo = NULL;
OCISTMTSETPIECEINFO OCIStmtSetPieceInfo = NULL;
OCIPARAMGET OCIParamGet = NULL;
OCIPARAMSET OCIParamSet = NULL;
OCITRANSSTART OCITransStart = NULL;
OCITRANSDETACH OCITransDetach = NULL;
OCITRANSPREPARE OCITransPrepare = NULL;
OCITRANSFORGET OCITransForget = NULL;
OCITRANSCOMMIT OCITransCommit = NULL;
OCITRANSROLLBACK OCITransRollback = NULL;
OCIERRORGET OCIErrorGet = NULL;
OCILOBCREATETEMPORARY OCILobCreateTemporary = NULL;
OCILOBFREETEMPORARY OCILobFreeTemporary = NULL;
OCILOBISTEMPORARY OCILobIsTemporary = NULL;
OCILOBAPPEND OCILobAppend = NULL;
OCILOBCOPY OCILobCopy = NULL;
OCILOBGETLENGTH OCILobGetLength = NULL;
OCILOBREAD OCILobRead = NULL;
OCILOBWRITE OCILobWrite = NULL;
OCILOBTRIM OCILobTrim = NULL;
OCILOBERASE OCILobErase = NULL;
OCILOBOPEN OCILobOpen = NULL;
OCILOBCLOSE OCILobClose = NULL;
OCILOBLOCATORASSIGN OCILobLocatorAssign = NULL;
OCILOBASSIGN OCILobAssign = NULL;
OCILOBISEQUAL OCILobIsEqual = NULL;
OCILOBFILEOPEN OCILobFileOpen = NULL;
OCILOBFILECLOSE OCILobFileClose = NULL;
OCILOBFILECLOSEALL OCILobFileCloseAll = NULL;
OCILOBFILEISOPEN OCILobFileIsOpen = NULL;
OCILOBFILEEXISTS OCILobFileExists = NULL;
OCILOBFIELGETNAME OCILobFileGetName = NULL;
OCILOBFILESETNAME OCILobFileSetName = NULL;
OCILOBLOADFROMFILE OCILobLoadFromFile = NULL;
OCILOBWRITEAPPEND OCILobWriteAppend = NULL;
OCISERVERVERSION OCIServerVersion = NULL;
OCIBREAK OCIBreak = NULL;
OCIATTRGET OCIAttrGet = NULL;
OCIATTRSET OCIAttrSet = NULL;
OCIDATEASSIGN OCIDateAssign = NULL;
OCIDATETOTEXT OCIDateToText = NULL;
OCIDATEFROMTEXT OCIDateFromText = NULL;
OCIDATECOMPARE OCIDateCompare = NULL;
OCIDATEADDMONTHS OCIDateAddMonths = NULL;
OCIDATEADDDAYS OCIDateAddDays = NULL;
OCIDATELASTDAY OCIDateLastDay = NULL;
OCIDATEDAYSBETWEEN OCIDateDaysBetween = NULL;
OCIDATEZONETOZONE OCIDateZoneToZone = NULL;
OCIDATENEXTDAY OCIDateNextDay = NULL;
OCIDATECHECK OCIDateCheck = NULL;
OCIDATESYSDATE OCIDateSysDate = NULL;
OCIDESCRIBEANY OCIDescribeAny = NULL;
OCIINTERVALASSIGN OCIIntervalAssign = NULL;
OCIINTERVALCHECK OCIIntervalCheck = NULL;
OCIINTERVALCOMPARE OCIIntervalCompare = NULL;
OCIINTERVALFROMTEXT OCIIntervalFromText = NULL;
OCIINTERVALTOTEXT OCIIntervalToText = NULL;
OCIINTERVALFROMTZ OCIIntervalFromTZ = NULL;
OCIINTERVALGETDAYSECOND OCIIntervalGetDaySecond = NULL;
OCIINTERVALGETYEARMONTH OCIIntervalGetYearMonth = NULL;
OCIINTERVALSETDAYSECOND OCIIntervalSetDaySecond = NULL;
OCIINTERVALSETYEARMONTH OCIIntervalSetYearMonth = NULL;
OCIINTERVALSUBTRACT OCIIntervalSubtract = NULL;
OCIINTERVALADD OCIIntervalAdd = NULL;
OCIDATETIMEASSIGN OCIDateTimeAssign = NULL;
OCIDATETIMECHECK OCIDateTimeCheck = NULL;
OCIDATETIMECOMPARE OCIDateTimeCompare = NULL;
OCIDATETIMECONSTRUCT OCIDateTimeConstruct = NULL;
OCIDATETIMECONVERT OCIDateTimeConvert = NULL;
OCIDATETIMEFROMARRAY OCIDateTimeFromArray = NULL;
OCIDATETIMETOARRAY OCIDateTimeToArray = NULL;
OCIDATETIMEFROMTEXT OCIDateTimeFromText = NULL;
OCIDATETIMETOTEXT OCIDateTimeToText = NULL;
OCIDATETIMEGETDATE OCIDateTimeGetDate = NULL;
OCIDATETIMEGETTIME OCIDateTimeGetTime = NULL;
OCIDATETIMEGETTIMEZONENAME OCIDateTimeGetTimeZoneName = NULL;
OCIDATETIMEGETTIMEZONEOFFSET OCIDateTimeGetTimeZoneOffset = NULL;
OCIDATETIMEINTERVALADD OCIDateTimeIntervalAdd = NULL;
OCIDATETIMEINTERVALSUB OCIDateTimeIntervalSub = NULL;
OCIDATETIMESUBTRACT OCIDateTimeSubtract = NULL;
OCIDATETIMESYSTIMESTAMP OCIDateTimeSysTimeStamp = NULL;
OCIARRAYDESCRIPTORFREE OCIArrayDescriptorFree = NULL;
OCICLIENTVERSION OCIClientVersion = NULL;
OCITYPEBYNAME OCITypeByName = NULL;
OCINUMBERTOINT OCINumberToInt = NULL;
OCINUMBERFROMINT OCINumberFromInt = NULL;
OCINUMBERTOREAL OCINumberToReal = NULL;
OCINUMBERFROMREAL OCINumberFromReal = NULL;
OCINUMBERTOTEXT OCINumberToText = NULL;
OCINUMBERFROMTEXT OCINumberFromText = NULL;
OCISTRINGPTR OCIStringPtr = NULL;
OCISTRINGASSIGNTEXT OCIStringAssignText = NULL;
OCIRAWPTR OCIRawPtr = NULL;
OCIRAWASSIGNBYTES OCIRawAssignBytes = NULL;
OCIRAWALLOCSIZE OCIRawAllocSize = NULL;
OCIOBJECTNEW OCIObjectNew = NULL;
OCIOBJECTFREE OCIObjectFree = NULL;
OCIOBJECTSETATTR OCIObjectSetAttr = NULL;
OCIOBJECTGETATTR OCIObjectGetAttr = NULL;
OCIOBJECTPIN OCIObjectPin = NULL;
OCIOBJECTUNPIN OCIObjectUnpin = NULL;
OCIOBJECTCOPY OCIObjectCopy = NULL;
OCIOBJECTGETOBJECTREF OCIObjectGetObjectRef = NULL;
OCIOBJECTGETPROPERTY OCIObjectGetProperty = NULL;
OCIOBJECTGETIND OCIObjectGetInd = NULL;
OCIREFASSIGN OCIRefAssign = NULL;
OCIREFISNULL OCIRefIsNull = NULL;
OCIREFCLEAR OCIRefClear = NULL;
OCIREFTOHEX OCIRefToHex = NULL;
OCIREFHEXSIZE OCIRefHexSize = NULL;
OCITHREADPROCESSINIT OCIThreadProcessInit = NULL;
OCITHREADINIT OCIThreadInit = NULL;
OCITHREADTERM OCIThreadTerm = NULL;
OCITHREADIDINIT OCIThreadIdInit = NULL;
OCITHREADIDDESTROY OCIThreadIdDestroy = NULL;
OCITHREADHNDINIT OCIThreadHndInit = NULL;
OCITHREADHNDDESTROY OCIThreadHndDestroy = NULL;
OCITHREADCREATE OCIThreadCreate = NULL;
OCITHREADJOIN OCIThreadJoin = NULL;
OCITHREADCLOSE OCIThreadClose = NULL;
OCITHREADMUTEXINIT OCIThreadMutexInit = NULL;
OCITHREADMUTEXDESTROY OCIThreadMutexDestroy = NULL;
OCITHREADMUTEXACQUIRE OCIThreadMutexAcquire = NULL;
OCITHREADMUTEXRELEASE OCIThreadMutexRelease = NULL;
OCITHREADKEYINIT OCIThreadKeyInit = NULL;
OCITHREADKEYDESTROY OCIThreadKeyDestroy = NULL;
OCITHREADKEYSET OCIThreadKeySet = NULL;
OCITHREADKEYGET OCIThreadKeyGet = NULL;
OCICONNECTIONPOOLCREATE OCIConnectionPoolCreate = NULL;
OCICONNECTIONPOOLDESTROY OCIConnectionPoolDestroy = NULL;
OCICOLLSIZE OCICollSize = NULL;
OCICOLLMAX OCICollMax = NULL;
OCICOLLGETITEM OCICollGetElem = NULL;
OCICOLLASSIGNELEM OCICollAssignElem = NULL;
OCICOLLASSIGN OCICollAssign = NULL;
OCICOLLAPPEND OCICollAppend = NULL;
OCICOLLTRIM OCICollTrim = NULL;
OCIITERCREATE OCIIterCreate = NULL;
OCIITERDELETE OCIIterDelete = NULL;
OCIITERINIT OCIIterInit = NULL;
OCIITERNEXT OCIIterNext = NULL;
OCIITERPREV OCIIterPrev = NULL;
OCIDIRPATHABORT OCIDirPathAbort = NULL;
OCIDIRPATHDATASAVE OCIDirPathDataSave = NULL;
OCIDIRPATHFINISH OCIDirPathFinish = NULL;
OCIDIRPATHPREPARE OCIDirPathPrepare = NULL;
OCIDIRPATHLOADSTREAM OCIDirPathLoadStream = NULL;
OCIDIRPATHCOLARRAYENTRYSET OCIDirPathColArrayEntrySet = NULL;
OCIDIRPATHCOLARRAYRESET OCIDirPathColArrayReset = NULL;
OCIDIRPATHCOLARRAYTOSTREAM OCIDirPathColArrayToStream = NULL;
OCIDIRPATHSTREAMRESET OCIDirPathStreamReset = NULL;
OCIDIRPATHFLUSHROW OCIDirPathFlushRow = NULL;
OCICACHEFREE OCICacheFree = NULL;
#ifdef ORAXB8_DEFINED
OCILOBCOPY2 OCILobCopy2 = NULL;
OCILOBERASE2 OCILobErase2 = NULL;
OCILOBGETLENGTH2 OCILobGetLength2 = NULL;
OCILOBLOADFROMFILE2 OCILobLoadFromFile2 = NULL;
OCILOBREAD2 OCILobRead2 = NULL;
OCILOBTRIM2 OCILobTrim2 = NULL;
OCILOBWRITE2 OCILobWrite2 = NULL;
OCILOBWRITEAPPEND2 OCILobWriteAppend2 = NULL;
#endif
#endif
/* ************************************************************************ *
* PRIVATE FUNCTIONS
* ************************************************************************ */
/* ------------------------------------------------------------------------ *
* OCI_KeyMapFree
* ------------------------------------------------------------------------ */
boolean OCI_KeyMapFree(void)
{
boolean res = TRUE;
OCI_HashEntry *e = NULL;
OCI_HashValue *v = NULL;
int i, n, nb_err = 0;
OCI_CHECK(OCILib.key_map == NULL, TRUE)
n = OCI_HashGetSize(OCILib.key_map);
for (i = 0; i < n; i++)
{
e = OCI_HashGetEntry(OCILib.key_map, i);
while (e != NULL)
{
v = e->values;
while (v != NULL)
{
if (FALSE == OCI_ThreadKeyFree((OCI_ThreadKey *) (v->value.p_void)))
nb_err++;
v = v->next;
}
e = e->next;
}
}
res = (OCI_HashFree(OCILib.key_map) && (nb_err == 0));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -