• Main Page
  • Modules
  • Data Structures
  • Files
  • File List

D:/Perso/dev/ocilib/ocilib/src/library.c

00001 /*
00002     +-----------------------------------------------------------------------------------------+
00003     |                                                                                         |
00004     |                               OCILIB - C Driver for Oracle                              |
00005     |                                                                                         |
00006     |                                (C Wrapper for Oracle OCI)                               |
00007     |                                                                                         |
00008     |                              Website : http://www.ocilib.net                            |
00009     |                                                                                         |
00010     |             Copyright (c) 2007-2010 Vincent ROGIER <vince.rogier@ocilib.net>            |
00011     |                                                                                         |
00012     +-----------------------------------------------------------------------------------------+
00013     |                                                                                         |
00014     |             This library is free software; you can redistribute it and/or               |
00015     |             modify it under the terms of the GNU Lesser General Public                  |
00016     |             License as published by the Free Software Foundation; either                |
00017     |             version 2 of the License, or (at your option) any later version.            |
00018     |                                                                                         |
00019     |             This library is distributed in the hope that it will be useful,             |
00020     |             but WITHOUT ANY WARRANTY; without even the implied warranty of              |
00021     |             MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU           |
00022     |             Lesser General Public License for more details.                             |
00023     |                                                                                         |
00024     |             You should have received a copy of the GNU Lesser General Public            |
00025     |             License along with this library; if not, write to the Free                  |
00026     |             Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.          |
00027     |                                                                                         |
00028     +-----------------------------------------------------------------------------------------+
00029 */
00030 
00031 /* --------------------------------------------------------------------------------------------- *
00032  * $Id: library.c, v 3.8.0 2010-10-24 21:53 Vincent Rogier $
00033  * --------------------------------------------------------------------------------------------- */
00034 
00035 #include "ocilib_internal.h"
00036 
00037 /* ********************************************************************************************* *
00038  *                             INTERNAL VARIABLES
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 /* OCI function pointers */
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  *                             PRIVATE FUNCTIONS
00390  * ********************************************************************************************* */
00391 
00392 /* --------------------------------------------------------------------------------------------- *
00393  * OCI_KeyMapFree
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  * OCI_SetStatus
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  *                            PUBLIC FUNCTIONS
00456  * ********************************************************************************************* */
00457 
00458 /* --------------------------------------------------------------------------------------------- *
00459  * OCI_Initialize
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     /* check if it was already initialized */
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     /* test for UTF8 environment */
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         /* Now loading all symbols - no check is performed on each function,
00568            Basic checks will be done to ensure we're loading an
00569            Oracle and compatible library ...
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         /* API Version checking */
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     /* Oracle 8i does not support full Unicode mode */
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     /* Initialize OCI environment */
01108 
01109     if (res == TRUE)
01110     {
01111         /* check modes */
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         /* create environment on success */
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         /*  allocate error handle */
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     /* on success, we need to initialize OCIThread object support */
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         /* create thread key for thread errors */
01150 
01151         OCILib.key_errs = OCI_ThreadKeyCreateInternal((POCI_THREADKEYDEST) OCI_ErrorFree);
01152 
01153         /* allocate connections internal list */
01154 
01155         if (res == TRUE)
01156         {
01157             OCILib.cons = OCI_ListCreate(OCI_IPC_CONNECTION);
01158 
01159             res = (OCILib.cons != NULL);
01160         }
01161 
01162         /* allocate pools internal list */
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         /* allocate connection pools internal list */
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  * OCI_Cleanup
01202  * --------------------------------------------------------------------------------------------- */
01203 
01204 boolean OCI_API OCI_Cleanup
01205 (
01206     void
01207 )
01208 {
01209     boolean res = TRUE;
01210 
01211     /* free all arrays */
01212 
01213     OCI_ListForEach(OCILib.arrs, (POCI_LIST_FOR_EACH) OCI_ArrayClose);
01214     OCI_ListClear(OCILib.arrs);
01215 
01216     /* free all subscriptions */
01217 
01218     OCI_ListForEach(OCILib.subs, (POCI_LIST_FOR_EACH) OCI_SubscriptionClose);
01219     OCI_ListClear(OCILib.subs);
01220 
01221     /* free all connections */
01222 
01223     OCI_ListForEach(OCILib.cons, (POCI_LIST_FOR_EACH) OCI_ConnectionClose);
01224     OCI_ListClear(OCILib.cons);
01225 
01226     /* free all pools */
01227 
01228     OCI_ListForEach(OCILib.pools, (POCI_LIST_FOR_EACH) OCI_PoolClose);
01229     OCI_ListClear(OCILib.pools);
01230 
01231     /* free objects */
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     /* finalize OCIThread object support */
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     /* free error thread key */
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     /* set unloaded flag */
01272 
01273     OCILib.loaded = FALSE;
01274 
01275     /* close error handle */
01276 
01277     if (OCILib.err != NULL)
01278         OCI_HandleFree(OCILib.err, OCI_HTYPE_ERROR);
01279 
01280     /* close environment handle
01281        => direct OCIHandleFree() because this handle was not allocated
01282        with OCI_HandleAlloc()
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     /* checks for unfreed handles */
01296 
01297     if (OCILib.nb_hndlp > 0)
01298     {
01299         OCI_ExceptionUnfreedData(OCI_HDLE_HANDLE, OCILib.nb_hndlp);
01300         res = FALSE;
01301     }
01302 
01303     /* checks for unfreed descriptors */
01304 
01305     if (OCILib.nb_descp > 0)
01306     {
01307         OCI_ExceptionUnfreedData(OCI_HDLE_DESCRIPTOR, OCILib.nb_descp);
01308         res = FALSE;
01309     }
01310 
01311     /* checks for unfreed objects */
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  * OCI_GetOCICompileVersion
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  * OCI_GetOCIRuntimeVersion
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  * OCI_GetImportMode
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  * OCI_GetCharsetMetaData
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  * OCI_GetCharsetUserData
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  * OCI_GetLastError
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  * OCI_EnableWarnings
01411  * --------------------------------------------------------------------------------------------- */
01412 
01413 void OCI_API OCI_EnableWarnings
01414 (
01415     boolean value
01416 )
01417 {
01418     OCILib.warnings_on = value;
01419 }
01420 
01421 /* --------------------------------------------------------------------------------------------- *
01422  * OCI_SetErrorHandler
01423  * --------------------------------------------------------------------------------------------- */
01424 
01425 void OCI_API OCI_SetErrorHandler
01426 (
01427     POCI_ERROR handler
01428 )
01429 {
01430     OCILib.error_handler = handler;
01431 }
01432 
01433 /* --------------------------------------------------------------------------------------------- *
01434  * OCI_DatabaseStartup
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         /* connect with prelim authenfication mode */
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                 /* allocate admin handle */
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                 /* set client spfile if provided */
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             /* startup DB */
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             /* release security admin handle */
01504 
01505             if (adm != NULL)
01506             {
01507                 OCI_HandleFree(OCILib.err, OCI_HTYPE_ADMIN);
01508             }
01509 
01510             /* disconnect */
01511 
01512             OCI_ConnectionFree(con);
01513         }
01514         else
01515             res = FALSE;
01516     }
01517 
01518     if (res == TRUE)
01519     {
01520         /* connect without prelim mode */
01521 
01522         con = OCI_ConnectionCreate(db, user, pwd, sess_mode);
01523 
01524         /* alter database */
01525 
01526         if (con != NULL)
01527         {
01528             OCI_Statement *stmt = OCI_StatementCreate(con);
01529 
01530             /* mount database */
01531 
01532             if (start_mode & OCI_DB_SPM_MOUNT)
01533                 res = (res && OCI_ExecuteStmt(stmt, MT("ALTER DATABASE MOUNT")));
01534 
01535             /* open database */
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             /* disconnect */
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  * OCI_DatabaseShutdown
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     /* connect to server */
01592 
01593     con = OCI_ConnectionCreate(db, user, pwd, sess_mode);
01594 
01595     if (con != NULL)
01596     {
01597         /* delete current transaction before the abort */
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         /* start shutdown */
01607 
01608         if (shut_mode & OCI_DB_SDM_SHUTDOWN)
01609         {
01610             /* start shutdown process */
01611 
01612             OCI_CALL2
01613             (
01614                 res, con,
01615 
01616                 OCIDBShutdown(con->cxt, con->err, (OCIAdmin *) NULL, shut_flag)
01617             )
01618         }
01619 
01620         /* alter database if we are not in abort mode */
01621 
01622         if ((res == TRUE) && (shut_flag != OCI_DB_SDF_ABORT))
01623         {
01624             OCI_Statement *stmt = OCI_StatementCreate(con);
01625 
01626             /* close database */
01627 
01628             if (shut_mode & OCI_DB_SDM_CLOSE)
01629                 res = (res && OCI_ExecuteStmt(stmt, MT("ALTER DATABASE CLOSE NORMAL")));
01630 
01631             /* unmount database */
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             /* delete current transaction before the shutdown */
01639 
01640             if (con->trs != NULL)
01641             {
01642                 OCI_TransactionFree(con->trs);
01643 
01644                 con->trs = NULL;
01645             }
01646 
01647             /* do the final shutdown if we are not in abort mode */
01648 
01649             OCI_CALL2
01650             (
01651                 res, con,
01652 
01653                 OCIDBShutdown(con->cxt, con->err, (OCIAdmin *) 0, OCI_DBSHUTDOWN_FINAL)
01654             )
01655         }
01656 
01657         /* disconnect */
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 }

Generated on Sun Oct 24 2010 22:02:54 for OCILIB (C Driver for Oracle) by  doxygen 1.7.1