--- /dev/null
+Basic Package Information
+=========================
+
+Sat Aug 24 17:30:44 GMT 2013
+
+Client Shared Library 64-bit - 11.2.0.4.0
+
+System name: Linux
+Release: 2.6.9-103.0.0.0.1.ELxenU
+Version: #1 SMP Thu Dec 8 11:00:30 EST 2011
+Machine: x86_64
+
+Operating in ORACLE_HOME environment.
+Small timezone file = /ade/b/2960201551/oracle/oracore/zoneinfo/timezone_14.dat
+Large timezone file = /ade/b/2960201551/oracle/oracore/zoneinfo/timezlrg_14.dat
+
--- /dev/null
+PRECOMP Package Information
+===========================
+
+Sat Aug 24 17:31:03 GMT 2013
+
+Client Shared Library 64-bit - 11.2.0.4.0
+
+System name: Linux
+Release: 2.6.9-103.0.0.0.1.ELxenU
+Version: #1 SMP Thu Dec 8 11:00:30 EST 2011
+Machine: x86_64
+
+Operating in ORACLE_HOME environment.
+Small timezone file = /ade/b/2960201551/oracle/oracore/zoneinfo/timezone_14.dat
+Large timezone file = /ade/b/2960201551/oracle/oracore/zoneinfo/timezlrg_14.dat
+
+==============================================================================
+
+PRECOMP Instant Client (IC) Package (precomp.zip) contains following
+components:
+ i) "proc" binary and related files to precompile a Pro*C application
+ ii) "procob" binary and related files to precompile a Pro*COBOL application
+iii) sample configuration files, demo programs and demo make files for building
+ proc and procob demos and in general any Pro*C/Pro*COBOL application.
+
+Installing PRECOMP IC Package:
+------------------------------
+Prerequisites:
+Please unzip following .zip files before unzipping precomp.zip:
+
+ a) For runtime support (running Pro*C/Pro*COBOL applications)
+ - Unzip basic.zip (not required if installed instantclient through
+ Oracle Universal Installer)
+
+ b) For developing Pro*C/Pro*COBOL applications
+ - Unzip basic.zip (not required if installed instantclient through
+ Oracle Universal Installer)
+ - Unzip sdk.zip
+
+Notes:
+ 1) Runtime libraries are available in
+ instantclient<_VV_v>/
+ 2) proc binary is available in
+ instantclient<_VV_v>/sdk/
+ 3) procob binary is available in
+ instantclient<_VV_v>/sdk/
+ 4) ott binary is available in
+ instantclient<_VV_v>/sdk/
+ 5) rtsora binary is available in
+ instantclient<_VV_v>/sdk/
+ 6) All header files required for precompilation are available at
+ instantclient<_VV_v>/sdk/include/
+ 7) Sample configuration files (pcscfg.cfg & pcbcfg.cfg) are available at
+ instantclient<_VV_v>/precomp/admin
+ 8) Pro*C demo makefile and sample Pro*C application are available at
+ instantclient<_VV_v>/sdk/demo/
+ 9) Pro*COBOL demo makefile and sample Pro*COBOL application are available at
+ instantclient<_VV_v>/sdk/demo/
+ 10) Please ensure that ICSDKHOME & ICLIBHOME defined in the demo makefiles
+ point to appropiate locations on your machine before putting them
+ to use.
+
+Legend:
+ VV - Major Oracle version number
+ v - Minor Oracle version number
+ (Ex: For the release 11.1, VV = 11 and v = 1)
+
+
+Configurations Supported:
+-------------------------
+ Platforms Runtime Precompile
+ ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~ ~~~~~~~~~~~~
+ Linux 32bit (RHEL-4) Proc: Yes proc: Yes
+ procob: Yes procob: Yes
+
+ Windows 32bit Proc: Yes proc: Yes
+ procob: Yes procob: Yes
+
+
+==============================================================================
--- /dev/null
+define=bit64
+comp5=yes
+define=comp5
--- /dev/null
+sys_include=($ORACLE_HOME/sdk/include,/usr/include,/usr/lib/gcc-lib/x86_64-redhat-linux/3.2.3/include,/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include,/usr/lib64/gcc/x86_64-suse-linux/4.1.2/include,/usr/lib64/gcc/x86_64-suse-linux/4.3/include,/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include)
+sys_include=/usr/lib/gcc/i686-redhat-linux/4.4.6/include
+sys_include=/usr/lib/gcc/i686-redhat-linux/4.4.7/include
+ltype=short
+define=__x86_64__
--- /dev/null
+SDK Package Information
+=======================
+
+Sat Aug 24 17:31:06 GMT 2013
+
+Client Shared Library 64-bit - 11.2.0.4.0
+
+System name: Linux
+Release: 2.6.9-103.0.0.0.1.ELxenU
+Version: #1 SMP Thu Dec 8 11:00:30 EST 2011
+Machine: x86_64
+
+Operating in ORACLE_HOME environment.
+Small timezone file = /ade/b/2960201551/oracle/oracore/zoneinfo/timezone_14.dat
+Large timezone file = /ade/b/2960201551/oracle/oracore/zoneinfo/timezlrg_14.dat
+
--- /dev/null
+#ifdef RCSID
+static char *RCSid =
+ "$Header: cdemo81.c 14-apr-2006.10:55:52 lburgess Exp $ ";
+#endif /* RCSID */
+
+/* Copyright (c) 1996, 2006, Oracle. All rights reserved.
+*/
+
+/*
+
+ NAME
+ cdemo81.c - Basic OCI V8 functionality
+
+ DESCRIPTION
+
+ * An example program which adds new employee
+ * records to the personnel data base. Checking
+ * is done to insure the integrity of the data base.
+ * The employee numbers are automatically selected using
+ * the current maximum employee number as the start.
+ *
+ * The program queries the user for data as follows:
+ *
+ * Enter employee name:
+ * Enter employee job:
+ * Enter employee salary:
+ * Enter employee dept:
+ *
+ * The program terminates if return key (CR) is entered
+ * when the employee name is requested.
+ *
+ * If the record is successfully inserted, the following
+ * is printed:
+ *
+ * "ename" added to department "dname" as employee # "empno"
+
+ Demonstrates creating a connection, a session and executing some SQL.
+ Also shows the usage of allocating memory for application use which has the
+ life time of the handle.
+
+ MODIFIED (MM/DD/YY)
+ lburgess 04/14/06 - lowercase passwords
+ aliu 04/21/06 - use OCIEnvCreate and exit if it fails
+ mjaeger 07/14/99 - bug 808870: OCCS: convert tabs, no long lines
+ dchatter 10/14/98 - add the usage of xtrmemsz and usrmempp
+ azhao 06/23/97 - Use OCIBindByPos, OCIBindByName; clean up
+ echen 12/17/96 - OCI beautification
+ dchatter 07/18/96 - delete spurious header files
+ dchatter 07/15/96 - hda is a ub4 array to prevent bus error
+ mgianata 06/17/96 - change ociisc() to OCISessionBegin()
+ aroy 04/26/96 - change OCITransCommitt -> OCITransCommit
+ slari 04/24/96 - use OCITransCommitt
+ aroy 02/21/96 - fix bug in get descriptor handle call
+ lchidamb 02/20/96 - cdemo81.c converted for v8 OCI
+ lchidamb 02/20/96 - Creation
+
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <oci.h>
+
+static text *username = (text *) "SCOTT";
+static text *password = (text *) "tiger";
+
+/* Define SQL statements to be used in program. */
+static text *insert = (text *)"INSERT INTO emp(empno, ename, job, sal, deptno)\
+ VALUES (:empno, :ename, :job, :sal, :deptno)";
+static text *seldept = (text *)"SELECT dname FROM dept WHERE deptno = :1";
+static text *maxemp = (text *)"SELECT NVL(MAX(empno), 0) FROM emp";
+static text *selemp = (text *)"SELECT ename, job FROM emp";
+
+static OCIEnv *envhp;
+static OCIError *errhp;
+
+static void checkerr(/*_ OCIError *errhp, sword status _*/);
+static void cleanup(/*_ void _*/);
+static void myfflush(/*_ void _*/);
+int main(/*_ int argc, char *argv[] _*/);
+
+static sword status;
+
+int main(argc, argv)
+int argc;
+char *argv[];
+{
+
+ sword empno, sal, deptno;
+ sword len, len2, rv, dsize, dsize2;
+ sb4 enamelen = 10;
+ sb4 joblen = 9;
+ sb4 deptlen = 14;
+ sb2 sal_ind, job_ind;
+ sb2 db_type, db2_type;
+ sb1 name_buf[20], name2_buf[20];
+ text *cp, *ename, *job, *dept;
+
+ sb2 ind[2]; /* indicator */
+ ub2 alen[2]; /* actual length */
+ ub2 rlen[2]; /* return length */
+
+ OCIDescribe *dschndl1 = (OCIDescribe *) 0,
+ *dschndl2 = (OCIDescribe *) 0,
+ *dschndl3 = (OCIDescribe *) 0;
+
+ OCISession *authp = (OCISession *) 0;
+ OCIServer *srvhp;
+ OCISvcCtx *svchp;
+ OCIStmt *inserthp,
+ *stmthp,
+ *stmthp1;
+ OCIDefine *defnp = (OCIDefine *) 0;
+
+ OCIBind *bnd1p = (OCIBind *) 0; /* the first bind handle */
+ OCIBind *bnd2p = (OCIBind *) 0; /* the second bind handle */
+ OCIBind *bnd3p = (OCIBind *) 0; /* the third bind handle */
+ OCIBind *bnd4p = (OCIBind *) 0; /* the fourth bind handle */
+ OCIBind *bnd5p = (OCIBind *) 0; /* the fifth bind handle */
+ OCIBind *bnd6p = (OCIBind *) 0; /* the sixth bind handle */
+
+ sword errcode = 0;
+
+ errcode = OCIEnvCreate((OCIEnv **) &envhp, (ub4) OCI_DEFAULT,
+ (dvoid *) 0, (dvoid * (*)(dvoid *,size_t)) 0,
+ (dvoid * (*)(dvoid *, dvoid *, size_t)) 0,
+ (void (*)(dvoid *, dvoid *)) 0, (size_t) 0, (dvoid **) 0);
+
+ if (errcode != 0) {
+ (void) printf("OCIEnvCreate failed with errcode = %d.\n", errcode);
+ exit(1);
+ }
+
+ (void) OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &errhp, OCI_HTYPE_ERROR,
+ (size_t) 0, (dvoid **) 0);
+
+ /* server contexts */
+ (void) OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &srvhp, OCI_HTYPE_SERVER,
+ (size_t) 0, (dvoid **) 0);
+
+ (void) OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &svchp, OCI_HTYPE_SVCCTX,
+ (size_t) 0, (dvoid **) 0);
+
+ (void) OCIServerAttach( srvhp, errhp, (text *)"", strlen(""), 0);
+
+ /* set attribute server context in the service context */
+ (void) OCIAttrSet( (dvoid *) svchp, OCI_HTYPE_SVCCTX, (dvoid *)srvhp,
+ (ub4) 0, OCI_ATTR_SERVER, (OCIError *) errhp);
+
+ (void) OCIHandleAlloc((dvoid *) envhp, (dvoid **)&authp,
+ (ub4) OCI_HTYPE_SESSION, (size_t) 0, (dvoid **) 0);
+
+ (void) OCIAttrSet((dvoid *) authp, (ub4) OCI_HTYPE_SESSION,
+ (dvoid *) username, (ub4) strlen((char *)username),
+ (ub4) OCI_ATTR_USERNAME, errhp);
+
+ (void) OCIAttrSet((dvoid *) authp, (ub4) OCI_HTYPE_SESSION,
+ (dvoid *) password, (ub4) strlen((char *)password),
+ (ub4) OCI_ATTR_PASSWORD, errhp);
+
+ checkerr(errhp, OCISessionBegin ( svchp, errhp, authp, OCI_CRED_RDBMS,
+ (ub4) OCI_DEFAULT));
+
+ (void) OCIAttrSet((dvoid *) svchp, (ub4) OCI_HTYPE_SVCCTX,
+ (dvoid *) authp, (ub4) 0,
+ (ub4) OCI_ATTR_SESSION, errhp);
+
+ checkerr(errhp, OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &stmthp,
+ OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0));
+
+ checkerr(errhp, OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &stmthp1,
+ OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0));
+
+ /* Retrieve the current maximum employee number. */
+ checkerr(errhp, OCIStmtPrepare(stmthp, errhp, maxemp,
+ (ub4) strlen((char *) maxemp),
+ (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT));
+
+ /* bind the input variable */
+ checkerr(errhp, OCIDefineByPos(stmthp, &defnp, errhp, 1, (dvoid *) &empno,
+ (sword) sizeof(sword), SQLT_INT, (dvoid *) 0, (ub2 *)0,
+ (ub2 *)0, OCI_DEFAULT));
+
+ /* execute and fetch */
+ if (status = OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1, (ub4) 0,
+ (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT))
+ {
+ if (status == OCI_NO_DATA)
+ empno = 10;
+ else
+ {
+ checkerr(errhp, status);
+ cleanup();
+ return OCI_ERROR;
+ }
+ }
+
+
+ /*
+ * When we bind the insert statement we also need to allocate the storage
+ * of the employee name and the job description.
+ * Since the lifetime of these buffers are the same as the statement, we
+ * will allocate it at the time when the statement handle is allocated; this
+ * will get freed when the statement disappears and there is less
+ * fragmentation.
+ *
+ * sizes required are enamelen+2 and joblen+2 to allow for \n and \0
+ *
+ */
+
+
+ checkerr(errhp, OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &inserthp,
+ OCI_HTYPE_STMT, (size_t) enamelen + 2 + joblen + 2,
+ (dvoid **) &ename));
+ job = (text *) (ename+enamelen+2);
+
+
+ checkerr(errhp, OCIStmtPrepare(stmthp, errhp, insert,
+ (ub4) strlen((char *) insert),
+ (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT));
+
+ checkerr(errhp, OCIStmtPrepare(stmthp1, errhp, seldept,
+ (ub4) strlen((char *) seldept),
+ (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT));
+
+
+ /* Bind the placeholders in the INSERT statement. */
+ if ((status = OCIBindByName(stmthp, &bnd1p, errhp, (text *) ":ENAME",
+ -1, (dvoid *) ename,
+ enamelen+1, SQLT_STR, (dvoid *) 0,
+ (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT)) ||
+ (status = OCIBindByName(stmthp, &bnd2p, errhp, (text *) ":JOB",
+ -1, (dvoid *) job,
+ joblen+1, SQLT_STR, (dvoid *) &job_ind,
+ (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT)) ||
+ (status = OCIBindByName(stmthp, &bnd3p, errhp, (text *) ":SAL",
+ -1, (dvoid *) &sal,
+ (sword) sizeof(sal), SQLT_INT, (dvoid *) &sal_ind,
+ (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT)) ||
+ (status = OCIBindByName(stmthp, &bnd4p, errhp, (text *) ":DEPTNO",
+ -1, (dvoid *) &deptno,
+ (sword) sizeof(deptno), SQLT_INT, (dvoid *) 0,
+ (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT)) ||
+ (status = OCIBindByName(stmthp, &bnd5p, errhp, (text *) ":EMPNO",
+ -1, (dvoid *) &empno,
+ (sword) sizeof(empno), SQLT_INT, (dvoid *) 0,
+ (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT)))
+ {
+ checkerr(errhp, status);
+ cleanup();
+ return OCI_ERROR;
+ }
+
+ /* Bind the placeholder in the "seldept" statement. */
+ if (status = OCIBindByPos(stmthp1, &bnd6p, errhp, 1,
+ (dvoid *) &deptno, (sword) sizeof(deptno),SQLT_INT,
+ (dvoid *) 0, (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT))
+ {
+ checkerr(errhp, status);
+ cleanup();
+ return OCI_ERROR;
+ }
+
+ /* Allocate the dept buffer now that you have length. */
+ /* the deptlen should eventually get from dschndl3. */
+ deptlen = 14;
+ dept = (text *) malloc((size_t) deptlen + 1);
+
+ /* Define the output variable for the select-list. */
+ if (status = OCIDefineByPos(stmthp1, &defnp, errhp, 1,
+ (dvoid *) dept, deptlen+1, SQLT_STR,
+ (dvoid *) 0, (ub2 *) 0, (ub2 *) 0, OCI_DEFAULT))
+ {
+ checkerr(errhp, status);
+ cleanup();
+ return OCI_ERROR;
+ }
+
+ for (;;)
+ {
+ /* Prompt for employee name. Break on no name. */
+ printf("\nEnter employee name (or CR to EXIT): ");
+ fgets((char *) ename, (int) enamelen+1, stdin);
+ cp = (text *) strchr((char *) ename, '\n');
+ if (cp == ename)
+ {
+ printf("Exiting... ");
+ cleanup();
+ return OCI_SUCCESS;
+ }
+ if (cp)
+ *cp = '\0';
+ else
+ {
+ printf("Employee name may be truncated.\n");
+ myfflush();
+ }
+ /* Prompt for the employee's job and salary. */
+ printf("Enter employee job: ");
+ job_ind = 0;
+ fgets((char *) job, (int) joblen + 1, stdin);
+ cp = (text *) strchr((char *) job, '\n');
+ if (cp == job)
+ {
+ job_ind = -1; /* make it NULL in table */
+ printf("Job is NULL.\n");/* using indicator variable */
+ }
+ else if (cp == 0)
+ {
+ printf("Job description may be truncated.\n");
+ myfflush();
+ }
+ else
+ *cp = '\0';
+
+ printf("Enter employee salary: ");
+ scanf("%d", &sal);
+ myfflush();
+ sal_ind = (sal <= 0) ? -2 : 0; /* set indicator variable */
+
+ /*
+ * Prompt for the employee's department number, and verify
+ * that the entered department number is valid
+ * by executing and fetching.
+ */
+ do
+ {
+ printf("Enter employee dept: ");
+ scanf("%d", &deptno);
+ myfflush();
+ if ((status = OCIStmtExecute(svchp, stmthp1, errhp, (ub4) 1, (ub4) 0,
+ (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT))
+ && (status != OCI_NO_DATA))
+ {
+ checkerr(errhp, status);
+ cleanup();
+ return OCI_ERROR;
+ }
+ if (status == OCI_NO_DATA)
+ printf("The dept you entered doesn't exist.\n");
+ } while (status == OCI_NO_DATA);
+
+ /*
+ * Increment empno by 10, and execute the INSERT
+ * statement. If the return code is 1 (duplicate
+ * value in index), then generate the next
+ * employee number.
+ */
+ empno += 10;
+ if ((status = OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1, (ub4) 0,
+ (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT))
+ && status != 1)
+ {
+ checkerr(errhp, status);
+ cleanup();
+ return OCI_ERROR;
+ }
+ while (status == 1)
+ {
+ empno += 10;
+ if ((status = OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1, (ub4) 0,
+ (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT))
+ && status != 1)
+ {
+ checkerr(errhp, status);
+ cleanup();
+ return OCI_ERROR;
+ }
+ } /* end for (;;) */
+
+ /* Commit the change. */
+ if (status = OCITransCommit(svchp, errhp, 0))
+ {
+ checkerr(errhp, status);
+ cleanup();
+ return OCI_ERROR;
+ }
+ printf("\n\n%s added to the %s department as employee number %d\n",
+ ename, dept, empno);
+ }
+}
+
+
+void checkerr(errhp, status)
+OCIError *errhp;
+sword status;
+{
+ text errbuf[512];
+ sb4 errcode = 0;
+
+ switch (status)
+ {
+ case OCI_SUCCESS:
+ break;
+ case OCI_SUCCESS_WITH_INFO:
+ (void) printf("Error - OCI_SUCCESS_WITH_INFO\n");
+ break;
+ case OCI_NEED_DATA:
+ (void) printf("Error - OCI_NEED_DATA\n");
+ break;
+ case OCI_NO_DATA:
+ (void) printf("Error - OCI_NODATA\n");
+ break;
+ case OCI_ERROR:
+ (void) OCIErrorGet((dvoid *)errhp, (ub4) 1, (text *) NULL, &errcode,
+ errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
+ (void) printf("Error - %.*s\n", 512, errbuf);
+ break;
+ case OCI_INVALID_HANDLE:
+ (void) printf("Error - OCI_INVALID_HANDLE\n");
+ break;
+ case OCI_STILL_EXECUTING:
+ (void) printf("Error - OCI_STILL_EXECUTE\n");
+ break;
+ case OCI_CONTINUE:
+ (void) printf("Error - OCI_CONTINUE\n");
+ break;
+ default:
+ break;
+ }
+}
+
+
+/*
+ * Exit program with an exit code.
+ */
+void cleanup()
+{
+ if (envhp)
+ (void) OCIHandleFree((dvoid *) envhp, OCI_HTYPE_ENV);
+ return;
+}
+
+
+void myfflush()
+{
+ eb1 buf[50];
+
+ fgets((char *) buf, 50, stdin);
+}
+
+
+/* end of file cdemo81.c */
+
--- /dev/null
+#/bin/make
+###############################################################################
+# Make file for OCI and OCCI demos
+###############################################################################
+# Usage :
+# For compiling & linking the cdemo81.c file
+# make -f demo.mk buildoci EXE=cdemo81 OBJS=cdemo81.o
+#
+# For compiling & linking the occidml.cpp
+# make -f demo.mk buildocci EXE=occidml OBJS=occidml.o
+#
+# For compiling & linking the occiobj.cpp
+# make -f demo.mk occiobj
+#
+# In general, for any occi program
+# make -f demo.mk buildocci EXE=<exename> OBJS="<list of dependent objs>"
+#
+# For compiling all demos
+# make -f demo.mk
+#
+# NOTE: Please change cc and CC to point to the appropiate location on your
+# machine.
+#
+###############################################################################
+
+.SUFFIXES: .o .c .cpp
+
+CC=/opt/SunProd/SUNWspro6.1/bin/CC
+cc=/opt/SunProd/SUNWspro6.1/bin/cc
+
+ICINCHOME=../
+ICLIBHOME=../../
+ICLIBPATH=-L$(ICLIBHOME)
+THREADLIBS=-lthread
+CCLIB=$(ICLIBPATH) -locci -lclntsh $(THREADLIBS)
+
+CCINCLUDES = -I$(ICINCHOME)include
+
+CCFLAGS=$(CCINCLUDES) -D_REENTRANT -g -xs
+LDFLAGS=
+SO_EXT=.so
+
+REMOVE=rm -rf
+MKLINK=ln
+MAKE=make
+MAKEFILE=demo.mk
+CLNCACHE=cleancache
+CACHEDIR=SunWS_cache
+
+CDEMOEXE=cdemo81
+CDEMOOBJS=cdemo81.o
+OCCIDEMO=occidml
+OCCIOBJDEMO=occiobj
+OTT=../ott
+OCCIOTTUSR=hr
+OCCIOTTPWD=hr
+
+.cpp.o:
+ $(CC) -c -I$(ICINCHOME)include $(CCFLAGS) $<
+
+.c.o:
+ $(cc) -c -I$(ICINCHOME)include $(CCFLAGS) $<
+
+all: clean buildoci $(OCCIDEMO) $(OCCIOBJDEMO)
+
+buildoci: $(CLNCACHE) $(LIBCLNT) $(CDEMOOBJS)
+ $(MKLINK) $(ICLIBHOME)libclntsh$(SO_EXT).11.1 $(ICLIBHOME)libclntsh$(SO_EXT)
+ $(MKLINK) $(ICLIBHOME)libocci$(SO_EXT).11.1 $(ICLIBHOME)libocci$(SO_EXT)
+ $(CC) -o $(CDEMOEXE) $(LDFLAGS) $(CDEMOOBJS) $(CCLIB)
+ $(REMOVE) $(ICLIBHOME)libclntsh$(SO_EXT)
+ $(REMOVE) $(ICLIBHOME)libocci$(SO_EXT)
+
+buildocci: $(CLNCACHE) $(LIBCLNT) $(OBJS)
+ $(MKLINK) $(ICLIBHOME)libclntsh$(SO_EXT).11.1 $(ICLIBHOME)libclntsh$(SO_EXT)
+ $(MKLINK) $(ICLIBHOME)libocci$(SO_EXT).11.1 $(ICLIBHOME)libocci$(SO_EXT)
+ $(CC) -o $(EXE) $(LDFLAGS) $(OBJS) $(CCLIB)
+ $(REMOVE) $(ICLIBHOME)libclntsh$(SO_EXT)
+ $(REMOVE) $(ICLIBHOME)libocci$(SO_EXT)
+
+$(OCCIDEMO):
+ $(MAKE) -f $(MAKEFILE) buildocci OBJS=$@.o EXE=$@
+
+$(OCCIOBJDEMO):
+ $(OTT) userid=$(OCCIOTTUSR)/$(OCCIOTTPWD) \
+ intype=$@.typ \
+ outtype=$@out.type \
+ code=cpp \
+ hfile=$@.h \
+ cppfile=$@o.cpp \
+ attraccess=private \
+ unicode=none
+ $(MAKE) -f $(MAKEFILE) buildocci OBJS="$@.o $@m.o $@o.o" EXE=$@
+
+cleancache:
+ $(REMOVE) $(CACHEDIR)
+ $(REMOVE) $(ICLIBHOME)libclntsh$(SO_EXT)
+ $(REMOVE) $(ICLIBHOME)libocci$(SO_EXT)
+
+clean: $(CLNCACHE)
+ $(REMOVE) cdemo81 cdemo81.o occidml occidml.o occiobj occiobj.o occiobjo* occiobjm* occiobj.h occiobjout.type
+
+
+
+#
+# This port-specific file is currently empty on Solaris. Product
+# lines may use this file to override compiler definitions and
+# flags used in occi.mk.
+#
+
+# Linux compiler definitions
+CC=/usr/bin/gcc
+cc=/usr/bin/gcc
+
+ifeq ($(BUILD32),T)
+CCFLAGS=$(CCINCLUDES) -DLINUX -D_GNU_SOURCE -D_REENTRANT -g -m32
+LDFLAGS=-g -m32
+else
+CCFLAGS=$(CCINCLUDES) -DLINUX -D_GNU_SOURCE -D_REENTRANT -g
+LDFLAGS=-g
+endif
+CLNCACHE=
+
+# This macro CCINCLUDES has to be redefined on Linux because of
+# the existence of the 'new' directory in t_work. The name new
+# clashes with a system header file.
+CCINCLUDES = -I$(SRCHOME)/rdbms/public/ \
+-I$(SRCHOME)/oracore/include -I$(SRCHOME)/oracore/public \
+-I$(SRCHOME)/oracore/port/include \
+-I$(SRCHOME)/nlsrtl/include -I$(SRCHOME)/plsql/public \
+-I$(SRCHOME)/plsql/include -I$(SRCHOME)/network/public \
+-I$(SRCHOME)/network/include -I$(SRCHOME)/otrace/public \
+-I$(SRCHOME)/otrace/include/ -I$(SRCHOME)/precomp/public \
+-I$(SRCHOME)/precomp/include/ -I$(SRCHOME)/slax/include \
+-I$(SRCHOME)/ordts/public -I$(SRCHOME)/ordts/include \
+-I$(SRCHOME)/javavm/include \
+-I$(SRCHOME)/javavm/include/osds/unix/solaris \
+-I$(SRCHOME)/ctx/public -I$(SRCHOME)/ordvir/public \
+-I$(SRCHOME)/ordvir/include -I$(SRCHOME)/rdbms/src/hdir \
+-idirafter .
+
+THREADLIBS=-lpthread
+
+ifdef BUILD_CCC296
+CC=/usr/bin/g++296
+CCFLAGS = -include /ee/dev/bastring.h $(CCINCLUDES) -wchar-stdc++ -DLINUX -D_GNU_SOURCE -D_REENTRANT -g
+endif
+
+ifdef BUILD_ICC
+COMPDIR=/usr/local/packages/icc_remote/10.1.022
+CC=$(COMPDIR)/bin/icpc
+CCFLAGS += -DOCCI_NO_WSTRING=1
+endif
+
--- /dev/null
+#/bin/make
+###############################################################################
+# Make file for PROC demos
+###############################################################################
+# Usage :
+# For compiling proc demos
+# make -f demo_proc_ic.mk
+#
+# For precompiling, compiling & linking the procdemo.pc file
+# make -f demo_proc_ic.mk build EXE=procdemo OBJS=procdemo.o
+#
+# In general, for any proc program
+# make -f demo_proc_ic.mk build EXE=<exename> OBJS="<list of dependent objs>"
+#
+# To make use of any PROC options during precompilation,
+# make -f demo_proc_ic.mk build PROCFLAGS="<list of proc options>"
+# EXE=<exename> OBJS="<list of dependent objs>"
+#
+# NOTES:
+# 1. Please change "cc/CC" and the "InstantClient directories" to point to
+# appropiate locations on your machine before using this makefile.
+# 2. In case of RPM installation, please change the following variables
+# as mentioned below:
+# PROC=/usr/lib/oracle/VV.v/client/bin/proc
+# CCINCLUDES=$(I_SYM)/usr/include/oracle/VV.v/client
+# PRECOMPPUBH=/usr/include/oracle/VV.v/client
+# ICLIBHOME=/usr/lib/oracle/VV.v/client/lib/
+# Legend:
+# VV - Major Oracle version number
+# v - Minor Oracle version number
+# (Ex: For the release 11.2, VV = 11 and v = 2)
+#
+###############################################################################
+
+
+CC=/usr/bin/gcc
+cc=/usr/bin/gcc
+
+# InstantClient Directories.
+ICSDKHOME=../
+ICLIBHOME=../../
+
+MKLINK=ln
+REMOVE=rm -rf
+CLNCACHE=cleancache
+CACHEDIR=SunWS_cachea
+MAKE=make
+MAKEFILE=demo_proc_ic.mk
+PROCDEMO=procdemo
+
+PROC=$(ICSDKHOME)proc
+SO_EXT=.so
+I_SYM=-I
+
+CCINCLUDES= $(I_SYM)$(ICSDKHOME)include
+
+# Pre-compiler Flags.
+PRECOMP_INCLUDE=$(I_SYM). $(SYS_INCLUDE)
+PRECOMPPUBH=$(ICSDKHOME)include
+SYS_INCLUDE=sys_include=\($(PRECOMPPUBH),/usr/include,/usr/lib/gcc-lib/x86_64-redhat-linux/3.2.3/include,/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include,/usr/lib64/gcc/x86_64-suse-linux/4.1.2/include,/usr/lib64/gcc/x86_64-suse-linux/4.3/include,/usr/lib/gcc/x86_64-redhat-linux/4.4.6/include,/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include\)
+
+# Compiler Flags.
+OPTIMIZE=-O2
+LDPATHFLAG=-L
+SPFLAGS=-DLINUX -D_GNU_SOURCE -D_LARGEFILE64_SOURCE=1 -D_LARGEFILE_SOURCE=1 -DSLTS_ENABLE -DSLMXMX_ENABLE -D_REENTRANT -DNS_THREADS
+CCFLAGS= -fPIC -DPRECOMP
+LDFLAGS=-g
+LPFLAGS=
+GFLAG=
+CDEBUG=
+USRFLAGS=
+ICLIBPATH=$(LDPATHFLAG)$(ICLIBHOME)
+PFLAGS=$(CCINCLUDES) $(SPFLAGS) $(LPFLAGS)
+CFLAGS=$(GFLAG) $(OPTIMIZE) $(CDEBUG) $(CCFLAGS) $(PFLAGS) $(USRFLAGS)
+
+# Libraries.
+PROLDLIBS=$(LDCLIENTLIBS) $(THREADLIBS)
+LDCLIENTLIBS=$(ICLIBPATH) $(LLIBCLNTSH) $(LDLIBS)
+LLIBCLNTSH=$(LDLIBFLAG)$(LIBCLNTSHNAME)
+LDLIBFLAG=-l
+LIBCLNTSHNAME=clntsh
+LDLIBS=$(EXSYSLIBS) $(MATHLIB) $(USRLIBS)
+EXSYSLIBS=-ldl
+MATHLIB=-lm
+THREADLIBS=-lpthread
+
+C2O=$(CC) $(CFLAGS) -c $*.c
+PCC2C=$(PROC) $(PROCFLAGS) iname=$(PCCSRC) $(PRECOMP_INCLUDE)
+DEMO_PROC_BUILD=$(CC) -o $(EXE) $(OBJS) $(LDFLAGS) $(PROLDLIBS)
+
+#-----------------------------------------------------------------------------
+# Targets for building the proc sample programs.
+all: clean $(PROCDEMO)
+
+$(PROCDEMO):
+ $(MAKE) -f $(MAKEFILE) build OBJS=$@.o EXE=$@
+
+build: $(CLNCACHE) $(OBJS)
+ $(MKLINK) $(ICLIBHOME)libclntsh$(SO_EXT).11.1 $(ICLIBHOME)libclntsh$(SO_EXT)
+ $(DEMO_PROC_BUILD)
+ $(REMOVE) $(ICLIBHOME)libclntsh$(SO_EXT)
+
+#-----------------------------------------------------------------------------
+# Here are some rules for converting .pc -> .c -> .o
+.SUFFIXES: .pc .c .o
+
+pc1:
+ $(PCC2C)
+
+.pc.c:
+ $(MAKE) -f $(MAKEFILE) PROCFLAGS="$(PROCFLAGS)" PCCSRC=$* I_SYM=include= pc1
+
+.pc.o:
+ $(MAKE) -f $(MAKEFILE) PROCFLAGS="$(PROCFLAGS)" PCCSRC=$* I_SYM=include= pc1
+ $(C2O)
+
+.c.o:
+ $(C2O)
+
+#-----------------------------------------------------------------------------
+# Clean up all executables, *.o and generated *.c files
+clean: $(CLNCACHE)
+ $(REMOVE) $(PROCDEMO) $(PROCDEMO).o $(PROCDEMO).c $(PROCDEMO).lis
+
+cleancache:
+ $(REMOVE) $(CACHEDIR)
+ $(REMOVE) $(ICLIBHOME)libclntsh$(SO_EXT)
+
--- /dev/null
+
+###############################################################################
+# Make file for PROCOB demos
+###############################################################################
+# Usage :
+# For compiling procob demos
+# make -f demo_procob_ic.mk
+#
+# For precompiling, compiling & linking the procobdemo.pco file
+# make -f demo_procob_ic.mk build EXE=procobdemo COBS=procobdemo.cob
+#
+# In general, for any procob program
+# make -f demo_procob_ic.mk build EXE=<exename> COBS="<list of dependent cobs>"
+# To make use of any PROCOB options during precompilation,
+# make -f demo_procob_ic.mk build PROCOBFLAGS="<list of procob options>"
+# EXE=<exename> COBS="<list of dependent cobs>"
+#
+# NOTES:
+# 1. Please change "COB" and the "InstantClient directories" to point to
+# appropiate locations on your machine before using this makefile.
+# 2. In case of RPM installation, please change the following variables
+# as mentioned below:
+# PROCOB=/usr/lib/oracle/VV.v/client/bin/procob
+# ICLIBHOME=/usr/lib/oracle/VV.v/client/lib/
+# Legend:
+# VV - Major Oracle version number
+# v - Minor Oracle version number
+# (Ex: For the release 11.2, VV = 11 and v = 2)
+#
+###############################################################################
+
+COB=cob
+
+# InstantClient Directories.
+ICSDKHOME=../
+ICLIBHOME=../../
+
+MKLINK=ln
+REMOVE=rm -rf
+CLNCACHE=cleancache
+CACHEDIR=SunWS_cachea
+MAKE=make
+MAKEFILE=demo_procob_ic.mk
+PROCOBDEMO=procobdemo
+
+PROCOB=$(ICSDKHOME)/procob
+ICLIBPATH=$(LDPATHFLAG)$(ICLIBHOME)
+SO_EXT=.so
+COBFLAGS=-C IBMCOMP -C NESTCALL -t -x
+LDPATHFLAG=-L
+COBSQLINTF=$(ICLIBHOME)cobsqlintf.o
+LDLIBS=$(EXSYSLIBS) $(MATHLIB) $(USRLIBS)
+EXSYSLIBS=-ldl
+MATHLIB=-lm
+COBOL_PROLDLIBS=$(SHARED_CLIENTLIBS) $(LDLIBS)
+SHARED_CLIENTLIBS=$(LLIBCLNTSH) $(LDFLAGS)
+LLIBCLNTSH=$(LDLIBFLAG)$(LIBCLNTSHNAME)
+LDLIBFLAG=-l
+LIBCLNTSHNAME=clntsh
+LDFLAGS=-g
+
+DEMO_PROCOB_BUILD=$(COB) $(COBFLAGS) -o $(EXE) $(COBS) $(ICLIBPATH) $(COBSQLINTF) $(COBOL_PROLDLIBS)
+
+#-----------------------------------------------------------------------------
+# Targets for building the procob sample programs.
+#
+# The target 'build' puts together an executable $(EXE) from the cobol
+# sources in $(COBS) and the libraries in $(COBOL_PROLDLIBS).
+# The rules to make .cob files from .pco files are later in this file.
+#
+all: clean $(PROCOBDEMO)
+
+$(PROCOBDEMO):
+ $(MAKE) -f $(MAKEFILE) build COBS=$@.cob EXE=$@
+
+build: $(CLNCACHE) $(COBS)
+ $(MKLINK) $(ICLIBHOME)libclntsh$(SO_EXT).11.1 $(ICLIBHOME)libclntsh$(SO_EXT)
+ $(DEMO_PROCOB_BUILD)
+ $(REMOVE) $(ICLIBHOME)libclntsh$(SO_EXT)
+
+#-----------------------------------------------------------------------------
+# Here are some rules for converting .pco -> .cob -> .o and for .cob -> .gnt.
+#
+.SUFFIXES: .cob .cbl .o .pco $(GNT)
+
+.pco.cob:
+ $(PROCOB) $(PROCOBFLAGS) iname=$*.pco
+
+.cob$(GNT):
+ $(COB2GNT)
+
+#-----------------------------------------------------------------------------
+# Clean up all executables, *.o and generated *.cob files
+clean: $(CLNCACHE)
+ $(REMOVE) $(PROCOBDEMO) $(PROCOBDEMO).o $(PROCOBDEMO).cob $(PROCDEMO).lis $(PROCOBDEMO).int $(PROCOBDEMO).idy
+
+cleancache:
+ $(REMOVE) $(CACHEDIR)
+ $(REMOVE) $(ICLIBHOME)libclntsh$(SO_EXT)
--- /dev/null
+/* Copyright (c) 2002, 2004, Oracle. All rights reserved. */
+
+/*
+ NAME
+ occidemo.sql - Create OCCI demo objects
+
+ DESCRIPTION
+ SQL Script to create OCCI demo objects
+ Assumes HR schema is setup
+ Assumes system's account passwd to be manager
+ Execute this before any of the OCCI demos are run
+ To drop the objects created by this SQL use occidemod.sql
+
+ MODIFIED
+ sudsrini 03/06/03 - sudsrini_occi_10ir1_demos (include occidemod)
+ idcqe 03/13/01 - Created
+
+*/
+
+
+/* Drop objects before creating them */
+
+@occidemod.sql
+
+connect hr/hr
+
+CREATE TABLE elements (
+ element_name VARCHAR2(25),
+ molar_volume BINARY_FLOAT,
+ atomic_weight BINARY_DOUBLE
+);
+
+CREATE TABLE author_tab (
+ author_id NUMBER,
+ author_name VARCHAR2(25)
+);
+
+INSERT INTO author_tab (author_id, author_name) VALUES (333, 'JOE');
+INSERT INTO author_tab (author_id, author_name) VALUES (444, 'SMITH');
+
+CREATE OR REPLACE TYPE publ_address AS OBJECT (
+ street_no NUMBER,
+ city VARCHAR2(25)
+)
+/
+
+CREATE TABLE publisher_tab (
+ publisher_id NUMBER,
+ publisher_add publ_address
+);
+
+INSERT INTO publisher_tab (publisher_id, publisher_add) VALUES
+(11, publ_address (121, 'NEW YORK'));
+
+CREATE TABLE publ_address_tab OF publ_address;
+
+INSERT INTO publ_address_tab VALUES (22, 'BOSTON');
+INSERT INTO publ_address_tab VALUES (33, 'BUFFALO');
+INSERT INTO publ_address_tab VALUES (44, 'CALIFORNIA');
+
+
+CREATE OR REPLACE TYPE journal AS TABLE OF VARCHAR2(50)
+/
+CREATE TABLE journal_tab (jid NUMBER, jname journal)
+NESTED TABLE jname STORE AS journal_store;
+
+INSERT INTO journal_tab (jid, jname) VALUES (22, journal ('NATION', 'TIMES'));
+INSERT INTO journal_tab (jid, jname) VALUES (33, journal ('CRICKET', 'ALIVE'));
+
+CREATE OR REPLACE TYPE people_obj AS OBJECT (
+ ssn NUMBER,
+ name VARCHAR2(25)
+) NOT FINAL;
+/
+
+CREATE OR REPLACE TYPE librarian UNDER people_obj(
+ empno NUMBER,
+ sal NUMBER(7,2),
+ dob DATE,
+ photo BLOB
+)
+/
+
+CREATE TABLE librarian_tab OF librarian;
+
+INSERT INTO librarian_tab VALUES
+(101, 'DAVE', 1001, 10000, '12-Jan-1970', empty_blob());
+INSERT INTO librarian_tab VALUES
+(102, 'BOB', 1002, 12000, '17-Jan-1970', empty_blob());
+
+CREATE TABLE article_tab (
+ artid NUMBER,
+ artdesc VARCHAR2(4000),
+ artsummary LONG,
+ artfeedbk VARCHAR2(2000)
+);
+
+CREATE OR REPLACE PROCEDURE demo_proc (col1 IN NUMBER, col2 IN OUT VARCHAR2,
+col3 OUT CHAR) AS
+BEGIN
+ col2 := col1 || ' ' || col2 || ' ' || 'IN-OUT';
+ col3 := 'OUT';
+END;
+/
+
+CREATE OR REPLACE FUNCTION demo_fun (col1 IN NUMBER,
+col2 IN OUT VARCHAR2, col3 OUT CHAR) RETURN CHAR AS
+BEGIN
+ col2 := col1 || ' ' || col2 || ' ' || 'IN-OUT';
+ col3 := 'OUT';
+ RETURN 'abcd';
+END;
+/
+
+CREATE TABLE book (bookid NUMBER, summary VARCHAR2(4000));
+
+CREATE TABLE cover (c1 NUMBER(5), c2 VARCHAR2(20));
+
+DECLARE
+ch1 VARCHAR2(4000) := 'aa';
+ch2 VARCHAR2(4000):= '';
+nu NUMBER := 0;
+BEGIN
+ FOR nu IN 1..11 LOOP
+ ch2 := ch1 || ch2; ch1 := ch2;
+ END LOOP;
+ INSERT INTO book (bookid, summary) VALUES (11, ch1);
+END;
+/
+
+CREATE TYPE elecdoc_typ AS OBJECT
+ ( document_typ VARCHAR2(32)
+ , formatted_doc BLOB
+ ) ;
+/
+CREATE TYPE elecdoc_tab AS TABLE OF elecdoc_typ;
+/
+
+CREATE TYPE elheader_typ AS OBJECT
+ ( header_name VARCHAR2(256)
+ , creation_date DATE
+ , header_text VARCHAR2(1024)
+ , logo BLOB
+ );
+/
+
+CREATE TABLE electronic_media
+ ( product_id NUMBER(6)
+ , ad_id NUMBER(6)
+ , ad_composite BLOB
+ , ad_sourcetext CLOB
+ , ad_finaltext CLOB
+ , ad_fltextn NCLOB
+ , ad_elecdocs_ntab elecdoc_tab
+ , ad_photo BLOB
+ , ad_graphic BFILE
+ , ad_header elheader_typ
+ , press_release LONG
+ ) NESTED TABLE ad_elecdocs_ntab STORE AS elecdocs_nestedtab;
+CREATE UNIQUE INDEX printmedia_pk
+ ON electronic_media (product_id, ad_id);
+
+ALTER TABLE electronic_media
+ADD ( CONSTRAINT printmedia__pk
+ PRIMARY KEY (product_id, ad_id)
+ ) ;
+
+
+
+CREATE TYPE people_typ AS OBJECT
+(
+ name VARCHAR2(30),
+ ssn NUMBER,
+ dob DATE
+) not final;
+/
+
+CREATE TABLE people_tab OF people_typ;
+
+INSERT INTO people_tab VALUES (people_typ('john', 111, '01-Jan-1970'));
+INSERT INTO people_tab VALUES (people_typ('jill', 666, '06-Jan-1976'));
+
+CREATE TYPE student UNDER people_typ
+(
+ stud_id NUMBER,
+ teammate REF people_typ
+) NOT FINAL;
+/
+
+CREATE TABLE student_tab OF student;
+INSERT INTO student_tab VALUES ('jimmy',222,'02-Feb-1976',200,
+(SELECT REF(a) FROM people_tab a where name='john'));
+
+CREATE TYPE parttime_stud UNDER student
+(
+ course_id NUMBER,
+ partner REF student
+)NOT FINAL;
+/
+CREATE TABLE parttime_stud_tab OF parttime_stud;
+
+INSERT INTO parttime_stud_tab VALUES ('james',333,'03-Feb-1976',300,
+(SELECT REF(a) FROM people_tab a where name='john'),3000,
+(SELECT REF(a) FROM student_tab a));
+
+
+CREATE TYPE foreign_student UNDER parttime_stud
+(
+ country VARCHAR2(30),
+ leader REF parttime_stud
+);
+/
+CREATE TABLE foreign_student_tab OF foreign_student;
+
+COMMIT;
+
+
+/* OCCI AQ Objects */
+
+
+connect system/manager
+
+grant aq_administrator_role, aq_user_role to hr;
+grant execute on dbms_aq to hr;
+grant execute on dbms_aqadm to hr;
+
+BEGIN
+ dbms_aqadm.grant_system_privilege('ENQUEUE_ANY','hr',FALSE);
+ dbms_aqadm.grant_system_privilege('DEQUEUE_ANY','hr',FALSE);
+END;
+/
+
+connect hr/hr
+
+CREATE OR REPLACE TYPE hr_obj AS OBJECT
+(a1 NUMBER, a2 VARCHAR2(25));
+/
+
+BEGIN
+ dbms_aqadm.create_queue_table (
+ queue_table => 'hr.table01',
+ queue_payload_type => 'RAW',
+ comment => 'single-consumer',
+ multiple_consumers => false,
+ compatible => '8.1.0'
+);
+END;
+/
+
+BEGIN
+ dbms_aqadm.create_queue (
+ queue_name => 'queue01',
+ queue_table=> 'hr.table01'
+);
+END;
+/
+BEGIN
+ dbms_aqadm.start_queue(queue_name => 'queue01');
+END;
+/
+
+BEGIN
+ dbms_aqadm.create_queue_table (
+ queue_table => 'hr.table02',
+ queue_payload_type => 'SYS.ANYDATA',
+ comment => 'multi-consumer',
+ multiple_consumers => true,
+ compatible => '8.1.0'
+);
+END;
+/
+
+BEGIN
+ dbms_aqadm.create_queue (
+ queue_name => 'queue02',
+ queue_table=> 'hr.table02'
+);
+END;
+/
+BEGIN
+ dbms_aqadm.start_queue(queue_name => 'queue02');
+END;
+/
+
+BEGIN
+ dbms_aqadm.create_queue_table (
+ queue_table => 'hr.table03',
+ queue_payload_type => 'hr_obj',
+ comment => 'multi-consumer',
+ multiple_consumers => true,
+ compatible => '8.1.0'
+);
+END;
+/
+
+BEGIN
+ dbms_aqadm.create_queue (
+ queue_name => 'queue03',
+ queue_table=> 'hr.table03'
+);
+END;
+/
+BEGIN
+ dbms_aqadm.start_queue(queue_name => 'queue03');
+END;
+/
+
+BEGIN
+ dbms_aqadm.create_queue_table (
+ queue_table => 'hr.table04',
+ queue_payload_type => 'RAW',
+ comment => 'multiple-consumer',
+ multiple_consumers => true,
+ compatible => '8.1.0'
+);
+END;
+/
+
+BEGIN
+ dbms_aqadm.create_queue (
+ queue_name => 'queue04',
+ queue_table=> 'hr.table04'
+);
+END;
+/
+BEGIN
+ dbms_aqadm.start_queue(queue_name => 'queue04');
+END;
+/
+
+Rem Add default local subscribers to the queues
+
+BEGIN
+ dbms_aqadm.add_subscriber( queue_name=> 'queue03',
+ subscriber=> sys.aq$_agent('AGT1','hr.queue03', 0));
+END;
+/
+
+BEGIN
+ dbms_aqadm.add_subscriber( queue_name=> 'queue04',
+ subscriber=> sys.aq$_agent('AGT1','hr.queue04', 0));
+END;
+/
+
--- /dev/null
+/* Copyright (c) 2002, 2003, Oracle Corporation. All rights reserved. */
+
+/*
+ NAME
+ occidemod - SQL Script to drop OCCI demo objects
+
+ DESCRIPTION
+ SQL Script to drop OCCI demo objects created by occidemo.sql
+ To be run in the end to drop OCCI demo objects from HR schema
+
+ MODIFIED
+ sudsrini 03/06/03 - sudsrini_occi_10ir1_demos
+ sudsrini 02/21/03 - Created
+
+*/
+
+connect hr/hr
+
+DROP PROCEDURE demo_proc;
+DROP FUNCTION demo_fun;
+
+DROP TABLE elements;
+DROP TABLE author_tab;
+DROP TABLE publisher_tab;
+DROP TABLE publ_address_tab;
+DROP TABLE journal_tab;
+DROP TABLE article_tab;
+DROP TABLE librarian_tab;
+DROP TABLE book;
+DROP TABLE cover;
+
+DROP TYPE journal;
+DROP TYPE publ_address;
+DROP TYPE librarian;
+DROP TYPE people_obj;
+
+
+DROP TABLE electronic_media;
+DROP TYPE elheader_typ;
+DROP TYPE elecdoc_tab;
+DROP TYPE elecdoc_typ;
+
+DROP TABLE foreign_student_tab;
+DROP TABLE parttime_stud_tab;
+DROP TABLE student_tab;
+DROP TABLE people_tab;
+DROP TYPE foreign_student;
+DROP TYPE parttime_stud;
+DROP TYPE student;
+DROP TYPE people_typ;
+
+/* OCCI AQ Object */
+
+connect system/manager
+
+revoke aq_administrator_role from hr;
+
+connect hr/hr
+
+BEGIN
+ dbms_aqadm.stop_queue(queue_name => 'queue01');
+END;
+/
+
+BEGIN
+ dbms_aqadm.drop_queue('queue01');
+END;
+/
+
+BEGIN
+ dbms_aqadm.drop_queue_table('hr.table01');
+END;
+/
+
+BEGIN
+ dbms_aqadm.stop_queue(queue_name => 'queue02');
+END;
+/
+
+BEGIN
+ dbms_aqadm.drop_queue('queue02');
+END;
+/
+
+BEGIN
+ dbms_aqadm.drop_queue_table('hr.table02');
+END;
+/
+
+BEGIN
+ dbms_aqadm.stop_queue(queue_name => 'queue03');
+END;
+/
+
+BEGIN
+ dbms_aqadm.drop_queue('queue03');
+END;
+/
+
+BEGIN
+ dbms_aqadm.drop_queue_table('hr.table03');
+END;
+/
+
+BEGIN
+ dbms_aqadm.stop_queue(queue_name => 'queue04');
+END;
+/
+
+BEGIN
+ dbms_aqadm.drop_queue('queue04');
+END;
+/
+
+BEGIN
+ dbms_aqadm.drop_queue_table('hr.table04');
+END;
+/
+
+DROP TYPE hr_obj;
+
--- /dev/null
+/* Copyright (c) 2001, 2008, Oracle. All rights reserved. */
+/*
+ NAME
+ occidml.cpp - Basic DML Operations demo
+
+ DESCRIPTION
+ To exhibit the insertion, selection, updating and deletion of
+ a row using OCCI interface
+
+ MODIFIED (MM/DD/YY)
+ mvasudev 05/22/08 - Add try/catch blocks
+ sudsrini 10/22/06 - Username/Password lower case
+ lburgess 04/14/06 - lowercase passwords
+ sudsrini 07/23/04 - Copyright Info
+ idcqe 03/05/01 - Creation
+
+*/
+
+#include <iostream>
+#include <occi.h>
+using namespace oracle::occi;
+using namespace std;
+
+class occidml
+{
+ private:
+
+ Environment *env;
+ Connection *conn;
+ Statement *stmt;
+ public:
+
+ occidml (string user, string passwd, string db)
+ {
+ env = Environment::createEnvironment (Environment::DEFAULT);
+ conn = env->createConnection (user, passwd, db);
+ }
+
+ ~occidml ()
+ {
+ env->terminateConnection (conn);
+ Environment::terminateEnvironment (env);
+ }
+
+ /**
+ * Insertion of a row with dynamic binding, PreparedStatement functionality.
+ */
+ void insertBind (int c1, string c2)
+ {
+ string sqlStmt = "INSERT INTO author_tab VALUES (:x, :y)";
+ stmt=conn->createStatement (sqlStmt);
+ try{
+ stmt->setInt (1, c1);
+ stmt->setString (2, c2);
+ stmt->executeUpdate ();
+ cout << "insert - Success" << endl;
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for insertBind"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ conn->terminateStatement (stmt);
+ }
+
+ /**
+ * Inserting a row into the table.
+ */
+ void insertRow ()
+ {
+ string sqlStmt = "INSERT INTO author_tab VALUES (111, 'ASHOK')";
+ stmt = conn->createStatement (sqlStmt);
+ try{
+ stmt->executeUpdate ();
+ cout << "insert - Success" << endl;
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for insertRow"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ conn->terminateStatement (stmt);
+ }
+
+ /**
+ * updating a row
+ */
+ void updateRow (int c1, string c2)
+ {
+ string sqlStmt =
+ "UPDATE author_tab SET author_name = :x WHERE author_id = :y";
+ stmt = conn->createStatement (sqlStmt);
+ try{
+ stmt->setString (1, c2);
+ stmt->setInt (2, c1);
+ stmt->executeUpdate ();
+ cout << "update - Success" << endl;
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for updateRow"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ conn->terminateStatement (stmt);
+ }
+
+
+ /**
+ * deletion of a row
+ */
+ void deleteRow (int c1, string c2)
+ {
+ string sqlStmt =
+ "DELETE FROM author_tab WHERE author_id= :x AND author_name = :y";
+ stmt = conn->createStatement (sqlStmt);
+ try{
+ stmt->setInt (1, c1);
+ stmt->setString (2, c2);
+ stmt->executeUpdate ();
+ cout << "delete - Success" << endl;
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for deleteRow"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ conn->terminateStatement (stmt);
+ }
+
+ /**
+ * displaying all the rows in the table
+ */
+ void displayAllRows ()
+ {
+ string sqlStmt = "SELECT author_id, author_name FROM author_tab \
+ order by author_id";
+ stmt = conn->createStatement (sqlStmt);
+ ResultSet *rset = stmt->executeQuery ();
+ try{
+ while (rset->next ())
+ {
+ cout << "author_id: " << rset->getInt (1) << " author_name: "
+ << rset->getString (2) << endl;
+ }
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for displayAllRows"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ stmt->closeResultSet (rset);
+ conn->terminateStatement (stmt);
+ }
+
+ /**
+ * Inserting a row into elements table.
+ * Demonstrating the usage of BFloat and BDouble datatypes
+ */
+ void insertElement (string elm_name, float mvol=0.0, double awt=0.0)
+ {
+ BFloat mol_vol;
+ BDouble at_wt;
+
+ if (!(mvol))
+ mol_vol.isNull = TRUE;
+ else
+ mol_vol.value = mvol;
+
+ if (!(awt))
+ at_wt.isNull = TRUE;
+ else
+ at_wt.value = awt;
+
+ string sqlStmt = "INSERT INTO elements VALUES (:v1, :v2, :v3)";
+ stmt = conn->createStatement (sqlStmt);
+
+ try{
+ stmt->setString(1, elm_name);
+ stmt->setBFloat(2, mol_vol);
+ stmt->setBDouble(3, at_wt);
+ stmt->executeUpdate ();
+ cout << "insertElement - Success" << endl;
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for insertElement"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+ conn->terminateStatement (stmt);
+ }
+
+ /**
+ * displaying rows from element table
+ */
+ void displayElements ()
+ {
+ string sqlStmt =
+ "SELECT element_name, molar_volume, atomic_weight FROM elements \
+ order by element_name";
+ stmt = conn->createStatement (sqlStmt);
+ ResultSet *rset = stmt->executeQuery ();
+ try{
+ cout.precision(7);
+ while (rset->next ())
+ {
+ string elem_name = rset->getString(1);
+ BFloat mol_vol = rset->getBFloat(2);
+ BDouble at_wt = rset->getBDouble(3);
+
+ cout << "Element Name: " << elem_name << endl;
+
+ if ( mol_vol.isNull )
+ cout << "Molar Volume is NULL" << endl;
+ else
+ cout << "Molar Volume: " << mol_vol.value << " cm3 mol-1" << endl;
+
+ if ( at_wt.isNull )
+ cout << "Atomic Weight is NULL" << endl;
+ else
+ cout << "Atomic Weight: " << at_wt.value << " g/mole" << endl;
+ }
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for displayElements"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ stmt->closeResultSet (rset);
+ conn->terminateStatement (stmt);
+ }
+
+}; // end of class occidml
+
+
+int main (void)
+{
+ string user = "hr";
+ string passwd = "hr";
+ string db = "";
+ try{
+ cout << "occidml - Exhibiting simple insert, delete & update operations"
+ << endl;
+ occidml *demo = new occidml (user, passwd, db);
+ cout << "Displaying all records before any operation" << endl;
+ demo->displayAllRows ();
+
+ cout << "Inserting a record into the table author_tab "
+ << endl;
+ demo->insertRow ();
+
+ cout << "Displaying the records after insert " << endl;
+ demo->displayAllRows ();
+
+ cout << "Inserting a records into the table author_tab using dynamic bind"
+ << endl;
+ demo->insertBind (222, "ANAND");
+
+ cout << "Displaying the records after insert using dynamic bind" << endl;
+ demo->displayAllRows ();
+
+ cout << "deleting a row with author_id as 222 from author_tab table" << endl;
+ demo->deleteRow (222, "ANAND");
+
+ cout << "updating a row with author_id as 444 from author_tab table" << endl;
+ demo->updateRow (444, "ADAM");
+
+ cout << "displaying all rows after all the operations" << endl;
+ demo->displayAllRows ();
+
+ cout << "inserting radio active element properties" << endl;
+ demo->insertElement ("Uranium", 12.572, 238.0289 );
+ demo->insertElement ("Plutonium", 12.12, 244.0642 );
+ demo->insertElement ("Curium", 18.17, 247.0703 );
+ demo->insertElement ("Thorium");
+ demo->insertElement ("Radium", 41.337, 226.0254);
+
+ cout << "displaying all radio active element properties" << endl;
+ demo->displayElements ();
+
+ delete (demo);
+ }
+ catch (SQLException ex){
+ cout << ex.getMessage() << endl;
+ }
+ cout << "occidml - done" << endl;
+}
--- /dev/null
+/* Copyright (c) 2001, 2006, Oracle. All rights reserved. */
+/*
+ NAME
+ occiobj.cpp - OCCI Embedded Object demo
+
+ DESCRIPTION
+ This demo performs all DML operations using OCCI interface
+ on embedded object column of table
+
+
+ MODIFIED (MM/DD/YY)
+ sudsrini 10/22/06 - Username/Password lower case
+ lburgess 04/14/06 - lowercase passwords
+ sudsrini 07/23/04 - Copyright Info
+ idcqe 03/05/01 - Creation
+
+*/
+
+#include <iostream>
+#include "occiobjm.h"
+
+using namespace oracle::occi;
+using namespace std;
+
+class occiobj
+{
+ private:
+
+ Environment *env;
+ Connection *con;
+ Statement *stmt;
+ public:
+
+ occiobj (string user, string passwd, string db)
+ {
+ env = Environment::createEnvironment (Environment::OBJECT);
+ occiobjm (env);
+ con = env->createConnection (user, passwd, db);
+ }
+
+ ~occiobj ()
+ {
+ env->terminateConnection (con);
+ Environment::terminateEnvironment (env);
+ }
+
+ /**
+ * Insertion of a row
+ */
+ void insertRow (int c1, int a1, string a2)
+ {
+ cout << "Inserting record - Publisher id :" << c1 <<
+ ", Publisher address :" << a1 << ", " << a2 <<endl;
+ string sqlStmt = "INSERT INTO publisher_tab VALUES (:x, :y)";
+ try{
+ stmt = con->createStatement (sqlStmt);
+ stmt->setInt (1, c1);
+ address *o = new address ();
+ o->setStreet_no (Number (a1));
+ o->setCity (a2);
+ stmt->setObject (2, o);
+ stmt->executeUpdate ();
+ cout << "Insert - Success" << endl;
+ delete (o);
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for insertRow"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ con->terminateStatement (stmt);
+ }
+
+
+ /**
+ * updating a row
+ */
+ void updateRow (int c1, int a1, string a2)
+ {
+ cout << "Upadating record with publisher id :"<< c1 << endl;
+ string sqlStmt =
+ "UPDATE publisher_tab SET publisher_add= :x WHERE publisher_id = :y";
+ try{
+ stmt = con->createStatement (sqlStmt);
+ address *o = new address ();
+ o->setStreet_no (Number (a1));
+ o->setCity (a2);
+ stmt->setObject (1, o);
+ stmt->setInt (2, c1);
+ stmt->executeUpdate ();
+ cout << "Update - Success" << endl;
+ delete (o);
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for updateRow"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+ con->terminateStatement (stmt);
+ }
+
+
+ /**
+ * deletion of a row
+ */
+ void deleteRow (int c1, int a1, string a2)
+ {
+ cout << "Deletion of record where publisher id :" << c1 <<endl;
+ string sqlStmt =
+ "DELETE FROM publisher_tab WHERE publisher_id= :x AND publisher_add = :y";
+ try{
+ stmt = con->createStatement (sqlStmt);
+ stmt->setInt (1, c1);
+
+ address *o = new address ();
+ o->setStreet_no (Number (a1));
+ o->setCity (a2);
+ stmt->setObject (2, o);
+ stmt->executeUpdate ();
+ cout << "Delete - Success" << endl;
+ delete (o);
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for deleteRow"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ con->terminateStatement (stmt);
+ }
+
+ /**
+ * displaying all the rows in the table
+ */
+ void displayAllRows ()
+ {
+ string sqlStmt = "SELECT publisher_id, publisher_add FROM publisher_tab \
+ order by publisher_id";
+ try{
+ stmt = con->createStatement (sqlStmt);
+ ResultSet *rset = stmt->executeQuery ();
+
+ while (rset->next ())
+ {
+ cout << "publisher id: " << rset->getInt (1)
+ << " publisher address: address (" ;
+ address *o = (address *)rset->getObject (2);
+ cout << (int)o->getStreet_no () << ", " << o->getCity () << ")" << endl;
+ }
+
+ stmt->closeResultSet (rset);
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for displayAllRows"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ con->terminateStatement (stmt);
+ }
+
+};//end of class occiobj;
+
+
+int main (void)
+{
+ string user = "hr";
+ string passwd = "hr";
+ string db = "";
+
+ try
+ {
+ cout << "occiobj - Exhibiting simple insert, delete & update operations"
+ " on Oracle objects" << endl;
+ occiobj *demo = new occiobj (user, passwd, db);
+
+ cout << "displaying all rows before operations" << endl;
+ demo->displayAllRows ();
+
+ demo->insertRow (12, 122, "MIKE");
+
+ demo->deleteRow (11, 121, "ANNA");
+
+ demo->updateRow (23, 123, "KNUTH");
+
+ cout << "displaying all rows after all operations" << endl;
+ demo->displayAllRows ();
+
+ delete (demo);
+ cout << "occiobj - done" << endl;
+ }catch (SQLException ea)
+ {
+ cerr << "Error running the demo: " << ea.getMessage () << endl;
+ }
+}
--- /dev/null
+CASE=SAME
+MAPFILE=occiobjm.cpp
+TYPE publ_address as address
--- /dev/null
+/*
+ * procdemo.pc
+ *
+ * This program connects to ORACLE, declares and opens a cursor,
+ * fetches the names, salaries, and commissions of all
+ * salespeople, displays the results, then closes the cursor.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <sqlca.h>
+#include <stdlib.h>
+#include <sqlda.h>
+#include <sqlcpr.h>
+
+#define UNAME_LEN 20
+#define PWD_LEN 11
+
+/*
+ * Use the precompiler typedef'ing capability to create
+ * null-terminated strings for the authentication host
+ * variables. (This isn't really necessary--plain char *'s
+ * would work as well. This is just for illustration.)
+ */
+typedef char asciiz[PWD_LEN];
+
+EXEC SQL TYPE asciiz IS CHARZ(PWD_LEN) REFERENCE;
+asciiz username;
+asciiz password;
+
+struct emp_info
+{
+ asciiz emp_name;
+ float salary;
+ float commission;
+};
+
+void sql_error(msg)
+ char *msg;
+{
+ char err_msg[512];
+ size_t buf_len, msg_len;
+
+ EXEC SQL WHENEVER SQLERROR CONTINUE;
+
+ printf("\n%s\n", msg);
+
+/* Call sqlglm() to get the complete text of the
+ * error message.
+ */
+ buf_len = sizeof (err_msg);
+ sqlglm(err_msg, &buf_len, &msg_len);
+ printf("%.*s\n", msg_len, err_msg);
+
+ EXEC SQL ROLLBACK RELEASE;
+ exit(EXIT_FAILURE);
+}
+
+void main()
+{
+ struct emp_info *emp_rec_ptr;
+
+/* Allocate memory for emp_info struct. */
+ if ((emp_rec_ptr =
+ (struct emp_info *) malloc(sizeof(struct emp_info))) == 0)
+ {
+ fprintf(stderr, "Memory allocation error.\n");
+ exit(EXIT_FAILURE);
+ }
+
+/* Connect to ORACLE. */
+ strcpy(username, "scott");
+ strcpy(password, "tiger");
+
+ EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--");
+
+ EXEC SQL CONNECT :username IDENTIFIED BY :password;
+ printf("\nConnected to ORACLE as user: %s\n", username);
+
+/* Declare the cursor. All static SQL explicit cursors
+ * contain SELECT commands. 'salespeople' is a SQL identifier,
+ * not a (C) host variable.
+ */
+ EXEC SQL DECLARE salespeople CURSOR FOR
+ SELECT ENAME, SAL, COMM
+ FROM EMP
+ WHERE JOB LIKE 'SALES%';
+
+/* Open the cursor. */
+ EXEC SQL OPEN salespeople;
+
+/* Get ready to print results. */
+ printf("\n\nThe company's salespeople are--\n\n");
+ printf("Salesperson Salary Commission\n");
+ printf("----------- ------ ----------\n");
+
+/* Loop, fetching all salesperson's statistics.
+ * Cause the program to break the loop when no more
+ * data can be retrieved on the cursor.
+ */
+ EXEC SQL WHENEVER NOT FOUND DO break;
+
+ for (;;)
+ {
+ EXEC SQL FETCH salespeople INTO :emp_rec_ptr;
+ printf("%s %9.2f %12.2f\n", emp_rec_ptr->emp_name,
+ emp_rec_ptr->salary, emp_rec_ptr->commission);
+ }
+
+/* Close the cursor. */
+ EXEC SQL CLOSE salespeople;
+
+ printf("\nGOOD-BYE!!\n\n");
+
+ EXEC SQL COMMIT WORK RELEASE;
+ exit(EXIT_SUCCESS);
+}
+
--- /dev/null
+ *****************************************************************
+ * procobdemo.pco - Pro*COBOL demo file for Instant Client. *
+ * *
+ * This program logs on to ORACLE, declares and opens a cursor, *
+ * fetches the names, salaries, and commissions of all *
+ * salespeople, displays the results, then closes the cursor. *
+ *****************************************************************
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. CURSOR-OPS.
+ ENVIRONMENT DIVISION.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+
+ EXEC SQL BEGIN DECLARE SECTION END-EXEC.
+ 01 USERNAME PIC X(10) VARYING.
+ 01 PASSWD PIC X(10) VARYING.
+ 01 EMP-REC-VARS.
+ 05 EMP-NAME PIC X(10) VARYING.
+ 05 SALARY PIC S9(6)V99
+ DISPLAY SIGN LEADING SEPARATE.
+ 05 COMMISSION PIC S9(6)V99
+ DISPLAY SIGN LEADING SEPARATE.
+ EXEC SQL VAR SALARY IS DISPLAY(8,2) END-EXEC.
+ EXEC SQL VAR COMMISSION IS DISPLAY(8,2) END-EXEC.
+ EXEC SQL END DECLARE SECTION END-EXEC.
+
+ EXEC SQL INCLUDE SQLCA END-EXEC.
+
+ 01 DISPLAY-VARIABLES.
+ 05 D-EMP-NAME PIC X(10).
+ 05 D-SALARY PIC Z(4)9.99.
+ 05 D-COMMISSION PIC Z(4)9.99.
+
+ PROCEDURE DIVISION.
+
+ BEGIN-PGM.
+ EXEC SQL WHENEVER SQLERROR
+ DO PERFORM SQL-ERROR END-EXEC.
+ PERFORM LOGON.
+ EXEC SQL DECLARE SALESPEOPLE CURSOR FOR
+ SELECT ENAME, SAL, COMM
+ FROM EMP
+ WHERE JOB LIKE 'SALES%'
+ END-EXEC.
+ EXEC SQL OPEN SALESPEOPLE END-EXEC.
+ DISPLAY " ".
+ DISPLAY "SALESPERSON SALARY COMMISSION".
+ DISPLAY "----------- ---------- ----------".
+
+ FETCH-LOOP.
+ EXEC SQL WHENEVER NOT FOUND
+ DO PERFORM SIGN-OFF END-EXEC.
+ EXEC SQL FETCH SALESPEOPLE
+ INTO :EMP-NAME, :SALARY, :COMMISSION
+ END-EXEC.
+ MOVE EMP-NAME-ARR TO D-EMP-NAME.
+ MOVE SALARY TO D-SALARY.
+ MOVE COMMISSION TO D-COMMISSION.
+ DISPLAY D-EMP-NAME, " ", D-SALARY, " ", D-COMMISSION.
+ MOVE SPACES TO EMP-NAME-ARR.
+ GO TO FETCH-LOOP.
+
+ LOGON.
+ MOVE "scott" TO USERNAME-ARR.
+ MOVE 5 TO USERNAME-LEN.
+ MOVE "tiger" TO PASSWD-ARR.
+ MOVE 5 TO PASSWD-LEN.
+ EXEC SQL
+ CONNECT :USERNAME IDENTIFIED BY :PASSWD
+ END-EXEC.
+ DISPLAY " ".
+ DISPLAY "CONNECTED TO ORACLE AS USER: ", USERNAME-ARR.
+
+ SIGN-OFF.
+ EXEC SQL CLOSE SALESPEOPLE END-EXEC.
+ DISPLAY " ".
+ DISPLAY "HAVE A GOOD DAY.".
+ DISPLAY " ".
+ EXEC SQL COMMIT WORK RELEASE END-EXEC.
+ STOP RUN.
+
+ SQL-ERROR.
+ EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.
+ DISPLAY " ".
+ DISPLAY "ORACLE ERROR DETECTED:".
+ DISPLAY " ".
+ DISPLAY SQLERRMC.
+ EXEC SQL ROLLBACK WORK RELEASE END-EXEC.
+ STOP RUN.
--- /dev/null
+/*
+ * $Header: ldap/public/ldap.h /main/28 2008/09/26 16:32:41 vmedam Exp $
+ */
+
+/* Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved.*/
+/*
+ NAME
+ ldap.h - Used by clients.
+ DESCRIPTION
+ <short description of component this file declares/defines>
+ PUBLIC FUNCTION(S)
+ <list of external functions declared/defined - with one-line descriptions>
+ PRIVATE FUNCTION(S)
+ <list of static functions defined in .c file - with one-line descriptions>
+ RETURNS
+ <function return values, for .c file with single function>
+ NOTES
+ <other useful comments, qualifications, etc.>
+ MODIFIED (MM/DD/YY)
+ vmedam 09/25/08 -
+ ******** 09/17/08 - bug#7312369
+ ******** 03/20/08 - bug#5743318
+ ******** 03/17/08 - Bug 6838567
+ ******** 09/16/05 - fix bug#3935094
+ ******** 05/09/05 - Bug 4288744
+ ******** 06/11/04 - Bug 3512354
+ ******** 02/12/04 - Removing data type mismatch with internal definitions
+ ****** 10/22/03 - fix bug 1869186
+ ****** 10/01/03 - Add ora_ldap_init_clientctx
+ ****** 08/11/03 - Add new option for sasl credentials
+ ******** 02/22/03 - bugfix #2802996
+ ****** 02/02/03 - Add SASL interfaces
+ ******** 10/15/02 - client side referral cache changes
+ ******** 10/12/02 - change in discovery api's
+ ******** 04/30/01 - fix compilation errors
+ ******* 04/13/01 - add normalize DN protos
+ ****** 04/07/01 - v3 Modifications
+ ***** 06/02/00 - fix bug 1294614
+ ***** 03/31/00 - fix porting except. # 1234272
+ ****** 05/19/98 - Initial Creation
+*/
+/*
+ * Copyright (c) 1990, 2008, Oracle and/or its affiliates. All rights reserved.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of Michigan at Ann Arbor. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific prior written permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ */
+
+#ifndef GSLC_ORACLE
+#define GSLC_ORACLE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef WINSOCK
+#include "msdos.h"
+#include <winsock.h>
+#endif
+
+/* BER classes and mask */
+#define LBER_CLASS_UNIVERSAL 0x00
+#define LBER_CLASS_APPLICATION 0x40
+#define LBER_CLASS_CONTEXT 0x80
+#define LBER_CLASS_PRIVATE 0xc0
+#define LBER_CLASS_MASK 0xc0
+
+/* BER encoding type and mask */
+#define LBER_PRIMITIVE 0x00
+#define LBER_CONSTRUCTED 0x20
+#define LBER_ENCODING_MASK 0x20
+
+#define LBER_BIG_TAG_MASK 0x1f
+#define LBER_MORE_TAG_MASK 0x80
+
+/*
+ * Note that LBER_ERROR and LBER_DEFAULT are values that can never appear
+ * as valid BER tags, and so it is safe to use them to report errors. In
+ * fact, any tag for which the following is true is invalid:
+ * (( tag & 0x00000080 ) != 0 ) && (( tag & 0xFFFFFF00 ) != 0 )
+ */
+#define LBER_ERROR -1
+#define LBER_DEFAULT -1
+
+/* general BER types we know about */
+#define LBER_BOOLEAN 0x01L
+#define LBER_INTEGER 0x02L
+#define LBER_BITSTRING 0x03L
+#define LBER_OCTETSTRING 0x04L
+#define LBER_NULL 0x05L
+#define LBER_ENUMERATED 0x0aL
+#define LBER_SEQUENCE 0x30L /* constructed */
+#define LBER_SET 0x31L /* constructed */
+
+#define OLD_LBER_SEQUENCE 0x10L /* w/o constructed bit - broken */
+#define OLD_LBER_SET 0x11L /* w/o constructed bit - broken */
+
+typedef int (*BERTranslateProc)( char **bufp, unsigned int *buflenp,
+ int free_input );
+
+typedef struct seqorset {
+ unsigned int sos_clen;
+ unsigned int sos_tag;
+ char *sos_first;
+ char *sos_ptr;
+ struct seqorset *sos_next;
+} Seqorset;
+#define NULLSEQORSET ((Seqorset *) 0)
+
+#define SOS_STACK_SIZE 8 /* depth of the pre-allocated sos structure stack */
+
+typedef struct berelement {
+ char *ber_buf;
+ char *ber_ptr;
+ char *ber_end;
+ struct seqorset *ber_sos;
+ unsigned int ber_tag;
+ unsigned int ber_len;
+ int ber_usertag;
+ char ber_options;
+#define LBER_USE_DER 0x01
+#define LBER_USE_INDEFINITE_LEN 0x02
+#define LBER_TRANSLATE_STRINGS 0x04
+ char *ber_rwptr;
+ BERTranslateProc ber_encode_translate_proc;
+ BERTranslateProc ber_decode_translate_proc;
+ int ber_flags;
+ int ber_sos_stack_posn;
+ Seqorset ber_sos_stack[SOS_STACK_SIZE];
+} BerElement;
+#define NULLBER ((BerElement *) 0)
+
+/* sgsluns - private network endpoint type
+ */
+struct sgsluns
+{
+ int sock_sgsluns; /* socket identifier */
+ long state_sgsluns; /* sgsluns state flag (SGSLUNS_STATE_xxx) */
+ char saddr_sgsluns[32]; /* inet address of other end of this connection
+ * in the form A.B.C.D where A,B,C, and D are
+ * base 256 notation integers. eg. "192.0.0.1"
+ */
+};
+typedef struct sgsluns sgsluns;
+
+typedef struct sockbuf {
+#ifndef MACOS
+ int sb_sd;
+#else /* MACOS */
+ void *sb_sd;
+#endif /* MACOS */
+ BerElement sb_ber;
+
+ int sb_naddr; /* > 0 implies using CLDAP (UDP) */
+ void *sb_useaddr; /* pointer to sockaddr to use next */
+ void *sb_fromaddr; /* pointer to message source sockaddr */
+ void **sb_addrs; /* actually an array of pointers to
+ sockaddrs */
+
+ int sb_options; /* to support copying ber elements */
+#define LBER_TO_FILE 0x01 /* to a file referenced by sb_fd */
+#define LBER_TO_FILE_ONLY 0x02 /* only write to file, not network */
+#define LBER_MAX_INCOMING_SIZE 0x04 /* impose limit on incoming stuff */
+#define LBER_NO_READ_AHEAD 0x08 /* read only as much as requested */
+ int sb_fd;
+ int sb_max_incoming;
+ void *sb_nzenv; /* nzos environment pointer */
+ void *sb_sslContext;
+ int sb_sslauth; /* type of ssl authentication */
+ int sb_sslflag;
+ int ssl_sd;
+ sgsluns *sb_endp; /* socket end point */
+} Sockbuf;
+#define READBUFSIZ 8192
+
+/* structure for returning a sequence of octet strings + length */
+struct berval {
+ unsigned int bv_len;
+ char *bv_val;
+};
+
+#define LDAP_PORT 389
+#define LDAP_SSL_PORT 636
+
+#ifndef DEF_SSL_PORT
+extern int sslmodeenabled ;
+#endif
+
+#define LDAP_VERSION1 1
+#define LDAP_VERSION2 2
+#define LDAP_VERSION3 3
+
+#define LDAP_VERSION LDAP_VERSION2 /*default should stay as LDAPv2*/
+
+#define LDAP_VERSION_MAX LDAP_VERSION3
+
+#define COMPAT20
+#define COMPAT30
+#if defined(COMPAT20) || defined(COMPAT30)
+#define COMPAT
+#endif
+
+#define LDAP_MAX_ATTR_LEN 256
+
+/* various options that can be set/unset */
+#define LDAP_OPT_DESC 1
+#define LDAP_OPT_DEREF 2
+#define LDAP_OPT_SIZELIMIT 3
+#define LDAP_OPT_TIMELIMIT 4
+#define LDAP_OPT_THREAD_FN_PTRS 5
+#define LDAP_OPT_REBIND_FN 6
+#define LDAP_OPT_REBIND_ARG 7
+#define LDAP_OPT_REFERRALS 8
+#define LDAP_OPT_RESTART 9
+#define LDAP_OPT_SSL 10
+#define LDAP_OPT_IO_FN_PTRS 11
+#define LDAP_OPT_CACHE_FN_PTRS 13
+#define LDAP_OPT_CACHE_STRATEGY 14
+#define LDAP_OPT_CACHE_ENABLE 15
+#define LDAP_OPT_REFERRAL_HOP_LIMIT 16
+#define LDAP_OPT_PROTOCOL_VERSION 17
+#define LDAP_OPT_SERVER_CONTROLS 18
+#define LDAP_OPT_CLIENT_CONTROLS 19
+#define LDAP_OPT_PREFERRED_LANGUAGE 20
+#define LDAP_OPT_ERROR_NUMBER 49
+#define LDAP_OPT_ERROR_STRING 50
+
+/* client side referral cache enable option */
+#define ORA_LDAP_OPT_RFRL_CACHE 200
+
+/* ldap connect timeout */
+#define ORA_LDAP_OPT_CONNECT_TIMEOUT 210
+
+/* directory server types */
+#define LDAP_DIRTYPE_OID 1 /* Oracle Internet Directory */
+#define LDAP_DIRTYPE_AD 2 /* Microsoft Active Directory */
+#define LDAP_DIRTYPE_NETSCAPE 4 /* Netscape Directory Server */
+#define LDAP_DIRTYPE_NDS 8 /* Novell Directory Service */
+#define LDAP_DIRTYPE_UNKNOWN 4096 /* Unknown */
+
+/* for on/off options */
+#define LDAP_OPT_ON ((void *)1)
+#define LDAP_OPT_OFF ((void *)0)
+
+
+/* SSL Authentication modes */
+#define GSLC_SSL_NO_AUTH 1
+#define GSLC_SSL_ONEWAY_AUTH 32
+#define GSLC_SSL_TWOWAY_AUTH 64
+
+
+/* Abandon support */
+#define ABANDONorTL(op) ((op)->o_abandon == 1)
+
+/* debugging stuff */
+#ifdef LDAP_DEBUG
+extern int ldap_debug;
+extern unsigned int debug_flag;
+#define LDAP_DEBUG_TRACE 0x001
+#define LDAP_DEBUG_PACKETS 0x002
+#define LDAP_DEBUG_ARGS 0x004
+#define LDAP_DEBUG_CONNS 0x008
+#define LDAP_DEBUG_BER 0x010
+#define LDAP_DEBUG_FILTER 0x020
+#define LDAP_DEBUG_CONFIG 0x040
+#define LDAP_DEBUG_ACL 0x080
+#define LDAP_DEBUG_STATS 0x100
+#define LDAP_DEBUG_STATS2 0x200
+#define LDAP_DEBUG_SHELL 0x400
+#define LDAP_DEBUG_PARSE 0x800
+#define LDAP_DEBUG_PROCESS 0x2000
+#define LDAP_DEBUG_MUST 0x4000
+#ifndef LDAP_DEBUG_ANY
+# define LDAP_DEBUG_ANY 0xffff
+#endif /* LDAP_DEBUG_ANY */
+
+#ifdef LDAP_SYSLOG
+#define Debug( level, fmt, arg1, arg2, arg3 ) \
+ { \
+ if ( ldap_debug & level ) \
+ fprintf( stderr, fmt, arg1, arg2, arg3 ); \
+ }
+#else /* LDAP_SYSLOG */
+#ifndef WINSOCK
+#define Debug( level, fmt, arg1, arg2, arg3 ) \
+ if ( ldap_debug & level ) \
+ fprintf( stderr, fmt, arg1, arg2, arg3 );
+#else /* !WINSOCK */
+extern void Debug( int level, char* fmt, ... );
+#endif /* !WINSOCK */
+#endif /* LDAP_SYSLOG */
+#else /* LDAP_DEBUG */
+#define Debug( level, fmt, arg1, arg2, arg3 )
+#endif /* LDAP_DEBUG */
+
+/*
+ * specific LDAP instantiations of BER types we know about
+ */
+
+/* general stuff */
+#define LDAP_TAG_MESSAGE 0x30L /* tag is 0x10 + constructed bit */
+#define OLD_LDAP_TAG_MESSAGE 0x10L /* forgot the constructed bit */
+#define LDAP_TAG_MSGID 0x02L /* INTEGER */
+#define LDAP_TAG_LDAPDN 0x04L /* OCTET STRING */
+#define LDAP_TAG_CONTROLS 0xa0L /* context specific + constructed + 0 */
+#define LDAP_TAG_REFERRAL 0xa3L /* context specific + constructed + 3 */
+#define LDAP_TAG_NEWSUPERIOR 0x80L /* context specific + primitive */
+#define LDAP_TAG_MRA_OID 0x81L /* context specific + primitive */
+#define LDAP_TAG_MRA_TYPE 0x82L /* context specific + primitive */
+#define LDAP_TAG_MRA_VALUE 0x83L /* context specific + primitive */
+#define LDAP_TAG_MRA_DNATTRS 0x84L /* context specific + primitive */
+#define LDAP_TAG_EXOP_REQ_OID 0x80L /* context specific + primitive */
+#define LDAP_TAG_EXOP_REQ_VALUE 0x81L /* context specific + primitive */
+#define LDAP_TAG_EXOP_RES_OID 0x8aL /* context specific + primitive */
+#define LDAP_TAG_EXOP_RES_VALUE 0x8bL /* context specific + primitive */
+#define LDAP_TAG_SK_MATCHRULE 0x80L /* context specific + primitive */
+#define LDAP_TAG_SK_REVERSE 0x81L /* context specific + primitive */
+#define LDAP_TAG_SR_ATTRTYPE 0x80L /* context specific + primitive */
+#define LDAP_TAG_SASL_RES_CREDS 0x87L /* context specific + primitive */
+#define LDAP_TAG_VLV_BY_INDEX 0xa0L /* context specific + constructed + 0 */
+#define LDAP_TAG_VLV_BY_VALUE 0x81L /* context specific + primitive + 1 */
+
+/* possible operations a client can invoke */
+#define LDAP_REQ_BIND 0x60L /* application + constructed */
+#define LDAP_REQ_UNBIND 0x42L /* application + primitive */
+#define LDAP_REQ_SEARCH 0x63L /* application + constructed */
+#define LDAP_REQ_MODIFY 0x66L /* application + constructed */
+#define LDAP_REQ_ADD 0x68L /* application + constructed */
+#define LDAP_REQ_DELETE 0x4aL /* application + primitive */
+#define LDAP_REQ_MODRDN 0x6cL /* application + constructed */
+#define LDAP_REQ_MODDN 0x6cL /* application + constructed */
+#define LDAP_REQ_COMPARE 0x6eL /* application + constructed */
+#define LDAP_REQ_ABANDON 0x50L /* application + primitive */
+
+/* New defs added for LDAP V3 support */
+#define LDAP_REQ_EXTENDED 0x77L /* application + constructed */
+/* version 3.0 compatibility stuff */
+#define LDAP_REQ_UNBIND_30 0x62L
+#define LDAP_REQ_DELETE_30 0x6aL
+#define LDAP_REQ_ABANDON_30 0x70L
+
+/*
+ * old broken stuff for backwards compatibility - forgot application tag
+ * and constructed/primitive bit
+ */
+#define OLD_LDAP_REQ_BIND 0x00L
+#define OLD_LDAP_REQ_UNBIND 0x02L
+#define OLD_LDAP_REQ_SEARCH 0x03L
+#define OLD_LDAP_REQ_MODIFY 0x06L
+#define OLD_LDAP_REQ_ADD 0x08L
+#define OLD_LDAP_REQ_DELETE 0x0aL
+#define OLD_LDAP_REQ_MODRDN 0x0cL
+#define OLD_LDAP_REQ_COMPARE 0x0eL
+#define OLD_LDAP_REQ_ABANDON 0x10L
+
+/* possible result types a server can return */
+#define LDAP_RES_BIND 0x61L /* application+constructed+1 */
+#define LDAP_RES_SEARCH_ENTRY 0x64L /* 100 */
+#define LDAP_RES_SEARCH_RESULT 0x65L /* 101 */
+#define LDAP_RES_MODIFY 0x67L /* 103 */
+#define LDAP_RES_ADD 0x69L /* 105 */
+#define LDAP_RES_DELETE 0x6bL /* 107 */
+#define LDAP_RES_MODRDN 0x6dL /* 109 */
+#define LDAP_RES_RENAME 0x6dL /* same as LDAP_RES_MODRDN */
+#define LDAP_RES_COMPARE 0x6fL /* 111 */
+#define LDAP_RES_SEARCH_REFERENCE 0x73L /* 115 */
+#define LDAP_RES_EXTENDED 0x78L /* 120 */
+#define LDAP_RES_ANY (-1L)
+
+/* old broken stuff for backwards compatibility */
+#define OLD_LDAP_RES_BIND 0x01L
+#define OLD_LDAP_RES_SEARCH_ENTRY 0x04L
+#define OLD_LDAP_RES_SEARCH_RESULT 0x05L
+#define OLD_LDAP_RES_MODIFY 0x07L
+#define OLD_LDAP_RES_ADD 0x09L
+#define OLD_LDAP_RES_DELETE 0x0bL
+#define OLD_LDAP_RES_MODRDN 0x0dL
+#define OLD_LDAP_RES_COMPARE 0x0fL
+
+/* authentication methods available */
+#define LDAP_AUTH_NONE 0x00L /* no authentication */
+#define LDAP_AUTH_SIMPLE 0x80L /* context specific + primitive */
+#define LDAP_AUTH_SASL 0xa3L /* context specific + constructed */
+
+/* supported SASL methods */
+#define LDAP_SASL_SIMPLE 0 /* special value used for simple bind */
+#define LDAP_SASL_EXTERNAL "EXTERNAL"
+
+/* authentication methods supported in v2 */
+#define LDAP_AUTH_KRBV4 0xffL /* means do both of the following */
+#define LDAP_AUTH_KRBV41 0x81L /* context specific + primitive */
+#define LDAP_AUTH_KRBV42 0x82L /* context specific + primitive */
+#define LDAP_AUTH_SASL_V2 0x83L /* context specific + primitive */
+#define LDAP_AUTH_REPL 0x90L /* replication specific */
+
+
+/* 3.0 compatibility auth methods */
+#define LDAP_AUTH_SIMPLE_30 0xa0L /* context specific + constructed */
+#define LDAP_AUTH_KRBV41_30 0xa1L /* context specific + constructed */
+#define LDAP_AUTH_KRBV42_30 0xa2L /* context specific + constructed */
+#define LDAP_AUTH_SASL_30 0xa3L /* context specific + constructed */
+/* old broken stuff */
+#define OLD_LDAP_AUTH_SIMPLE 0x00L
+#define OLD_LDAP_AUTH_KRBV4 0x01L
+#define OLD_LDAP_AUTH_KRBV42 0x02L
+
+/* filter types */
+#define LDAP_FILTER_AND 0xa0L /* context specific + constructed */
+#define LDAP_FILTER_OR 0xa1L /* context specific + constructed */
+#define LDAP_FILTER_NOT 0xa2L /* context specific + constructed */
+#define LDAP_FILTER_EQUALITY 0xa3L /* context specific + constructed */
+#define LDAP_FILTER_SUBSTRINGS 0xa4L /* context specific + constructed */
+#define LDAP_FILTER_GE 0xa5L /* context specific + constructed */
+#define LDAP_FILTER_LE 0xa6L /* context specific + constructed */
+#define LDAP_FILTER_PRESENT 0x87L /* context specific + primitive */
+#define LDAP_FILTER_APPROX 0xa8L /* context specific + constructed */
+
+/* 3.0 compatibility filter types */
+#define LDAP_FILTER_PRESENT_30 0xa7L /* context specific + constructed */
+
+/* old broken stuff */
+#define OLD_LDAP_FILTER_AND 0x00L
+#define OLD_LDAP_FILTER_OR 0x01L
+#define OLD_LDAP_FILTER_NOT 0x02L
+#define OLD_LDAP_FILTER_EQUALITY 0x03L
+#define OLD_LDAP_FILTER_SUBSTRINGS 0x04L
+#define OLD_LDAP_FILTER_GE 0x05L
+#define OLD_LDAP_FILTER_LE 0x06L
+#define OLD_LDAP_FILTER_PRESENT 0x07L
+#define OLD_LDAP_FILTER_APPROX 0x08L
+
+/* substring filter component types */
+#define LDAP_SUBSTRING_INITIAL 0x80L /* context specific */
+#define LDAP_SUBSTRING_ANY 0x81L /* context specific */
+#define LDAP_SUBSTRING_FINAL 0x82L /* context specific */
+
+/* 3.0 compatibility substring filter component types */
+#define LDAP_SUBSTRING_INITIAL_30 0xa0L /* context specific */
+#define LDAP_SUBSTRING_ANY_30 0xa1L /* context specific */
+#define LDAP_SUBSTRING_FINAL_30 0xa2L /* context specific */
+
+/* old broken stuff */
+#define OLD_LDAP_SUBSTRING_INITIAL 0x00L
+#define OLD_LDAP_SUBSTRING_ANY 0x01L
+#define OLD_LDAP_SUBSTRING_FINAL 0x02L
+
+/* search scopes */
+#define LDAP_SCOPE_BASE 0x00
+#define LDAP_SCOPE_ONELEVEL 0x01
+#define LDAP_SCOPE_SUBTREE 0x02
+
+/* for modifications */
+typedef struct ldapmod {
+ int mod_op;
+#define LDAP_MOD_ADD 0x00
+#define LDAP_MOD_DELETE 0x01
+#define LDAP_MOD_REPLACE 0x02
+#define LDAP_MOD_BVALUES 0x80
+ char *mod_type;
+ int mod_ver;
+ char mod_time[48];
+ char mod_server[128];
+ union {
+ char **modv_strvals;
+ struct berval **modv_bvals;
+ } mod_vals;
+ struct berval **modv_nvals;
+#define mod_values mod_vals.modv_strvals
+#define mod_bvalues mod_vals.modv_bvals
+#ifdef ONLDAPD
+ struct ldapmod *mod_next;
+ int createTombstone;
+#endif
+} LDAPMod;
+
+/*
+ * possible error codes we can return
+ */
+
+#define LDAP_SUCCESS 0x00
+#define GSL_SUCCESS LDAP_SUCCESS
+#define LDAP_OPERATIONS_ERROR 0x01
+#define LDAP_PROTOCOL_ERROR 0x02
+#define LDAP_TIMELIMIT_EXCEEDED 0x03
+#define LDAP_SIZELIMIT_EXCEEDED 0x04
+#define LDAP_COMPARE_FALSE 0x05
+#define LDAP_COMPARE_TRUE 0x06
+#define LDAP_STRONG_AUTH_NOT_SUPPORTED 0x07
+#define LDAP_STRONG_AUTH_REQUIRED 0x08
+#define LDAP_PARTIAL_RESULTS 0x09
+#define LDAP_REFERRAL 0x0A
+#define LDAP_ADMINLIMIT_EXCEEDED 0x0B
+#define LDAP_UNAVAILABLE_CRITICALEXTENSION 0x0C
+#define LDAP_CONFIDENTIALITY_REQUIRED 0x0D
+#define LDAP_SASL_BIND_IN_PROGRESS 0x0E
+
+#define LDAP_NO_SUCH_ATTRIBUTE 0x10
+#define LDAP_UNDEFINED_TYPE 0x11
+#define LDAP_INAPPROPRIATE_MATCHING 0x12
+#define LDAP_CONSTRAINT_VIOLATION 0x13
+#define LDAP_TYPE_OR_VALUE_EXISTS 0x14
+#define LDAP_INVALID_SYNTAX 0x15
+
+#define LDAP_NO_SUCH_OBJECT 0x20
+#define LDAP_ALIAS_PROBLEM 0x21
+#define LDAP_INVALID_DN_SYNTAX 0x22
+#define LDAP_IS_LEAF 0x23
+#define LDAP_ALIAS_DEREF_PROBLEM 0x24
+
+#define NAME_ERROR(n) ((n & 0xf0) == 0x20)
+
+#define LDAP_INAPPROPRIATE_AUTH 0x30
+#define LDAP_INVALID_CREDENTIALS 0x31
+#define LDAP_INSUFFICIENT_ACCESS 0x32
+#define LDAP_BUSY 0x33
+#define LDAP_UNAVAILABLE 0x34
+#define LDAP_UNWILLING_TO_PERFORM 0x35
+#define LDAP_LOOP_DETECT 0x36
+
+#define LDAP_NAMING_VIOLATION 0x40
+#define LDAP_OBJECT_CLASS_VIOLATION 0x41
+#define LDAP_NOT_ALLOWED_ON_NONLEAF 0x42
+#define LDAP_NOT_ALLOWED_ON_RDN 0x43
+#define LDAP_ALREADY_EXISTS 0x44
+#define LDAP_NO_OBJECT_CLASS_MODS 0x45
+#define LDAP_RESULTS_TOO_LARGE 0x46
+#define LDAP_AFFECT_MULTIPLE_DSAS 0x47
+
+#define LDAP_OTHER 0x50
+#define LDAP_SERVER_DOWN 0x51
+#define LDAP_LOCAL_ERROR 0x52
+#define LDAP_ENCODING_ERROR 0x53
+#define LDAP_DECODING_ERROR 0x54
+#define LDAP_TIMEOUT 0x55
+#define LDAP_AUTH_UNKNOWN 0x56
+#define LDAP_FILTER_ERROR 0x57
+#define LDAP_USER_CANCELLED 0x58
+#define LDAP_PARAM_ERROR 0x59
+#define LDAP_NO_MEMORY 0x5a
+#define LDAP_CONNECT_ERROR 0x5b /* 91 */
+#define LDAP_NOT_SUPPORTED 0x5c /* 92 - LDAPv3 */
+#define LDAP_CONTROL_NOT_FOUND 0x5d /* 93 - LDAPv3 */
+#define LDAP_NO_RESULTS_RETURNED 0x5e /* 94 - LDAPv3 */
+#define LDAP_MORE_RESULTS_TO_RETURN 0x5f /* 95 - LDAPv3 */
+#define LDAP_CLIENT_LOOP 0x60 /* 96 - LDAPv3 */
+#define LDAP_REFERRAL_LIMIT_EXCEEDED 0x61 /* 97 - LDAPv3 */
+
+
+/* discover server related error codes */
+#define ORA_LDAP_INFO_NOT_FOUND 500 /* oracle specific error codes */
+#define ORA_LDAP_LOOKUP_ERROR 501
+#define ORA_LDAP_DNS_ADDR_NOT_FOUND 502
+#define ORA_LDAP_FILE_NOT_FOUND 503
+#define ORA_LDAP_FILE_PARSE_ERROR 504
+
+/* SSL bind related error codes */
+#define ORA_LDAP_SSL_INITIALIZE_ERROR 550
+#define ORA_LDAP_SSL_CTXCONFIG_ERROR 551
+#define ORA_LDAP_SSL_OPENWALLET_ERROR 552
+#define ORA_LDAP_SSL_CTXCREATE_ERROR 553
+#define ORA_LDAP_SSL_HANDSHAKE_ERROR 554
+#define ORA_LDAP_SSL_PEERCRED_ERROR 555
+
+
+/* default limit on nesting of referrals */
+#define LDAP_DEFAULT_REFHOPLIMIT 5
+
+/* discover server related structs and declarations */
+
+/* source from where information can be discovered */
+#define ORA_DNS_DISCOVER 1
+#define ORA_CFGFILE_DISCOVER 2
+#define ORA_AUTO_DISCOVER 3
+
+/* method to be applied for obtaining hostname info from DNS */
+#define ORA_USE_INPUT_DN_METHOD 1
+#define ORA_USE_MC_DOMAIN_METHOD 2
+#define ORA_USE_DFLT_LOOKUP_METHOD 4
+#define ORA_USE_ALL_METHODS (ORA_USE_INPUT_DN_METHOD + \
+ ORA_USE_MC_DOMAIN_METHOD + \
+ ORA_USE_DFLT_LOOKUP_METHOD)
+
+/* result types */
+#define ORA_DEF_ADMIN_CTXT 1
+#define ORA_DIR_SERVERS 2
+#define ORA_DIR_SERVER_TYPE 3
+#define ORA_ALTDIR_SERVERS 4
+#define ORA_ORCLCOMMCTXMAP 5
+#define ORA_DIRSRVR_CONN_SEC 6
+#define ORA_CFGFL_PATH 7
+
+/* properties that can be set in the discovery handle */
+#define ORA_DNS_DN 1
+#define ORA_DNS_DISCOVER_METHOD 2
+#define ORA_SSLMODE 3
+
+typedef void * OraLdapHandle;
+typedef void * OraResultHandle;
+
+typedef void OraLdapClientCtx;
+
+/* Options for SASL credential functions */
+#define ORA_LDAP_SASL_MECH_DIGEST_MD5 "DIGEST-MD5" /* SASL Mechanism :
+ Digest MD5 */
+#define ORA_LDAP_CRED_HANDLE_SASL_MD5 1
+
+/* properties that can be set in Credential handle */
+#define ORA_LDAP_CRED_SASL_REALM 1
+#define ORA_LDAP_CRED_SASL_AUTH_PASSWORD 2
+#define ORA_LDAP_CRED_SASL_AUTHORIZATION_ID 3
+#define ORA_LDAP_CRED_SASL_SECURITY_PROPERTIES 4
+#define ORA_LDAP_CRED_SASL_NORM_AUTHDN 5
+
+#define ora_ldap_init_clientctx(ctxptr) ((OraLdapClientCtx **)NULL != (ctxptr) && (*((OraLdapClientCtx **)(ctxptr)) = (OraLdapClientCtx *)NULL,1)) ? LDAP_SUCCESS : LDAP_PARAM_ERROR
+
+#define ora_ldap_free_clientctx(ctxptr) ((OraLdapClientCtx **)NULL != (ctxptr) && (*((OraLdapClientCtx **)(ctxptr)) = (OraLdapClientCtx *)NULL,1)) ? LDAP_SUCCESS : LDAP_PARAM_ERROR
+
+/*
+ * This structure represents both ldap messages and ldap responses.
+ * These are really the same, except in the case of search responses,
+ * where a response has multiple messages.
+ */
+
+typedef struct ldapmsg {
+ int lm_msgid; /* the message id */
+ int lm_msgtype; /* the message type */
+ BerElement *lm_ber; /* the ber encoded message contents */
+ struct ldapmsg *lm_chain; /* for search - next msg in the resp */
+ struct ldapmsg *lm_next; /* next response */
+ unsigned int lm_time; /* used to maintain cache */
+} LDAPMessage;
+#define NULLMSG ((LDAPMessage *) NULL)
+
+
+#ifdef LDAP_REFERRALS
+/*
+ * structure for tracking LDAP server host, ports, DNs, etc.
+ */
+typedef struct ldap_server {
+ char *lsrv_host;
+ char *lsrv_dn; /* if NULL, use default */
+ int lsrv_port;
+ unsigned int lsrv_options; /* boolean options */
+#define LDAP_SRV_OPT_SECURE 0x01
+ struct ldap_server *lsrv_next;
+} LDAPServer;
+
+
+/*
+ * structure for representing an LDAP server connection
+ */
+typedef struct ldap_conn {
+ Sockbuf *lconn_sb;
+ BerElement *lconn_ber; /* non-NULL if in midst of msg. */
+ int lconn_version; /* LDAP protocol version */
+ int lconn_refcnt;
+ char *lconn_lastused; /* time */
+ int lconn_status;
+#define LDAP_CONNST_NEEDSOCKET 1
+#define LDAP_CONNST_CONNECTING 2
+#define LDAP_CONNST_CONNECTED 3
+#define LDAP_CONNST_DEAD 4
+ LDAPServer *lconn_server;
+ char *lconn_binddn; /* DN of last successful bind */
+ int lconn_bound; /* has a bind been done? */
+ char *lconn_krbinstance;
+ struct ldap_conn *lconn_next;
+} LDAPConn;
+
+
+/*
+ * structure used to track outstanding requests
+ */
+typedef struct ldapreq {
+ int lr_msgid; /* the message id */
+ int lr_status; /* status of request */
+#define LDAP_REQST_INPROGRESS 1
+#define LDAP_REQST_CHASINGREFS 2
+#define LDAP_REQST_NOTCONNECTED 3
+#define LDAP_REQST_WRITING 4
+ int lr_outrefcnt; /* count of outstanding referrals */
+ int lr_origid; /* original request's message id */
+ int lr_parentcnt; /* count of parent requests */
+ int lr_res_msgtype; /* result message type */
+ int lr_res_errno; /* result LDAP errno */
+ char *lr_res_error; /* result error string */
+ char *lr_res_matched;/* result matched DN string */
+ BerElement *lr_ber; /* ber encoded request contents */
+ LDAPConn *lr_conn; /* connection used to send request */
+ char *lr_binddn; /* request is a bind for this DN */
+ struct ldapreq *lr_parent; /* request that spawned this referral */
+ struct ldapreq *lr_refnext; /* next referral spawned */
+ struct ldapreq *lr_prev; /* previous request */
+ struct ldapreq *lr_next; /* next request */
+} LDAPRequest;
+#endif /* LDAP_REFERRALS */
+
+
+/*
+ * structure for client cache
+ */
+#define LDAP_CACHE_BUCKETS 31 /* cache hash table size */
+typedef struct ldapcache {
+ LDAPMessage *lc_buckets[LDAP_CACHE_BUCKETS];/* hash table */
+ LDAPMessage *lc_requests; /* unfulfilled reqs */
+ int lc_timeout; /* request timeout */
+ int lc_maxmem; /* memory to use */
+ int lc_memused; /* memory in use */
+ int lc_enabled; /* enabled? */
+ unsigned int lc_options; /* options */
+#define LDAP_CACHE_OPT_CACHENOERRS 0x00000001
+#define LDAP_CACHE_OPT_CACHEALLERRS 0x00000002
+} LDAPCache;
+#define NULLLDCACHE ((LDAPCache *)NULL)
+
+/*
+ * structures for ldap getfilter routines
+ */
+
+typedef struct ldap_filt_info {
+ char *lfi_filter;
+ char *lfi_desc;
+ int lfi_scope; /* LDAP_SCOPE_BASE, etc */
+ int lfi_isexact; /* exact match filter? */
+ struct ldap_filt_info *lfi_next;
+} LDAPFiltInfo;
+
+typedef struct ldap_filt_list {
+ char *lfl_tag;
+ char *lfl_pattern;
+ char *lfl_delims;
+ LDAPFiltInfo *lfl_ilist;
+ struct ldap_filt_list *lfl_next;
+} LDAPFiltList;
+
+
+#define LDAP_FILT_MAXSIZ 1024
+
+typedef struct ldap_filt_desc {
+ LDAPFiltList *lfd_filtlist;
+ LDAPFiltInfo *lfd_curfip;
+ LDAPFiltInfo lfd_retfi;
+ char lfd_filter[ LDAP_FILT_MAXSIZ ];
+ char *lfd_curval;
+ char *lfd_curvalcopy;
+ char **lfd_curvalwords;
+ char *lfd_filtprefix;
+ char *lfd_filtsuffix;
+} LDAPFiltDesc;
+
+
+typedef struct ldapcontrol {
+ char *ldctl_oid;
+ struct berval ldctl_value;
+ char ldctl_iscritical;
+} LDAPControl, *PLDAPControl;
+
+/* some common controls */
+#define LDAP_CONTROL_MANAGEDSAIT "2.16.840.1.113730.3.4.2"
+
+typedef struct ldappend {
+ void *lp_sema; /* semaphore to post */
+ int lp_msgid; /* message id */
+ LDAPMessage *lp_result; /* result storage */
+ struct ldappend *lp_prev; /* previous pending */
+ struct ldappend *lp_next; /* next pending */
+} LDAPPend;
+
+/* structure for holding credential information - used
+ * to bind to referred server when chasing referrals
+ */
+typedef struct ldapcreds {
+ char *binddn;
+ char *passwd;
+ int authmethod;
+ char *proxyDN;
+} LDAPCreds;
+
+/*
+ * structure representing an ldap connection
+ */
+
+typedef struct ldap {
+ Sockbuf ld_sb; /* socket descriptor & buffer */
+ char *ld_host;
+ int ld_version;
+ char ld_lberoptions;
+ int ld_deref;
+#define LDAP_DEREF_NEVER 0
+#define LDAP_DEREF_SEARCHING 1
+#define LDAP_DEREF_FINDING 2
+#define LDAP_DEREF_ALWAYS 3
+
+ int ld_timelimit;
+ int ld_sizelimit;
+#define LDAP_NO_LIMIT 0
+
+ LDAPFiltDesc *ld_filtd; /* from getfilter for ufn searches */
+ char *ld_ufnprefix; /* for incomplete ufn's */
+
+ int ld_errno;
+ char *ld_error;
+ char *ld_matched;
+ int ld_msgid;
+
+ /* do not mess with these */
+#ifdef LDAP_REFERRALS
+ LDAPRequest *ld_requests; /* list of outstanding requests */
+#else /* LDAP_REFERRALS */
+ LDAPMessage *ld_requests; /* list of outstanding requests */
+#endif /* LDAP_REFERRALS */
+ LDAPMessage *ld_responses; /* list of outstanding responses */
+ int *ld_abandoned; /* array of abandoned requests */
+ char ld_attrbuffer[100];
+ LDAPCache *ld_cache; /* non-null if cache is initialized */
+ char *ld_cldapdn; /* DN used in connectionless search */
+
+ /* it is OK to change these next four values directly */
+ int ld_cldaptries; /* connectionless search retry count */
+ int ld_cldaptimeout;/* time between retries */
+ int ld_refhoplimit; /* limit on referral nesting */
+ unsigned int ld_options; /* boolean options */
+#ifdef LDAP_DNS
+#define LDAP_OPT_DNS 0x00000001 /* use DN & DNS */
+#endif /* LDAP_DNS */
+
+#define LDAP_BITOPT_REFERRALS 0x80000000
+#define LDAP_BITOPT_SSL 0x40000000
+#define LDAP_BITOPT_DNS 0x20000000
+#define LDAP_BITOPT_RESTART 0x10000000
+#define LDAP_BITOPT_RECONNECT 0x08000000
+#define LDAP_BITOPT_ASYNC 0x04000000
+
+ /* do not mess with the rest though */
+ char *ld_defhost; /* full name of default server */
+ int ld_defport; /* port of default server */
+ BERTranslateProc ld_lber_encode_translate_proc;
+ BERTranslateProc ld_lber_decode_translate_proc;
+#ifdef LDAP_REFERRALS
+ LDAPConn *ld_defconn; /* default connection */
+ LDAPConn *ld_conns; /* list of server connections */
+ void *ld_selectinfo; /* platform specifics for select */
+ int (*ld_rebindproc)( struct ldap *ld, char **dnp,
+ char **passwdp, int *authmethodp, int freeit );
+ /* routine to get info needed for re-bind */
+#endif /* LDAP_REFERRALS */
+
+ /* V3 ldap controls */
+ LDAPControl **ld_servercontrol;
+ LDAPControl **ld_clientcontrol;
+
+ /* Pending results */
+ LDAPPend *ld_pend; /* list of pending results */
+
+ void *gsluctx; /* gslu context handle */
+ /* client side referral cache-usage enable/disable option */
+ int ld_refcache_enabled;
+ /* current status of the refcache */
+ int ld_refcache_status;
+ void *ld_refcache; /* client side referral cache */
+ void *ld_wrk_selectinfo;
+ LDAPCreds *ld_creds; /* credential information */
+} LDAP;
+
+/*
+ * structure for ldap friendly mapping routines
+ */
+
+typedef struct friendly {
+ char *f_unfriendly;
+ char *f_friendly;
+} FriendlyMap;
+
+
+/*
+ * handy macro to check whether LDAP struct is set up for CLDAP or not
+ */
+#define LDAP_IS_CLDAP( ld ) ( ld->ld_sb.sb_naddr > 0 )
+
+
+/*
+ * types for ldap URL handling
+ */
+typedef struct ldap_url_desc {
+ char *lud_host;
+ int lud_port;
+ char *lud_dn;
+ char **lud_attrs;
+ int lud_scope;
+ char *lud_filter;
+ char *lud_string; /* for internal use only */
+} LDAPURLDesc;
+#define NULLLDAPURLDESC ((LDAPURLDesc *)NULL)
+
+#define LDAP_URL_ERR_NOTLDAP 1 /* URL doesn't begin with "ldap://" */
+#define LDAP_URL_ERR_NODN 2 /* URL has no DN (required) */
+#define LDAP_URL_ERR_BADSCOPE 3 /* URL scope string is invalid */
+#define LDAP_URL_ERR_MEM 4 /* can't allocate memory space */
+
+/* General Purpose Defines */
+#define GSL_ERR_GENERAL (int)-1
+#define GSL_NULL_TEXT (char *)NULL
+
+#ifndef LDAPFUNCDECL
+#ifdef _WIN32
+#define LDAPFUNCDECL __declspec( dllexport )
+#else /* _WIN32 */
+#define LDAPFUNCDECL
+#endif /* _WIN32 */
+#endif /* LDAPFUNCDECL */
+
+#if !defined(MACOS) && !defined(DOS) && !defined(_WIN32) && !defined(WINSOCK)
+#include <sys/time.h>
+#endif
+LDAPFUNCDECL LDAP *ldap_open( char *host, int port );
+LDAPFUNCDECL LDAP *ldap_init( char *defhost, int defport );
+LDAPFUNCDECL int ldap_init_SSL( Sockbuf *,char *, char *,int);
+
+LDAPFUNCDECL LDAPMessage *ldap_first_entry( LDAP *ld, LDAPMessage *chain );
+LDAPFUNCDECL LDAPMessage *ldap_next_entry( LDAP *ld, LDAPMessage *entry );
+LDAPFUNCDECL int ldap_count_entries( LDAP *ld, LDAPMessage *chain );
+
+LDAPFUNCDECL char *ldap_get_dn( LDAP *ld, LDAPMessage *entry );
+LDAPFUNCDECL char *ldap_dn2ufn( char *dn );
+LDAPFUNCDECL char **ldap_explode_dn( char *dn, int notypes );
+LDAPFUNCDECL char **ldap_explode_dns( char *dn );
+
+LDAPFUNCDECL char *ldap_first_attribute( LDAP *ld, LDAPMessage *entry,
+ BerElement **ber );
+LDAPFUNCDECL char *ldap_next_attribute( LDAP *ld, LDAPMessage *entry,
+ BerElement *ber );
+
+LDAPFUNCDECL char **ldap_get_values( LDAP *ld, LDAPMessage *entry, char *target
+);
+LDAPFUNCDECL struct berval **ldap_get_values_len( LDAP *ld, LDAPMessage *entry,
+ char *target );
+LDAPFUNCDECL int ldap_count_values( char **vals );
+LDAPFUNCDECL int ldap_count_values_len( struct berval **vals );
+LDAPFUNCDECL void ldap_value_free( char **vals );
+LDAPFUNCDECL void ldap_value_free_len( struct berval **vals );
+
+LDAPFUNCDECL int ldap_result2error( LDAP *ld, LDAPMessage *r, int freeit );
+LDAPFUNCDECL char *ldap_err2string( int err );
+LDAPFUNCDECL void ldap_perror( LDAP *ld, char *s );
+
+LDAPFUNCDECL void ldap_mods_free( LDAPMod **mods, int freemods );
+
+LDAPFUNCDECL void ldap_free_friendlymap( FriendlyMap **map );
+
+LDAPFUNCDECL int ldap_sort_entries( LDAP *ld, LDAPMessage **chain, char *attr,
+ int (*cmp)() );
+
+LDAPFUNCDECL int ldap_is_ldap_url( char *url );
+LDAPFUNCDECL int ldap_url_parse( char *url, LDAPURLDesc **ludpp );
+LDAPFUNCDECL void ldap_free_urldesc( LDAPURLDesc *ludp );
+LDAPFUNCDECL int ldap_url_search( LDAP *ld, char *url, int attrsonly );
+LDAPFUNCDECL int ldap_url_search_s( LDAP *ld, char *url, int attrsonly,
+ LDAPMessage **res );
+LDAPFUNCDECL int ldap_url_search_st( LDAP *ld, char *url, int attrsonly,
+ struct timeval *timeout, LDAPMessage **res );
+
+LDAPFUNCDECL int ldap_bind( LDAP *ld, char *who, char *passwd, int authmethod );
+LDAPFUNCDECL int ldap_bind_s( LDAP *ld, char *who, char *cred, int method );
+
+LDAPFUNCDECL int ldap_simple_bind( LDAP *ld, char *who, char *passwd );
+LDAPFUNCDECL int ldap_simple_bind_s( LDAP *ld, char *who, char *passwd );
+
+LDAPFUNCDECL int ldap_compare( LDAP *ld, char *dn, char *attr, char *value );
+LDAPFUNCDECL int ldap_compare_s( LDAP *ld, char *dn, char *attr, char *value );
+
+LDAPFUNCDECL int ldap_delete( LDAP *ld, char *dn );
+LDAPFUNCDECL int ldap_delete_s( LDAP *ld, char *dn );
+
+LDAPFUNCDECL int ldap_modify( LDAP *ld, char *dn, LDAPMod **mods );
+LDAPFUNCDECL int ldap_modify_s( LDAP *ld, char *dn, LDAPMod **mods );
+
+LDAPFUNCDECL int ldap_modrdn( LDAP *ld, char *dn, char *newrdn );
+LDAPFUNCDECL int ldap_modrdn_s( LDAP *ld, char *dn, char *newrdn );
+LDAPFUNCDECL int ldap_modrdn2( LDAP *ld, char *dn, char *newrdn,
+ int deleteoldrdn );
+LDAPFUNCDECL int ldap_modrdn2_s( LDAP *ld, char *dn, char *newrdn,
+ int deleteoldrdn);
+
+LDAPFUNCDECL int ldap_result( LDAP *ld, int msgid, int all,
+ struct timeval *timeout, LDAPMessage **result );
+LDAPFUNCDECL int ldap_msgfree( LDAPMessage *lm );
+LDAPFUNCDECL int ldap_msgdelete( LDAP *ld, int msgid );
+LDAPFUNCDECL void ldap_memfree( void *p );
+LDAPFUNCDECL void ber_free( BerElement *ber, int freebuf );
+
+LDAPFUNCDECL int ldap_search( LDAP *ld, char *base, int scope, char *filter,
+ char **attrs, int attrsonly );
+LDAPFUNCDECL int ldap_search_s( LDAP *ld, char *base, int scope, char *filter,
+ char **attrs, int attrsonly, LDAPMessage **res );
+LDAPFUNCDECL int ldap_search_st( LDAP *ld, char *base, int scope, char *filter,
+ char **attrs, int attrsonly, struct timeval *timeout, LDAPMessage **res );
+
+LDAPFUNCDECL int ldap_unbind( LDAP *ld );
+LDAPFUNCDECL int ldap_unbind_s( LDAP *ld );
+
+LDAPFUNCDECL int ldap_abandon( LDAP *ld, int msgid );
+
+LDAPFUNCDECL int ldap_add( LDAP *ld, char *dn, LDAPMod **attrs );
+LDAPFUNCDECL int ldap_add_s( LDAP *ld, char *dn, LDAPMod **attrs );
+
+LDAPFUNCDECL int ldap_rename( LDAP *ld, char *dn, char *newrdn, char *newparent,
+ int deleteoldrdn, LDAPControl **serverctrls,
+ LDAPControl **clientctrls, int *msgidp);
+LDAPFUNCDECL int ldap_rename_s(LDAP *ld,char *dn,char *newrdn,char *newparent,
+ int deleteoldrdn,PLDAPControl *serverctrls,
+ PLDAPControl *clientctrls);
+
+LDAPFUNCDECL void ldap_getfilter_free(LDAPFiltDesc *lfdp);
+LDAPFUNCDECL int ldap_abandon_ext( LDAP *ld, int msgid,
+ LDAPControl **serverctrls, LDAPControl **clientctrls );
+
+LDAPFUNCDECL int ldap_add_ext( LDAP *ld, char *dn, LDAPMod **attrs,
+ LDAPControl **serverctrls, LDAPControl **clientctrls,
+ int *msgidp );
+LDAPFUNCDECL int ldap_add_ext_s( LDAP *ld, char *dn, LDAPMod **attrs,
+ LDAPControl **serverctrls, LDAPControl **clientctrls);
+
+LDAPFUNCDECL int ldap_replic_bind( LDAP *ld, char *dn, char *passwd );
+LDAPFUNCDECL int ldap_replic_bind_s( LDAP *ld, char *dn, char *passwd );
+
+LDAPFUNCDECL int ldap_kerberos_bind_s( LDAP *ld, char *who );
+LDAPFUNCDECL int ldap_kerberos_bind1( LDAP *ld, char *who );
+LDAPFUNCDECL int ldap_kerberos_bind1_s( LDAP *ld, char *who );
+LDAPFUNCDECL int ldap_kerberos_bind2( LDAP *ld, char *who );
+LDAPFUNCDECL int ldap_kerberos_bind2_s( LDAP *ld, char *who );
+
+LDAPFUNCDECL int ldap_sasl_bind(LDAP * ld, char * dn, char * mechanism,
+ struct berval * cred,
+ LDAPControl ** serverctrls,
+ LDAPControl ** clientctrls,
+ int * msgidp);
+LDAPFUNCDECL int ldap_sasl_bind_s(LDAP * ld, char * dn, char * mechanism,
+ struct berval * cred,
+ LDAPControl ** serverctrls,
+ LDAPControl ** clientctrls);
+
+LDAPFUNCDECL int ldap_parse_sasl_bind_result(LDAP * ld, LDAPMessage * res,
+ struct berval ** servercredp,
+ int freeit);
+
+LDAPFUNCDECL int ldap_native_bind_s(LDAP * ld,char * dn,char * mechanism,
+ struct berval * cred,
+ unsigned int dir_type);
+
+LDAPFUNCDECL int ldap_compare_ext( LDAP *ld, char *dn, char *attr,
+ struct berval *value, LDAPControl **serverctrls,
+ LDAPControl **clientctrls, int *msgidp );
+LDAPFUNCDECL int ldap_compare_ext_s( LDAP *ld, char *dn, char *attr,
+ struct berval *value, LDAPControl **serverctrls,
+ LDAPControl **clientctrls );
+
+LDAPFUNCDECL int ldap_delete_ext( LDAP *ld, char *dn,
+ LDAPControl **serverctrls, LDAPControl **clientctrls,
+ int *msgidp );
+LDAPFUNCDECL int ldap_delete_ext_s( LDAP *ld, char *dn,
+ LDAPControl **serverctrls, LDAPControl **clientctrls );
+
+LDAPFUNCDECL int ldap_modify_ext( LDAP *ld, char *dn, LDAPMod **mods,
+ LDAPControl **serverctrls, LDAPControl **clientctrls,
+ int *msgidp );
+LDAPFUNCDECL int ldap_modify_ext_s( LDAP *ld, char *dn, LDAPMod **mods,
+ LDAPControl **serverctrls, LDAPControl **clientctrls );
+
+
+LDAPFUNCDECL int ldap_get_entry_controls( LDAP *ld, LDAPMessage *entry,
+ LDAPControl ***serverctrlsp);
+
+LDAPFUNCDECL char **ldap_explode_rdn( char *dn, int notypes );
+
+LDAPFUNCDECL int ldap_search_ext ( LDAP *ld, char *base, int scope,
+ char *filter, char **attrs, int attrsonly,
+ LDAPControl **serverctrls, LDAPControl **clientctrls,
+ struct timeval *timeoutp, int sizelimit, int *msgidp );
+LDAPFUNCDECL int ldap_search_ext_s ( LDAP *ld, char *base, int scope,
+ char *filter, char **attrs, int attrsonly,
+ LDAPControl **serverctrls, LDAPControl **clientctrls,
+ struct timeval *timeoutp, int sizelimit,
+ LDAPMessage **res);
+
+LDAPFUNCDECL int ldap_set_option( LDAP *ld, int option, void *optdata );
+LDAPFUNCDECL int ldap_get_option( LDAP *ld, int option, void *optdata );
+
+LDAPFUNCDECL void ldap_control_free( LDAPControl *ctrl );
+LDAPFUNCDECL void ldap_controls_free( LDAPControl **ctrl );
+
+LDAPFUNCDECL int ldap_msgid( LDAPMessage *lm );
+LDAPFUNCDECL int ldap_msgtype( LDAPMessage *lm );
+
+LDAPFUNCDECL LDAPMessage* ldap_next_reference( LDAP *ld, LDAPMessage *res );
+LDAPFUNCDECL LDAPMessage* ldap_first_reference( LDAP *ld, LDAPMessage *res );
+LDAPFUNCDECL int ldap_count_references( LDAP *ld, LDAPMessage *res );
+
+LDAPFUNCDECL LDAPMessage* ldap_first_message( LDAP *ld, LDAPMessage *chain );
+LDAPFUNCDECL LDAPMessage* ldap_next_message( LDAP *ld, LDAPMessage *chain );
+LDAPFUNCDECL int ldap_count_messages( LDAP *ld, LDAPMessage *chain );
+
+LDAPFUNCDECL int ora_ldap_normalize_dn( char *dn, char *normDn);
+LDAPFUNCDECL int ora_ldap_normalize_dn_with_case( char *dn, char *normDn,
+ int lower_case);
+
+#ifdef LDAP_REFERRALS
+LDAPFUNCDECL void ldap_set_rebind_proc(LDAP * ld, int (*rebindproc) (LDAP * ld,
+ char **dnp, char **passwdp, int *authmethodp, int freeit));
+LDAPFUNCDECL void ora_ldap_set_rebind_proc(OraLdapClientCtx * clientCtx,
+ LDAP * ld, int (*rebindproc) (LDAP * ld, char **dnp,
+ char **passwdp, int *authmethodp, int freeit));
+#endif /*LDAP_REFERRALS*/
+
+
+
+/* SASL functions */
+
+LDAPFUNCDECL int ora_ldap_init_SASL (OraLdapClientCtx *clientCtx, LDAP *ld,
+ char * dn, char * mech, void * cred,
+ LDAPControl **serverctrls,
+ LDAPControl **clientctrls);
+
+LDAPFUNCDECL OraLdapHandle ora_ldap_create_cred_hdl (OraLdapClientCtx *clientCtx,int credType);
+
+LDAPFUNCDECL int ora_ldap_set_cred_props (OraLdapClientCtx * clientCtx, OraLdapHandle cred,
+ int propType, void *inProperty);
+
+LDAPFUNCDECL int ora_ldap_get_cred_props (OraLdapClientCtx * clientCtx, OraLdapHandle cred,
+ int propType, void *outProperty);
+
+LDAPFUNCDECL int ora_ldap_free_cred_hdl (OraLdapClientCtx * clientCtx, OraLdapHandle cred);
+
+/* LDAP Client Context Functions */
+
+LDAPFUNCDECL int ora_ldap_create_clientctx(OraLdapClientCtx ** clientCtx);
+
+LDAPFUNCDECL int ora_ldap_set_clientctx(OraLdapClientCtx * clientCtx,
+ int property_type,
+ void * property);
+
+LDAPFUNCDECL int ora_ldap_destroy_clientctx(OraLdapClientCtx ** clientCtx);
+
+/*
+ * discover server functions
+ */
+LDAPFUNCDECL int ora_ldap_discover ( OraLdapHandle hdl,
+ OraResultHandle * reshdl);
+LDAPFUNCDECL LDAP *ora_ldap_discover_open( OraLdapHandle hdl);
+
+LDAPFUNCDECL OraLdapHandle ora_create_discov_hdl(int discoveryType);
+
+LDAPFUNCDECL int ora_free_discov_hdl(OraLdapHandle hdl);
+LDAPFUNCDECL int ora_free_result_hdl(OraResultHandle reshdl);
+
+LDAPFUNCDECL int ora_get_result( OraResultHandle reshdl,
+ int resType, char *** result);
+
+LDAPFUNCDECL int ora_set_discov_prop( OraLdapHandle hdl,
+ int prop, void * inval);
+
+LDAPFUNCDECL int ora_get_discov_prop( OraLdapHandle hdl,
+ int prop, void * outval);
+
+
+#if defined(ultrix) || defined( nextstep )
+extern char *strdup();
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null
+/* DISABLE check_long_lines */
+
+/*
+ * $Header: security_src/public/nzerror.h /st_ldap_db11.2/3 2011/04/29 12:36:28 rchahal Exp $
+ *
+* Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
+ */
+
+/* ENABLE check_long_lines */
+/*
+ NAME
+ nzerror.h - error numbers for the Oracle Security Server
+ DESCRIPTION
+ None.
+ PUBLIC FUNCTION(S)
+ None.
+ PRIVATE FUNCTION(S)
+ None.
+ NOTES
+ A pragma is used to silence olint about the enum value names not being
+ unique within 7 characters. This limit is being changed to 30.
+ MODIFIED
+ rchahal 06/12/06 -
+ skalyana 01/30/05 -
+ rchahal 07/16/04 - add cert label
+ rchahal 07/06/04 -
+ rchahal 10/15/03 - bug 2513821
+ rchahal 08/14/03 - new error range (43000 - 43499)
+ skalyana 08/25/03 - Error changes
+ rchahal 06/27/03 - RSA errors
+ rchahal 05/27/03 - convert wallet
+ skalyana 03/07/03 - Move FIPS errors
+ rchahal 02/28/03 - bug 2648177
+ rchahal 01/20/03 - use sltsky
+ rchahal 11/11/02 - pkcs11 support
+ skalyana 11/29/02 - Add mutex errors
+ akoyfman 11/01/02 - adding crl cache
+ rchahal 10/23/02 - crldp error
+ rchahal 10/15/02 - fetch crl from ldap
+ rchahal 10/07/02 - crl support
+ akoyfman 10/16/02 - Update with SSL PLus 4.2 errors
+ skalyana 10/04/02 - Certicom SSL Plus 4.2 Upgrade changes
+ akoyfman 08/06/02 - adding sso wallet errors
+ akoyfman 07/12/02 - adding secret store errors
+ skalyana 07/07/02 - Add more errors for FIPS self tests
+ skalyana 07/01/02 - Add more errors
+ skalyana 06/03/02 - Add NZ error for self test failure.
+ ajacobs 02/22/01 - Add some entrust errors
+ vle 02/09/01 - add error mesg
+ lkethana 08/11/00 - Extension Errors
+ lkethana 07/30/00 - add pkcs12 errors
+ lkethana 06/17/00 - mult cert errors
+ lkethana 06/11/00 - multiple cert support
+ rturlapa 03/29/00 - Add error meesage for Entrust Login failure.
+ rwessman 07/07/99 - Deleted include of sslerrs.h. It caused the RDBMS bu
+ rwessman 07/02/99 - fixed merge errors
+ rwessman 07/01/99 - moved NZOS errors to nzerror to make them visible
+ supriya 12/16/98 - add new error for cert chain.
+ arswamin 12/04/98 - add NZERROR_NO_MATCHING_PRIVATE_KEY
+ qdinh 11/12/98 - add NZERROR_VALIDITY_EXPIRED.
+ arswamin 06/17/98 - add INIT_FAILED
+ sdange 06/10/98 - change wrong password to bad password
+ amthakur 06/09/98 - adding error messages
+ wliau 03/10/97 - Add new error message for snzdfo.c.
+ rwessman 03/14/97 - Consolidated PL/SQL toolkit errors into generic erro
+ rwessman 02/26/97 - Added NZERROR_UNSUPPORTED. Corrected values of
+ errors outside the valid range.
+ asriniva 03/02/97 - Fix olint warning
+ rwessman 02/26/97 - Added NZERROR_UNSUPPORTED
+ rwessman 01/02/97 - Changed PLSQL package errors to be TK_PLSQL to
+ separate them from the errors generated by the
+ Oracle interface.
+ rwessman 12/30/96 - Merged in PL/SQL toolkit errors
+ sdange 11/14/96 - (Added NZERROR_DECRYPT_FAILED to the enum list)
+ rwessman 12/02/96 -
+ rwessman 11/25/96 - Added error messages for PL/SQL functions.
+ asriniva 10/31/96 - Include oratypes.h
+ asriniva 10/29/96 - Fix numbering.
+ asriniva 10/29/96 - Fix error numbers
+ asriniva 10/29/96 - Correct type-o
+ asriniva 10/28/96 - Add more TK errors
+ asriniva 10/28/96 - Convert OKAPI errors to TK errors.
+ rwessman 10/17/96 - still more OSS TK errors
+ asriniva 10/16/96 - OKAPI errors
+ asriniva 10/15/96 - OSSTK errors
+ rwessman 10/15/96 - Added more OSS TK errors
+ asriniva 10/09/96 - Add OSSTK errors.
+ rwessman 09/05/96 - Added errors for PL/SQL functions.
+ wliau 09/05/96 - correct error numbers.
+ $Log: $
+ * Revision 1.26 1996/07/15 23:07:23 wliau
+ * Added NZERROR_AUTH_SHARED_MEMORY
+ *
+ * Revision 1.25 1996/07/01 20:40:15 asriniva
+ * Finished RSA verify/sign.
+ *
+ * Revision 1.24 1996/06/27 20:39:41 rwessman
+ * Added more errors.
+ *
+ * Revision 1.23 1996/05/31 17:33:40 rwessman
+ * Updated nzerror.h to contain bug # for olint enum bug.
+ *
+ * Revision 1.22 1996/05/31 17:12:30 rwessman
+ * Assigned values to the various errors.
+ *
+ * Revision 1.21 1996/05/13 20:46:58 ggilchri
+ * Added more attribute related error conditions
+ *
+*/
+
+#ifndef NZERROR_ORACLE
+# define NZERROR_ORACLE
+
+#ifndef ORATYPES
+# include <oratypes.h>
+#endif /* ORATYPES */
+
+/*
+** Errors - when an error is added here, a message corresponding to the
+** error number must be added to the message file.
+** New errors must be assigned numbers, otherwise the compiler can assign any
+** value that it wants, which may lead to invalid error numbers being
+** generated.
+** The number range currently assigned to the OSS is 28750 - 29249
+** New number range 43000 - 43499
+*/
+
+typedef enum nzerror
+{
+ NZERROR_OK = 0,
+ NZERROR_GENERIC = 28750, /* A catchall for errors */
+ NZERROR_NO_MEMORY = 28751, /* No more memory */
+ NZERROR_DATA_SOURCE_INIT_FAILED = 28752, /* Failed to init data source */
+ NZERROR_DATA_SOURCE_TERM_FAILED = 28753,/* Failed to terminate data source */
+ NZERROR_OBJECT_STORE_FAILED = 28754, /* Store object in data source failed */
+ NZERROR_OBJECT_GET_FAILED = 28755,
+ /* Failed to obtain object from data source */
+ NZERROR_MEMORY_ALLOC_FAILED = 28756,
+ /* Callback failed to allocate memory */
+ NZERROR_MEMORY_ALLOC_0_BYTES = 28757,
+ /* Attempted to ask for 0 bytes of memory */
+ NZERROR_MEMORY_FREE_FAILED = 28758,
+ /* Callback failed to free memory */
+ NZERROR_FILE_OPEN_FAILED = 28759,
+ /* Open of file failed */
+ NZERROR_LIST_CREATION_FAILED = 28760,
+ /* Creation of list failed */
+ NZERROR_NO_ELEMENT = 28761,
+ /* No list element found */
+ NZERROR_ELEMENT_ADD_FAILED = 28762,
+ /* Addition of list element failed */
+ NZERROR_PARAMETER_BAD_TYPE = 28763,
+ /* Retrieval of an unknown parameter type */
+ NZERROR_PARAMETER_RETRIEVAL = 28764, /* Retrieval of parameter failed */
+
+ NZERROR_NO_LIST = 28765, /* Data method list does not exist */
+ NZERROR_TERMINATE_FAIL = 28766, /* Failed to terminate */
+ NZERROR_BAD_VERSION_NUMBER = 28767, /* Bad version number */
+ NZERROR_BAD_MAGIC_NUMBER = 28768, /* Bad magic number */
+ NZERROR_METHOD_NOT_FOUND = 28769,
+ /* Data retrieval method specified does not exist */
+ NZERROR_ALREADY_INITIALIZED = 28770,
+ /*The data source is already initialized */
+ NZERROR_NOT_INITIALIZED = 28771, /* The data source is not initialized */
+ NZERROR_BAD_FILE_ID = 28772, /* File ID is bad */
+ NZERROR_WRITE_MAGIC_VERSION = 28773, /* Failed to write magic and version */
+ NZERROR_FILE_WRITE_FAILED = 28774, /* Failed to write to file */
+ NZERROR_FILE_CLOSE_FAILED = 28775, /* Failed to close file */
+ NZERROR_OUTPUT_BUFFER_TOO_SMALL = 28776,
+ /* The buffer supplied by the caller is too small */
+ NZERROR_BINDING_CREATION_FAILED = 28777,/* NL failed in creating a binding */
+ NZERROR_PARAMETER_MALFORMED = 28778, /* A parameter was in a bad format */
+ NZERROR_PARAMETER_NO_METHOD = 28779,
+ /* No method was specified for a data type */
+ NZERROR_BAD_PARAMETER_METHOD = 28780, /* Illegal method for data type */
+ NZERROR_PARAMETER_NO_DATA = 28781, /* No method specified when required */
+ NZERROR_NOT_ALLOCATED = 28782, /* Data source is not allocated */
+ NZERROR_INVALID_PARAMETER = 28783, /* Invalid parameter name */
+ NZERROR_FILE_NAME_TRANSLATION = 28784,/* Could not translate OSD file name */
+ NZERROR_NO_SUCH_PARAMETER = 28785, /* Selected parameter is non-existent */
+
+ NZERROR_DECRYPT_FAILED = 28786,
+ /* Encrypted private key decryption failure */
+ NZERROR_ENCRYPT_FAILED = 28787, /* Private key encryption failed */
+
+ NZERROR_INVALID_INPUT = 28788, /* Incorrect input or unknown error */
+
+ NZERROR_NAME_TYPE_NOT_FOUND = 28789,
+ /* Type of name requested is not available */
+ NZERROR_NLS_STRING_OPEN_FAILED = 28790,
+ /* Failure to generate an NLS string */
+ NZERROR_CERTIFICATE_VERIFY = 28791, /* Failed to verify a certificate */
+ NZERROR_OCI_PLSQL_FAILED = 28792,
+ /* an OCI call to process some plsql failed */
+ NZERROR_OCI_BIND_FAILED = 28793,
+ /* an OCI call to bind an internal var. failed */
+ NZERROR_ATTRIBUTE_INIT = 28794, /* failed to init role retrieval */
+ NZERROR_ATTRIBUTE_FINISH_FAILED = 28795,/* Did not complete role retrieval */
+ NZERROR_UNSUPPORTED_METHOD = 28796, /* Data method specified not supported */
+ NZERROR_INVALID_KEY_DATA_TYPE = 28797,
+ /* Invalid data type specified for key */
+ NZEROR_BIND_SUBKEY_COUNT = 28798,
+ /* Number of sub-keys to bind does not match count in initialized key */
+ NZERROR_AUTH_SHARED_MEMORY = 28799,
+ /* Failed to retreieve authentication information from the shared memory */
+ NZERROR_RIO_OPEN = 28800, /* RIO Open Failed */
+ NZERROR_RIO_OBJECT_TYPE = 28801, /* RIO object type invalid */
+ NZERROR_RIO_MODE = 28802, /* RIO mode invalid */
+ NZERROR_RIO_IO = 28803, /* RIO io set or numberinvalid */
+ NZERROR_RIO_CLOSE = 28804, /* RIO close failed */
+ NZERROR_RIO_RETRIEVE = 28805, /* RIO retrieve failed */
+ NZERROR_RIO_STORE = 28806, /* RIO store failed */
+ NZERROR_RIO_UPDATE = 28807, /* RIO update failed */
+ NZERROR_RIO_INFO = 28808, /* RIO info failed */
+ NZERROR_RIO_DELETE = 28809, /* RIO delete failed */
+ NZERROR_KD_CREATE = 28810, /* Key descriptor create failed */
+ NZERROR_RIO_ACCESS_DESCRIPTOR = 28811, /* access descriptor invalid */
+ NZERROR_RIO_RECORD = 28812, /* record invalid */
+ NZERROR_RIO_RECORD_TYPE = 28813, /* record type and AD type not matched */
+ NZERROR_PLSQL_ORACLE_TO_REAL = 28814,
+ /* A number passed to PL/SQL could not be converted to real format */
+ NZERROR_PLSQL_REAL_TO_ORACLE = 28815,
+ /* A number in machine format could not be converted to Oracle format */
+ NZERROR_TK_PLSQL_NO_PASSWORD = 28816,
+ /* A password was not provided to a PL/SQL function */
+ NZERROR_TK_PLSQL_GENERIC = 28817,
+ /* A PL/SQL function returned an error */
+ NZERROR_TK_PLSQL_NO_CONTEXT = 28818,
+ /* The package context was not specified to a PL/SQL function */
+ NZERROR_TK_PLSQL_NO_DIST_NAME = 28819,
+ /* The user's distinguished name was not provided to a PL/SQL function */
+ NZERROR_TK_PLSQL_NO_STATE = 28820,
+/* The state of either a signature or decryption/encryption was not provided */
+ NZERROR_TK_PLSQL_NO_INPUT = 28821,
+ /* An input buffer was specified to a PL/SQL function */
+ NZERROR_TK_PLSQL_NO_SEED = 28822,
+ /* No seed was specified to the PL/SQL seed initialization function */
+ NZERROR_TK_PLSQL_NO_BYTES = 28823,
+ /* Number of bytes was not specified to the PL/SQL random number generator */
+ NZERROR_TK_INVALID_STATE = 28824,
+ /* Invalid encryption/decryption/signature state passed */
+ NZERROR_TK_PLSQL_NO_ENG_FUNC = 28825,
+ /* No crypto engine function was passed in */
+ NZERROR_TK_INV_ENG_FUNC = 28826,
+ /* An invalid crypto engine function was passed in */
+ NZERROR_TK_INV_CIPHR_TYPE = 28827,
+ /* An invalid cipher type was passed in */
+ NZERROR_TK_INV_IDENT_TYPE = 28828,
+ /* An invalid identity type was specified */
+ NZERROR_TK_PLSQL_NO_CIPHER_TYPE = 28829,
+ /* No cipher type was specified */
+ NZERROR_TK_PLSQL_NO_IDENT_TYPE = 28830,
+ /* No identity type was specified */
+ NZERROR_TK_PLSQL_NO_DATA_FMT = 28831,
+ /* No data unit format was specified */
+ NZERROR_TK_INV_DATA_FMT = 28832,
+ /* Invalid data unit format was provided to function */
+ NZERROR_TK_PLSQL_INSUFF_INFO = 28833,
+ /* Not enough info (usually parameters) provided to a PL/SQL function */
+ NZERROR_TK_PLSQL_BUF_TOO_SMALL = 28834,
+ /* Buffer provided by PL/SQL is too small for data to be returned */
+ NZERROR_TK_PLSQL_INV_IDENT_DESC = 28835,
+ /* Identity descriptor not present or too small */
+ NZERROR_TK_PLSQL_WALLET_NOTOPEN = 28836,
+ /* Wallet has not been opened yet */
+ NZERROR_TK_PLSQL_NO_WALLET = 28837,
+ /* No wallet descriptor specified to PL/SQL function */
+ NZERROR_TK_PLSQL_NO_IDENTITY = 28838,
+ /* No identity descriptor specified to PL/SQL function */
+ NZERROR_TK_PLSQL_NO_PERSONA = 28839,
+ /* No persona descriptor was specified to PL/SQL function */
+ NZERROR_TK_PLSQL_WALLET_OPEN = 28840,
+ /* Wallet was already opened */
+ NZERROR_UNSUPPORTED = 28841, /* Operation is not supported */
+ NZERROR_FILE_BAD_PERMISSION = 28842, /* Bad file permission specified */
+ NZERROR_FILE_OSD_ERROR = 28843, /* OSD error when opening file */
+ NZERROR_NO_WALLET = 28844, /* cert + privkey + tp files do not exist */
+ NZERROR_NO_CERTIFICATE_ALERT = 28845, /* no certificate */
+ NZERROR_NO_PRIVATE_KEY = 28846, /* no private-key */
+ NZERROR_NO_CLEAR_PRIVATE_KEY_FILE = 28847, /* no clear key-file */
+ NZERROR_NO_ENCRYPTED_PRIVATE_KEY_FILE = 28848, /* no encrypted priv key */
+ NZERROR_NO_TRUSTPOINTS = 28849, /* no trustpoints */
+ NZERROR_NO_CLEAR_TRUSTPOINT_FILE = 28850, /* no clear trustpoints */
+ NZERROR_NO_ENCRYPTED_TRUSTPOINT_FILE = 28851, /* no encrypted trustpoints */
+ NZERROR_BAD_PASSWORD = 28852, /* bad password */
+ NZERROR_INITIALIZATION_FAILED = 28853, /* init failed or
+ module loading failed */
+ /******************************* SSL ERRORS ********************************/
+ /*
+ * In order to allow SSL errors to be mapped to Oracle errors, space is
+ * provided here. One Oracle error is provided for each SSL error to make
+ * error handling easier. A macro is provided to do the conversion.
+ * NOTE: ANY CHANGE IN SSL ERRORS MUST BE REFLECTED HERE.
+ * To add an SSL error, use the following formula to calculate the Oracle
+ * error:
+ * new_oracle_error = (new_ssl_error - SSLMemoryError) + NZERROR_SSLMemoryErr
+ * or numerically:
+ * new_oracle_error = (new_ssl_error - -7000) + 28854
+ */
+ NZERROR_SSLMemoryErr = 28854,
+ NZERROR_SSLUnsupportedErr = 28855,
+ NZERROR_SSLOverflowErr = 28856,
+ NZERROR_SSLUnknownErr = 28857,
+ NZERROR_SSLProtocolErr = 28858,
+ NZERROR_SSLNegotiationErr = 28859,
+ NZERROR_SSLFatalAlert = 28860,
+ NZERROR_SSLWouldBlockErr = 28861,
+ NZERROR_SSLIOErr = 28862,
+ NZERROR_SSLSessionNotFoundErr = 28863,
+ NZERROR_SSLConnectionClosedGraceful = 28864,
+ NZERROR_SSLConnectionClosedError = 28865,
+ NZERROR_ASNBadEncodingErr = 28866,
+ NZERROR_ASNIntegerTooBigErr = 28867,
+ NZERROR_X509CertChainInvalidErr = 28868,
+ NZERROR_X509CertExpiredErr = 28869,
+ NZERROR_X509NamesNotEqualErr = 28870,
+ NZERROR_X509CertChainIncompleteErr = 28871,
+ NZERROR_X509DataNotFoundErr = 28872,
+ NZERROR_SSLBadParameterErr = 28873,
+ NZERROR_SSLIOClosedOverrideGoodbyeKiss = 28874,
+ NZERROR_X509MozillaSGCErr = 28875,
+ NZERROR_X509IESGCErr = 28876,
+ NZERROR_ImproperServerCredentials = 28877,
+ NZERROR_ImproperClientCredentials = 28878,
+ NZERROR_NoProtocolSideSet = 28879,
+ NZERROR_setPersonaFailed = 28880,
+ NZERROR_setCertFailed = 28881,
+ NZERROR_setVKeyFailed = 28882,
+ NZERROR_setTPFailed = 28883,
+ NZERROR_BadCipherSuite = 28884,
+ NZERROR_NoKeyPairForKeyUsage = 28885,
+
+/* ============>>> ENTRUST ERRORS */
+ NZERROR_EntrustLoginFailed = 28890,
+ NZERROR_EntrustGetInfoFailed = 28891,
+ NZERROR_EntrustLoadCertificateFailed = 28892,
+ NZERROR_EntrustGetNameFailed = 28893,
+
+/* ============>>> NZERRORS CONTINUED */
+ NZERROR_CertNotInstalled = 29000,
+ NZERROR_ServerDNMisMatched = 29002,
+ NZERROR_ServerDNMisConfigured = 29003,
+
+/* ============>>> PKI VENDORS ERRORS 29050 - 29099 */
+
+/* ============>>> SSL Errors CONTINUED */
+ NZERROR_CIC_ERR_SSL_ALERT_CB_FAILURE = 29004,
+ NZERROR_CIC_ERR_SSL_BAD_CERTIFICATE = 29005,
+ NZERROR_CIC_ERR_SSL_BAD_CERTIFICATE_REQUEST = 29006,
+ NZERROR_CIC_ERR_SSL_BAD_CLEAR_KEY_LEN = 29007,
+ NZERROR_CIC_ERR_SSL_BAD_DHPARAM_KEY_LENGTH = 29008,
+ NZERROR_CIC_ERR_SSL_BAD_ENCRYPTED_KEY_LEN = 29009,
+ NZERROR_CIC_ERR_SSL_BAD_EXPORT_KEY_LENGTH = 29010,
+ NZERROR_CIC_ERR_SSL_BAD_FINISHED_MESSAGE = 29011,
+ NZERROR_CIC_ERR_SSL_BAD_KEY_ARG_LEN = 29012,
+ NZERROR_CIC_ERR_SSL_BAD_MAC = 29013,
+ NZERROR_CIC_ERR_SSL_BAD_MAX_FRAGMENT_LENGTH_EXTENSION = 29014,
+ NZERROR_CIC_ERR_SSL_BAD_MESSAGE_LENGTH = 29015,
+ NZERROR_CIC_ERR_SSL_BAD_PKCS1_PADDING = 29016,
+ NZERROR_CIC_ERR_SSL_BAD_PREMASTER_SECRET_LENGTH = 29017,
+ NZERROR_CIC_ERR_SSL_BAD_PREMASTER_SECRET_VERSION = 29018,
+ NZERROR_CIC_ERR_SSL_BAD_PROTOCOL_VERSION = 29019,
+ NZERROR_CIC_ERR_SSL_BAD_RECORD_LENGTH = 29020,
+ NZERROR_CIC_ERR_SSL_BAD_SECRET_KEY_LEN = 29021,
+ NZERROR_CIC_ERR_SSL_BAD_SIDE = 29022,
+ NZERROR_CIC_ERR_SSL_BUFFERS_NOT_EMPTY = 29023,
+ NZERROR_CIC_ERR_SSL_CERTIFICATE_VALIDATE_FAILED = 29024,
+ NZERROR_CIC_ERR_SSL_CERT_CHECK_CALLBACK = 29025,
+ NZERROR_CIC_ERR_SSL_DECRYPT_FAILED = 29026,
+ NZERROR_CIC_ERR_SSL_ENTROPY_COLLECTION = 29027,
+ NZERROR_CIC_ERR_SSL_FAIL_SERVER_VERIFY = 29028,
+ NZERROR_CIC_ERR_SSL_HANDSHAKE_ALREADY_COMPLETED = 29029,
+ NZERROR_CIC_ERR_SSL_HANDSHAKE_REQUESTED = 29030,
+ NZERROR_CIC_ERR_SSL_HANDSHAKE_REQUIRED = 29031,
+ NZERROR_CIC_ERR_SSL_INCOMPLETE_IDENTITY = 29032,
+ NZERROR_CIC_ERR_SSL_INVALID_PFX = 29033,
+ NZERROR_CIC_ERR_SSL_NEEDS_CIPHER_OR_CLIENTAUTH = 29034,
+ NZERROR_CIC_ERR_SSL_NEEDS_PRNG = 29035,
+ NZERROR_CIC_ERR_SSL_NOT_SUPPORTED = 29036,
+ NZERROR_CIC_ERR_SSL_NO_CERTIFICATE = 29037,
+ NZERROR_CIC_ERR_SSL_NO_MATCHING_CERTIFICATES = 29038,
+ NZERROR_CIC_ERR_SSL_NO_MATCHING_CIPHER_SUITES = 29039,
+ NZERROR_CIC_ERR_SSL_NO_SUPPORTED_CIPHER_SUITES = 29040,
+ NZERROR_CIC_ERR_SSL_NULL_CB = 29041,
+ NZERROR_CIC_ERR_SSL_READ_BUFFER_NOT_EMPTY = 29042,
+ NZERROR_CIC_ERR_SSL_READ_REQUIRED = 29043,
+ NZERROR_CIC_ERR_SSL_RENEGOTIATION_ALREADY_REQUESTED = 29044,
+ NZERROR_CIC_ERR_SSL_RENEGOTIATION_REFUSED = 29045,
+ NZERROR_CIC_ERR_SSL_RESUMABLE_SESSION = 29046,
+ NZERROR_CIC_ERR_SSL_TLS_EXTENSION_MISMATCH = 29047,
+ NZERROR_CIC_ERR_SSL_UNEXPECTED_MSG = 29048,
+ NZERROR_CIC_ERR_SSL_UNKNOWN_RECORD = 29049,
+ NZERROR_CIC_ERR_SSL_UNSUPPORTED_CLIENT_AUTH_MODE = 29050,
+ NZERROR_CIC_ERR_SSL_UNSUPPORTED_PUBKEY_TYPE = 29051,
+ NZERROR_CIC_ERR_SSL_WRITE_BUFFER_NOT_EMPTY = 29052,
+ NZERROR_CIC_ERR_PKCS12_MISSING_ALG = 29053,
+ NZERROR_CIC_ERR_PKCS_AUTH_FAILED = 29054,
+ NZERROR_CIC_ERR_PKCS_BAD_CONTENT_TYPE = 29055,
+ NZERROR_CIC_ERR_PKCS_BAD_INPUT = 29056,
+ NZERROR_CIC_ERR_PKCS_BAD_PADDING = 29057,
+ NZERROR_CIC_ERR_PKCS_BAD_SN = 29058,
+ NZERROR_CIC_ERR_PKCS_BAD_SN_LENGTH = 29059,
+ NZERROR_CIC_ERR_PKCS_BAD_VERSION = 29060,
+ NZERROR_CIC_ERR_PKCS_BASE = 29061,
+ NZERROR_CIC_ERR_PKCS_FIELD_NOT_PRESENT = 29062,
+ NZERROR_CIC_ERR_PKCS_NEED_CERTVAL = 29063,
+ NZERROR_CIC_ERR_PKCS_NEED_PASSWORD = 29064,
+ NZERROR_CIC_ERR_PKCS_NEED_PKC = 29065,
+ NZERROR_CIC_ERR_PKCS_NEED_PRV_KEY = 29066,
+ NZERROR_CIC_ERR_PKCS_NEED_TRUSTED = 29067,
+ NZERROR_CIC_ERR_PKCS_UNSUPPORTED_CERT_FORMAT = 29068,
+ NZERROR_CIC_ERR_PKCS_UNSUP_PRVKEY_TYPE = 29069,
+ NZERROR_CIC_ERR_CODING_BAD_PEM = 29070,
+ NZERROR_CIC_ERR_CODING_BASE = 29071,
+ NZERROR_CIC_ERR_DER_BAD_ENCODING = 29072,
+ NZERROR_CIC_ERR_DER_BAD_ENCODING_LENGTH = 29073,
+ NZERROR_CIC_ERR_DER_BASE = 29074,
+ NZERROR_CIC_ERR_DER_ELEMENT_TOO_LONG = 29075,
+ NZERROR_CIC_ERR_DER_INDEFINITE_LENGTH = 29076,
+ NZERROR_CIC_ERR_DER_NO_MORE_ELEMENTS = 29077,
+ NZERROR_CIC_ERR_DER_OBJECT_TOO_LONG = 29078,
+ NZERROR_CIC_ERR_DER_TAG_SIZE = 29079,
+ NZERROR_CIC_ERR_DER_TIME_OUT_OF_RANGE = 29080,
+ NZERROR_CIC_ERR_DER_UNUSED_BITS_IN_BIT_STR = 29081,
+ NZERROR_CIC_ERR_GENERAL_BASE = 29082,
+ NZERROR_CIC_ERR_HASH_BASE = 29083,
+ NZERROR_CIC_ERR_ILLEGAL_PARAM = 29084,
+ NZERROR_CIC_ERR_MEM_NOT_OURS = 29085,
+ NZERROR_CIC_ERR_MEM_OVERRUN = 29086,
+ NZERROR_CIC_ERR_MEM_UNDERRUN = 29087,
+ NZERROR_CIC_ERR_MEM_WAS_FREED = 29088,
+ NZERROR_CIC_ERR_NOT_FOUND = 29090,
+ NZERROR_CIC_ERR_NO_PTR = 29091,
+ NZERROR_CIC_ERR_TIMEOUT = 29092,
+ NZERROR_CIC_ERR_UNIT_MASK = 29093,
+ NZERROR_CIC_ERR_BAD_CTX = 29094,
+ NZERROR_CIC_ERR_BAD_INDEX = 29095,
+ NZERROR_CIC_ERR_BAD_LENGTH = 29096,
+ NZERROR_CIC_ERR_CODING_BAD_ENCODING = 29097,
+ NZERROR_CIC_ERR_SSL_NO_CLIENT_AUTH_MODES = 29098,
+
+ /* ============>>> PKCS12 error 29100 - 29149 */
+
+ NZERROR_LOCKEYID_CREATE_FAILED = 29100,
+ NZERROR_P12_ADD_PVTKEY_FAILED = 29101,
+ NZERROR_P12_ADD_CERT_FAILED = 29102,
+ NZERROR_P12_WLT_CREATE_FAILED = 29103,
+ NZERROR_P12_ADD_CERTREQ_FAILED = 29104,
+ NZERROR_P12_WLT_EXP_FAILED = 29105,
+ NZERROR_P12_WLT_IMP_FAILED = 29106,
+ NZERROR_P12_CREATE_FAILED = 29107,
+ NZERROR_P12_DEST_FAILED = 29107,
+ NZERROR_P12_RAND_ERROR = 29108,
+ NZERROR_P12_PVTKEY_CRT_FAILED = 29109,
+ NZERROR_P12_INVALID_BAG = 29110,
+ NZERROR_P12_INVALID_INDEX = 29111,
+ NZERROR_P12_GET_CERT_FAILED = 29112,
+ NZERROR_P12_GET_PVTKEY_FAILED = 29113,
+ NZERROR_P12_IMP_PVTKEY_FAILED = 29114,
+ NZERROR_P12_EXP_PVTKEY_FAILED = 29115,
+ NZERROR_P12_GET_ATTRIB_FAILED = 29116,
+ NZERROR_P12_ADD_ATTRIB_FAILED = 29117,
+ NZERROR_P12_CRT_ATTRIB_FAILED = 29118,
+ NZERROR_P12_IMP_CERT_FAILED = 29119,
+ NZERROR_P12_EXP_CERT_FAILED = 29120,
+ NZERROR_P12_ADD_SECRET_FAILED = 29121,
+ NZERROR_P12_ADD_PKCS11INFO_FAILED = 29122,
+ NZERROR_P12_GET_PKCS11INFO_FAILED = 29123,
+ NZERROR_P12_MULTIPLE_PKCS11_LIBNAME = 29124,
+ NZERROR_P12_MULTIPLE_PKCS11_TOKENLABEL = 29125,
+ NZERROR_P12_MULTIPLE_PKCS11_TOKENPASSPHRASE = 29126,
+ NZERROR_P12_UNKNOWN_PKCS11INFO = 29127,
+ NZERROR_P12_PKCS11_LIBNAME_NOT_SET = 29128,
+ NZERROR_P12_PKCS11_TOKENLABEL_NOT_SET = 29129,
+ NZERROR_P12_PKCS11_TOKENPASSPHRASE_NOT_SET = 29130,
+ NZERROR_P12_MULTIPLE_PKCS11_CERTLABEL = 29131,
+
+/* ===========>>> SSL Errors CONTINUED 29135 - 29139 */
+ NZERROR_CIC_ERR_RANDOM = 29135,
+ NZERROR_CIC_ERR_SMALL_BUFFER = 29136,
+ NZERROR_CIC_ERR_SSL_BAD_CONTEXT = 29137,
+
+/* ==========>>> Mutex Errors 29138 - 29139 */
+ NZERROR_MUTEX_INITIALIZE_FAILED = 29138,
+ NZERROR_MUTEX_DESTROY_FAILED = 29139,
+
+
+/* ============>>> EXTENSIONS Errors 29140 - 29149 */
+ NZERROR_BS_CERTOBJ_CREAT_FAILED = 29140,
+ NZERROR_BS_DER_IMP_FAILED = 29141,
+
+
+/* ============>>> FIPS ERRORS 29150 - 29175 */
+ NZERROR_DES_SELF_TEST_FAILED = 29150,
+ NZERROR_3DES_SELF_TEST_FAILED = 29151,
+ NZERROR_SHA_SELF_TEST_FAILED = 29152,
+ NZERROR_RSA_SELF_TEST_FAILED = 29153,
+ NZERROR_DRNG_SELF_TEST_FAILED = 29154,
+ NZERROR_CKEYPAIR_SELF_TEST_FAILED = 29155,
+ NZERROR_CRNG_SELF_TEST_FAILED = 29156,
+ NZERROR_FIPS_PATHNAME_ERROR = 29157,
+ NZERROR_FIPS_LIB_OPEN_FAILED = 29158,
+ NZERROR_FIPS_LIB_READ_ERROR = 29159,
+ NZERROR_FIPS_LIB_DIFFERS = 29160,
+ NZERROR_DAC_SELF_TEST_FAILED = 29161,
+ NZERROR_NONFIPS_CIPHERSUITE = 29162,
+ NZERROR_VENDOR_NOT_SUPPORTED_FIPS_MODE = 29163,
+ NZERROR_EXTERNAL_PKCS12_NOT_SUPPORTED_FIPS_MODE = 29164,
+ NZERROR_AES_SELF_TEST_FAILED = 29165,
+
+/* ============>>> CRL ERRORS 29176 - 29200 */
+ NZERROR_CRL_SIG_VERIFY_FAILED = 29176, /*CRL signature verification failed*/
+ NZERROR_CERT_NOT_IN_CRL = 29177,
+ /*Cert is not in CRL - cert is not revoked*/
+ NZERROR_CERT_IN_CRL = 29178, /*Cert is in CRL - cert is revoked*/
+ NZERROR_CERT_IN_CRL_CHECK_FAILED = 29179, /*Cert revocation check failed */
+ NZERROR_INVALID_CERT_STATUS_PROTOCOL = 29180,
+ NZERROR_LDAP_OPEN_FAILED = 29181, /* ldap_open failed */
+ NZERROR_LDAP_BIND_FAILED = 29182, /* ldap_bind failed */
+ NZERROR_LDAP_SEARCH_FAILED = 29183, /* ldap_search failed */
+ NZERROR_LDAP_RESULT_FAILED = 29184, /* ldap_result failed */
+ NZERROR_LDAP_FIRSTATTR_FAILED = 29185, /* ldap_first_attribute failed */
+ NZERROR_LDAP_GETVALUESLEN_FAILED = 29186, /* ldap_get_values_len failed */
+ NZERROR_LDAP_UNSUPPORTED_VALMEC = 29187,
+ /* unsupported validation mechanism */
+ NZERROR_LDAP_COUNT_ENTRIES_FAILED = 29188,/* ldap_count_entries failed */
+ NZERROR_LDAP_NO_ENTRY_FOUND = 29189, /* No entry found in OID */
+ NZERROR_LDAP_MULTIPLE_ENTRIES_FOUND = 29190, /* Multiple entries in OID*/
+ NZERROR_OID_INFO_NOT_SET = 29191,
+ NZERROR_LDAP_VALMEC_NOT_SET = 29192,
+ /* Validation mechanism not set in OID*/
+ NZERROR_CRLDP_NO_CRL_FOUND = 29193,
+ /* No CRL found using CRLDP mechanism */
+ NZERROR_CRL_NOT_IN_CACHE = 29194, /* No CRL found in the cache*/
+ NZERROR_CRL_EXPIRED = 29195, /* CRL nextUpdate time is in the past */
+
+/* ============>>> ADD ERRORS HERE -- NOTE DECREASING numbers */
+ NZERROR_DN_MATCH = 29222, /* for nztCompareDN */
+ NZERROR_CERT_CHAIN_CREATION = 29223, /* unable to create a cert chain
+ * with the existing TPs for the
+ * cert to be installed.
+ */
+ NZERROR_NO_MATCHING_CERT_REQ = 29224, /* No matching cert_req was
+ * found the corresponding to
+ * the privatekey which
+ * matches the cert to be
+ * installed */
+ NZERROR_CERT_ALREADY_INSTALLED = 29225, /* we are attempting to
+ * install a cert again into
+ * a persona which already
+ * has it installed.
+ */
+ NZERROR_NO_MATCHING_PRIVATE_KEY = 29226, /* could not find a matching
+ * persona-private(privatekey) in
+ * the Persona, for the given
+ * cert(public key).
+ */
+ NZERROR_VALIDITY_EXPIRED = 29227, /* certificate validity date expired */
+ NZERROR_TK_BYTES_NEEDED = 29228, /* Couldn't determine # of bytes needed */
+ NZERROR_TK_BAD_MAGIC_NUMBER = 29229,
+ /* Magic number found in header does not match expected */
+ NZERROR_TK_BAD_HEADER_LENGTH = 29230,
+ /* Header length passed in not sufficient for message header */
+ NZERROR_TK_CE_INIT = 29231, /* Crypto engine failed to initialize */
+ NZERROR_TK_CE_KEYINIT = 29232, /* Crypto engine key initialization failed */
+ NZERROR_TK_CE_ENCODE_KEY = 29233, /* Count not encode key object */
+ NZERROR_TK_CE_DECODE_KEY = 29234, /* Could not decode key into object */
+ NZERROR_TK_CE_GEYKEYINFO = 29235, /* Crypto engine failed to get key info */
+ NZERROR_TK_SEED_RANDOM = 29236, /* Couldn't seed random number generator */
+ NZERROR_TK_CE_ALGFINISH = 29237, /* Couldn't finish algorithm */
+ NZERROR_TK_CE_ALGAPPLY = 29238, /* Couldn't apply algorithm to data */
+ NZERROR_TK_CE_ALGINIT = 29239, /* Couldn't init CE for algorithm */
+ NZERROR_TK_ALGORITHM = 29240, /* Have no idea what algorithm you want */
+ NZERROR_TK_CANNOT_GROW = 29241, /* Cannot grow output buffer block */
+ NZERROR_TK_KEYSIZE = 29242, /* Key not large enough for data */
+ NZERROR_TK_KEYTYPE = 29243, /* Unknown key type. */
+
+ NZERROR_TK_PLSQL_NO_WRL = 29244,
+ /* Wallet resource locator not specified to PL/SQL function */
+
+ NZERROR_TK_CE_FUNC = 29245, /* Unknown crypto engine function */
+ NZERROR_TK_TDU_FORMAT = 29246, /* Unknown TDU format */
+ NZERROR_TK_NOTOPEN = 29247, /* Object must be open */
+ NZERROR_TK_WRLTYPE = 29248, /* Bad WRL type */
+ NZERROR_TK_CE_STATE = 29249, /* Bad state specified for the crypto engine */
+
+ /* After 29249, use error numbers in block 43000 - 43499 */
+ NZERROR_PKCS11_LIBRARY_NOT_FOUND = 43000, /* PKCS #11 library not found */
+ NZERROR_PKCS11_TOKEN_NOT_FOUND = 43001,
+ /* can't find token with given label*/
+ NZERROR_PKCS11_BAD_PASSPHRASE = 43002, /* passphrase is incorrect/expired */
+ NZERROR_PKCS11_GET_FUNC_LIST = 43003, /* C_GetFunctionList returned error */
+ NZERROR_PKCS11_INITIALIZE = 43004, /* C_Initialize returned error */
+ NZERROR_PKCS11_NO_TOKENS_PRESENT = 43005, /* No tokens present */
+ NZERROR_PKCS11_GET_SLOT_LIST = 43006, /* C_GetSlotList returned error */
+
+ NZERROR_PKCS11_GET_TOKEN_INFO = 43008, /* C_GetTokenInfo returned error */
+ NZERROR_PKCS11_SYMBOL_NOT_FOUND = 43009, /* Symbol not found in PKCS11 lib */
+
+ NZERROR_PKCS11_TOKEN_LOGIN_FAILED = 43011, /* Token login failed */
+
+ NZERROR_PKCS11_CHANGE_PROVIDERS_ERROR = 43013, /* Change providers error */
+ NZERROR_PKCS11_GET_PRIVATE_KEY_ERROR = 43014,
+ /* Error trying to find private key on token */
+ NZERROR_PKCS11_CREATE_KEYPAIR_ERROR = 43015, /* Key pair gen error */
+ NZERROR_PKCS11_WALLET_CONTAINS_P11_INFO = 43016, /* Wallet already contains
+ pkcs11 info */
+ NZERROR_PKCS11_NO_CERT_ON_TOKEN = 43017, /* No cert found on token */
+ NZERROR_PKCS11_NO_USER_CERT_ON_TOKEN = 43018, /*No user cert found on token*/
+ NZERROR_PKCS11_NO_CERT_ON_TOKEN_WITH_GIVEN_LABEL = 43019, /*No cert found on token with given certificate label.*/
+ NZERROR_PKCS11_MULTIPLE_CERTS_ON_TOKEN_WITH_GIVEN_LABEL = 43020, /*Multiple certs found on token with given certificate label.*/
+ NZERROR_PKCS11_CERT_WITH_LABEL_NOT_USER_CERT = 43021, /*Cert with given cert is not a user cert because no corresponding pvt key found on token */
+
+ /* RSA ERRORS 43050 - 43059 */
+ NZERROR_BIND_SERVICE_ERROR = 43050, /* C_BindService returned error */
+ NZERROR_CREATE_KEY_OBJ_ERROR = 43051, /* B_CreateKeyObject returned error */
+ NZERROR_GET_CERT_FIELDS = 43052, /* C_GetCertFields returned error */
+ NZERROR_CREATE_PKCS10_OBJECT = 43053,
+ /* C_CreatePKCS10Object returned error */
+ NZERROR_SET_PKCS10_FIELDS = 43054, /* C_SetPKCS10Fields returned error */
+ NZERROR_SIGN_CERT_REQUEST = 43055, /* C_SignCertRequest returned error */
+ NZERROR_GET_PKCS10_DER = 43056, /* C_GetPKCS10DER returned error */
+ NZERROR_INITIALIZE_CERTC = 43057, /* C_InitializeCertC returned error */
+ NZERROR_INSERT_PRIVATE_KEY = 43058, /* C_InsertPrivateKey returned error */
+ NZERROR_RSA_ERROR = 43059, /* RSA error. See trace output */
+
+ /* slts ERRORS 43060 - 43069 */
+ NZERROR_SLTSCTX_INIT_FAILED = 43060, /* sltsini() returned error */
+ NZERROR_SLTSKYC_FAILED = 43061, /* sltskyc() returned error */
+ NZERROR_SLTSCTX_TERM_FAILED = 43062, /* sltster() returned error */
+ NZERROR_SLTSKYS_FAILED = 43063, /* sltskys() returned error */
+
+ NZERROR_INVALID_HEADER_LENGTH = 43070, /* bad sso header length */
+ NZERROR_WALLET_CONTAINS_USER_CREDENTIALS = 43071, /* wallet not empty */
+ NZERROR_CANNOT_MODIFY_AL = 43072, /* Cannot modify AL wallet */
+ NZERROR_FILE_LOCK_FAILED = 43073, /* Cannot lock wallet file */
+
+ /* Certificate selection errors 43080 - 43099 */
+ NZERROR_MULTIPLE_MATCHING_CREDENTIALS = 43080, /* Multiple matching certs */
+
+
+ NZERROR_CSF_ALIAS_INVALID = 43100, /* alias is invalid */
+ NZERROR_CSF_KEY_INVALID = 43101, /* key invalid */
+ NZERROR_CSF_CRED_NOT_SUPPORTED = 43102, /* only pwd cred supported */
+ NZERROR_CSF_HOSTNAME = 43103, /* hostname error */
+ NZERROR_CSF_XML = 43104, /* XmlCreate error. See trace */
+ NZERROR_CSF_WALLET_NOT_SPECIFIED = 43105, /* no wallet specified */
+ NZERROR_CSF_MAP_NOT_IN_STORE = 43106, /* map does not exist in store */
+ NZERROR_CSF_KEY_NOT_IN_STORE = 43107, /* key does not exist in store */
+ NZERROR_CSF_ENTRY_EXISTS = 43108, /* entry with map/key exists */
+ NZERROR_CSF_BTSTRP_WLT_PATH_NOT_SET = 43109, /* bootWallet Path not set */
+ NZERROR_CSF_BTSTRP_WLT_MAP_NOT_SET = 43110, /* bootWallet map (alias) not set */
+ NZERROR_CSF_BTSTRP_WLT_KEY_NOT_SET = 43111, /* bootWallet key not set */
+ NZERROR_CSF_LDAP_USERNAME_NOT_SET = 43112, /* ldap username not set */
+ NZERROR_CSF_LDAP_PWD_NOT_SET = 43113, /* ldap password not set */
+ NZERROR_CSF_LDAP_URL_NOT_SET = 43114, /* ldap url not set */
+ NZERROR_CSF_LDAP_PORT_NOT_SET = 43115, /* ldap port not set */
+ NZERROR_CSF_LDAP_FARMNAME_NOT_SET = 43116, /* ldap farmname not set */
+ NZERROR_CSF_LDAP_ROOTNAME_NOT_SET = 43117, /* ldap rootname not set */
+
+ NZERROR_LX_ERROR = 43120, /* lx api returned error */
+
+ NZERROR_LAST_ERROR = 43499, /* Last available error */
+ /* MAXIMUM ERROR NUMBER IS 43499 */
+
+ /*
+ * DO NOT JUST INSERT NEW ERRORS IN ANY OLD PLACE. New errors should be
+ * added such the current error retains their integer values. Duplicate
+ * values will cause compiler errors.
+ */
+ NZERROR_THIS_MUST_BE_LAST
+
+} nzerror;
+
+/*
+ * Macro to convert SSL errors to Oracle errors. As SSL errors are negative
+ * and Oracle numbers are positive, the following needs to be done.
+ * 1. The base error number, which is the highest, is added to the
+ * SSL error to get the index into the number range.
+ * 2. The result is added to the base Oracle number to get the Oracle error.
+ */
+#define NZERROR_SSL_TO_ORACLE(ssl_error_) \
+ ((ssl_error_ == SSLNoErr) \
+ ? NZERROR_OK \
+ : (nzerror) ((ssl_error_ - SSLMemoryErr) + (uword) NZERROR_SSLMemoryErr))
+#endif /* NZERROR_ORACLE */
--- /dev/null
+/* DISABLE check_long_lines */
+
+/* Copyright (c) 1996, 2007, Oracle. All rights reserved. */
+/* Copyright (c) 1996, 2007, Oracle. All rights reserved. */
+
+/*
+ *
+ */
+
+/*
+ * NAME
+ * nzt.h
+ *
+ * DESCRIPTION
+ * Toolkit public declarations.
+ *
+ * PUBLIC FUNCTIONS
+ * nztwOpenWallet - Open a wallet based on a WRL and pwd.
+ * nztwCloseWallet - Close a wallet.
+ * + nztwCreateWallet - Create a new wallet.
+ * + nztwDestroyWallet - Destroy an existing wallet.
+ * nztwRetrievePersonaCopy - Retieve a copy of a particular persona.
+ * + nzteStorePersona - Store a persona in the wallet.
+ * nzteOpenPersona - Open a persona.
+ * nzteClosePersona - Close a persona.
+ * + nzteRemovePersona - Remove a persona from a wallet.
+ * + nzteCreatePersona - Create a persona.
+ * nzteDestroyPersona - Destroy a persona.
+ * nztiStoreTrustedIdentity - Store an identity with associated trust.
+ * nzteRetrieveTrustedIdentCopy - Retrieves a trusted identity from persona
+ * + nzteSetProtection - Modify the protection set in a persona.
+ * + nzteGetProtection - Get the protection set in a persona
+ * nztePriKey - Get the Private Key (X509 Only)
+ * nzteMyCert - Get the Certificate (X509 only)
+ * nzteX509CreatePersona - Create a persona given an X509 Certificate.
+ * + nztiRemoveIdentity - Remove an identity from a persona.
+ * nztiCreateIdentity - Create an identity.
+ * nztiDuplicateIdentity - Create a complete copy of an identity.
+ * nztiAbortIdentity - Discard an unstored identity.
+ * nztidGetIdentityDesc - Gets Identity Description from Identity.
+ * nztidFreeIdentityDesc - Frees memory for Identity Desc object.
+ * nztSign - Generate an attached signature.
+ * + nztxSignExpansion - Determine size of signature.
+ * nztVerify - Verify an attached signature.
+ * nztValidate - Validate an identity.
+ * nztsd_SignDetached - Generate a detached signature.
+ * + nztxsd_SignDetachedExpansion - Determine size of detached signature.
+ * nztved_VerifyDetached - Verify a detached signature.
+ * + nztEncrypt - Symmetric key encryption.
+ * + nztxEncryptExpansion - Determine the tdu length for encryption.
+ * + nztDecrypt - Symmetric key decryption.
+ * + nztEnvelope - Sign then encrypt data for recipient(s).
+ * + nztDeEnvelope - Reverse nztEnvelope.
+ * + nztKeyedHash - Generate keyed hash.
+ * + nztxKeyedHashExpansion - Determine size of TDU for keyed hash.
+ * nztHash - Generate hash.
+ * + nztxHashExpansion - Determine the size of the TDU for a hash.
+ * nztSeedRandom - See the random number generator.
+ * nztrb_RandomBytes - Generate a series of random bytes.
+ * nztrn_RandomNumber - Generate a random number.
+ * nztbbInitBlock - Initialize a buffer block.
+ * nztbbReuseBlock - Reuse a buffer block.
+ * nztbbSizeBlock - Find the size of the buffer block.
+ * nztbbGrowBlock - Grow initialized buffer block by 'inc' bytes.
+ * nztbbPurgeBlock - Purge the memory used within a buffer block.
+ * nztbbSetBlock - Set block to known state.
+ * nztkec_PKEncrypt - Encrypt data then encrypt key for recipient.
+ * nztkdc_PKDecrypt - Decrypt PKEncrypt'ed data.
+ * nztific_FreeIdentityContent - Free the contents of an identity.
+ * nztifdn - Create an identity from a distinguished name
+ * nztcts_CipherSpecToStr - Converts the Cipher Spec Code To String
+ * nztiae_IsAuthEnabled - Checks to see if Authentication is Enabled
+ * in the current Cipher Spec.
+ * nztiae_IsEncrEnabled - Checks to see if Encryption is Enabled
+ * in the current Cipher Spec.
+ * nztiae_IsHashEnabled - Checks to see if Hashing is Enabled
+ * in the current Cipher Spec.
+ * nztwGetCertInfo - Get peer certificate info
+ *
+ * NOTE: the '+' indicates that these functions are UNSUPPORTED at this time.
+ *
+ * NOTES
+ *
+ * MODIFIED
+ * shiahuan 11/28/07 -
+ * skalyana 08/15/07 -
+ * pkale 09/28/06 - Bug 5565668: Removed __STDC__
+ * tnallath 09/22/05 -
+ * rchahal 07/27/04 - add keyusage
+ * srtata 11/10/03 - fix nztSetAppDefaultLocation header
+ * rchahal 10/15/03 - bug 2513821
+ * rchahal 11/11/02 - pkcs11 support
+ * akoyfman 07/05/02 - adding secret store to persona
+ * supriya 10/11/01 - Fix for bug # 2015732
+ * ajacobs 04/04/01 - make NZT_REGISTRY_WRL always available
+ * ajacobs 03/06/01 - olint fix
+ * ajacobs 03/02/01 - Add GetCertInfo
+ * supriya 02/23/01 - Move nzttKPUsage from nzt0.h
+ * rchahal 01/26/01 - olint fixes
+ * supriya 12/07/00 - Change fn name
+ * supriya 12/01/00 - Certificate API's needed for iAS
+ * supriya 06/19/00 - Adding definitions for MCS and ENTR
+ * lkethana 05/31/00 - multiple cert support
+ * skanjila 06/25/99 - Remove nztcts_CipherSpecToStr() to NZOS.
+ * skanjila 06/23/99 - Change API of nztcts_CipherSpecToStr.
+ * lkethana 06/18/99 - rem nztIPrivateAlloc, etc
+ * lkethana 06/10/99 - changing size_t to ub4
+ * lkethana 06/02/99 - add api for getting auth/encry/hash capability of c
+ * arswamin 12/28/98 - add NZT_MAX_MD5.
+ * arswamin 12/21/98 - change signature of compareDN
+ * qdinh 12/21/98 - change size_t to ub4.
+ * inetwork 11/22/98 - Removing NZDEPRECATED definition
+ * amthakur 09/14/98 - deprecating and updating the c-structures.
+ * arswamin 09/24/98 - adding NZTTWRL_NULL for SSO support.
+ * amthakur 07/30/98 - changing the prototype of nztGetCertChain.
+ * qdinh 05/01/98 - add NZTTIDENTTYPE_INVALID_TYPE
+ * qdinh 04/17/98 - add NZTTWRL_ORACLE.
+ * ascott 10/08/97 - implement nztiStoreTrustedIdentity
+ * ascott 10/07/97 - add nztiGetIdentityDesc
+ * ascott 09/28/97 - clarify prototype comments and error codes
+ * ascott 09/05/97 - update identity: create, destroy, duplicate
+ * ascott 08/21/97 - add GetCert and GetPriKey
+ * ascott 08/07/97 - add other WRL settings
+ * asriniva 03/25/97 - Add ANSI prototypes
+ * rwessman 03/19/97 - Added prototypes for nztific_FreeIdentityContent()
+ * asriniva 03/11/97 - Fix olint errors
+ * sdange 02/28/97 - Removed inclusion of nz0decl.h
+ * sdange 02/18/97 - Moved nzt specific declarations from nz0decl.h
+ * asriniva 01/21/97 - Remove prototypes.
+ * asriniva 10/31/96 - Include oratypes.h
+ * asriniva 10/15/96 - Declare buffer block helper functions
+ * asriniva 10/08/96 - First pass at wallet open/close
+ * asriniva 10/04/96 - Add random number seed function
+ * asriniva 10/03/96 - Reorder parameters in nztbbSetBlock
+ * asriniva 10/03/96 - Keep editing.
+ * asriniva 10/03/96 - Continued edits.
+ * asriniva 10/02/96 - Continue editing.
+ * asriniva 09/26/96 -
+ */
+
+/* ENABLE check_long_lines */
+
+#ifndef NZT_ORACLE
+#define NZT_ORACLE
+
+#ifndef ORATYPES
+# include <oratypes.h>
+#endif /* ORATYPES */
+
+#ifndef NZERROR_ORACLE
+# include <nzerror.h> /* NZ error type */
+#endif /* NZERROR_ORACLE */
+
+
+#define NZT_MAX_SHA1 20
+#define NZT_MAX_MD5 16
+
+/***************************************/
+/* PUBLIC CONSTANTS, MACROS, AND TYPES */
+/***************************************/
+
+/*
+ * Wallet Resource Locator Type Strings
+ *
+ * WRL TYPE PARAMETERS BEHAVIOR
+ * ======== ========== =====================================
+ * default: <none> Uses directory defined by the parameter
+ * SNZD_DEFAULT_FILE_DIRECTORY which in
+ * unix is "$HOME/oracle/oss"
+ *
+ * file: file path Find the Oracle wallet in this directory.
+ * example: file:<dir-path>
+ *
+ * sqlnet: <none> In this case, the directory path will be
+ * retrieved from the sqlnet.ora file under
+ * the oss.source.my_wallet parameter.
+ *
+ * mcs: <none> Microsoft WRL.
+ *
+ * entr: dir path Entrust WRL. eg: ENTR:<dir-path>
+ *
+ */
+/* Note that there is no NZT_NULL_WRL. Instead look in snzd.h for DEFAULT_WRP
+ * which is used in our new defaulting mechanism. The NZT_DEFAULT_WRL
+ * should be deprecated.
+ */
+#define NZT_DEFAULT_WRL ((text *)"default:")
+#define NZT_SQLNET_WRL ((text *)"sqlnet:")
+#define NZT_FILE_WRL ((text *)"file:")
+#define NZT_ENTR_WRL ((text *)"entr:")
+#define NZT_MCS_WRL ((text *)"mcs:")
+#define NZT_ORACLE_WRL ((text *)"oracle:")
+#define NZT_REGISTRY_WRL ((text *)"reg:")
+
+enum nzttwrl
+{
+ NZTTWRL_DEFAULT = 1, /* Default, use SNZD_DEFAULT_FILE_DIRECTORY */
+ NZTTWRL_SQLNET, /* Use oss.source.my_wallet in sqlnet.ora file */
+ NZTTWRL_FILE, /* Find the oracle wallet in this directory */
+ NZTTWRL_ENTR, /* Find the entrust profile in this directory */
+ NZTTWRL_MCS, /* WRL for Microsoft */
+ NZTTWRL_ORACLE, /* Get the wallet from OSS db */
+ NZTTWRL_NULL, /* New SSO defaulting mechanism */
+ NZTTWRL_REGISTRY /* Find the wallet in Windows Registry */
+};
+typedef enum nzttwrl nzttwrl;
+
+#ifndef NZ0DECL_ORACLE
+ /*
+ * With the elimination of nz0decl.h from public, we need this
+ * redundant typedef.
+ */
+ typedef struct nzctx nzctx;
+ typedef struct nzstrc nzstrc;
+ typedef struct nzosContext nzosContext;
+#endif /* NZ0DECL_ORACLE */
+
+/* Moved from nz0decl.h */
+
+typedef struct nzttIdentity nzttIdentity;
+typedef struct nzttIdentityPrivate nzttIdentityPrivate;
+typedef struct nzttPersona nzttPersona;
+typedef struct nzttPersonaPrivate nzttPersonaPrivate;
+typedef struct nzttWallet nzttWallet;
+typedef struct nzttWalletPrivate nzttWalletPrivate;
+typedef struct nzttWalletObj nzttWalletObj; /* For wallet object */
+typedef struct nzssEntry nzssEntry; /* For secretstore */
+typedef struct nzpkcs11_Info nzpkcs11_Info;
+
+/*
+ * Crypto Engine State
+ *
+ * Once the crypto engine (CE) has been initialized for a particular
+ * cipher, it is either at the initial state, or it is continuing to
+ * use the cipher. NZTCES_END is used to change the state back to
+ * initialized and flush any remaining output. NZTTCES_RESET can be
+ * used to change the state back to initialized and throw away any
+ * remaining output.
+ */
+enum nzttces
+{
+ NZTTCES_CONTINUE = 1, /* Continue processing input */
+ NZTTCES_END, /* End processing input */
+ NZTTCES_RESET /* Reset processing and skip generating output */
+};
+typedef enum nzttces nzttces;
+
+/*
+ * Crypto Engine Functions
+ *
+ * List of crypto engine categories; used to index into protection
+ * vector.
+ */
+enum nzttcef
+{
+ NZTTCEF_DETACHEDSIGNATURE = 1, /* Signature, detached from content */
+ NZTTCEF_SIGNATURE, /* Signature combined with content */
+ NZTTCEF_ENVELOPING, /* Signature and encryption with content */
+ NZTTCEF_PKENCRYPTION, /* Encryption for one or more recipients */
+ NZTTCEF_ENCRYPTION, /* Symmetric encryption */
+ NZTTCEF_KEYEDHASH, /* Keyed hash/checkusm */
+ NZTTCEF_HASH, /* Hash/checsum */
+ NZTTCEF_RANDOM, /* Random byte generation */
+
+ NZTTCEF_LAST /* Used for array size */
+};
+typedef enum nzttcef nzttcef;
+
+/*
+ * State of the persona.
+ */
+enum nzttState
+{
+ NZTTSTATE_EMPTY = 0, /* is not in any state(senseless???) */
+ NZTTSTATE_REQUESTED, /* cert-request */
+ NZTTSTATE_READY, /* certificate */
+ NZTTSTATE_INVALID, /* certificate */
+ NZTTSTATE_RENEWAL /* renewal-requested */
+};
+typedef enum nzttState nzttState;
+
+/*
+ * Cert-version types
+ *
+ * This is used to quickly look-up the cert-type
+ */
+enum nzttVersion
+{
+ NZTTVERSION_X509v1 = 1, /* X.509v1 */
+ NZTTVERSION_X509v3, /* X.509v3 */
+#ifdef NZDEPRECATED
+ NZTTVERSION_SYMMETRIC, /* Symmetric */
+#endif
+ NZTTVERSION_INVALID_TYPE /* For Initialization */
+};
+typedef enum nzttVersion nzttVersion;
+
+/*
+ * Cipher Types
+ *
+ * List of all cryptographic algorithms, some of which may not be
+ * available.
+ */
+enum nzttCipherType
+{
+ NZTTCIPHERTYPE_RSA = 1, /* RSA public key */
+ NZTTCIPHERTYPE_DES, /* DES */
+ NZTTCIPHERTYPE_RC4, /* RC4 */
+ NZTTCIPHERTYPE_MD5DES, /* DES encrypted MD5 with salt (PBE) */
+ NZTTCIPHERTYPE_MD5RC2, /* RC2 encrypted MD5 with salt (PBE) */
+ NZTTCIPHERTYPE_MD5, /* MD5 */
+ NZTTCIPHERTYPE_SHA /* SHA */
+};
+typedef enum nzttCipherType nzttCipherType;
+
+/*
+ * TDU Formats
+ *
+ * List of possible toolkit data unit (TDU) formats. Depending on the
+ * function and cipher used some may be not be available.
+ */
+enum nztttdufmt
+{
+ NZTTTDUFMT_PKCS7 = 1, /* PKCS7 format */
+ NZTTTDUFMT_RSAPAD, /* RSA padded format */
+ NZTTTDUFMT_ORACLEv1, /* Oracle v1 format */
+ NZTTTDUFMT_LAST /* Used for array size */
+};
+typedef enum nztttdufmt nztttdufmt;
+
+/*
+ * Validate State
+ *
+ * Possible validation states an identity can be in.
+ */
+enum nzttValState
+{
+ NZTTVALSTATE_NONE = 1, /* Needs to be validated */
+ NZTTVALSTATE_GOOD, /* Validated */
+ NZTTVALSTATE_REVOKED /* Failed to validate */
+};
+typedef enum nzttValState nzttValState;
+
+/*
+ * Policy Fields <----NEW (09/14/98)
+ *
+ * Policies enforced
+ */
+enum nzttPolicy
+{
+ NZTTPOLICY_NONE = 0,
+ NZTTPOLICY_RETRY_1, /* number of retries for decryption = 1 */
+ NZTTPOLICY_RETRY_2, /* number of retries for decryption = 2 */
+ NZTTPOLICY_RETRY_3 /* number of retries for decryption = 3 */
+};
+typedef enum nzttPolicy nzttPolicy;
+
+/*
+ * Persona Usage <----NEW (09/14/98)
+ *
+ * what a persona will be used for?
+ */
+
+#ifdef NZDEPRECATED_MULTIPLECERTS
+enum nzttUsage
+{
+ NZTTUSAGE_NONE = 0,
+ NZTTUSAGE_SSL /* persona for SSL usage */
+};
+typedef enum nzttUsage nzttUsage;
+#endif
+
+/*
+ * Personas and identities have unique id's that are represented with
+ * 128 bits.
+ */
+typedef ub1 nzttID[16];
+
+/*
+ * Identity Types
+ *
+ * List of all Identity types..
+ */
+enum nzttIdentType
+{
+ NZTTIDENTITYTYPE_INVALID_TYPE = 0,
+ NZTTIDENTITYTYPE_CERTIFICTAE,
+ NZTTIDENTITYTYPE_CERT_REQ,
+ NZTTIDENTITYTYPE_RENEW_CERT_REQ,
+ NZTTIDENTITYTYPE_CLEAR_ETP,
+ NZTTIDENTITYTYPE_CLEAR_UTP,
+ NZTTIDENTITYTYPE_CLEAR_PTP
+};
+typedef enum nzttIdentType nzttIdentType;
+
+typedef ub4 nzttKPUsage;
+/* IF new types are added nztiMUS should be changed */
+#define NZTTKPUSAGE_NONE 0
+#define NZTTKPUSAGE_SSL 1 /* SSL Server */
+#define NZTTKPUSAGE_SMIME_ENCR 2
+#define NZTTKPUSAGE_SMIME_SIGN 4
+#define NZTTKPUSAGE_CODE_SIGN 8
+#define NZTTKPUSAGE_CERT_SIGN 16
+#define NZTTKPUSAGE_SSL_CLIENT 32 /* SSL Client */
+#define NZTTKPUSAGE_INVALID_USE 0xffff
+
+
+/*
+ * Timestamp as 32 bit quantity in UTC.
+ */
+typedef ub1 nzttTStamp[4];
+
+/*
+ * Buffer Block
+ *
+ * A function that needs to fill (and possibly grow) an output buffer
+ * uses an output parameter block to describe each buffer.
+ *
+ * The flags_nzttBufferBlock member tells the function whether the
+ * buffer can be grown or not. If flags_nzttBufferBlock is 0, then
+ * the buffer will be realloc'ed automatically.
+ *
+ * The buflen_nzttBufferBLock member is set to the length of the
+ * buffer before the function is called and will be the length of the
+ * buffer when the function is finished. If buflen_nzttBufferBlock is
+ * 0, then the initial pointer stored in pobj_nzttBufferBlock is
+ * ignored.
+ *
+ * The objlen_nzttBufferBlock member is set to the length of the
+ * object stored in the buffer when the function is finished. If the
+ * initial buffer had a non-0 length, then it is possible that the
+ * object length is shorter than the buffer length.
+ *
+ * The pobj_nzttBufferBlock member is a pointer to the output object.
+ */
+struct nzttBufferBlock
+{
+# define NZT_NO_AUTO_REALLOC 0x1
+
+ uword flags_nzttBufferBlock; /* Flags */
+ ub4 buflen_nzttBufferBlock; /* Total length of buffer */
+ ub4 usedlen_nzttBufferBlock; /* Length of used buffer part */
+ ub1 *buffer_nzttBufferBlock; /* Pointer to buffer */
+};
+typedef struct nzttBufferBlock nzttBufferBlock;
+
+/*
+ * Wallet.
+ */
+struct nzttWallet
+{
+ ub1 *ldapName_nzttWallet; /* user's LDAP Name */
+ ub4 ldapNamelen_nzttWallet; /* len of user's LDAP Name */
+ nzttPolicy securePolicy_nzttWallet; /* secured-policy of the wallet */
+ nzttPolicy openPolicy_nzttWallet; /* open-policy of the wallet */
+ nzttPersona *persona_nzttWallet; /* List of personas in wallet */
+ nzttWalletPrivate *private_nzttWallet; /* Private wallet information */
+#ifdef NZDEPRECATED
+ ub4 npersona_nzttWallet; /* Number of personas */
+#endif
+};
+
+/*
+ * The wallet contains, one or more personas. A persona always
+ * contains its private key and its identity. It may also contain
+ * other 3rd party identites. All identities qualified with trust
+ * where the qualifier can indicate anything from untrusted to trusted
+ * for specific operations.
+ */
+
+/*
+ * Persona
+ *
+ * Structure containing information about a persona.
+ */
+struct nzttPersona
+{
+ ub1 *genericName_nzttPersona; /* user-friendly persona name */
+ ub4 genericNamelen_nzttPersona; /* persona-name length */
+ nzttPersonaPrivate *private_nzttPersona; /* Opaque part of persona */
+ nzttIdentity *mycertreqs_nzttPersona; /* My cert-requests */
+ nzttIdentity *mycerts_nzttPersona; /* My certificates */
+ nzttIdentity *mytps_nzttPersona; /* List of trusted identities */
+ nzssEntry *mystore_nzttPersona; /* List of secrets */
+ nzpkcs11_Info *mypkcs11Info_nzttPersona; /* PKCS11 token info */
+ struct nzttPersona *next_nzttPersona; /* Next persona */
+#ifdef NZDEPRECATED_MULTIPLECERTS
+ /* As Persona has multiple certs for different
+ usages, Persona Usage does not mean anything. Similarly
+ each key pair has its own state and Persona state itself
+ does not mean anything. - lk 5/31/00
+ */
+ nzttUsage usage_nzttPersona; /* persona usage; SSL/SET/.. */
+ nzttState state_nzttPersona; /* persona state-requested/ready */
+ ub4 ntps_nzttPersona; /* Num of trusted identities */
+#endif
+};
+
+/*
+ * Identity
+ *
+ * Structure containing information about an identity.
+ *
+ * NOTE
+ * -- the next_trustpoint field only applies to trusted identities and
+ * has no meaning (i.e. is NULL) for self identities.
+ */
+struct nzttIdentity
+{
+ text *dn_nzttIdentity; /* Alias */
+ ub4 dnlen_nzttIdentity; /* Length of alias */
+ text *comment_nzttIdentity; /* Comment */
+ ub4 commentlen_nzttIdentity; /* Length of comment */
+ nzttIdentityPrivate *private_nzttIdentity; /* Opaque part of identity */
+ nzttIdentity *next_nzttIdentity; /* next identity in list */
+};
+
+struct nzttB64Cert
+{
+ ub1 *b64Cert_nzttB64Cert;
+ ub4 b64Certlen_nzttB64Cert;
+ struct nzttB64Cert *next_nzttB64Cert;
+};
+typedef struct nzttB64Cert nzttB64Cert;
+
+
+struct nzttPKCS7ProtInfo
+{
+ nzttCipherType mictype_nzttPKCS7ProtInfo; /* Hash cipher */
+ nzttCipherType symmtype_nzttPKCS7ProtInfo; /* Symmetric cipher */
+ ub4 keylen_nzttPKCS7ProtInfo; /* Length of key to use */
+};
+typedef struct nzttPKCS7ProtInfo nzttPKCS7ProtInfo;
+
+/*
+ * Protection Information.
+ *
+ * Information specific to a type of protection.
+ */
+union nzttProtInfo
+{
+ nzttPKCS7ProtInfo pkcs7_nzttProtInfo;
+};
+typedef union nzttProtInfo nzttProtInfo;
+
+/*
+ * A description of a persona so that the toolkit can create one. A
+ * persona can be symmetric or asymmetric and both contain an
+ * identity. The identity for an asymmetric persona will be the
+ * certificate and the identity for the symmetric persona will be
+ * descriptive information about the persona. In either case, an
+ * identity will have been created before the persona is created.
+ *
+ * A persona can be stored separately from the wallet that references
+ * it. By default, a persona is stored with the wallet (it inherits
+ * with WRL used to open the wallet). If a WRL is specified, then it
+ * is used to store the actuall persona and the wallet will have a
+ * reference to it.
+ */
+struct nzttPersonaDesc
+{
+ ub4 privlen_nzttPersonaDesc; /* Length of private info (key)*/
+ ub1 *priv_nzttPersonaDesc; /* Private information */
+ ub4 prllen_nzttPersonaDesc; /* Length of PRL */
+ text *prl_nzttPersonaDesc; /* PRL for storage */
+ ub4 aliaslen_nzttPersonaDesc; /* Length of alias */
+ text *alias_nzttPersonaDesc; /* Alias */
+ ub4 longlen_nzttPersonaDesc; /* Length of longer description*/
+ text *long_nzttPersonaDesc; /* Longer persona description */
+};
+typedef struct nzttPersonaDesc nzttPersonaDesc;
+
+/*
+ * A description of an identity so that the toolkit can create one.
+ * Since an identity can be symmetric or asymmetric, the asymmetric
+ * identity information will not be used when a symmetric identity is
+ * created. This means the publen_nzttIdentityDesc and
+ * pub_nzttIdentityDesc members will not be used when creating a
+ * symmetric identity.
+ */
+struct nzttIdentityDesc
+{
+ ub4 publen_nzttIdentityDesc; /* Length of identity */
+ ub1 *pub_nzttIdentityDesc; /* Type specific identity */
+ ub4 dnlen_nzttIdentityDesc; /* Length of alias */
+ text *dn_nzttIdentityDesc; /* Alias */
+ ub4 longlen_nzttIdentityDesc; /* Length of longer description */
+ text *long_nzttIdentityDesc; /* Longer description */
+ ub4 quallen_nzttIdentityDesc; /* Length of trust qualifier */
+ text *trustqual_nzttIdentityDesc; /* Trust qualifier */
+};
+typedef struct nzttIdentityDesc nzttIdentityDesc;
+
+/********************************/
+/* PUBLIC FUNCTION DECLARATIONS */
+/********************************/
+
+/*---------------------- nztwOpenWallet ----------------------*/
+
+/*
+ * NAME
+ * nztwOpenWallet - Open a wallet based on a wallet Resource Locator (WRL).
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * wrllen {IN} Length of WRL.
+ * wrl {IN} WRL.
+ * pwdlen {IN} Length of password.
+ * pwd {IN} Password.
+ * wallet {IN/OUT} Initialized wallet structure.
+ *
+ * NOTES
+ * The syntax for a WRL is <Wallet Type>:<Wallet Type Parameters>.
+ *
+ * Wallet Type Wallet Type Parameters.
+ * ----------- ----------------------
+ * File Pathname (e.g. "file:/home/asriniva")
+ * Oracle Connect string (e.g. "oracle:scott/tiger@oss")
+ *
+ * There are also defaults. If the WRL is NZT_DEFAULT_WRL, then
+ * the platform specific WRL default is used. If only the wallet
+ * type is specified, then the WRL type specific default is used
+ * (e.g. "oracle:")
+ *
+ * There is an implication with Oracle that should be stated: An
+ * Oracle based wallet can be implemented in a user's private space
+ * or in world readable space.
+ *
+ * When the wallet is opened, the password is verified by hashing
+ * it and comparing against the password hash stored with the
+ * wallet. The list of personas (and their associated identities)
+ * is built and stored into the wallet structure.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_RIO_OPEN RIO could not open wallet (see network trace file).
+ * NZERROR_TK_PASSWORD Password verification failed.
+ * NZERROR_TK_WRLTYPE WRL type is not known.
+ * NZERROR_TK_WRLPARM WRL parm does not match type.
+ */
+nzerror nztwOpenWallet( nzctx *, ub4, text *, ub4, text *,
+ nzttWallet * );
+
+
+/*---------------------- nztwCloseWallet ----------------------*/
+
+/*
+ * NAME
+ * nztwCloseWallet - Close a wallet
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * wallet {IN/OUT} Wallet.
+ *
+ * NOTES
+ * Closing a wallet also closes all personas associated with that
+ * wallet. It does not cause a persona to automatically be saved
+ * if it has changed. The implication is that a persona can be
+ * modified by an application but if it is not explicitly saved it
+ * reverts back to what was in the wallet.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_RIO_CLOSE RIO could not close wallet (see network trace file).
+ */
+nzerror nztwCloseWallet( nzctx *, nzttWallet * );
+
+/*--------------------nztwGetCertInfo----------------------------*/
+/****NOTE: This function is a temporary hack.****/
+/****DO NOT CALL. It will soon disappear.****/
+nzerror nztwGetCertInfo( nzctx *nz_context,
+ nzosContext *nzosCtx,
+ nzttWallet *walletRef,
+ void *peerCert );
+
+
+/*------------------------ nztwConstructWallet -----------------------*/
+/*
+ *
+ * nzerror nztwConstructWallet( nzctx *oss_context,
+ * nzttPolicy openPolicy,
+ * nzttPolicy securePolicy,
+ * ub1 *ldapName,
+ * ub4 ldapNamelen,
+ * nzstrc *wrl,
+ * nzttPersona *personas,
+ * nzttWallet **wallet );
+ */
+
+/*---------------------- nztwRetrievePersonaCopy ----------------------*/
+
+/*
+ * NAME
+ * nztwRetrievePersonaCopy - Retrieves a persona based from wallet
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * wallet {IN} Wallet.
+ * index {IN} Which wallet index to remove (first persona is zero).
+ * persona {OUT} Persona found.
+ *
+ * NOTES
+ * Retrieves a persona from the wallet based on the index number passed
+ * in. This persona is a COPY of the one stored in the wallet, therefore
+ * it is perfectly fine for the wallet to be closed after this call is
+ * made.
+ *
+ * The caller is responsible for disposing of the persona when completed.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nztwRetrievePersonaCopy( nzctx *, nzttWallet *, ub4,
+ nzttPersona ** );
+
+
+/*---------------------- nztwRetrievePersonaCopyByName ----------------------*/
+
+/*
+ * NAME
+ * nztwRetrievePersonaCopyByName - Retrieves a persona based on its name.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * wallet {IN} Wallet.
+ * name {IN} Name of the persona
+ * persona {OUT} Persona found.
+ *
+ * NOTES
+ * Retrieves a persona from the wallet based on the name of the persona.
+ * This persona is a COPY of the one stored in the wallet, therefore
+ * it is perfectly fine for the wallet to be closed after this call is
+ * made.
+ *
+ * The caller is responsible for disposing of the persona when completed.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nztwRetrievePersonaCopyByName( nzctx *, nzttWallet *, char *,
+ nzttPersona ** );
+
+/*---------------------- nzteOpenPersona ----------------------*/
+
+/*
+ * NAME
+ * nzteOpenPersona - Open a persona.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN/OUT} Persona.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_PASSWORD Password failed to decrypt persona.
+ * NZERROR_TK_BADPRL Persona resource locator did not work.
+ * NZERROR_RIO_OPEN Could not open persona (see network trace file).
+ */
+nzerror nzteOpenPersona( nzctx *, nzttPersona * );
+
+/*--------------------- nzteClosePersona ---------------------*/
+
+/*
+ * NAME
+ * nzteClosePersona - Close a persona.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN/OUT} Persona.
+ *
+ * NOTES
+ * Closing a persona does not store the persona, it simply releases
+ * the memory associated with the crypto engine.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nzteClosePersona( nzctx *, nzttPersona * );
+
+/*--------------------- nzteDestroyPersona ---------------------*/
+
+/*
+ * NAME
+ * nzteDestroyPersona - Destroy a persona.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN/OUT} Persona.
+ *
+ * NOTES
+ * The persona is destroyd in the open state, but it will
+ * not be associated with a wallet.
+ *
+ * The persona parameter is doubly indirect so that at the
+ * conclusion of the function, the pointer can be set to NULL.
+ *
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_TYPE Unsupported itype/ctype combination.
+ * NZERROR_TK_PARMS Error in persona description.
+ */
+nzerror nzteDestroyPersona( nzctx *, nzttPersona ** );
+
+/*---------------------- nzteRetrieveTrustedIdentCopy ----------------------*/
+
+/*
+ * NAME
+ * nzteRetrieveTrustedIdentCopy - Retrieves a trusted identity from persona
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * index {IN} Which wallet index to remove (first element is zero).
+ * identity {OUT} Trusted Identity from this persona.
+ *
+ * NOTES
+ * Retrieves a trusted identity from the persona based on the index
+ * number passed in. This identity is a COPY of the one stored in
+ * the persona, therefore it is perfectly fine to close the persona
+ * after this call is made.
+ *
+ * The caller is responsible for freeing the memory of this object
+ * by calling nztiAbortIdentity it is no longer needed
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nzteRetrieveTrustedIdentCopy( nzctx *, nzttPersona *, ub4,
+ nzttIdentity ** );
+
+/*--------------------- nztePriKey ---------------------*/
+
+/*
+ * NAME
+ * nztePriKey - Get the decrypted Private Key for the Persona
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * vkey {OUT} Private Key [B_KEY_OBJ]
+ * vkey_len {OUT} Private Key Length
+ *
+ * NOTES
+ * This funiction will only work for X.509 based persona which contain
+ * a private key.
+ * A copy of the private key is returned to the caller so that they do not
+ * have to worry about the key changeing "underneath them".
+ * Memory will be allocated for the vkey and therefore, the CALLER
+ * will be responsible for freeing this memory.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_NO_MEMORY ossctx is null.
+ * NZERROR_TK_BADPRL Persona resource locator did not work.
+ */
+nzerror nztePriKey( nzctx *, nzttPersona *, ub1 **, ub4 * );
+
+/*--------------------- nzteMyCert ---------------------*/
+
+/*
+ * NAME
+ * nzteMyCert - Get the X.509 Certificate for a persona
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * cert {OUT} X.509 Certificate [BER encoded]
+ * cert_len {OUT} Certificate length
+ *
+ * NOTES
+ * This funiction will only work for X.509 based persona which contain
+ * a certificate for the self identity.
+ * A copy of the certificate is returned to the caller so that they do not
+ * have to worry about the certificate changeing "underneath them".
+ * Memory will be allocated for the cert and therefore, the CALLER
+ * will be responsible for freeing this memory.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_NO_MEMORY ossctx is null.
+ */
+nzerror nzteMyCert( nzctx *, nzttPersona *, ub1 **, ub4 * );
+
+/*--------------------- nzteX509CreatePersona ---------------------*/
+
+/*
+ * NAME
+ * nzteX509CreatePersona - Given a BER X.509 cert, create a persona
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * cert {IN} X.509 Certificate [BER encoded]
+ * cert_len {IN} Certificate length
+ * persona {OUT} Persona.
+ *
+ * NOTES
+ * Memory will be allocated for the persona and therefore, the CALLER
+ * will be responsible for freeing this memory.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_NO_MEMORY ossctx is null.
+ */
+nzerror nzteX509CreatePersona( nzctx *, ub1 *, ub4, nzttPersona ** );
+
+/*-------------------- nztiCreateIdentity --------------------*/
+
+/*
+ * NAME
+ * nztiCreateIdentity - Create an identity.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * itype {IN} Identity type.
+ * desc {IN} Description of identity.
+ * identity {IN/OUT} Identity.
+ *
+ * NOTES
+ * Memory is only allocated for the identity structure. The elements in
+ * the description struct are not copied. Rather their pointers are copied
+ * into the identity structure. Therefore, the caller should not free
+ * the elements referenced by the desc. These elements will be freed
+ * when the nztiDestroyIdentity is called.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_PARMS Error in description.
+ */
+nzerror nztiCreateIdentity( nzctx *, nzttVersion, nzttIdentityDesc *,
+ nzttIdentity ** );
+
+#ifdef NZ_OLD_TOOLS
+/*-------------------- nztiDuplicateIdentity --------------------*/
+
+/*
+ * NAME
+ * nztiDuplicateIdentity - Duplicate an identity.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * identity {IN} Target Identity.
+ * new_identity {IN} New Identity.
+ *
+ * NOTES
+ * Memory for the identity is allocated inside the function, and all
+ * internal identity elements as well.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_NOTFOUND Identity not found.
+ * NZERROR_PARMS Error in description.
+ */
+nzerror nztiDuplicateIdentity( nzctx *, nzttIdentity *,
+ nzttIdentity ** );
+#endif /* NZ_OLD_TOOLS */
+
+/*--------------------- nztiAbortIdentity ---------------------*/
+
+/*
+ * NAME
+ * nztiAbortIdentity - Abort an unassociated identity.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * identity {IN/OUT} Identity.
+ *
+ * NOTES
+ * It is an error to try to abort an identity that can be
+ * referenced through a persona.
+ *
+ * The identity pointer is set to NULL at the conclusion.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_CANTABORT Identity is associated with persona.
+ */
+nzerror nztiAbortIdentity( nzctx *, nzttIdentity ** );
+
+#ifdef NZ_OLD_TOOLS
+/*----------------- nztidGetIdentityDesc -----------------*/
+
+/*
+ * NAME
+ * nztidGetIdentityDesc - Gets an Identity Description from the identity
+ *
+ * PARAMETERS
+ * osscntxt {IN} Success.
+ * identity {IN} Identity.
+ * description {IN/OUT} Identity Description.
+ *
+ * NOTES
+ * Memory is allocated for the Identity Description. It
+ * is the callers responsibility to free this memory by calling
+ * nztiFreeIdentityDesc.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nztidGetIdentityDesc( nzctx *, nzttIdentity *,
+ nzttIdentityDesc ** );
+
+/*----------------- nztidFreeIdentityDesc -----------------*/
+
+/*
+ * NAME
+ * nztidFreeIdentityDesc - Frees memory for Identity Desc object.
+ *
+ * PARAMETERS
+ * osscntxt {IN} oss context.
+ * description {IN/OUT} Identity Description.
+ *
+ * NOTES
+ * Memory is freed for all Identity description elements. Pointer is
+ * then set to null.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nztidFreeIdentityDesc( nzctx *, nzttIdentityDesc ** );
+#endif /* NZ_OLD_TOOLS */
+
+/*---------------- nztific_FreeIdentityContent ----------------*/
+
+/*
+ * NAME
+ * nztific_FreeIdentityContent - free the contents of an identity.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * identity {IN/OUT} freed identity
+ *
+ * NOTES
+ * Free a created identity.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+/*
+ * Free the identity content.
+ */
+nzerror nztific_FreeIdentityContent( nzctx *ossctx,
+ nzttIdentity *identity );
+
+
+/*-------------------------- nztSign --------------------------*/
+
+/*
+ * NAME
+ * nztSign - Create an attached signature.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Open persona acting as signer.
+ * state {IN} State of signature.
+ * inlen {IN} Length of this input part.
+ * in {IN} This input part.
+ * tdubuf {IN/OUT} TDU buffer.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_CANTGROW Needed to grow output buffer but could not.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztSign( nzctx *, nzttPersona *, nzttces, ub4, ub1 *,
+ nzttBufferBlock * );
+
+/*------------------------- nztVerify -------------------------*/
+
+/*
+ * NAME
+ * nztVerify - Verify an attached signature.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * state {IN} State of verification.
+ * intdulen {IN} TDU length.
+ * intdu {IN} TDU.
+ * out {IN/OUT} Extracted message.
+ * verified {OUT} TRUE if signature verified.
+ * validated{OUT} TRUE if signing identity validated.
+ * identity {OUT} Identity of signing party.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_CANTGROW Needed to grow outptu buffer but could not.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztVerify( nzctx *, nzttPersona *, nzttces, ub4, ub1 *,
+ nzttBufferBlock *, boolean *, boolean *,
+ nzttIdentity ** );
+
+/*------------------------ nztValidate ------------------------*/
+
+/*
+ * NAME
+ * nztValidate - Validate an identity.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * identity {IN} Identity.
+ * validated{OUT} TRUE if identity was validated.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztValidate( nzctx *, nzttPersona *, nzttIdentity *, boolean * );
+
+/*-------------------- nztsd_SignDetached --------------------*/
+
+/*
+ * NAME
+ * nztsd_SignDetached - Generate a detached signature.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * state {IN} State of signature.
+ * inlen {IN} Length of this input part.
+ * in {IN} This input part.
+ * tdubuf {IN/OUT} TDU buffer.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_CANTGROW Needed to grow output buffer but could not.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztsd_SignDetached( nzctx *, nzttPersona *, nzttces, ub4, ub1 *,
+ nzttBufferBlock * );
+
+/*------------------- nztved_VerifyDetached -------------------*/
+
+/*
+ * NAME
+ * nztved_VerifyDetached - Verify a detached signature.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * state {IN} State of verification.
+ * inlen {IN} Length of data.
+ * in {IN} Data.
+ * intdulen {IN} Input TDU length.
+ * tdu {IN} Input TDU.
+ * verified {OUT} TRUE if signature verified.
+ * validated{OUT} TRUE if signing identity validated.
+ * identity {OUT} Identity of signing party.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztved_VerifyDetached( nzctx *, nzttPersona *, nzttces, ub4,
+ ub1 *, ub4, ub1 *, boolean *, boolean *,
+ nzttIdentity ** );
+
+/*--------------------- nztkec_PKEncrypt ---------------------*/
+
+/*
+ * NAME
+ * nztkec_PKEncrypt - Encrypt data symmetrically, encrypt key asymmetrically
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * nrecipients {IN} Number of recipients for this encryption.
+ * recipients {IN} List of recipients.
+ * state {IN} State of encryption.
+ * inlen {IN} Length of this input part.
+ * in {IN} This input part.
+ * tdubuf {IN/OUT} TDU buffer.
+ *
+ * NOTES
+ * There is a limitation of 1 recipient (nrecipients = 1) at this
+ * time.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_CANTGROW Needed to grow output buffer but could not.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztkec_PKEncrypt( nzctx *, nzttPersona *, ub4, nzttIdentity *,
+ nzttces, ub4, ub1 *, nzttBufferBlock * );
+
+/*---------------- nztxkec_PKEncryptExpansion ----------------*/
+
+/*
+ * NAME
+ * nztxkec_PKEncryptExpansion - Determine the buffer needed for PKEncrypt
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * nrecipients {IN} Number of recipients.
+ * inlen {IN} Length of input.
+ * tdulen {out} Length of buffer need.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztxkec_PKEncryptExpansion( nzctx *, nzttPersona *, ub4, ub4,
+ ub4 * );
+
+/*--------------------- nztkdc_PKDecrypt ---------------------*/
+
+/*
+ * NAME
+ * nztkdc_PKDecrypt - Decrypt a PKEncrypted message.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * state {IN} State of encryption.
+ * inlen {IN} Length of this input part.
+ * in {IN} This input part.
+ * tdubuf {IN/OUT} TDU buffer.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_CANTGROW Needed to grow output buffer but could not.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztkdc_PKDecrypt( nzctx *, nzttPersona *, nzttces, ub4, ub1 *,
+ nzttBufferBlock * );
+
+/*-------------------------- nztHash --------------------------*/
+
+/*
+ * NAME
+ * nztHash - Generate a hash.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * state {IN} State of hash.
+ * inlen {IN} Length of this input.
+ * in {IN} This input.
+ * tdu {IN/OUT} Output tdu.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_CANTGROW Needed to grow TDU buffer but could not.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztHash( nzctx *, nzttPersona *, nzttces, ub4, ub1 *,
+ nzttBufferBlock * );
+
+/*----------------------- nztSeedRandom -----------------------*/
+
+/*
+ * NAME
+ * nztSeedRandom - Seed the random function
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * seedlen {IN} Length of seed.
+ * seed {IN} Seed.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztSeedRandom( nzctx *, nzttPersona *, ub4, ub1 * );
+
+/*--------------------- nztrb_RandomBytes ---------------------*/
+
+/*
+ * NAME
+ * nztrb_RandomBytes - Generate a buffer random bytes.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * nbytes {IN} Number of bytes desired.
+ * out {IN/OUT} Buffer block for bytes.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_CANTGROW Needed to grow TDU buffer but could not.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztrb_RandomBytes( nzctx *, nzttPersona *, ub4,
+ nzttBufferBlock * );
+
+/*-------------------- nztrn_RandomNumber --------------------*/
+
+/*
+ * NAME
+ * nztrn_RandomNumber - Generate a random number
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * num {OUT} Number.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztrn_RandomNumber( nzctx *, nzttPersona *, uword * );
+
+/*---------------------- nztbbInitBlock ----------------------*/
+
+/*
+ * NAME
+ * nztbbInitBlock - Initialize a buffer block.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * block {IN/OUT} Buffer block.
+ *
+ * NOTES
+ * The buffer block is initialized to be empty (all members are set
+ * to 0/NULL). Such a block will be allocated memory as needed.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nztbbInitBlock( nzctx *, nzttBufferBlock * );
+
+/*---------------------- nztbbReuseBlock ----------------------*/
+
+/*
+ * NAME
+ * nztbbReuseBlock - Reuse an already initialized and possibly used block.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * block {IN/OUT} Buffer block.
+ *
+ * NOTES
+ * This function simply sets the used length member of the buffer
+ * block to 0. If the block already has memory allocated to it,
+ * this will cause it to be reused.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nztbbReuseBlock( nzctx *, nzttBufferBlock * );
+
+/*---------------------- nztbbSizeBlock ----------------------*/
+
+/*
+ * NAME
+ * nztbbSizeBlock - Size an initialized block to a particular size.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * len {IN} Minimum number of unused bytes desired.
+ * block {IN/OUT} Buffer block.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nztbbSizeBlock( nzctx *, ub4, nzttBufferBlock * );
+
+/*----------------------- nztbbGrowBlock -----------------------*/
+
+/*
+ * NAME
+ * nzbbGrowBlock - Increase the size of the buffer block.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * inc {IN} Number of bytes to increase.
+ * block {IN/OUT} Buffer block.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nztbbGrowBlock( nzctx *, ub4, nzttBufferBlock * );
+
+/*---------------------- nztbbPurgeBlock ----------------------*/
+
+/*
+ * NAME
+ * nztbbPurgeBlock - Purge a buffer block of its memory.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * block {IN/OUT} Buffer block.
+ *
+ * NOTES
+ * The memory used by the buffer block as the buffer is released.
+ * The buffer block itself is not affected.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nztbbPurgeBlock( nzctx *, nzttBufferBlock * );
+
+/*----------------------- nztbbSetBlock -----------------------*/
+
+/*
+ * NAME
+ * nztbbSetBlock - Set a buffer block to a known state.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * flags {IN} Flags to set.
+ * buflen {IN} Length of buffer.
+ * usedlen {IN} Used length.
+ * buffer {IN} Buffer.
+ * block {IN/OUT} Buffer block
+ *
+ * NOTES
+ * If buflen > 0, objlen == 0, and obj == NULL, then buflen bytes
+ * of memory is allocated and a pointer is stored in the buffer
+ * block.
+ *
+ * The buffer parameter remains unchanged.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nztbbSetBlock( nzctx *, uword, ub4, ub4, ub1 *,
+ nzttBufferBlock * );
+
+
+/*--------------------- nztiGetSecInfo ---------------------*/
+
+/*
+ * NAME
+ * nztiGetSecInfo - Get some security information for SSL
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ * osscntxt {IN} OSS context.
+ * persona {IN} persona
+ * dname {OUT} distinguished name of the certificate
+ * dnamelen {OUT} length of the distinguished name
+ * issuername {OUT} issuer name of the certificate
+ * certhash {OUT} SHA1 hash of the certificate
+ * certhashlen{OUT} length of the hash
+ * NOTES
+ * This function allocate memories for issuername, certhash, and dname.
+ * To deallocate memory for those params, you should call nztdbuf_DestroyBuf.
+ * RETURNS
+ *
+ */
+nzerror nztiGetSecInfo( nzctx *, nzttPersona *, text **, ub4 *,
+ text **, ub4 *, ub1 **, ub4 * );
+
+
+/*---------------------- nztiGetDName ----------------------*/
+
+/*
+ * NAME
+ * nztiGetDName - Get the distinguished name for the given identity
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ * osscntxt {IN} OSS context.
+ * identity {IN} identity need to get dname from
+ * dn {OUT} distinguished name
+ * dnlen {OUT} length of the dname
+ *
+ * NOTES
+ *
+ * RETURNS
+ *
+ */
+
+nzerror nztiGetDName( nzctx *, nzttIdentity *,
+ text **, ub4 * );
+
+/*------------------- nztiGetIssuerName -------------------*/
+
+/*
+ * NAME
+ * nztiGetIssuerName - Get IssuerName for the given identity
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ * osscntxt {IN} OSS context.
+ * identity {IN} identity need to get issuername from
+ * issuername {OUT} issuer's name
+ * issuernamelen {OUT} length of the issuer's name
+ *
+ * NOTES
+ *
+ * RETURNS
+ *
+ */
+nzerror nztiGetIssuerName( nzctx *, nzttIdentity *,
+ text **, ub4 * );
+
+
+/*-------------------- nztgch_GetCertHash --------------------*/
+
+/*
+ * NAME
+ * nztgch_GetCertHash - Get SHA1 hash for the certificate of the identity
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ * osscntxt {IN} OSS context.
+ * identity {IN} identity need to get issuername from
+ * certHash {OUT} certHash buffer
+ * hashLen {OUT} length of the certHash
+ *
+ * NOTES
+ * Need to call nztdbuf_DestroyBuf to deallocate memory for certHash.
+ * RETURNS
+ *
+ */
+nzerror nztgch_GetCertHash( nzctx *, nzttIdentity *,
+ ub1 **, ub4 * );
+
+/*-------------------- nztdbuf_DestroyBuf --------------------*/
+
+/*
+ * NAME
+ * nztdbuf_DestroyBuf - Deallocation funtions for ub1 and text buffer
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ * osscntxt {IN} OSS context.
+ * buf {IN} Allocated buffer to be destroyed.
+ *
+ * NOTES
+ *
+ * RETURNS
+ *
+ */
+nzerror nztdbuf_DestroyBuf( nzctx *, void ** );
+
+
+/*----------------------- nztGetCertChain -----------------------*/
+
+/*
+ * NAME
+ * nztGetCertChain -
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ * osscntxt {IN} OSS context.
+ *
+ * NOTES
+ *
+ * RETURNS
+ *
+ */
+nzerror nztGetCertChain( nzctx *, nzttWallet * );
+
+/*----------------------- nztCompareDN -----------------------*/
+
+/*
+ * NAME
+ * nztCompareDN -
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ * osscntxt {IN} OSS context.
+ * dn1 {IN} distinguished name 1
+ * dn2 {IN} distinguished name 2
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK succeeded
+ * others failed
+ *
+ */
+nzerror nztCompareDN( nzctx *, ub1 *,ub4 , ub1 *, ub4, boolean * );
+
+
+#ifdef NZ_OLD_TOOLS
+/*--------------------- nztIdentityAlloc ---------------------*/
+
+/*
+ * NAME
+ * nztIdentityAlloc - Allocate memory for nzttIdentity context
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ * osscntxt {IN} OSS context.
+ * identity {OUT} nzttIdentity context
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK succeeded
+ * others failed
+ *
+ */
+nzerror nztIdentityAlloc( nzctx *, nzttIdentity ** );
+
+/*--------------------- nztIPrivateAlloc ---------------------*/
+
+/*
+ * NAME
+ * nztIPrivateAlloc - Allocate memory for nzttIdentityPrivate
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ *
+ * osscntxt {IN} OSS context.
+ * ipriv {OUT} identityPrivate structure
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK succeeded
+ * others failed
+ *
+ */
+
+nzerror nztIPrivateAlloc( nzctx *, nzttIdentityPrivate **);
+
+
+/*---------------------- nztIDupContent ----------------------*/
+
+/*
+ * NAME
+ * nztIDupContent -
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ * osscntxt {IN} OSS context.
+ * targetIdentity{OUT} target identity
+ * sourceIdentity {IN} source identity
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK succeeded
+ * others failed
+ *
+ */
+
+nzerror nztIDupContent( nzctx *, nzttIdentity *, nzttIdentity * );
+/*---------------------- nztIPDuplicate ----------------------*/
+
+/*
+ * NAME
+ * nztIPDuplicate -
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ * osscntxt {IN} OSS context.
+ * target_ipriv {OUT} target identityPrivate
+ * source_ipriv {IN} source identityPrivate
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK succeeded
+ * others failed
+ *
+ */
+nzerror nztIPDuplicate( nzctx *, nzttIdentityPrivate **,
+ nzttIdentityPrivate * );
+
+/*--------------------- nztiDupIdentList ---------------------*/
+
+/*
+ * NAME
+ * nztiDupIdentList -
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ * osscntxt {IN} OSS context.
+ * source_identities {IN} source identity list
+ * numIdent {OUT} number of identity in the list
+ * ppidentity {OUT} Target of identity
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK succeeded
+ * others failed
+ *
+ */
+nzerror nztiDupIdentList( nzctx *, nzttIdentity *, ub4 *,
+ nzttIdentity ** );
+
+/*--------------------- nztFreeIdentList ---------------------*/
+
+/*
+ * NAME
+ * nztFreeIdentList - Free memory for a list of Identities
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ * osscntxt {IN} OSS context.
+ * identity {IN} identity context
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK succeeded
+ * others failed
+ *
+ */
+nzerror nztFreeIdentList( nzctx *, nzttIdentity ** );
+#endif /* NZ_OLD_TOOLS */
+
+/*--------------------- nztCheckVaLidity ---------------------*/
+
+/*
+ * NAME
+ * nztCheckVaLidity - Check the validity of certificate
+ *
+ * PARAMETERS
+ * Name {IN/OUT} Description
+ * osscntxt {IN} OSS context.
+ * start_time Start time of the certificate
+ * end_time End time of the certificate
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK succeeded
+ * others failed
+ *
+ */
+nzerror nztCheckValidity( nzctx *, ub4 , ub4 );
+
+/*--------------------- nztwCreateWallet ---------------------*/
+
+/*
+ * NAME
+ * nztwCreateWallet - Create a new wallet.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * wrllen {IN} Length of wallet resource locator.
+ * wrl {IN} WRL.
+ * pwdlen {IN} Length of password (see notes below).
+ * pwd {IN} Password.
+ * wallet {IN/OUT} Wallet.
+ *
+ * NOTES
+ * It is an error to try to create a wallet that already exists.
+ * The previously existing wallet must be destroyed first.
+ *
+ * The wallet itself is not encrypted. Rather, all the personas in
+ * the wallet are encrypted under the same password. A hash of the
+ * password is stored in the wallet.
+ *
+ * Upon success, an empty open wallet is stored in the wallet
+ * parameter.
+ *
+ * RETURNS
+ * NZERROR_OK Sucess.
+ * NZERROR_TK_WALLET_EXISTS Wallet already exists.
+ * NZERROR_RIO_OPEN RIO could not create wallet (see trace file).
+ */
+nzerror nztwCreateWallet( nzctx *, ub4, text *, ub4, text *,
+ nzttWallet * );
+
+
+/*--------------------- nztwDestroyWallet ---------------------*/
+
+/*
+ * NAME
+ * nztwDestroyWallet - Destroy an existing wallet.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * wrllen {IN} Length of wallet resource locator.
+ * wrl {IN} WRL.
+ * pwdlen {IN} Length of password.
+ * pwd {IN} Password.
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_PASSWORD Password verification failed.
+ * NZERROR_RIO_OPEN RIO could not open wallet (see trace file).
+ * NZERROR_RIO_DELETE Delete failed (see trace file).
+ */
+nzerror nztwDestroyWallet( nzctx *, ub4, text *, ub4, text * );
+
+/*--------------------- nzteStorePersona ---------------------*/
+
+/*
+ * NAME
+ * nzteStorePersona - Store an open persona in a wallet.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN/OUT} Persona.
+ * wallet {IN/OUT} Wallet.
+ *
+ * NOTES
+ * If the open persona is not associated with any wallet (it was
+ * created via the nzteClosePersona function), then storing the
+ * persona creates that association. The wallet will also have an
+ * updated persona list that reflects this association.
+ *
+ * If the open persona was associated with wallet 'A' (it was
+ * opened via the nztwOpenWallet function), and is stored back into
+ * wallet 'A', then then the old persona is overwritten by the new
+ * persona if the password can be verified. Recall that all
+ * personas have a unique identity id. If that id changes then
+ * storing the persona will put a new persona in the wallet.
+ *
+ * If the open persona was associated with wallet 'A' and is stored
+ * into wallet 'B', and if wallet 'B' does not contain a persona
+ * with that unique identity id, then the persona will be copied
+ * into wallet 'B', wallet 'B''s persona list will be updated, and
+ * the persona structure will be updated to be associated with
+ * wallet 'B'. If wallet 'B' already contained the persona, it
+ * would be overwritten by the new persona.
+ *
+ * The persona parameter is doubly indirect so that at the
+ * conclusion of the function call, the pointer can be directed to
+ * the persona in the wallet.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_PASSWORD Password verification failed.
+ * NZERROR_RIO_STORE Store failed (see network trace file).
+ */
+nzerror nzteStorePersona( nzctx *, nzttPersona **, nzttWallet * );
+
+/*--------------------- nzteRemovePersona ---------------------*/
+
+/*
+ * NAME
+ * nzteRemovePersona - Remove a persona from the wallet.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN/OUT} Persona.
+ *
+ * NOTES
+ * The password is verified before trying to remove the persona.
+ *
+ * If the persona is open, it is closed. The persona is removed
+ * from the wallet list and the persona pointer is set to NULL.
+ *
+ * A double indirect pointer to the persona is required so that the
+ * persona pointer can be set to NULL upon completion.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_PASSWORD Password verification failed.
+ * NZERROR_RIO_DELETE Delete failed.
+ */
+nzerror nzteRemovePersona( nzctx *, nzttPersona ** );
+
+/*--------------------- nzteCreatePersona ---------------------*/
+
+/*
+ * NAME
+ * nzteCreatePersona - Create a persona.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * itype {IN} Identity type.
+ * ctype {IN} Cipher type.
+ * desc {IN} Persona description.
+ * persona {OUT} Persona.
+ *
+ * NOTES
+ * The resulting persona is created in the open state, but it will
+ * not be associated with a wallet.
+ *
+ * The memory for the persona is allocated by the function.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_TYPE Unsupported itype/ctype combination.
+ * NZERROR_TK_PARMS Error in persona description.
+ */
+nzerror nzteCreatePersona( nzctx *, nzttVersion, nzttCipherType,
+ nzttPersonaDesc *, nzttPersona ** );
+
+
+/*----------------- nztiStoreTrustedIdentity -----------------*/
+
+/*
+ * NAME
+ * nztiStoreTrustedIdentity - Store an identity into a persona.
+ *
+ * PARAMETERS
+ * osscntxt {IN} Success.
+ * identity {IN/OUT} Trusted Identity.
+ * persona {IN/OUT} Persona.
+ *
+ * NOTES
+ * The identity is not saved with the persona in the wallet until
+ * the persona is stored.
+ *
+ * The identity parameter is double indirect so that it can point
+ * into the persona at the conclusion of the call.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nztiStoreTrustedIdentity( nzctx *, nzttIdentity **,
+ nzttPersona * );
+
+/*--------------------- nzteSetProtection ---------------------*/
+
+/*
+ * NAME
+ * nzteSetProtection - Set the protection type for a CE function.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN/OUT} Persona.
+ * func {IN} CE function.
+ * tdufmt {IN} TDU Format.
+ * protinfo {IN} Protection information specific to this format.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_PROTECTION Unsupported protection.
+ * NZERROR_TK_PARMS Error in protection info.
+ */
+nzerror nzteSetProtection( nzctx *, nzttPersona *, nzttcef, nztttdufmt,
+ nzttProtInfo * );
+
+/*--------------------- nzteGetProtection ---------------------*/
+
+/*
+ * NAME
+ * nzteGetProtection - Get the protection type for a CE function.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * func {IN} CE function.
+ * tdufmt {OUT} TDU format.
+ * protinfo {OUT} Protection information.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nzteGetProtection( nzctx *, nzttPersona *, nzttcef, nztttdufmt *,
+ nzttProtInfo * );
+
+/*-------------------- nztiRemoveIdentity --------------------*/
+
+/*
+ * NAME
+ * nztiRemoveIdentity - Remove an identity from an open persona.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * identity {IN/OUT} Identity.
+ *
+ * NOTES
+ * If the persona is not stored, this identity will still be in the
+ * persona stored in the wallet.
+ *
+ * The identity parameter is doubly indirect so that at the
+ * conclusion of the function, the pointer can be set to NULL.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_NOTFOUND Identity not found.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ */
+nzerror nztiRemoveIdentity( nzctx *, nzttIdentity ** );
+
+/*----------------- nztifdn -----------------*/
+
+/*
+ * NAME
+ * nztifdn - create an Identity From a Distinguished Name
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * length {IN} Length of the distinguished name
+ * distinguished_name {IN} distinguished name string
+ * ppidentity {OUT} created identity
+ *
+ * NOTES
+ * Given a distinguished name, return the identity that corresponds to it.
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ */
+nzerror nztifdn( nzctx *ossctx,
+ ub4 length,
+ text *distinguished_name,
+ nzttIdentity **ppidentity );
+
+/*--------------------- nztxSignExpansion ---------------------*/
+
+/*
+ * NAME
+ * nztxSignExpansion - Determine the size of the attached signature buffer.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * inlen {IN} Length of input.
+ * tdulen {OUT} Buffer needed for signature.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztxSignExpansion( nzctx *, nzttPersona *, ub4, ub4 * );
+
+/*--------------- nztxsd_SignDetachedExpansion ---------------*/
+
+/*
+ * NAME
+ * nztxsd_SignDetachedExpansion - Determine the size of buffer needed.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * inlen {IN} Length of input.
+ * tdulen {OUT} Buffer needed for signature.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztxsd_SignDetachedExpansion( nzctx *, nzttPersona *, ub4,
+ ub4 * );
+
+/*------------------------ nztEncrypt ------------------------*/
+
+/*
+ * NAME
+ * nztEncrypt - Symmetrically encrypt
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * inlen {IN} Length of this input part.
+ * in {IN} This input part.
+ * tdubuf {IN/OUT} TDU buffer.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_CANTGROW Needed to grow TDU buffer but could not.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztEncrypt( nzctx *, nzttPersona *, nzttces, ub4, ub1 *,
+ nzttBufferBlock * );
+
+/*------------------- nztxEncryptExpansion -------------------*/
+
+/*
+ * NAME
+ * nztxEncryptExpansion - Determine the size of the TDU to encrypt.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * inlen {IN} Length of this input part.
+ * tdulen {OUT} Length of TDU.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztxEncryptExpansion( nzctx *, nzttPersona *, ub4, ub4 * );
+
+/*------------------------ nztDecrypt ------------------------*/
+
+/*
+ * NAME
+ * nztDecrypt - Decrypt an Encrypted message.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * state {IN} State of decryption.
+ * inlen {IN} Length of this input part.
+ * in {IN} This input part.
+ * out {IN/OUT} Cleartext message.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_CANTGROW Needed to grow TDU buffer but could not.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztDecrypt( nzctx *, nzttPersona *, nzttces, ub4, ub1 *,
+ nzttBufferBlock * );
+
+/*------------------------ nztEnvelope ------------------------*/
+
+/*
+ * NAME
+ * nztEnvelope - Sign and PKEncrypt a message.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * nrecipients {IN} Number of recipients for this encryption.
+ * recipients {IN} List of recipients.
+ * state {IN} State of encryption.
+ * inlen {IN} Length of this input part.
+ * in {IN} This input part.
+ * tdubuf {IN/OUT} TDU buffer.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_CANTGROW Needed to grow output buffer but could not.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztEnvelope( nzctx *, nzttPersona *, ub4, nzttIdentity *,
+ nzttces, ub4, ub1 *, nzttBufferBlock * );
+
+/*----------------------- nztDeEnvelope -----------------------*/
+
+/*
+ * NAME
+ * nztDeEnvelope - PKDecrypt and verify a message.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * state {IN} State of encryption.
+ * inlen {IN} Length of this input part.
+ * in {IN} This input part.
+ * out {OUT} Message from TDU.
+ * verified {OUT} TRUE if verified.
+ * validated {OUT} TRUE if validated.
+ * sender {OUT} Identity of sender.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_CANTGROW Needed to grow TDU buffer but could not.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztDeEnvelope( nzctx *, nzttPersona *, nzttces, ub4, ub1 *,
+ nzttBufferBlock *, boolean *, boolean *,
+ nzttIdentity ** );
+
+/*----------------------- nztKeyedHash -----------------------*/
+
+/*
+ * NAME
+ * nztKeyedHash - Generate a keyed hash.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * state {IN} State of hash.
+ * inlen {IN} Length of this input.
+ * in {IN} This input.
+ * tdu {IN/OUT} Output tdu.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_CANTGROW Needed to grow TDU buffer but could not.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztKeyedHash( nzctx *, nzttPersona *, nzttces, ub4, ub1 *,
+ nzttBufferBlock * );
+
+/*------------------ nztxKeyedHashExpansion ------------------*/
+
+/*
+ * NAME
+ * nztxKeyedHashExpansion - Determine the space needed for a keyed hash.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * inlen {IN} Length of this input.
+ * tdulen {OUT} TDU length.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztxKeyedHashExpansion( nzctx *, nzttPersona *, ub4,
+ ub4 * );
+
+/*--------------------- nztxHashExpansion ---------------------*/
+
+/*
+ * NAME
+ * nztxHashExpansion - Determine the size of the TDU for a hash.
+ *
+ * PARAMETERS
+ * osscntxt {IN} OSS context.
+ * persona {IN} Persona.
+ * inlen {IN} Length of this input.
+ * tdulen {OUT} TDU length.
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK Success.
+ * NZERROR_TK_NOTOPEN Persona is not open.
+ * NZERROR_TK_NOTSUPP Function not supported with persona.
+ */
+nzerror nztxHashExpansion( nzctx *, nzttPersona *, ub4, ub4 * );
+
+/*---------------- nztiae_IsAuthEnabled ----------------*/
+
+/*
+ * NAME
+ * nztiae_IsAuthEnabled - Checks to see if Authentication is Enabled
+ * in the current Cipher Spec.
+ *
+ * PARAMETERS
+ * ctx {IN} Oracle SSL Context
+ * ncipher {IN} CipherSuite
+ * authEnabled {OUT} Boolean for is Auth Enabled?
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK on success.
+ * NZERROR_TK_INV_CIPHR_TYPE if Cipher Spec is not Recognized.
+ */
+
+nzerror nztiae_IsAuthEnabled( nzctx *ctx,
+ ub2 ncipher,
+ boolean *authEnabled );
+
+/*---------------- nztiee_IsEncrEnabled ----------------*/
+/*
+ * NAME
+ * nztiee_IsEncrEnabled - Checks to see if Encryption is Enabled
+ * in the current Cipher Spec.
+ *
+ * PARAMETERS
+ * ctx {IN} Oracle SSL Context
+ * ncipher {IN} CipherSuite
+ * EncrEnabled {OUT} Boolean for is Auth Enabled?
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK on success.
+ * NZERROR_TK_INV_CIPHR_TYPE if Cipher Spec is not Recognized.
+ */
+
+nzerror nztiee_IsEncrEnabled( nzctx *ctx,
+ ub2 ncipher,
+ boolean *EncrEnabled );
+
+/*---------------- nztihe_IsHashEnabled ----------------*/
+/*
+ * NAME
+ * nztihe_IsHashEnabled - Checks to see if HAshing is Enabled
+ * in the current Cipher Spec.
+ *
+ * PARAMETERS
+ * ctx {IN} Oracle SSL Context
+ * ncipher {IN} CipherSuite
+ * hashEnabled {OUT} Boolean for is Auth Enabled?
+ *
+ * NOTES
+ *
+ * RETURNS
+ * NZERROR_OK on success.
+ * NZERROR_TK_INV_CIPHR_TYPE if Cipher Spec is not Recognized.
+ */
+
+nzerror nztihe_IsHashEnabled( nzctx *ctx,
+ ub2 ncipher,
+ boolean *hashEnabled );
+
+/*
+ *
+ */
+
+nzerror nztGetIssuerName( nzctx *ctx,
+ nzttIdentity *identity,
+ ub1 **issuername,
+ ub4 *issuernamelen );
+
+nzerror nztGetSubjectName( nzctx *ctx,
+ nzttIdentity *identity,
+ ub1 **subjectname,
+ ub4 *subjectnamelen );
+
+nzerror nztGetBase64Cert( nzctx *ctx,
+ nzttIdentity *identity,
+ ub1 **b64cert,
+ ub4 *b64certlen );
+
+nzerror nztGetSerialNumber( nzctx *ctx,
+ nzttIdentity *identity,
+ ub1 **serialnum,
+ ub4 *serialnumlen );
+
+nzerror nztGetValidDate( nzctx *ctx,
+ nzttIdentity *identity,
+ ub4 *startdate,
+ ub4 *enddate );
+
+nzerror nztGetVersion( nzctx *ctx,
+ nzttIdentity *identity,
+ nzstrc *pVerStr );
+
+nzerror nztGetPublicKey( nzctx *ctx,
+ nzttIdentity *identity,
+ ub1 **pubKey,
+ ub4 *pubKeylen );
+
+nzerror nztGenericDestroy( nzctx *ctx,
+ ub1 **var );
+
+nzerror nztSetAppDefaultLocation( nzctx *ctx,
+ text *,
+ size_t );
+
+nzerror nztSearchNZDefault( nzctx *ctx,
+ boolean *search );
+
+nzerror nztSetLightWeight(nzctx *ctx,
+ boolean flag);
+
+#endif /* NZT_ORACLE */
+
--- /dev/null
+/* Copyright (c) 2000, 2002, Oracle Corporation. All rights reserved. */
+
+/*
+ NAME
+ occi.h - Oracle C++ Interface header files.
+
+ DESCRIPTION
+ <short description of facility this file declares/defines>
+
+ RELATED DOCUMENTS
+ <note any documents related to this facility>
+
+ EXPORT FUNCTION(S)
+ <external functions declared for use outside package - one-line
+ descriptions>
+
+ INTERNAL FUNCTION(S)
+ <other external functions declared - one-line descriptions>
+
+ EXAMPLES
+
+ NOTES
+ <other useful comments, qualifications, etc.>
+
+ MODIFIED (MM/DD/YY)
+ vvinay 08/19/02 -
+ aahluwal 06/03/02 - bug 2360115
+ gayyappa 01/03/01 - removed inclusions before occiCommon.h
+ kmohan 04/11/00 - include oci.h and occiCommon.h also
+ rkasamse 04/03/00 - header file for all the OCCI classes
+ rkasamse 04/03/00 - Creation
+
+*/
+
+#ifndef OCCI_ORACLE
+# define OCCI_ORACLE
+
+#ifndef OCCICOMMON_ORACLE
+#include <occiCommon.h>
+#endif
+
+#ifndef OCCIDATA_ORACLE
+#include <occiData.h>
+#endif
+
+#ifndef OCCICONTROL_ORACLE
+#include <occiControl.h>
+#endif
+
+#ifndef OCCIOBJECTS_ORACLE
+#include <occiObjects.h>
+#endif
+
+#ifndef OCCIAQ_ORACLE
+#include <occiAQ.h>
+#endif
+
+/*---------------------------------------------------------------------------
+ PUBLIC TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ PRIVATE TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ EXPORT FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ INTERNAL FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+#endif /* OCCI_ORACLE */
--- /dev/null
+/* Copyright (c) 2002, 2005, Oracle. All rights reserved. */
+
+/*
+ NAME
+ occiAQ.h - Header file for occi AQ classes
+
+ DESCRIPTION
+ Class declarations for Producer, Consumer, Message, Agent
+ Listener, Subscription
+
+ RELATED DOCUMENTS
+ <note any documents related to this facility>
+
+ EXPORT FUNCTION(S)
+ <external functions declared for use outside package - one-line
+ descriptions>
+
+ INTERNAL FUNCTION(S)
+ <other external functions declared - one-line descriptions>
+
+ EXAMPLES
+
+ NOTES
+ <other useful comments, qualifications, etc.>
+
+ MODIFIED (MM/DD/YY)
+ cparampa 10/12/02 - creation
+
+*/
+
+#ifndef _olint /* disable olint check */
+
+#ifndef OCCIAQ_ORACLE
+# define OCCIAQ_ORACLE
+
+#ifndef OCCICOMMON_ORACLE
+#include <occiCommon.h>
+#endif
+
+namespace oracle {
+namespace occi {
+namespace aq{
+
+/*---------------------------------------------------------------------------
+ PUBLIC TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+class Message
+{
+ public:
+
+ enum MessageState
+ {
+ MSG_READY = OCI_MSG_READY,
+ MSG_WAITING = OCI_MSG_WAITING,
+ MSG_PROCESSED = OCI_MSG_PROCESSED,
+ MSG_EXPIRED = OCI_MSG_EXPIRED
+ };
+ enum PayloadType
+ {
+ RAW,
+ ANYDATA,
+ OBJECT
+ };
+
+ Message( const Environment *env );
+ Message( const Message& rhs);
+ ~Message();
+
+ void operator=(const Message& rhs);
+ int getAttemptsToDequeue() const ;
+ void setCorrelationId( const OCCI_STD_NAMESPACE::string& corr_id ) ;
+ OCCI_STD_NAMESPACE::string getCorrelationId() const ;
+ void setDelay( int delay ) ;
+ int getDelay() const ;
+ Date getMessageEnqueuedTime() const ;
+ void setExceptionQueueName( const OCCI_STD_NAMESPACE::string& queue ) ;
+ OCCI_STD_NAMESPACE::string getExceptionQueueName() const ;
+ void setExpiration( int exp ) ;
+ int getExpiration() const ;
+ MessageState getMessageState() const ;
+ void setPriority( int priority ) ;
+ int getPriority() const ;
+ void setRecipientList( OCCI_STD_NAMESPACE::vector<Agent>& ag_list ) ;
+ void setSenderId( const Agent& sender ) ;
+ Agent getSenderId() const ;
+ void setOriginalMessageId( const Bytes& queue ) ;
+ Bytes getOriginalMessageId() const ;
+ void setNull();
+ bool isNull() const;
+
+ void setBytes( const Bytes& bytes);
+ void setObject( PObject* pobj);
+ void setAnyData( const AnyData& any);
+
+ Bytes getBytes() const ;
+ PObject *getObject() ;
+ AnyData getAnyData() const ;
+
+ PayloadType getPayloadType( ) const;
+
+ private:
+ Ptr<MessageImpl> ptr;
+ OCIAQMsgProperties* getOCIMsgProperties() const;
+ Message( const Environment *env, const Connection *con,
+ OCIAQMsgProperties *msgprop, void *data, unsigned int dataLen,
+ bool isNull, PayloadType pType);
+ friend class ConsumerImpl;
+ friend class ProducerImpl;
+ friend class NotifyResult;
+};
+
+class Producer
+{
+ public:
+
+ enum EnqueueSequence
+ {
+ ENQ_BEFORE = OCI_ENQ_BEFORE,
+ ENQ_TOP = OCI_ENQ_TOP
+ };
+ enum Visibility
+ {
+ ENQ_IMMEDIATE = OCI_ENQ_IMMEDIATE,
+ ENQ_ON_COMMIT = OCI_ENQ_ON_COMMIT
+ };
+
+ Producer( const Connection *conn );
+ Producer( const Connection *conn,
+ const OCCI_STD_NAMESPACE::string& queue );
+ Producer( const Producer& rhs);
+ ~Producer();
+
+ void operator=(const Producer& prod);
+ void setRelativeMessageId( const Bytes& msgid );
+ Bytes getRelativeMessageId() const;
+ void setSequenceDeviation( EnqueueSequence option );
+ EnqueueSequence getSequenceDeviation() const;
+ void setVisibility( Visibility option );
+ Visibility getVisibility() const;
+ void setQueueName( const OCCI_STD_NAMESPACE::string& queue );
+ OCCI_STD_NAMESPACE::string getQueueName() const;
+ void setTransformation( const OCCI_STD_NAMESPACE::string& fName);
+ OCCI_STD_NAMESPACE::string getTransformation() const;
+ Bytes send( Message& msg, const OCCI_STD_NAMESPACE::string& queue );
+ Bytes send( Message& msg );
+ void setNull();
+ bool isNull() const;
+
+ private:
+ Ptr<ProducerImpl> ptr;
+};
+
+class Consumer
+{
+ public:
+
+ enum DequeueMode
+ {
+ DEQ_BROWSE = OCI_DEQ_BROWSE,
+ DEQ_LOCKED = OCI_DEQ_LOCKED,
+ DEQ_REMOVE = OCI_DEQ_REMOVE,
+ DEQ_REMOVE_NODATA = OCI_DEQ_REMOVE_NODATA
+ };
+ enum Navigation
+ {
+ DEQ_FIRST_MSG = OCI_DEQ_FIRST_MSG,
+ DEQ_NEXT_TRANSACTION = OCI_DEQ_NEXT_TRANSACTION,
+ DEQ_NEXT_MSG = OCI_DEQ_NEXT_MSG
+ };
+ enum Visibility
+ {
+ DEQ_IMMEDIATE = OCI_DEQ_IMMEDIATE,
+ DEQ_ON_COMMIT = OCI_DEQ_ON_COMMIT
+ };
+ enum
+ {
+ DEQ_WAIT_FOREVER = OCI_DEQ_WAIT_FOREVER,
+ DEQ_NO_WAIT = OCI_DEQ_NO_WAIT
+ };
+
+ Consumer( const Connection *conn );
+ Consumer( const Connection * conn, const Agent& agent);
+ Consumer( const Connection *conn,
+ const OCCI_STD_NAMESPACE::string& queue );
+ Consumer(const Consumer& con);
+ ~Consumer();
+
+ void operator=(const Consumer& con);
+ void setAgent(const Agent& agent);
+ void setConsumerName( const OCCI_STD_NAMESPACE::string& name );
+ OCCI_STD_NAMESPACE::string getConsumerName() const;
+ void setCorrelationId( const OCCI_STD_NAMESPACE::string& cor_id );
+ OCCI_STD_NAMESPACE::string getCorrelationId() const;
+ void setDequeueMode( DequeueMode mode );
+ DequeueMode getDequeueMode() const;
+ void setMessageIdToDequeue( const Bytes& msgid );
+ Bytes getMessageIdToDequeue() const;
+ void setPositionOfMessage( Navigation pos );
+ Navigation getPositionOfMessage() const;
+ void setVisibility( Visibility option );
+ Visibility getVisibility() const;
+ void setWaitTime( unsigned int wait );
+ unsigned int getWaitTime() const;
+ void setQueueName( const OCCI_STD_NAMESPACE::string& queue );
+ OCCI_STD_NAMESPACE::string getQueueName() const;
+ void setTransformation( const OCCI_STD_NAMESPACE::string& fName);
+ OCCI_STD_NAMESPACE::string getTransformation() const;
+ Message receive( Message::PayloadType pType,
+ const OCCI_STD_NAMESPACE::string& type="",
+ const OCCI_STD_NAMESPACE::string& schema="");
+ void setNull();
+ bool isNull() const;
+
+ private:
+ Ptr<ConsumerImpl> ptr;
+};
+
+class Agent
+{
+ public:
+ Agent( const Environment *env );
+ Agent( const Environment *env,
+ const OCCI_STD_NAMESPACE::string& name,
+ const OCCI_STD_NAMESPACE::string& address,
+ unsigned int protocol=0 ) ;
+ Agent(const Agent& a);
+ ~Agent() ;
+
+ void operator=(const Agent& a);
+ void setName( const OCCI_STD_NAMESPACE::string& name );
+ OCCI_STD_NAMESPACE::string getName() const;
+ void setAddress( const OCCI_STD_NAMESPACE::string& addr );
+ OCCI_STD_NAMESPACE::string getAddress() const;
+ void setProtocol(unsigned int protocol = 0);
+ unsigned int getProtocol() const;
+ void setNull();
+ bool isNull() const;
+ OCIAQAgent* getOCIAQAgent() const;
+
+ private:
+ Ptr<AgentImpl> ptr;
+ Agent( const Environment *env, OCIAQAgent *rhs, bool toFree = false );
+ friend class Listener;
+ friend class MessageImpl;
+};
+
+class Listener
+{
+ public:
+ Listener( const Connection *conn );
+ Listener( const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Agent> &agList,
+ int waitTime=0 );
+ ~Listener();
+
+ Agent listen();
+ void setAgentList(OCCI_STD_NAMESPACE::vector<Agent> &agList);
+ void setTimeOutForListen(int waitTime);
+ OCCI_STD_NAMESPACE::vector<Agent> getAgentList() const;
+ int getTimeOutForListen() const;
+
+ private:
+ const ConnectionImpl *conn;
+ OCIAQAgent** agentList;
+ unsigned int numAgents;
+ int timeOut;
+ void *listenerExt;
+};
+
+
+class Subscription
+{
+ public:
+ enum Presentation
+ {
+ PRES_DEFAULT = OCI_SUBSCR_PRES_DEFAULT,
+ PRES_XML = OCI_SUBSCR_PRES_XML
+ };
+ enum Protocol
+ {
+ PROTO_CBK = OCI_SUBSCR_PROTO_OCI,
+ PROTO_MAIL = OCI_SUBSCR_PROTO_MAIL,
+ PROTO_SERVER = OCI_SUBSCR_PROTO_SERVER,
+ PROTO_HTTP = OCI_SUBSCR_PROTO_HTTP
+ };
+ enum Namespace
+ {
+ NS_ANONYMOUS = OCI_SUBSCR_NAMESPACE_ANONYMOUS,
+ NS_AQ = OCI_SUBSCR_NAMESPACE_AQ
+ };
+
+ Subscription(const Environment* env);
+ Subscription(const Environment* env, OCISubscription* sub);
+ Subscription(const Subscription& sub);
+ ~Subscription();
+
+ void operator=(const Subscription& sub);
+ unsigned int getDatabaseServersCount() const;
+ void setDatabaseServerNames(
+ const OCCI_STD_NAMESPACE::vector<OCCI_STD_NAMESPACE::string>& dbsrv);
+ OCCI_STD_NAMESPACE::vector<OCCI_STD_NAMESPACE::string>
+ getDatabaseServerNames() const ;
+ void setNotifyCallback(unsigned int (*callback)(Subscription& sub,
+ NotifyResult *nr));
+ unsigned int (*getNotifyCallback() const)(Subscription& sub,
+ NotifyResult *nr);
+ void setCallbackContext(void* ctx);
+ void* getCallbackContext() const;
+ void setSubscriptionName(const OCCI_STD_NAMESPACE::string& name);
+ OCCI_STD_NAMESPACE::string getSubscriptionName() const ;
+ void setSubscriptionNamespace(Namespace nameSpace);
+ Namespace getSubscriptionNamespace() const ;
+ void setPayload(const Bytes& payload);
+ Bytes getPayload() const ;
+ void setRecipientName( const OCCI_STD_NAMESPACE::string& name);
+ OCCI_STD_NAMESPACE::string getRecipientName() const;
+ void setPresentation( Presentation pres) ;
+ Presentation getPresentation() const ;
+ void setProtocol( Protocol prot) ;
+ Protocol getProtocol() const ;
+ OCISubscription* getOCISubscription() const;
+ void setNull();
+ bool isNull() const;
+ Environment* getEnvironment() const;
+
+ private:
+ Ptr<SubscriptionImpl> ptr;
+};
+
+class NotifyResult
+{
+ public:
+ Bytes getPayload() const;
+ Message getMessage() const;
+ Bytes getMessageId() const;
+ OCCI_STD_NAMESPACE::string getConsumerName() const;
+ OCCI_STD_NAMESPACE::string getQueueName() const;
+
+ private:
+ const EnvironmentImpl *env;
+ void *payload;
+ unsigned int payloadLen;
+ void *desc;
+ ub4 mode;
+ void *notifyResultExt;
+
+ //private constructor
+ NotifyResult(const Environment *env, void *payload, ub4 payloadLen,
+ void *pdescriptor, ub4 mode);
+
+ friend class SubscriptionImpl;
+};
+
+/*---------------------------------------------------------------------------
+ PRIVATE TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ EXPORT FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ INTERNAL FUNCTIONS
+ ---------------------------------------------------------------------------*/
+} /* end of namespace aq */
+} /* end of namespace occi */
+} /* end of namespace oracle */
+
+#endif /* OCCIAQ_ORACLE */
+
+#endif /* _olint */
--- /dev/null
+/* Copyright (c) 2000, 2008, Oracle. All rights reserved. */
+
+/*
+ NAME
+ occiCommon.h - header file for doing forward references
+
+ DESCRIPTION
+ Just declare all the classes
+
+ RELATED DOCUMENTS
+ OCCI Programmer's Guide
+
+ EXPORT FUNCTION(S)
+ none
+
+ INTERNAL FUNCTION(S)
+ none
+
+ EXAMPLES
+
+ NOTES
+ none
+
+*/
+
+
+#ifndef OCCICOMMON_ORACLE
+# define OCCICOMMON_ORACLE
+
+#ifndef _olint
+
+#ifndef OCI_ORACLE
+#include <oci.h>
+#endif
+
+#ifndef ORASTRINGSTL
+#define ORASTRINGSTL
+#include <string>
+#endif
+
+#ifndef ORAVECTORSTL
+#include <vector>
+#define ORAVECTORSTL
+#endif
+
+#ifndef ORALISTSTL
+#include <list>
+#define ORALISTSTL
+#endif
+
+#define OCCI_STD_NAMESPACE std
+#define OCCI_HAVE_STD_NAMESPACE 1
+
+// version definitions
+#define OCCI_MAJOR_VERSION OCI_MAJOR_VERSION
+#define OCCI_MINOR_VERSION OCI_MINOR_VERSION
+
+namespace oracle {
+namespace occi {
+
+//UString is the class for UTF16 characterset
+//check for version = 3.2 or 3.3
+#if (__GNUC__ == 3 && (__GNUC_MINOR__ == 2 || __GNUC_MINOR__ == 3))
+ //char_traits<T> specialization for utext for gcc 3.2.3
+ struct utext_char_traits
+ {
+ typedef utext char_type;
+ typedef unsigned int int_type;
+
+ typedef OCCI_STD_NAMESPACE::streampos pos_type;
+ typedef OCCI_STD_NAMESPACE::streamoff off_type;
+ typedef OCCI_STD_NAMESPACE::mbstate_t state_type;
+
+ //assign one char to another
+ static void assign(char_type& c1, const char_type& c2)
+ {
+ c1 = c2;
+ }
+
+ //are 2 chars equal ?
+ static bool eq(const char_type& c1, const char_type& c2)
+ {
+ return c1 == c2;
+ }
+
+ //is char c1 less then c2 ?
+ static bool lt(const char_type& c1, const char_type& c2)
+ {
+ return c1 < c2;
+ }
+
+ //compare 2 strings of char
+ static int compare(const char_type* s1, const char_type* s2, size_t n)
+ {
+ for (size_t i = 0; i < n; ++i)
+ if (!eq(s1[i], s2[i]))
+ return s1[i] < s2[i] ? -1 : 1;
+ return 0;
+ }
+
+ //length of a char string
+ static size_t length(const char_type* s)
+ {
+ const char_type nullchar = char_type(0);
+ size_t i = 0;
+
+ while (!eq(*s++, nullchar)) i++;
+ return i;
+ }
+
+ //find a character in the char string
+ static const char_type* find(const char_type* s,
+ size_t n, const char_type& c)
+ {
+ for ( ; n > 0 ; ++s, --n)
+ if (eq(*s, c))
+ return s;
+ return 0;
+ }
+
+ //move n chars from s2 to s1
+ static char_type* move(char_type* s1, const char_type* s2, size_t n)
+ {
+ memmove(s1, s2, n * sizeof(char_type));
+ return s1;
+ }
+
+ //copy n chars from s2 to s1
+ static char_type* copy(char_type* s1, const char_type* s2, size_t n)
+ {
+ memcpy(s1, s2, n * sizeof(char_type));
+ return s1;
+ }
+
+ //fill char c into s
+ static char_type* assign(char_type* s, size_t n, char_type c)
+ {
+ for (size_t i = 0; i < n; ++i)
+ assign(s[i], c);
+ return s;
+ }
+
+ //is the int representation eof ?
+ static int_type not_eof(const int_type& c)
+ {
+ if (c == eof())
+ return 0;
+ else
+ return c;
+ }
+
+ //cast a int type to char
+ static char_type to_char_type(const int_type& c)
+ {
+ return static_cast<char_type>(c);
+ }
+
+ //cast char to int type
+ static int_type to_int_type(const char_type& c)
+ {
+ return static_cast<int_type>(c);
+ }
+
+ //eq operator when the chars are represented as ints
+ static bool eq_int_type(const int_type& c1, const int_type& c2)
+ {
+ return c1 == c2;
+ }
+
+ //eof character
+ static int_type eof()
+ {
+ return static_cast<int_type>(-1);
+ }
+
+
+ }; //end char_traits<unsigned short>
+
+typedef OCCI_STD_NAMESPACE::basic_string<utext, utext_char_traits> UString;
+#else
+//for non gcc 3.2.3 platforms
+typedef OCCI_STD_NAMESPACE::basic_string<utext> UString;
+#endif /* if gcc 3.2.3 */
+
+class Environment;
+class EnvironmentImpl;
+class Connection;
+class ConnectionImpl;
+class ConnectionPool;
+class ConnectionPoolImpl;
+class StatelessConnectionPool;
+class StatelessConnectionPoolImpl;
+class Statement;
+class StatementImpl;
+class ResultSet;
+class ResultSetImpl;
+class SQLException;
+class SQLExceptionImpl;
+class BatchSQLException;
+class BatchSQLExceptionImpl;
+class Stream;
+class PObject;
+class Number;
+class Bytes;
+class BytesImpl;
+class Date;
+class Timestamp;
+
+class MetaData;
+class MetaDataImpl;
+template <class T> class Ref;
+class RefImpl;
+class RefAny;
+class Blob;
+class Bfile;
+class Clob;
+class LobStreamImpl;
+class AnyData;
+class AnyDataImpl;
+class Map;
+class IntervalDS;
+class IntervalYM;
+
+namespace aq {
+class Message;
+class MessageImpl;
+class Agent;
+class AgentImpl;
+class Producer;
+class ProducerImpl;
+class Consumer;
+class ConsumerImpl;
+class Listener;
+class Subscription;
+class SubscriptionImpl;
+class NotifyResult;
+}
+
+typedef struct BFloat BFloat;
+typedef struct BDouble BDouble;
+
+/*---------------------------------------------------------------------------
+ ENUMERATORS
+ ---------------------------------------------------------------------------*/
+enum Type
+{
+ OCCI_SQLT_CHR=SQLT_CHR,
+ OCCI_SQLT_NUM=SQLT_NUM,
+ OCCIINT = SQLT_INT,
+ OCCIFLOAT = SQLT_FLT,
+ OCCIBFLOAT = SQLT_BFLOAT,
+ OCCIBDOUBLE = SQLT_BDOUBLE,
+ OCCIIBFLOAT = SQLT_IBFLOAT,
+ OCCIIBDOUBLE = SQLT_IBDOUBLE,
+ OCCI_SQLT_STR=SQLT_STR,
+ OCCI_SQLT_VNU=SQLT_VNU,
+ OCCI_SQLT_PDN=SQLT_PDN,
+ OCCI_SQLT_LNG=SQLT_LNG,
+ OCCI_SQLT_VCS=SQLT_VCS,
+ OCCI_SQLT_NON=SQLT_NON,
+ OCCI_SQLT_RID=SQLT_RID,
+ OCCI_SQLT_DAT=SQLT_DAT,
+ OCCI_SQLT_VBI=SQLT_VBI,
+ OCCI_SQLT_BIN=SQLT_BIN,
+ OCCI_SQLT_LBI=SQLT_LBI,
+ OCCIUNSIGNED_INT = SQLT_UIN,
+ OCCI_SQLT_SLS=SQLT_SLS,
+ OCCI_SQLT_LVC=SQLT_LVC,
+ OCCI_SQLT_LVB=SQLT_LVB,
+ OCCI_SQLT_AFC=SQLT_AFC,
+ OCCI_SQLT_AVC=SQLT_AVC,
+ OCCI_SQLT_CUR=SQLT_CUR,
+ OCCI_SQLT_RDD=SQLT_RDD,
+ OCCI_SQLT_LAB=SQLT_LAB,
+ OCCI_SQLT_OSL=SQLT_OSL,
+ OCCI_SQLT_NTY=SQLT_NTY,
+ OCCI_SQLT_REF=SQLT_REF,
+ OCCI_SQLT_CLOB=SQLT_CLOB,
+ OCCI_SQLT_BLOB=SQLT_BLOB,
+ OCCI_SQLT_BFILEE=SQLT_BFILEE,
+ OCCI_SQLT_CFILEE=SQLT_CFILEE,
+ OCCI_SQLT_RSET=SQLT_RSET,
+ OCCI_SQLT_NCO=SQLT_NCO,
+ OCCI_SQLT_VST=SQLT_VST,
+ OCCI_SQLT_ODT=SQLT_ODT,
+ OCCI_SQLT_DATE=SQLT_DATE,
+ OCCI_SQLT_TIME=SQLT_TIME,
+ OCCI_SQLT_TIME_TZ=SQLT_TIME_TZ,
+ OCCI_SQLT_TIMESTAMP=SQLT_TIMESTAMP,
+ OCCI_SQLT_TIMESTAMP_TZ=SQLT_TIMESTAMP_TZ,
+ OCCI_SQLT_INTERVAL_YM=SQLT_INTERVAL_YM,
+ OCCI_SQLT_INTERVAL_DS=SQLT_INTERVAL_DS,
+ OCCI_SQLT_TIMESTAMP_LTZ=SQLT_TIMESTAMP_LTZ,
+ OCCI_SQLT_FILE=SQLT_FILE,
+ OCCI_SQLT_CFILE=SQLT_CFILE,
+ OCCI_SQLT_BFILE=SQLT_BFILE,
+
+ OCCICHAR = 32 *1024,
+ OCCIDOUBLE,
+ OCCIBOOL,
+ OCCIANYDATA ,
+ OCCINUMBER,
+ OCCIBLOB,
+ OCCIBFILE,
+ OCCIBYTES,
+ OCCICLOB ,
+ OCCIVECTOR,
+ OCCIMETADATA,
+ OCCIPOBJECT,
+ OCCIREF ,
+ OCCIREFANY,
+ OCCISTRING ,
+ OCCISTREAM ,
+ OCCIDATE ,
+ OCCIINTERVALDS ,
+ OCCIINTERVALYM ,
+ OCCITIMESTAMP,
+ OCCIROWID,
+ OCCICURSOR
+
+
+};
+
+enum LockOptions {OCCI_LOCK_NONE = OCI_LOCK_NONE,
+ OCCI_LOCK_X = OCI_LOCK_X,
+ OCCI_LOCK_X_NOWAIT = OCI_LOCK_X_NOWAIT
+ };
+
+enum {OCCI_MAX_PREFETCH_DEPTH = UB4MAXVAL};
+
+enum TypeCode
+{
+
+OCCI_TYPECODE_REF = OCI_TYPECODE_REF,
+OCCI_TYPECODE_DATE = OCI_TYPECODE_DATE,
+OCCI_TYPECODE_REAL = OCI_TYPECODE_REAL,
+OCCI_TYPECODE_DOUBLE = OCI_TYPECODE_DOUBLE,
+OCCI_TYPECODE_BDOUBLE = OCI_TYPECODE_BDOUBLE,
+OCCI_TYPECODE_FLOAT = OCI_TYPECODE_FLOAT,
+OCCI_TYPECODE_BFLOAT = OCI_TYPECODE_BFLOAT,
+OCCI_TYPECODE_NUMBER = OCI_TYPECODE_NUMBER,
+OCCI_TYPECODE_DECIMAL = OCI_TYPECODE_DECIMAL,
+OCCI_TYPECODE_OCTET = OCI_TYPECODE_OCTET,
+OCCI_TYPECODE_INTEGER = OCI_TYPECODE_INTEGER,
+OCCI_TYPECODE_SMALLINT= OCI_TYPECODE_SMALLINT,
+OCCI_TYPECODE_RAW = OCI_TYPECODE_RAW,
+OCCI_TYPECODE_VARCHAR2 = OCI_TYPECODE_VARCHAR2,
+OCCI_TYPECODE_VARCHAR = OCI_TYPECODE_VARCHAR,
+OCCI_TYPECODE_CHAR = OCI_TYPECODE_CHAR,
+OCCI_TYPECODE_VARRAY= OCI_TYPECODE_VARRAY,
+OCCI_TYPECODE_TABLE = OCI_TYPECODE_TABLE,
+OCCI_TYPECODE_CLOB = OCI_TYPECODE_CLOB,
+OCCI_TYPECODE_BLOB = OCI_TYPECODE_BLOB,
+OCCI_TYPECODE_BFILE = OCI_TYPECODE_BFILE,
+OCCI_TYPECODE_OBJECT = OCI_TYPECODE_OBJECT,
+OCCI_TYPECODE_NAMEDCOLLECTION = OCI_TYPECODE_NAMEDCOLLECTION
+};
+
+enum CharSetForm
+{
+ OCCI_SQLCS_IMPLICIT = SQLCS_IMPLICIT // use local db char set
+ ,OCCI_SQLCS_NCHAR = SQLCS_NCHAR // use local db nchar set
+ ,OCCI_SQLCS_EXPLICIT = SQLCS_EXPLICIT // char set explicitly specified
+ ,OCCI_SQLCS_FLEXIBLE = SQLCS_FLEXIBLE // pl/sql flexible parameter
+};
+
+enum LobOpenMode
+{ OCCI_LOB_READONLY = OCI_LOB_READONLY
+ ,OCCI_LOB_READWRITE = OCI_LOB_READWRITE
+ ,OCCI_LOB_WRITEONLY = OCI_LOB_WRITEONLY
+ ,OCCI_LOB_APPENDONLY = OCI_LOB_APPENDONLY
+ ,OCCI_LOB_FULLOVERWRITE = OCI_LOB_FULLOVERWRITE
+ ,OCCI_LOB_FULLREAD = OCI_LOB_FULLREAD
+};
+
+enum LobOptionType
+{
+ OCCI_LOB_OPT_NONE = 0,
+ OCCI_LOB_OPT_COMPRESS = OCI_LOB_OPT_COMPRESS,
+ OCCI_LOB_OPT_ENCRYPT = OCI_LOB_OPT_ENCRYPT,
+ OCCI_LOB_OPT_DEDUPLICATE = OCI_LOB_OPT_DEDUPLICATE,
+ OCCI_LOB_OPT_ALLOCSIZE = OCI_LOB_OPT_ALLOCSIZE,
+ OCCI_LOB_OPT_CONTENTTYPE = OCI_LOB_OPT_CONTENTTYPE,
+ OCCI_LOB_OPT_MODTIME = OCI_LOB_OPT_MODTIME
+};
+
+enum LobOptionValue
+{
+ // Compression Options
+ OCCI_LOB_COMPRESS_OFF = OCI_LOB_COMPRESS_OFF,
+ OCCI_LOB_COMPRESS_ON = OCI_LOB_COMPRESS_ON,
+ // Encryption Options
+ OCCI_LOB_ENCRYPT_OFF = OCI_LOB_ENCRYPT_OFF,
+ OCCI_LOB_ENCRYPT_ON = OCI_LOB_ENCRYPT_ON,
+ // Sharing Options
+ OCCI_LOB_DEDUPLICATE_OFF = OCI_LOB_DEDUPLICATE_OFF,
+ OCCI_LOB_DEDUPLICATE_ON = OCI_LOB_DEDUPLICATE_ON
+};
+
+class RefCounted {
+public:
+ RefCounted();
+ virtual ~RefCounted(){}
+ const RefCounted * newRef() const;
+ void deleteRef() const;
+
+private:
+
+ void onZeroReferences();
+ unsigned long references_;
+ };
+
+template <class T>
+class ConstPtr
+{
+
+public:
+
+ConstPtr( const T* ptr = 0 );
+ConstPtr( const ConstPtr<T>& mp );
+~ConstPtr();
+const T * operator->() const;
+const T* rawPtr() const;
+
+#ifdef MEMBER_TEMPLATE
+template<class OtherType> operator ConstPtr<OtherType>();
+#endif
+
+protected:
+
+void operator=( const ConstPtr<T>& mp );
+const T* rawPtr_;
+
+};
+
+template <class T>
+class Ptr : public ConstPtr<T> {
+
+public:
+
+Ptr( T* ptr = 0 );
+Ptr( const Ptr<T>& mp );
+void operator=( const Ptr<T>& mp );
+const T * operator->() const;
+T * operator->();
+T* rawPtr() ;
+const T* rawPtr() const;
+
+
+
+#ifdef MEMBER_TEMPLATE
+ template<class OtherType>
+ operator Ptr<OtherType>();
+#endif
+
+};
+
+/*---------------------------------------------------------------------------
+ EXPORT FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+ void getVector(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<OCCI_STD_NAMESPACE::string> &vect);
+ void getVector(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<UString> &vect);
+ void getVector( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<Blob> &vect) ;
+ void getVector( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<Clob> &vect) ;
+ void getVector( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<Bfile> &vect) ;
+ void getVector( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<Number> &vect) ;
+ void getVector( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<BFloat> &vect);
+ void getVector(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<BDouble> &vect);
+ void getVector( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<Bytes> &vect) ;
+ void getVector( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<Date> &vect) ;
+ void getVector( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<Timestamp> &vect) ;
+ void getVector( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<IntervalYM> &vect) ;
+ void getVector( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<IntervalDS> &vect) ;
+ template <class T>
+ void getVectorOfRefs( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector< Ref<T> > &vect) ;
+
+ #if !defined(WIN32COMMON) && !defined(__MVS__)
+ template <class T>
+ void getVector(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector< Ref<T> > &vect) ;
+ #endif
+ #if defined(WIN32COMMON) || defined(__MVS__)
+ template <class T>
+ void getVector(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<T> &vect,
+ void *(*rSQL)(void *));
+ #else
+ template <class T>
+ void getVector(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<T *> &vect,
+ void *(*rSQL)(void *));
+ #endif
+
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<OCCI_STD_NAMESPACE::string> &vect) ;
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<UString> &vect) ;
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<Blob> &vect) ;
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<Clob> &vect) ;
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<Bfile> &vect) ;
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<BFloat> &vect) ;
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<BDouble> &vect) ;
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<Number> &vect) ;
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<Bytes> &vect) ;
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<Date> &vect) ;
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<Timestamp> &vect) ;
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<IntervalYM> &vect) ;
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<IntervalDS> &vect) ;
+ template <class T>
+ void setVectorOfRefs( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector< Ref<T> > &vect) ;
+ #if !defined(WIN32COMMON) && !defined(__MVS__)
+ template <class T>
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector< Ref<T> > &vect) ;
+ #endif
+ #if defined(WIN32COMMON) || defined(__MVS__)
+ template <class T>
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector< T > &vect) ;
+ #else
+ template <class T>
+ void setVector( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector< T* > &vect) ;
+ #endif
+
+ void getVector( ResultSet *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<int> &vect) ;
+ void getVector( ResultSet *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<OCCI_STD_NAMESPACE::string> &vect) ;
+ void getVector( ResultSet *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<UString> &vect) ;//UTF16 support
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<unsigned int> &vect) ;
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<float> &vect);
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<BFloat> &vect);
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<double> &vect);
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<BDouble> &vect);
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Date> &vect) ;
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Timestamp> &vect) ;
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<RefAny> &vect) ;
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Blob> &vect) ;
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Clob> &vect) ;
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Bfile> &vect) ;
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Number> &vect) ;
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<IntervalYM> &vect) ;
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<IntervalDS> &vect) ;
+ template <class T>
+ void getVectorOfRefs(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Ref<T> > &vect) ;
+ #if !defined(WIN32COMMON) && !defined(__MVS__)
+ template <class T>
+ void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Ref<T> > &vect) ;
+ #endif
+ #if defined(WIN32COMMON) || defined(__MVS__)
+ template <class T>
+ void getVector( ResultSet *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector< T > &vect) ;
+ #else
+ template <class T>
+ void getVector( ResultSet *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector< T* > &vect) ;
+ #endif
+
+
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<RefAny> &vect) ;
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Blob> &vect) ;
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Clob> &vect) ;
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Bfile> &vect) ;
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Number> &vect) ;
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<IntervalYM> &vect) ;
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<IntervalDS> &vect) ;
+ void getVector( Statement *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<int> &vect) ;
+ void getVector( Statement *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<OCCI_STD_NAMESPACE::string> &vect) ;
+ void getVector( Statement *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<UString> &vect) ;//UTF16 support
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<unsigned int> &vect) ;
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<float> &vect) ;
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<BFloat> &vect) ;
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<double> &vect) ;
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<BDouble> &vect) ;
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Date> &vect) ;
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Timestamp> &vect) ;
+ template <class T>
+ void getVectorOfRefs(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Ref<T> > &vect) ;
+ #if !defined(WIN32COMMON) && !defined(__MVS__)
+ template <class T>
+ void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Ref<T> > &vect) ;
+ #endif
+ #if defined(WIN32COMMON) || defined(__MVS__)
+ template <class T>
+ void getVector( Statement *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector< T > &vect) ;
+ #else
+ template <class T>
+ void getVector( Statement *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector< T* > &vect) ;
+ #endif
+
+
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<int> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<unsigned int> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<double> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<BDouble> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<float> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<BFloat> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Number> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype);
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<OCCI_STD_NAMESPACE::string> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<RefAny> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Blob> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Clob> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Bfile> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Timestamp> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<IntervalDS> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<IntervalYM> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Date> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ template <class T>
+ void setVectorOfRefs(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ #if !defined(WIN32COMMON) && !defined(__MVS__)
+ template <class T>
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ #endif
+ #if defined(WIN32COMMON) || defined(__MVS__)
+ template <class T>
+ void setVector( Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector< T > &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ #else
+ template <class T>
+ void setVector( Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<T* > &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ #endif
+
+/* ------------------------------------------------------------------------
+ Statement setVector functions, schema & type separate
+ arguments - multibyte support
+ ------------------------------------------------------------------------
+*/
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<int> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<unsigned int> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<double> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<BDouble> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<float> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<BFloat> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Number> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName);
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<OCCI_STD_NAMESPACE::string> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<RefAny> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Blob> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Clob> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Bfile> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Timestamp> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<IntervalDS> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<IntervalYM> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Date> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ template <class T>
+ void setVectorOfRefs(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+
+ #if !defined(WIN32COMMON) && !defined(__MVS__)
+ template <class T>
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ #endif
+
+ #if defined(WIN32COMMON) || defined(__MVS__)
+ template <class T>
+ void setVector( Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector< T > &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ #else
+ template <class T>
+ void setVector( Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<T* > &vect, const OCCI_STD_NAMESPACE::string
+ &schemaName, const OCCI_STD_NAMESPACE::string &typeName) ;
+ #endif
+
+/*-------------------------------------------------------------------------
+ Statement setVector function - UTF16 support
+ -------------------------------------------------------------------------
+*/
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<int> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<unsigned int> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<double> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<BDouble> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<float> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<BFloat> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Number> &vect,
+ const UString &schemaName,
+ const UString &typeName);
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<UString> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<UString> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<RefAny> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Blob> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Clob> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Bfile> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Timestamp> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<IntervalDS> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<IntervalYM> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Date> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ template <class T>
+ void setVectorOfRefs(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+
+ #if !defined(WIN32COMMON) && !defined(__MVS__)
+ template <class T>
+ void setVector(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ #endif
+
+ #if defined(WIN32COMMON) || defined(__MVS__)
+ template <class T>
+ void setVector( Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector< T > &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ #else
+ template <class T>
+ void setVector( Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<T* > &vect, const UString
+ &schemaName, const UString &typeName) ;
+ #endif
+
+
+/* Global method for array pins */
+template <class T>
+void pinVectorOfRefs( const Connection *conn,
+OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+OCCI_STD_NAMESPACE::vector<T* > &vectObj,
+LockOptions lockOpt = OCCI_LOCK_NONE );
+
+template <class T>
+void pinVectorOfRefs( const Connection *conn,
+OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+LockOptions lockOpt = OCCI_LOCK_NONE );
+
+#ifdef ORAXB8_DEFINED
+ void readVectorOfBfiles(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Bfile> &vec,
+ oraub8 *byte_amts, oraub8 *offsets,
+ unsigned char *buffers[], oraub8 *buffer_lens);
+
+ void readVectorOfBlobs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Blob> &vec,
+ oraub8 *byte_amts, oraub8 *offsets,
+ unsigned char *buffers[], oraub8 *buffer_lens);
+ void writeVectorOfBlobs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Blob> &vec,
+ oraub8 *byte_amts, oraub8 *offsets,
+ unsigned char *buffers[], oraub8 *buffer_lens);
+
+ void readVectorOfClobs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Clob> &vec,
+ oraub8 *byte_amts, oraub8 *char_amts, oraub8 *offsets,
+ unsigned char *buffers[], oraub8 *buffer_lens);
+ void writeVectorOfClobs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Clob> &vec,
+ oraub8 *byte_amts, oraub8 *char_amts, oraub8 *offsets,
+ unsigned char *buffers[], oraub8 *buffer_lens);
+ void readVectorOfClobs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Clob> &vec,
+ oraub8 *byte_amts, oraub8 *char_amts, oraub8 *offsets,
+ utext *buffers[], oraub8 *buffer_lens);
+ void writeVectorOfClobs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Clob> &vec,
+ oraub8 *byte_amts, oraub8 *char_amts, oraub8 *offsets,
+ utext *buffers[], oraub8 *buffer_lens);
+#endif
+
+
+/*---------------------------------------------------------------------------
+ INTERNAL FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+} /* end of namespace occi */
+} /* end of namespace oracle */
+
+
+#endif /* _olint */
+
+#endif /* OCCICOMMON_ORACLE */
--- /dev/null
+/* Copyright Oracle Corporation 2000, 2006. All Rights Reserved. */
+
+/*
+ NAME
+ occiControl.h - header file for OCCI control classes
+
+ DESCRIPTION
+ Class definitions for MetaData,SQLException,Environment,
+ Connection,Statement, ConnectionPool, StatelessConnectionPool
+
+ RELATED DOCUMENTS
+ <note any documents related to this facility>
+
+ EXPORT FUNCTION(S)
+ <external functions declared for use outside package - one-line
+ descriptions>
+
+ INTERNAL FUNCTION(S)
+ <other external functions declared - one-line descriptions>
+
+ EXAMPLES
+
+ NOTES
+ <other useful comments, qualifications, etc.>
+
+
+*/
+
+#ifndef _olint /* disable olint check */
+
+#ifndef OCCICONTROL_ORACLE
+# define OCCICONTROL_ORACLE
+
+#ifndef OCCICOMMON_ORACLE
+#include <occiCommon.h>
+#endif
+
+#ifndef ORAEXCEPTION
+#define ORAEXCEPTION
+#include <exception>
+#endif
+
+namespace oracle {
+namespace occi {
+/*---------------------------------------------------------------------------
+ PUBLIC TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+class MetaData
+{
+ public :
+
+ enum AttrId
+ {ATTR_PTYPE = OCI_ATTR_PTYPE,
+ ATTR_TIMESTAMP = OCI_ATTR_TIMESTAMP,
+ ATTR_OBJ_ID = OCI_ATTR_OBJ_ID,
+ ATTR_OBJ_NAME = OCI_ATTR_OBJ_NAME,
+ ATTR_OBJ_SCHEMA = OCI_ATTR_OBJ_SCHEMA,
+ ATTR_OBJID = OCI_ATTR_OBJID,
+ ATTR_NUM_COLS = OCI_ATTR_NUM_COLS,
+ ATTR_LIST_COLUMNS = OCI_ATTR_LIST_COLUMNS,
+ ATTR_REF_TDO = OCI_ATTR_REF_TDO,
+ ATTR_IS_TEMPORARY = OCI_ATTR_IS_TEMPORARY,
+ ATTR_IS_TYPED = OCI_ATTR_IS_TYPED,
+ ATTR_DURATION = OCI_ATTR_DURATION,
+ ATTR_COLLECTION_ELEMENT = OCI_ATTR_COLLECTION_ELEMENT,
+ ATTR_RDBA = OCI_ATTR_RDBA,
+ ATTR_TABLESPACE = OCI_ATTR_TABLESPACE,
+ ATTR_CLUSTERED = OCI_ATTR_CLUSTERED,
+ ATTR_PARTITIONED = OCI_ATTR_PARTITIONED,
+ ATTR_INDEX_ONLY = OCI_ATTR_INDEX_ONLY,
+ ATTR_LIST_ARGUMENTS = OCI_ATTR_LIST_ARGUMENTS,
+ ATTR_IS_INVOKER_RIGHTS = OCI_ATTR_IS_INVOKER_RIGHTS,
+ ATTR_LIST_SUBPROGRAMS = OCI_ATTR_LIST_SUBPROGRAMS,
+ ATTR_NAME = OCI_ATTR_NAME,
+ ATTR_OVERLOAD_ID = OCI_ATTR_OVERLOAD_ID,
+ ATTR_TYPECODE = OCI_ATTR_TYPECODE,
+ ATTR_COLLECTION_TYPECODE = OCI_ATTR_COLLECTION_TYPECODE,
+ ATTR_VERSION = OCI_ATTR_VERSION,
+ ATTR_IS_INCOMPLETE_TYPE = OCI_ATTR_IS_INCOMPLETE_TYPE,
+ ATTR_IS_SYSTEM_TYPE = OCI_ATTR_IS_SYSTEM_TYPE,
+ ATTR_IS_PREDEFINED_TYPE = OCI_ATTR_IS_PREDEFINED_TYPE,
+ ATTR_IS_TRANSIENT_TYPE = OCI_ATTR_IS_TRANSIENT_TYPE,
+ ATTR_IS_SYSTEM_GENERATED_TYPE =
+ OCI_ATTR_IS_SYSTEM_GENERATED_TYPE,
+ ATTR_HAS_NESTED_TABLE = OCI_ATTR_HAS_NESTED_TABLE,
+ ATTR_HAS_LOB = OCI_ATTR_HAS_LOB,
+ ATTR_HAS_FILE = OCI_ATTR_HAS_FILE,
+ ATTR_NUM_TYPE_ATTRS = OCI_ATTR_NUM_TYPE_ATTRS,
+ ATTR_LIST_TYPE_ATTRS = OCI_ATTR_LIST_TYPE_ATTRS,
+ ATTR_NUM_TYPE_METHODS = OCI_ATTR_NUM_TYPE_METHODS,
+ ATTR_LIST_TYPE_METHODS = OCI_ATTR_LIST_TYPE_METHODS,
+ ATTR_MAP_METHOD = OCI_ATTR_MAP_METHOD,
+ ATTR_ORDER_METHOD = OCI_ATTR_ORDER_METHOD,
+ ATTR_DATA_SIZE = OCI_ATTR_DATA_SIZE,
+ ATTR_DATA_TYPE = OCI_ATTR_DATA_TYPE,
+ ATTR_PRECISION = OCI_ATTR_PRECISION,
+ ATTR_SCALE = OCI_ATTR_SCALE,
+ ATTR_TYPE_NAME = OCI_ATTR_TYPE_NAME,
+ ATTR_SCHEMA_NAME = OCI_ATTR_SCHEMA_NAME,
+ ATTR_CHARSET_ID = OCI_ATTR_CHARSET_ID,
+ ATTR_CHARSET_FORM = OCI_ATTR_CHARSET_FORM,
+ ATTR_ENCAPSULATION = OCI_ATTR_ENCAPSULATION,
+ ATTR_IS_CONSTRUCTOR = OCI_ATTR_IS_CONSTRUCTOR,
+ ATTR_IS_DESTRUCTOR = OCI_ATTR_IS_DESTRUCTOR,
+ ATTR_IS_OPERATOR = OCI_ATTR_IS_OPERATOR,
+ ATTR_IS_SELFISH = OCI_ATTR_IS_SELFISH,
+ ATTR_IS_MAP = OCI_ATTR_IS_MAP,
+ ATTR_IS_ORDER = OCI_ATTR_IS_ORDER,
+ ATTR_IS_RNDS = OCI_ATTR_IS_RNDS,
+ ATTR_IS_RNPS = OCI_ATTR_IS_RNPS,
+ ATTR_IS_WNDS = OCI_ATTR_IS_WNDS,
+ ATTR_IS_WNPS = OCI_ATTR_IS_WNPS,
+ ATTR_NUM_ELEMS = OCI_ATTR_NUM_ELEMS,
+ ATTR_LINK = OCI_ATTR_LINK,
+ ATTR_MIN = OCI_ATTR_MIN,
+ ATTR_MAX = OCI_ATTR_MAX,
+ ATTR_INCR = OCI_ATTR_INCR,
+ ATTR_CACHE = OCI_ATTR_CACHE,
+ ATTR_ORDER = OCI_ATTR_ORDER,
+ ATTR_HW_MARK = OCI_ATTR_HW_MARK,
+ ATTR_IS_NULL = OCI_ATTR_IS_NULL,
+ ATTR_POSITION = OCI_ATTR_POSITION,
+ ATTR_HAS_DEFAULT = OCI_ATTR_HAS_DEFAULT,
+ ATTR_LEVEL = OCI_ATTR_LEVEL,
+ ATTR_IOMODE = OCI_ATTR_IOMODE,
+ ATTR_RADIX = OCI_ATTR_RADIX,
+ ATTR_SUB_NAME = OCI_ATTR_SUB_NAME,
+ ATTR_LIST_OBJECTS = OCI_ATTR_LIST_OBJECTS,
+ ATTR_NCHARSET_ID = OCI_ATTR_NCHARSET_ID,
+ ATTR_LIST_SCHEMAS = OCI_ATTR_LIST_SCHEMAS,
+ ATTR_MAX_PROC_LEN = OCI_ATTR_MAX_PROC_LEN,
+ ATTR_MAX_COLUMN_LEN = OCI_ATTR_MAX_COLUMN_LEN,
+ ATTR_CURSOR_COMMIT_BEHAVIOR =
+ OCI_ATTR_CURSOR_COMMIT_BEHAVIOR,
+ ATTR_MAX_CATALOG_NAMELEN = OCI_ATTR_MAX_CATALOG_NAMELEN,
+ ATTR_CATALOG_LOCATION = OCI_ATTR_CATALOG_LOCATION,
+ ATTR_SAVEPOINT_SUPPORT = OCI_ATTR_SAVEPOINT_SUPPORT,
+ ATTR_NOWAIT_SUPPORT = OCI_ATTR_NOWAIT_SUPPORT,
+ ATTR_AUTOCOMMIT_DDL = OCI_ATTR_AUTOCOMMIT_DDL,
+ ATTR_LOCKING_MODE = OCI_ATTR_LOCKING_MODE,
+ ATTR_IS_FINAL_TYPE = OCI_ATTR_IS_FINAL_TYPE,
+ ATTR_IS_INSTANTIABLE_TYPE = OCI_ATTR_IS_INSTANTIABLE_TYPE,
+ ATTR_IS_SUBTYPE = OCI_ATTR_IS_SUBTYPE,
+ ATTR_SUPERTYPE_SCHEMA_NAME = OCI_ATTR_SUPERTYPE_SCHEMA_NAME,
+ ATTR_SUPERTYPE_NAME = OCI_ATTR_SUPERTYPE_NAME,
+ ATTR_FSPRECISION = OCI_ATTR_FSPRECISION,
+ ATTR_LFPRECISION = OCI_ATTR_LFPRECISION,
+ ATTR_IS_FINAL_METHOD = OCI_ATTR_IS_FINAL_METHOD,
+ ATTR_IS_INSTANTIABLE_METHOD = OCI_ATTR_IS_INSTANTIABLE_METHOD,
+ ATTR_IS_OVERRIDING_METHOD = OCI_ATTR_IS_OVERRIDING_METHOD,
+ ATTR_CHAR_USED = OCI_ATTR_CHAR_USED,
+ ATTR_CHAR_SIZE = OCI_ATTR_CHAR_SIZE,
+ ATTR_COL_ENC = OCI_ATTR_COL_ENC,
+ ATTR_COL_ENC_SALT = OCI_ATTR_COL_ENC_SALT,
+ ATTR_TABLE_ENC = OCI_ATTR_TABLE_ENC,
+ ATTR_TABLE_ENC_ALG = OCI_ATTR_TABLE_ENC_ALG,
+ ATTR_TABLE_ENC_ALG_ID = OCI_ATTR_TABLE_ENC_ALG_ID
+ };
+
+ enum ParamType
+ {
+ PTYPE_TABLE = OCI_PTYPE_TABLE
+ ,PTYPE_VIEW = OCI_PTYPE_VIEW
+ ,PTYPE_PROC = OCI_PTYPE_PROC
+ ,PTYPE_FUNC = OCI_PTYPE_FUNC
+ ,PTYPE_PKG = OCI_PTYPE_PKG
+ ,PTYPE_TYPE = OCI_PTYPE_TYPE
+ ,PTYPE_TYPE_ATTR = OCI_PTYPE_TYPE_ATTR
+ ,PTYPE_TYPE_COLL = OCI_PTYPE_TYPE_COLL
+ ,PTYPE_TYPE_METHOD = OCI_PTYPE_TYPE_METHOD
+ ,PTYPE_SYN = OCI_PTYPE_SYN
+ ,PTYPE_SEQ = OCI_PTYPE_SEQ
+ ,PTYPE_COL = OCI_PTYPE_COL
+ ,PTYPE_ARG = OCI_PTYPE_ARG
+ ,PTYPE_TYPE_ARG = OCI_PTYPE_TYPE_ARG
+ ,PTYPE_TYPE_RESULT = OCI_PTYPE_TYPE_RESULT
+ ,PTYPE_SCHEMA = OCI_PTYPE_SCHEMA
+ ,PTYPE_DATABASE = OCI_PTYPE_DATABASE
+ ,PTYPE_UNK = OCI_PTYPE_UNK
+ };
+
+
+ enum { DURATION_SESSION = OCI_DURATION_SESSION
+ ,DURATION_TRANS = OCI_DURATION_TRANS
+ ,DURATION_NULL = OCI_DURATION_NULL
+ ,TYPEENCAP_PRIVATE = OCI_TYPEENCAP_PRIVATE
+ ,TYPEENCAP_PUBLIC = OCI_TYPEENCAP_PUBLIC
+ ,TYPEPARAM_IN = OCI_TYPEPARAM_IN
+ ,TYPEPARAM_OUT = OCI_TYPEPARAM_OUT
+ ,TYPEPARAM_INOUT = OCI_TYPEPARAM_INOUT
+ ,CURSOR_OPEN = OCI_CURSOR_OPEN
+ ,CURSOR_CLOSED = OCI_CURSOR_CLOSED
+ ,CL_START = OCI_CL_START
+ ,CL_END = OCI_CL_END
+ ,SP_SUPPORTED = OCI_SP_SUPPORTED
+ ,SP_UNSUPPORTED = OCI_SP_UNSUPPORTED
+ ,NW_SUPPORTED = OCI_NW_SUPPORTED
+ ,NW_UNSUPPORTED = OCI_NW_UNSUPPORTED
+ ,AC_DDL = OCI_AC_DDL
+ ,NO_AC_DDL = OCI_NO_AC_DDL
+ ,LOCK_IMMEDIATE = OCI_LOCK_IMMEDIATE
+ ,LOCK_DELAYED = OCI_LOCK_DELAYED
+ };
+
+ MetaData(const MetaData &omd);
+ unsigned int getAttributeCount() const
+ ;
+ AttrId getAttributeId(unsigned int attributenum) const
+ ;
+ Type getAttributeType(unsigned int attributenum) const
+ ;
+ int getInt(MetaData::AttrId attrid) const
+ ;
+ bool getBoolean(MetaData::AttrId attrid) const
+ ;
+ unsigned int getUInt(MetaData::AttrId attrid) const
+ ;
+ OCCI_STD_NAMESPACE::string getString(MetaData::AttrId attrid) const
+ ;
+ UString getUString(MetaData::AttrId attrid) const
+ ;
+ Number getNumber(MetaData::AttrId attrid) const
+ ;
+ RefAny getRef(MetaData::AttrId attrid) const
+ ;
+ Timestamp getTimestamp(MetaData::AttrId attrid) const
+ ;
+ MetaData getMetaData(MetaData::AttrId attrid) const
+ ;
+ OCCI_STD_NAMESPACE::vector<MetaData> getVector(MetaData::AttrId attrid)
+ const ;
+ void operator =(const MetaData &omd);
+
+ ~MetaData();
+
+ private:
+
+ enum ociAttrType { OCI_UB1,
+ OCI_UB2,
+ OCI_UB4,
+ OCI_SB1,
+ OCI_WORD,
+ OCI_UB1_BOOL,
+ OCI_UB1PTR_TIMESTAMP,
+ OCI_UB1PTR_NUMBER,
+ OCI_TEXTPTR,
+ OCI_DVOIDPTR_PARAM,
+ OCI_DVOIDPTR_PARAMLIST,
+ OCI_OCIREFPTR,
+ OCI_OCIDURATION,
+ OCI_OCITYPECODE,
+ OCI_OCITYPEENCAP,
+ OCI_OCITYPEPARAMMODE,
+ OCI_OCIPRECISION
+ };
+
+ enum AttrCount {COMMON_ATTR_COUNT = 5,
+ TABLE_ATTR_COUNT = 15,
+ VIEW_ATTR_COUNT = 7,
+ FUNCPROC_ATTR_COUNT = 4,
+ PKG_ATTR_COUNT = 2,
+ TYP_ATTR_COUNT = 27,
+ TYPEATTR_ATTR_COUNT = 14,
+ TYPEMTHD_ATTR_COUNT = 16,
+ COLL_ATTR_COUNT = 12,
+ SYN_ATTR_COUNT = 4,
+ SEQ_ATTR_COUNT = 7,
+ COL_ATTR_COUNT = 15,
+ ARG_TYPARG_TYPRES_ATTR_COUNT = 20,
+ SCHEMA_ATTR_COUNT = 1,
+ DATABASE_ATTR_COUNT = 13,
+ UNK_ATTR_COUNT = 0
+ };
+
+ static const AttrId commonAttrId[COMMON_ATTR_COUNT];
+ static const ociAttrType commonAttrType[COMMON_ATTR_COUNT];
+ static const AttrId tableAttrId[TABLE_ATTR_COUNT];
+ static const ociAttrType tableAttrType[TABLE_ATTR_COUNT];
+ static const AttrId viewAttrId[VIEW_ATTR_COUNT];
+ static const ociAttrType viewAttrType[VIEW_ATTR_COUNT];
+ static const AttrId funcprocAttrId[FUNCPROC_ATTR_COUNT];
+ static const ociAttrType funcprocAttrType[FUNCPROC_ATTR_COUNT];
+ static const AttrId pkgAttrId[PKG_ATTR_COUNT];
+ static const ociAttrType pkgAttrType[PKG_ATTR_COUNT];
+ static const AttrId typAttrId[TYP_ATTR_COUNT];
+ static const ociAttrType typAttrType[TYP_ATTR_COUNT];
+ static const AttrId typeattrAttrId[TYPEATTR_ATTR_COUNT];
+ static const ociAttrType typeattrAttrType[TYPEATTR_ATTR_COUNT];
+ static const AttrId typmethdAttrId[TYPEMTHD_ATTR_COUNT];
+ static const ociAttrType typemthdAttrType[TYPEMTHD_ATTR_COUNT];
+ static const AttrId collAttrId[COLL_ATTR_COUNT];
+ static const ociAttrType collAttrType[COLL_ATTR_COUNT];
+ static const AttrId synAttrId[SYN_ATTR_COUNT];
+ static const ociAttrType synAttrType[SYN_ATTR_COUNT];
+ static const AttrId seqAttrId[SEQ_ATTR_COUNT];
+ static const ociAttrType seqAttrType[SEQ_ATTR_COUNT];
+ static const AttrId colAttrId[COL_ATTR_COUNT];
+ static const ociAttrType colAttrType[COL_ATTR_COUNT];
+ static const AttrId argtargtresAttrId[ARG_TYPARG_TYPRES_ATTR_COUNT];
+ static const ociAttrType argtargtresAttrType[
+ ARG_TYPARG_TYPRES_ATTR_COUNT];
+ static const AttrId schemaAttrId[SCHEMA_ATTR_COUNT];
+ static const ociAttrType schemaAttrType[SCHEMA_ATTR_COUNT];
+ static const AttrId databaseAttrId[DATABASE_ATTR_COUNT];
+ static const ociAttrType databaseAttrType[DATABASE_ATTR_COUNT];
+
+ Ptr<MetaDataImpl> metaDataImplPtr;
+ const OCIParam* paramhp;
+ const ConnectionImpl* sesn;
+ const AttrId* attrIdArray;
+ const ociAttrType* attrTypeArray;
+ AttrCount attrCount;
+
+ MetaData(const Connection *sessp, const OCCI_STD_NAMESPACE::string& objName,
+ ParamType prmtyp ) ;
+ MetaData(const Connection *sessp, const UString& objName,
+ ParamType prmtyp ) ;
+ MetaData(const Connection *sessp,
+ const RefAny& ref) ;
+ MetaData(const Connection *sessp, MetaDataImpl *implPtr,
+ OCIParam* parm) ;
+ MetaData(const Connection *sessp, MetaDataImpl *implPtr,
+ OCIParam *parm, ub1 parmTyp) ;
+ ub1 getParamType(OCIParam* prm) const ;
+ const AttrId* getAttrIdArrayAddr(ub1 prmTyp) const;
+ const ociAttrType* getAttrTypeArrayAddr(ub1 prmTyp) const;
+ AttrCount getAttrCount(ub1 prmTyp) const;
+ Type getType(ociAttrType typ) const;
+ bool isListTypeAttribute(AttrId attrid,ub1 ptyp) const;
+ boolean isInvalidAttrId(AttrId attrid,sb4* pos,
+ boolean* isTypeSpecificAttrPtr) const;
+ ociAttrType getValidAttrType(sb4 index, boolean isTypeSpecificAttr)
+ const;
+
+ int getListType (const OCIParam *plist) const;
+ unsigned int getLowerBound(int ltype) const;
+ unsigned int getUpperBound(unsigned int ltype,
+ unsigned int paramnum) const;
+ friend class ConnectionImpl;
+ friend class ResultSetImpl;
+
+};
+
+//return codes for user callbacks
+enum
+{
+ OCCI_SUCCESS = OCI_SUCCESS,
+ FO_RETRY = OCI_FO_RETRY
+};
+
+
+class Connection
+{
+ public :
+
+ // specifies the type of proxy to be created,
+ // used for future enhancements
+ enum ProxyType
+ {PROXY_DEFAULT
+ };
+
+ enum FailOverType
+ {
+ FO_NONE = OCI_FO_NONE,
+ FO_SESSION = OCI_FO_SESSION,
+ FO_SELECT = OCI_FO_SELECT
+ };
+
+ enum FailOverEventType
+ {
+ FO_BEGIN = OCI_FO_BEGIN,
+ FO_END = OCI_FO_END,
+ FO_ABORT = OCI_FO_ABORT,
+ FO_REAUTH = OCI_FO_REAUTH,
+ FO_ERROR = OCI_FO_ERROR
+ };
+
+ enum Purity
+ {
+ DEFAULT = OCI_ATTR_PURITY_DEFAULT,
+ NEW = OCI_ATTR_PURITY_NEW,
+ SELF = OCI_ATTR_PURITY_SELF
+ };
+
+ virtual ~Connection() { }
+ virtual Statement* createStatement(
+ const OCCI_STD_NAMESPACE::string &sql = "")
+ =0;
+ virtual void terminateStatement(Statement *statement) =0;
+ virtual void commit() =0;
+ virtual void rollback() =0;
+ virtual MetaData getMetaData(const OCCI_STD_NAMESPACE::string &object,
+ MetaData::ParamType prmtyp
+ = MetaData::PTYPE_UNK) const
+ =0;
+ virtual MetaData getMetaData(const RefAny &ref) const
+ =0;
+ virtual OCCI_STD_NAMESPACE::string getClientCharSet() const
+ =0;
+ virtual OCCI_STD_NAMESPACE::string getClientNCHARCharSet() const
+ =0;
+ virtual void changePassword(const OCCI_STD_NAMESPACE::string &user,
+ const OCCI_STD_NAMESPACE::string &oldPassword,
+ const OCCI_STD_NAMESPACE::string &newPassword)
+ =0;
+ virtual void flushCache() =0;
+
+ virtual OCIServer* getOCIServer() const =0;
+ virtual OCISvcCtx* getOCIServiceContext() const =0;
+ virtual OCISession* getOCISession() const =0;
+
+ //new interfaces
+
+ virtual Statement* createStatement(const UString &sql) = 0;
+ virtual MetaData getMetaData(const UString &object,
+ MetaData::ParamType prmtyp
+ = MetaData::PTYPE_UNK) const
+ =0;
+ virtual UString getClientCharSetUString() const
+ =0;
+ virtual UString getClientNCHARCharSetUString() const
+ =0;
+ virtual void changePassword(const UString &user,
+ const UString &oldPassword,
+ const UString &newPassword)
+ =0;
+ virtual OCCI_STD_NAMESPACE::string getTag() const =0;
+ virtual void setStmtCacheSize(unsigned int cacheSize) = 0;
+ virtual unsigned int getStmtCacheSize() const =0;
+ virtual Statement* createStatement(const OCCI_STD_NAMESPACE::string &sql,
+ const OCCI_STD_NAMESPACE::string &tag) = 0;
+ virtual void terminateStatement(Statement* stmt,
+ const OCCI_STD_NAMESPACE::string &tag) = 0;
+ virtual bool isCached(const OCCI_STD_NAMESPACE::string &sql,
+ const OCCI_STD_NAMESPACE::string &tag = "") = 0;
+ virtual void registerSubscriptions(
+ const OCCI_STD_NAMESPACE::vector<aq::Subscription>& sub) =0;
+ virtual void unregisterSubscription(const aq::Subscription& sub) =0;
+ virtual void postToSubscriptions(
+ const OCCI_STD_NAMESPACE::vector<aq::Subscription>& sub) =0;
+ virtual Statement* createStatement(const UString &sql,
+ const UString &tag) = 0;
+ virtual void terminateStatement(Statement* stmt,
+ const UString &tag) = 0;
+ virtual bool isCached(const UString &sql,
+ const UString &tag) = 0;
+ virtual void setTAFNotify(
+ int (*notifyFn)(Environment *env, Connection *conn, void *ctx,
+ FailOverType foType, FailOverEventType foEvent),
+ void *ctx) = 0;
+ virtual OCCI_STD_NAMESPACE::string getServerVersion() const =0;
+ virtual UString getServerVersionUString() const =0;
+ virtual void cancel() =0;
+};
+
+class StatelessConnectionPool
+{
+ public :
+
+ enum PoolType
+ {
+ HETEROGENEOUS = OCI_DEFAULT,
+ HOMOGENEOUS = OCI_SPC_HOMOGENEOUS,
+ NO_RLB = OCI_SPC_NO_RLB,
+ USES_EXT_AUTH = 16
+ };
+
+ enum BusyOption
+ {
+ WAIT = OCI_SPOOL_ATTRVAL_WAIT,
+ NOWAIT = OCI_SPOOL_ATTRVAL_NOWAIT,
+ FORCEGET = OCI_SPOOL_ATTRVAL_FORCEGET
+ };
+
+ enum DestroyMode
+ {
+ DEFAULT = OCI_DEFAULT,
+ SPD_FORCE = OCI_SPD_FORCE
+ };
+
+ virtual ~StatelessConnectionPool() {}
+ virtual unsigned int getBusyConnections() const =0;
+ virtual unsigned int getOpenConnections() const =0;
+ virtual unsigned int getMinConnections() const =0;
+ virtual unsigned int getMaxConnections() const =0;
+ virtual unsigned int getIncrConnections() const =0;
+ virtual OCCI_STD_NAMESPACE::string getPoolName() const =0;
+ virtual unsigned int getTimeOut() const =0;
+ virtual void setBusyOption(BusyOption busyOption) =0;
+ virtual BusyOption getBusyOption() const =0;
+ virtual void setTimeOut(unsigned int connTimeOut =0) =0;
+ virtual void setPoolSize(unsigned int maxConn =1,
+ unsigned int minConn =0, unsigned int incrConn =1) =0;
+ virtual Connection* getConnection(
+ const OCCI_STD_NAMESPACE::string &tag ="") =0;
+ virtual Connection* getConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &password,
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+ virtual Connection* getAnyTaggedConnection(
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+ virtual Connection* getAnyTaggedConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &Password,
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+ virtual Connection* getProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const OCCI_STD_NAMESPACE::string &tag = "",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) =0;
+ virtual Connection* getProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ const OCCI_STD_NAMESPACE::string &tag = "" ,
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) =0;
+ virtual Connection* getAnyTaggedProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const OCCI_STD_NAMESPACE::string &tag = "",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) =0;
+ virtual Connection* getAnyTaggedProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ const OCCI_STD_NAMESPACE::string &tag="",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT ) =0;
+ virtual void releaseConnection (Connection *connection,
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+ virtual void terminateConnection (Connection *connection) =0;
+ virtual void setStmtCacheSize(unsigned int cacheSize) =0;
+ virtual unsigned int getStmtCacheSize() const =0;
+
+ virtual Connection* getConnection(const UString &tag)=0;
+ virtual Connection* getConnection(const UString &userName,
+ const UString &password,
+ const UString &tag)=0;
+ virtual Connection* getAnyTaggedConnection(const UString &tag)=0;
+ virtual Connection* getAnyTaggedConnection( const UString &userName,
+ const UString &Password, const UString &tag)=0 ;
+ virtual Connection* getProxyConnection(const UString &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const UString &tag,
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT)=0;
+ virtual Connection* getProxyConnection(const UString &name,
+ const UString &tag, Connection::ProxyType
+ proxyType = Connection::PROXY_DEFAULT)=0;
+ virtual Connection* getAnyTaggedProxyConnection(const UString &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const UString &tag,
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT)=0;
+ virtual Connection* getAnyTaggedProxyConnection(const UString &name,
+ const UString &tag,
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT )=0;
+ virtual void releaseConnection(Connection *connection,
+ const UString &tag)=0;
+
+
+ virtual Connection* getConnection(
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+
+ virtual Connection* getConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &password,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+
+ virtual Connection* getAnyTaggedConnection(
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+
+ virtual Connection* getAnyTaggedConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &Password,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "")= 0;
+
+ virtual Connection* getProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) = 0;
+
+ virtual Connection* getProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) = 0;
+
+ virtual Connection* getAnyTaggedProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) = 0;
+
+
+ virtual Connection* getAnyTaggedProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) = 0;
+
+
+ virtual Connection* getConnection(
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag) = 0;
+
+
+
+ virtual Connection* getConnection(const UString &userName,
+ const UString &password,
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag) = 0;
+
+ virtual Connection* getAnyTaggedConnection(
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag) =0;
+
+
+
+ virtual Connection* getAnyTaggedConnection( const UString &userName,
+ const UString &Password,
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag) =0;
+
+ virtual Connection* getProxyConnection(const UString &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag, Connection::ProxyType proxyType) =0;
+
+ virtual Connection* getProxyConnection(const UString &name,
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag, Connection::ProxyType proxyType) = 0;
+
+
+ virtual Connection* getAnyTaggedProxyConnection(const UString &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag,
+ Connection::ProxyType proxyType) = 0;
+
+ virtual Connection* getAnyTaggedProxyConnection(const UString &name,
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag,
+ Connection::ProxyType proxyType ) =0;
+
+};
+
+
+class ConnectionPool
+{
+ public :
+
+ virtual ~ConnectionPool() {}
+ virtual unsigned int getBusyConnections() const
+ =0;
+ virtual unsigned int getOpenConnections() const
+ =0;
+ virtual unsigned int getMinConnections() const
+ =0;
+ virtual unsigned int getMaxConnections() const
+ =0;
+ virtual unsigned int getIncrConnections() const
+ =0;
+ virtual OCCI_STD_NAMESPACE::string getPoolName() const
+ =0;
+ virtual unsigned int getTimeOut() const
+ =0;
+ virtual void setErrorOnBusy()
+ =0;
+ virtual void setTimeOut(unsigned int connTimeOut =0)
+ =0;
+ virtual void setPoolSize(unsigned int minConn =0,
+ unsigned int maxConn =1, unsigned int incrConn =1)
+ =0;
+ virtual Connection* createConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &password) =0;
+
+ virtual Connection* createProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ Connection::ProxyType proxyType =
+ Connection::PROXY_DEFAULT) =0;
+
+ virtual Connection* createProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ Connection::ProxyType proxyType =
+ Connection::PROXY_DEFAULT) =0;
+
+ virtual void terminateConnection
+ (Connection *connection) =0;
+
+ //new interfaces
+
+ virtual Connection* createConnection(
+ const UString &userName,
+ const UString &password) =0;
+
+ virtual Connection* createProxyConnection(const UString &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ Connection::ProxyType proxyType =
+ Connection::PROXY_DEFAULT) =0;
+
+ virtual Connection* createProxyConnection(const UString &name,
+ Connection::ProxyType proxyType =
+ Connection::PROXY_DEFAULT) =0;
+
+ virtual void setStmtCacheSize(unsigned int cacheSize) =0;
+ virtual unsigned int getStmtCacheSize() const =0;
+
+ virtual UString getPoolNameUString() const
+ =0;
+};
+
+class Environment
+{
+ public:
+ // class constants
+
+ enum Mode
+ {
+ DEFAULT = OCI_DEFAULT,
+ OBJECT = OCI_OBJECT,
+ SHARED = OCI_SHARED,
+ NO_USERCALLBACKS = OCI_NO_UCB,
+ THREADED_MUTEXED = OCI_THREADED,
+ THREADED_UNMUTEXED = OCI_THREADED | OCI_NO_MUTEX,
+ EVENTS = OCI_EVENTS,
+ USE_LDAP = OCI_USE_LDAP
+ };
+
+ virtual ~Environment(){}
+
+ // public methods
+
+ static Environment * createEnvironment(
+ Mode mode = DEFAULT,
+ void *ctxp = 0,
+ void *(*malocfp)(void *ctxp, size_t size) = 0,
+ void *(*ralocfp)(void *ctxp, void *memptr,
+ size_t newsize) = 0,
+ void (*mfreefp)(void *ctxp, void *memptr) = 0);
+
+ static Environment * createEnvironment(
+ const OCCI_STD_NAMESPACE::string &charset,
+ const OCCI_STD_NAMESPACE::string &ncharset,
+ Mode mode = DEFAULT,
+ void *ctxp = 0,
+ void *(*malocfp)(void *ctxp, size_t size) = 0,
+ void *(*ralocfp)(void *ctxp, void *memptr,
+ size_t newsize) = 0,
+ void (*mfreefp)(void *ctxp, void *memptr) = 0);
+
+ static void terminateEnvironment(Environment *env);
+
+ static Environment* getXAEnvironment(const
+ OCCI_STD_NAMESPACE::string& dbname);
+
+ static void releaseXAEnvironment(Environment *env);
+
+ static void getClientVersion( int &majorVersion, int &minorVersion,
+ int &updateNum, int &patchNum,
+ int &portUpdateNum );
+
+
+ virtual Connection * createConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &password,
+ const OCCI_STD_NAMESPACE::string &connectString = "") = 0;
+
+ virtual void terminateConnection(Connection *connection) = 0;
+
+ virtual ConnectionPool* createConnectionPool(
+ const OCCI_STD_NAMESPACE::string &poolUserName,
+ const OCCI_STD_NAMESPACE::string &poolPassword,
+ const OCCI_STD_NAMESPACE::string &connectString ="",
+ unsigned int minConn =0,
+ unsigned int maxConn =1, unsigned int incrConn =1) = 0;
+
+ virtual void terminateConnectionPool(ConnectionPool *poolp) = 0;
+
+ virtual unsigned int getCurrentHeapSize() const = 0;
+
+ virtual OCIEnv * getOCIEnvironment() const = 0;
+
+ virtual Map *getMap() const = 0;
+
+ virtual void setCacheMaxSize(unsigned int maxSize) = 0;
+
+ virtual unsigned int getCacheMaxSize() const = 0;
+
+ virtual void setCacheOptSize(unsigned int OptSize) = 0;
+
+ virtual unsigned int getCacheOptSize() const = 0;
+
+
+ //new interfaces
+
+ virtual Connection * createConnection(const UString &userName,
+ const UString &password, const UString &connectString) = 0;
+
+ virtual ConnectionPool* createConnectionPool(
+ const UString &poolUserName,
+ const UString &poolPassword, const UString &connectString,
+ unsigned int minConn =0,
+ unsigned int maxConn =1, unsigned int incrConn =1) = 0;
+
+ virtual Connection* getXAConnection(const
+ OCCI_STD_NAMESPACE::string& dbname) = 0;
+
+ virtual void releaseXAConnection(Connection* conn) =0;
+
+ virtual StatelessConnectionPool* createStatelessConnectionPool(
+ const OCCI_STD_NAMESPACE::string &poolUserName,
+ const OCCI_STD_NAMESPACE::string &poolPassword,
+ const OCCI_STD_NAMESPACE::string &connectString = "",
+ unsigned int maxConn = 1, unsigned int minConn = 0,
+ unsigned int incrConn = 1,
+ StatelessConnectionPool::PoolType pType
+ = StatelessConnectionPool::HETEROGENEOUS) = 0;
+
+ virtual StatelessConnectionPool* createStatelessConnectionPool(
+ const UString &poolUserName,
+ const UString &poolPassword,
+ const UString &connectString,
+ unsigned int maxConn = 1, unsigned int minConn = 0,
+ unsigned int incrConn = 1,
+ StatelessConnectionPool::PoolType pType
+ = StatelessConnectionPool::HETEROGENEOUS) = 0;
+
+ virtual void terminateStatelessConnectionPool(StatelessConnectionPool *poolp,
+ StatelessConnectionPool::DestroyMode mode = StatelessConnectionPool::DEFAULT)
+ = 0;
+ virtual void setLDAPAuthentication(unsigned int mode) =0;
+
+ virtual unsigned int getLDAPAuthentication() const =0;
+
+ virtual void setLDAPLoginNameAndPassword(
+ const OCCI_STD_NAMESPACE::string &login,
+ const OCCI_STD_NAMESPACE::string &passwd) =0;
+
+ virtual void setLDAPAdminContext(const OCCI_STD_NAMESPACE::string &ctx)=0;
+
+ virtual OCCI_STD_NAMESPACE::string getLDAPAdminContext() const =0;
+
+ virtual void setLDAPHostAndPort(const OCCI_STD_NAMESPACE::string &host,
+ unsigned int port) =0;
+
+ virtual OCCI_STD_NAMESPACE::string getLDAPHost() const =0;
+
+ virtual unsigned int getLDAPPort() const =0;
+
+ virtual void registerSubscriptions(
+ const OCCI_STD_NAMESPACE::vector<aq::Subscription>& sub) =0;
+
+ virtual void unregisterSubscription(const aq::Subscription& sub) =0;
+
+ virtual void enableSubscription(const aq::Subscription& sub) =0;
+
+ virtual void disableSubscription(const aq::Subscription& sub) =0;
+
+ virtual bool getCacheSortedFlush() const = 0;
+
+ virtual void setCacheSortedFlush(bool flag) = 0;
+
+ virtual Connection * createConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &password,
+ const OCCI_STD_NAMESPACE::string &connectString,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity) = 0;
+
+ virtual Connection * createConnection(const UString &userName,
+ const UString &password, const UString &connectString,
+ const UString &connectionclass,
+ const Connection::Purity purity) =0;
+
+ private:
+
+};
+
+
+
+class Map
+{
+ public:
+
+ virtual ~Map(){}
+ virtual void put(const OCCI_STD_NAMESPACE::string&, void *(*)(void *),
+ void (*)(void *, void *)) = 0;
+ virtual void getReadSQL(
+ void *, unsigned int, void *, unsigned int, void **) const = 0;
+ virtual void getWriteSQL(
+ void *, unsigned int, void *, unsigned int, void **) const = 0;
+ virtual void put(const OCCI_STD_NAMESPACE::string&,
+ const OCCI_STD_NAMESPACE::string&, void *(*)(void *),
+ void (*)(void *, void *)) = 0;
+ virtual void putUTF16(const OCCI_STD_NAMESPACE::string&,
+ const OCCI_STD_NAMESPACE::string&, void *(*)(void *),
+ void (*)(void *, void *)) = 0;
+
+ private:
+};
+
+
+
+class SQLException : public OCCI_STD_NAMESPACE::exception
+{
+ public:
+
+ virtual int getErrorCode() const;
+
+ virtual OCCI_STD_NAMESPACE::string getMessage() const;
+
+ const char *what() const throw();
+
+ virtual void setErrorCtx(void *ctx);
+
+ SQLException();
+
+ SQLException(const SQLException &e);
+
+ void operator=(const SQLException &other);
+
+ virtual ~SQLException() throw();
+
+ virtual int getXAErrorCode(const OCCI_STD_NAMESPACE::string& dbname) const;
+
+ virtual UString getUStringMessage() const;
+
+ virtual OCCI_STD_NAMESPACE::string getNLSMessage(Environment *env) const;
+
+ virtual UString getNLSUStringMessage(Environment *env) const;
+
+ protected:
+
+ Ptr<SQLExceptionImpl> ptr_;
+ SQLException(SQLExceptionImpl *ptr);
+
+ friend SQLException SQLExceptionCreate(int errorCode);
+ friend SQLException SQLExceptionCreate(void *handle,
+ int handleType);
+ friend class BatchSQLException;
+};
+
+class BatchSQLException : public SQLException
+{
+ public:
+ virtual ~BatchSQLException() throw();
+
+ unsigned int getFailedRowCount() const;
+ unsigned int getRowNum( unsigned int index ) const;
+ SQLException getException ( unsigned int index ) const;
+
+ private:
+ BatchSQLException();
+
+ BatchSQLException(SQLExceptionImpl *ptr);
+ friend BatchSQLException BatchSQLExceptionCreate(void *handle);
+};
+
+class Statement
+{
+ public:
+ // class constants
+
+ virtual ~Statement() {}
+
+ enum Status
+ {
+ UNPREPARED,
+ PREPARED,
+ RESULT_SET_AVAILABLE,
+ UPDATE_COUNT_AVAILABLE,
+ NEEDS_STREAM_DATA,
+ STREAM_DATA_AVAILABLE
+ };
+
+ // common methods
+
+ virtual void setSQL(const OCCI_STD_NAMESPACE::string &sql) = 0;
+
+ virtual OCCI_STD_NAMESPACE::string getSQL() const = 0;
+
+ virtual Status execute(const OCCI_STD_NAMESPACE::string &sql = "") = 0;
+
+ virtual ResultSet * getResultSet() = 0;
+
+ virtual unsigned int getUpdateCount() const = 0;
+
+ virtual ResultSet * executeQuery(
+ const OCCI_STD_NAMESPACE::string &sql = "") = 0;
+
+ virtual unsigned int executeUpdate(
+ const OCCI_STD_NAMESPACE::string &sql = "") = 0;
+
+ virtual Status status() const = 0;
+
+ virtual void closeResultSet(ResultSet *resultSet) = 0;
+
+ virtual void setPrefetchRowCount(unsigned int rowCount) = 0;
+
+ virtual void setPrefetchMemorySize(unsigned int bytes) = 0;
+
+ virtual void setAutoCommit(bool autoCommit) = 0;
+
+ virtual bool getAutoCommit() const = 0;
+
+ virtual OCIStmt * getOCIStatement() const = 0;
+
+
+ // methods for prepared statements with IN
+ // parameters
+
+ virtual void setMaxParamSize(unsigned int paramIndex,unsigned int maxSize)=0;
+
+ virtual unsigned int getMaxParamSize(unsigned int paramIndex) const = 0;
+
+ virtual void setNull(unsigned int paramIndex, Type type) = 0;
+
+ virtual void setInt(unsigned int paramIndex, int x) = 0;
+
+ virtual void setUInt(unsigned int paramIndex, unsigned int x) = 0;
+
+ virtual void setFloat(unsigned int paramIndex, float x) = 0;
+
+ virtual void setDouble(unsigned int paramIndex, double x) = 0;
+
+ virtual void setNumber(unsigned int paramIndex, const Number &x) = 0;
+
+ virtual void setString(unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::string &x) = 0;
+
+ virtual void setBytes(unsigned int paramIndex, const Bytes &x) = 0;
+
+ virtual void setDate(unsigned int paramIndex, const Date &x) = 0;
+
+ virtual void setTimestamp(unsigned int paramIndex, const Timestamp &x) = 0;
+
+ virtual void setBlob(unsigned int paramIndex, const Blob &x) = 0;
+
+ virtual void setClob(unsigned int paramIndex, const Clob &x) = 0;
+
+ virtual void setBfile(unsigned int paramIndex, const Bfile &x) = 0;
+
+ virtual void setIntervalYM(unsigned int paramIndex, const IntervalYM &x) = 0;
+
+ virtual void setIntervalDS(unsigned int paramIndex, const IntervalDS &x) = 0;
+
+ virtual void setRowid(unsigned int paramIndex, const Bytes &x) = 0;
+
+ virtual void setRef(unsigned int paramIndex, const RefAny &x) = 0;
+
+ virtual void setObject(unsigned int paramIndex, PObject * x) = 0;
+
+ virtual void setDataBuffer(unsigned int paramIndex, void *buffer,
+ Type type,
+ sb4 size, ub2 *length, sb2 *ind = NULL,
+ ub2 *rc = NULL) = 0;
+
+ virtual void setDataBufferArray(unsigned int paramIndex, void *buffer,
+ Type type,
+ ub4 arraySize, ub4 *arrayLength,
+ sb4 elementSize,
+ ub2 *elementLength, sb2 *ind = NULL,
+ ub2 *rc = NULL) = 0;
+
+ virtual void setCharSet(unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::string & charSet) = 0;
+
+ virtual OCCI_STD_NAMESPACE::string getCharSet(unsigned int paramIndex)
+ const = 0;
+
+ virtual void setDatabaseNCHARParam(
+ unsigned int paramIndex, bool isNCHAR) = 0;
+
+ virtual bool getDatabaseNCHARParam(unsigned int paramIndex) const = 0;
+
+ virtual void closeStream(Stream *stream) =0;
+
+ virtual Stream * getStream(unsigned int paramIndex) = 0;
+
+ virtual unsigned int getCurrentStreamParam() const = 0;
+
+ virtual unsigned int getCurrentStreamIteration() const = 0;
+
+ virtual void setBinaryStreamMode(unsigned int colIndex,
+ unsigned int size) =0;
+
+ virtual void setCharacterStreamMode(unsigned int colIndex,
+ unsigned int size) =0;
+
+ virtual void setMaxIterations(unsigned int maxIterations) = 0;
+
+ virtual unsigned int getMaxIterations() const = 0;
+
+ virtual void addIteration() = 0;
+
+ virtual unsigned int getCurrentIteration() const = 0;
+
+ virtual Status executeArrayUpdate(unsigned int arrayLength) = 0;
+
+
+ // methods for Callable Statements
+
+ virtual void registerOutParam(unsigned int paramIndex, Type type,
+ unsigned int maxSize=0, const OCCI_STD_NAMESPACE::string &sqltype="") = 0;
+
+ virtual bool isNull(unsigned int paramIndex) const = 0;
+
+ virtual bool isTruncated(unsigned int paramIndex) const
+ =0;
+
+
+ virtual void setErrorOnNull(unsigned int paramIndex,
+ bool causeException) = 0;
+
+ virtual void setErrorOnTruncate(unsigned int paramIndex,
+ bool causeException) = 0;
+
+ virtual int preTruncationLength(unsigned int paramIndex) const
+ =0;
+
+
+ virtual int getInt(unsigned int paramIndex) = 0;
+
+ virtual unsigned int getUInt(unsigned int paramIndex) = 0;
+
+ virtual float getFloat(unsigned int paramIndex) = 0;
+
+ virtual double getDouble(unsigned int paramIndex) = 0;
+
+ virtual Number getNumber(unsigned int paramIndex) = 0;
+
+ virtual OCCI_STD_NAMESPACE::string getString(unsigned int paramIndex) = 0;
+
+ virtual Bytes getBytes(unsigned int paramIndex) = 0;
+
+ virtual Date getDate(unsigned int paramIndex) = 0;
+
+ virtual Timestamp getTimestamp(unsigned int paramIndex) = 0;
+
+ virtual Bytes getRowid(unsigned int paramIndex) = 0;
+
+ virtual PObject * getObject(unsigned int paramIndex) = 0;
+
+ virtual Blob getBlob(unsigned int paramIndex) = 0;
+
+ virtual Clob getClob(unsigned int paramIndex) = 0;
+
+ virtual Bfile getBfile(unsigned int paramIndex) = 0;
+
+ virtual IntervalYM getIntervalYM(unsigned int paramIndex) = 0;
+
+ virtual IntervalDS getIntervalDS(unsigned int paramIndex) = 0;
+
+ virtual RefAny getRef(unsigned int paramIndex) = 0;
+
+ virtual ResultSet * getCursor(unsigned int paramIndex) = 0;
+
+ virtual Connection* getConnection() const =0;
+
+ //new interfaces
+
+ virtual void setRef(unsigned int paramIndex, const RefAny &x,
+ const OCCI_STD_NAMESPACE::string &typName,
+ const OCCI_STD_NAMESPACE::string &schName = "") = 0;
+
+ virtual void setSQLUString(const UString &sql) = 0;
+
+ virtual UString getSQLUString() const = 0;
+
+ virtual Status execute(const UString &sql) = 0;
+
+ virtual ResultSet * executeQuery(
+ const UString &sql) = 0;
+
+ virtual unsigned int executeUpdate(
+ const UString &sql) = 0;
+
+ virtual void setBFloat(unsigned int paramIndex, const BFloat &fval) = 0;
+
+ virtual void setBDouble(unsigned int paramIndex, const BDouble &dval) = 0;
+
+ virtual void setUString(unsigned int paramIndex,
+ const UString &x) = 0;
+
+ virtual void setCharSetUString(unsigned int paramIndex,
+ const UString & charSet) = 0;
+
+ virtual UString getCharSetUString(unsigned int paramIndex)
+ const = 0;
+
+ virtual void registerOutParam(unsigned int paramIndex, Type type,
+ unsigned int maxSize, const OCCI_STD_NAMESPACE::string &typName,
+ const OCCI_STD_NAMESPACE::string &schName) = 0;
+
+ virtual void registerOutParam(unsigned int paramIndex, Type type,
+ unsigned int maxSize, const UString &typName,
+ const UString &schName) = 0;
+
+ virtual BFloat getBFloat(unsigned int paramIndex) = 0;
+
+ virtual BDouble getBDouble(unsigned int paramIndex) = 0;
+
+ virtual UString getUString(unsigned int paramIndex) = 0;
+
+ virtual void disableCaching() =0;
+
+ virtual void setRef(unsigned int paramIndex, const RefAny &x,
+ const UString &typName,
+ const UString &schName) = 0;
+
+ virtual void setBinaryStreamMode(unsigned int colIndex,
+ unsigned int size, bool INArg) =0;
+
+ virtual void setCharacterStreamMode(unsigned int colIndex,
+ unsigned int size, bool INArg) =0;
+
+ virtual void setNull(unsigned int paramIndex, Type type,
+ const OCCI_STD_NAMESPACE::string &typeName,
+ const OCCI_STD_NAMESPACE::string &schemaName = "") = 0;
+
+ virtual void setNull(unsigned int paramIndex, Type type,
+ UString &typeName, UString &schemaName) = 0;
+
+ virtual void setBatchErrorMode( bool batchErrorMode ) =0;
+
+ virtual bool getBatchErrorMode( ) const =0;
+
+};
+
+
+
+class ResultSet
+{
+ public:
+ // class constants
+
+ enum Status
+ {
+ END_OF_FETCH = 0,
+ DATA_AVAILABLE,
+ STREAM_DATA_AVAILABLE
+ };
+ virtual ~ResultSet(){}
+
+ // public methods
+
+ virtual Status next(unsigned int numRows = 1) = 0;
+
+ virtual Status status() const = 0;
+
+ virtual unsigned int getNumArrayRows() const = 0;
+
+ virtual void cancel() = 0;
+
+ virtual void setMaxColumnSize(unsigned int colIndex, unsigned int max) = 0;
+
+ virtual unsigned int getMaxColumnSize(unsigned int colIndex) const = 0;
+
+ virtual bool isNull(unsigned int colIndex) const = 0;
+
+ virtual bool isTruncated(unsigned int paramIndex) const
+ =0;
+
+ virtual void setErrorOnNull(unsigned int colIndex, bool causeException) = 0;
+ virtual void setErrorOnTruncate(unsigned int paramIndex,
+ bool causeException) =0;
+
+ virtual int preTruncationLength(unsigned int paramIndex) const
+ =0;
+
+ virtual int getInt(unsigned int colIndex) = 0;
+
+ virtual unsigned int getUInt(unsigned int colIndex) = 0;
+
+ virtual float getFloat(unsigned int colIndex) = 0;
+
+ virtual double getDouble(unsigned int colIndex) = 0;
+
+ virtual Number getNumber(unsigned int colIndex) = 0;
+
+ virtual OCCI_STD_NAMESPACE::string getString(unsigned int colIndex) = 0;
+
+ virtual Bytes getBytes(unsigned int colIndex) = 0;
+
+ virtual Date getDate(unsigned int colIndex) = 0;
+
+ virtual Timestamp getTimestamp(unsigned int colIndex) = 0;
+
+ virtual Bytes getRowid(unsigned int colIndex) = 0;
+
+ virtual PObject * getObject(unsigned int colIndex) = 0;
+
+ virtual Blob getBlob(unsigned int colIndex) = 0;
+
+ virtual Clob getClob(unsigned int colIndex) =0;
+
+ virtual Bfile getBfile(unsigned int colIndex) = 0;
+
+ virtual IntervalYM getIntervalYM(unsigned int colIndex) =0;
+
+ virtual IntervalDS getIntervalDS(unsigned int colIndex) =0;
+
+ virtual RefAny getRef(unsigned int colIndex) = 0;
+
+ virtual Bytes getRowPosition() const = 0;
+
+ virtual ResultSet * getCursor(unsigned int colIndex) = 0;
+
+ virtual void setDataBuffer(unsigned int colIndex, void *buffer, Type type,
+ sb4 size = 0, ub2 *length = NULL,
+ sb2 *ind = NULL, ub2 *rc = NULL) = 0;
+
+ virtual void setCharSet(unsigned int colIndex,
+ const OCCI_STD_NAMESPACE::string & charSet) = 0;
+
+ virtual OCCI_STD_NAMESPACE::string getCharSet(unsigned int colIndex)
+ const = 0;
+
+ virtual void setBinaryStreamMode(unsigned int colIndex, unsigned int size)
+ = 0;
+
+ virtual void setCharacterStreamMode(unsigned int colIndex, unsigned int size)
+ = 0;
+
+ virtual void setDatabaseNCHARParam(unsigned int paramIndex,
+ bool isNCHAR) = 0;
+
+ virtual bool getDatabaseNCHARParam(unsigned int paramIndex) const = 0;
+
+ virtual Stream * getStream(unsigned int colIndex) = 0;
+
+ virtual void closeStream(Stream *stream) =0;
+
+ virtual unsigned int getCurrentStreamColumn() const= 0;
+
+ virtual unsigned int getCurrentStreamRow() const= 0;
+
+ virtual OCCI_STD_NAMESPACE::vector<MetaData> getColumnListMetaData() const
+ = 0;
+
+ virtual Statement* getStatement() const=0;
+
+ //new interfaces
+
+ virtual BFloat getBFloat(unsigned int colIndex) = 0;
+
+ virtual BDouble getBDouble(unsigned int colIndex) = 0;
+
+ virtual UString getUString(unsigned int colIndex) = 0;
+
+ virtual void setCharSetUString(unsigned int colIndex,
+ const UString & charSet) = 0;
+
+ virtual UString getCharSetUString(unsigned int colIndex)
+ const = 0;
+
+ virtual void setPrefetchRowCount(unsigned int rowCount) = 0;
+
+ virtual void setPrefetchMemorySize(unsigned int bytes) = 0;
+};
+
+
+class Stream
+{
+ public :
+
+ enum Status {READY_FOR_READ, READY_FOR_WRITE, INACTIVE};
+
+ virtual ~Stream(){}
+ virtual int readBuffer(char *buffer, unsigned int size)
+ =0;
+ virtual int readLastBuffer(char *buffer, unsigned int size)
+ =0;
+ virtual void writeBuffer(char *buffer, unsigned int size)
+ =0;
+ virtual void writeLastBuffer(char *buffer, unsigned int size)
+ =0;
+ virtual Status status() const =0;
+
+};
+
+/*---------------------------------------------------------------------------
+ PROTOTYPES USED BY FUNCTION TEMPLATES
+ -------------------------------------------------------------------------*/
+ void getVectorOfPObjects( ResultSet *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<PObject *> &vect) ;
+ void getVectorOfOCIRefs(ResultSet *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<void *> &vect) ;
+ void getVectorOfPObjects( Statement *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<PObject *> &vect) ;
+ void getVectorOfOCIRefs(Statement *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<void *> &vect) ;
+ void setVectorOfPObjects( Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<PObject *> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVectorOfPObjects( Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<PObject *> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVectorOfPObjects( Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<PObject *> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVectorOfOCIRefs(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<void *> &vect,
+ const OCCI_STD_NAMESPACE::vector<OCIInd> &vecind,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVectorOfOCIRefs(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<void *> &vect,
+ const OCCI_STD_NAMESPACE::vector<OCIInd> &vecind,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVectorOfOCIRefs(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<void *> &vect,
+ const OCCI_STD_NAMESPACE::vector<OCIInd> &vecind,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void pinVectorOfOCIRefs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<void *> & vecRef,
+ OCCI_STD_NAMESPACE::vector<void *> & vecCor,
+ OCCI_STD_NAMESPACE::vector<PObject *> &vecPObj,LockOptions &lockOpt );
+
+
+/*---------------------------------------------------------------------------
+ EXPORT FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+/*------------------------ getVector for objects ---------------------------*/
+/*
+ NAME
+ getVector - overloaded function. Retrieves the attribute in the current
+position as a vector of objects
+
+ PARAMETERS
+ rs - ResultSet
+ vect- reference to vector of objects(OUT parameter).
+
+ DESCRIPTION
+ Retrieves the column in the specified position as a vector of RefAny.
+ The attribute at the current position should be a collection type (varray or
+ nested table). The SQL type of the elements in the collection should be
+ compatible with objects.
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : NTY
+
+ will call getVector(..., vector<PObject*>)
+*/
+#if defined(WIN32COMMON) || defined(__MVS__)
+// and other platforms that do not support
+// partial function template specialization
+
+template <class T>
+void getVector( ResultSet *rs, unsigned int index,OCCI_STD_NAMESPACE::vector<T>
+& vect)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ getVectorOfPObjects(rs, index, vec_pobj);
+
+ vect.clear();
+ unsigned int size = vec_pobj.size();
+ vect.reserve( size );
+ for ( unsigned int i=0; i< size; i++)
+ vect.push_back((T)vec_pobj[i]);
+}
+
+#else
+template <class T>
+void getVector( ResultSet *rs, unsigned int index, OCCI_STD_NAMESPACE::vector<T
+ *> &vect)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ getVectorOfPObjects(rs, index, vec_pobj);
+
+ vect.clear();
+ unsigned int size = vec_pobj.size();
+ vect.reserve( size );
+ for (unsigned int i=0; i< size; i++)
+ vect.push_back((T *)vec_pobj[i]);
+}
+#endif
+
+/*------------------------ getVector for objects ---------------------------*/
+/*
+ NAME
+ getVector - overloaded function. Retrieves the attribute in the current
+position as a vector of objects
+
+ PARAMETERS
+ stmt - Statement
+ vect- reference to vector of objects(OUT parameter).
+
+ DESCRIPTION
+ Retrieves the column in the specified position as a vector of RefAny.
+ The attribute at the current position should be a collection type (varray or
+ nested table). The SQL type of the elements in the collection should be
+ compatible with objects.
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : NTY
+
+ will call getVector(..., vector<PObject*>)
+*/
+#if defined(WIN32COMMON) || defined(__MVS__)
+// and other platforms that do not support
+// partial function template specialization
+
+template <class T>
+void getVector( Statement *stmt, unsigned int index,
+OCCI_STD_NAMESPACE::vector<T> &vect)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ getVectorOfPObjects(stmt, index, vec_pobj);
+ vect.clear();
+ unsigned int size = vec_pobj.size();
+ vect.reserve( size );
+ for (unsigned int i=0; i< size; i++)
+ vect.push_back((T)vec_pobj[i]);
+}
+#else
+template <class T>
+void getVector( Statement *stmt, unsigned int index,
+OCCI_STD_NAMESPACE::vector<T *> &vect)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ getVectorOfPObjects(stmt, index, vec_pobj);
+ vect.clear();
+ unsigned int size = vec_pobj.size();
+ vect.reserve( size );
+ for (unsigned int i=0; i< size; i++)
+ vect.push_back((T *)vec_pobj[i]);
+}
+#endif
+
+/*------------------------ getVector for Ref<T> ---------------------------*/
+/*
+ NAME
+ getVector - overloaded function. Retrieves the attribute in the current
+position as a vector of Ref<T>
+
+ PARAMETERS
+ rs - ResultSet
+ vect- reference to vector of Ref<T>(OUT parameter).
+
+ DESCRIPTION
+ Retrieves the column in the specified position as a vector of Ref<T>.
+ The attribute at the current position should be a collection type (varray or
+ nested table). The SQL type of the elements in the collection should be
+ compatible with Ref<T>.
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : REF
+*/
+#if !defined(WIN32COMMON) && !defined(__MVS__)
+template <class T>
+void getVector( ResultSet *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<Ref<T> > &vect)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ getVectorOfOCIRefs(rs, index, vec_ref);
+
+ const Connection *sess = rs->getStatement()->getConnection();
+
+ vect.clear();
+ unsigned int size = vec_ref.size();
+ vect.reserve( size );
+ for (unsigned int i=0; i< size; i++)
+ {
+ if (vec_ref[i] == (OCIRef *)0)
+ vect.push_back(Ref<T>()); // pushing a default-constructed Ref
+ else
+ vect.push_back(Ref<T>(sess, (OCIRef *)vec_ref[i], FALSE));
+ }
+}
+#endif
+
+/*------------------------ setVector for PObject*---------------------------*/
+/*
+ NAME
+ SetVector - overloaded function. Binds the attribute in the current
+ position with a vector of objects.
+
+ PARAMETERS
+ rs - ResultSet
+ vect- reference to vector of objects(OUT parameter).
+
+ DESCRIPTION
+ Binds the column in the specified position with a vector of signed int .
+ The column at the current position should be a collection type (varray or
+ nested table). The SQL type of the elements in the collection should be
+ compatible with objects .
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : SQLT_NTY
+
+ This will be calling setVector(..., vector<PObject*>,..)
+
+*/
+#if defined(WIN32COMMON) || defined(__MVS__)
+// and other platforms that do not support
+// partial function template specialization
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index,
+ const OCCI_STD_NAMESPACE::vector<T> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ unsigned int size = vect.size();
+ vec_pobj.reserve( size );
+
+ for (unsigned int i = 0; i < size; i++)
+ vec_pobj.push_back((PObject *)vect[i]);
+
+ setVectorOfPObjects(stmt, index, vec_pobj, sqltype);
+}
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index, const OCCI_STD_NAMESPACE::
+vector<T> &vect, const OCCI_STD_NAMESPACE::string &schemaName,
+const OCCI_STD_NAMESPACE::string &typeName)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ unsigned int size = vect.size();
+ vec_pobj.reserve( size );
+
+ for (unsigned int i = 0; i < size; i++)
+ vec_pobj.push_back((PObject *)vect[i]);
+
+ setVectorOfPObjects(stmt, index, vec_pobj, schemaName, typeName);
+}
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index, const OCCI_STD_NAMESPACE::
+vector<T> &vect, const UString &schemaName,
+const UString &typeName)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ unsigned int size = vect.size();
+ vec_pobj.reserve( size );
+
+ for (unsigned int i = 0; i < size; i++)
+ vec_pobj.push_back((PObject *)vect[i]);
+
+ setVectorOfPObjects(stmt, index, vec_pobj, schemaName, typeName);
+}
+#else
+template <class T>
+void setVector( Statement *stmt, unsigned int index, const OCCI_STD_NAMESPACE::
+vector<T *> &vect, const OCCI_STD_NAMESPACE::string &sqltype)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ unsigned int size = vect.size();
+ vec_pobj.reserve( size );
+
+ for (unsigned int i = 0; i < size; i++)
+ vec_pobj.push_back((PObject *)vect[i]);
+
+ setVectorOfPObjects(stmt, index, vec_pobj, sqltype);
+}
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index, const OCCI_STD_NAMESPACE::
+vector<T *> &vect, const OCCI_STD_NAMESPACE::string &schemaName,
+const OCCI_STD_NAMESPACE::string &typeName)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ unsigned int size = vect.size();
+ vec_pobj.reserve( size );
+
+ for (unsigned int i = 0; i < size; i++)
+ vec_pobj.push_back((PObject *)vect[i]);
+
+ setVectorOfPObjects(stmt, index, vec_pobj, schemaName, typeName);
+}
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index, const OCCI_STD_NAMESPACE::
+vector<T *> &vect, const UString &schemaName,
+const UString &typeName)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ unsigned int size = vect.size();
+ vec_pobj.reserve( size );
+
+ for (unsigned int i = 0; i < size; i++)
+ vec_pobj.push_back((PObject *)vect[i]);
+
+ setVectorOfPObjects(stmt, index, vec_pobj, schemaName, typeName);
+}
+#endif
+
+/*------------------------ setVector for Ref<T>---------------------------*/
+/*
+ NAME
+ setVector - overloaded function. Binds the attribute in the current
+ position with a vector of Ref<T>.
+
+ PARAMETERS
+ rs - ResultSet
+ vect- reference to vector of REF
+
+ DESCRIPTION
+ Binds the column in the specified position with a vector of signed int .
+ The column at the current position should be a collection type (varray or
+ nested table). The SQL type of the elements in the collection should be
+ compatible with OCIRef* .
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : REF
+
+ This will just call setVector(..., vector<OCIRef*>,..)
+
+
+*/
+#if !defined(WIN32COMMON) && !defined(__MVS__)
+template <class T>
+void setVector( Statement *stmt, unsigned int index,
+ const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ OCCI_STD_NAMESPACE::vector<OCIInd> vec_ind;
+ unsigned int size = vect.size();
+ vec_ref.reserve( size );
+ vec_ind.reserve( size );
+
+ for (unsigned int i = 0; i < size; i++)
+ {
+ vec_ref.push_back((void *)vect[i].getRef());
+ vec_ind.push_back( vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+
+ setVectorOfOCIRefs(stmt, index, vec_ref, vec_ind, sqltype);
+}
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index,
+ const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ OCCI_STD_NAMESPACE::vector<OCIInd> vec_ind;
+ unsigned int size = vect.size();
+ vec_ref.reserve( size );
+ vec_ind.reserve( size );
+
+ for (unsigned int i = 0; i < size; i++)
+ {
+ vec_ref.push_back((void *)vect[i].getRef());
+ vec_ind.push_back( vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+
+ setVectorOfOCIRefs(stmt, index, vec_ref, vec_ind, schemaName, typeName);
+}
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index,
+ const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+ const UString &schemaName,
+ const UString &typeName)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ OCCI_STD_NAMESPACE::vector<OCIInd> vec_ind;
+ unsigned int size = vect.size();
+ vec_ref.reserve( size );
+ vec_ind.reserve( size );
+
+ for (unsigned int i = 0; i < size; i++)
+ {
+ vec_ref.push_back((void *)vect[i].getRef());
+ vec_ind.push_back( vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+
+ setVectorOfOCIRefs(stmt, index, vec_ref, vec_ind, schemaName, typeName);
+}
+#endif
+
+/*------------------------ getVector for Ref<T> ---------------------------*/
+/*
+ NAME
+ getVector - overloaded function. Retrieves the attribute in the current
+position as a vector of Ref<T>
+
+ PARAMETERS
+ stmt - Statement
+ vect- reference to vector of Ref<T>(OUT parameter).
+
+ DESCRIPTION
+ Retrieves the column in the specified position as a vector of Ref<T>.
+ The attribute at the current position should be a collection type (varray or
+ nested table). The SQL type of the elements in the collection should be
+ compatible with Ref<T>.
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : REF
+*/
+#if !defined(WIN32COMMON) && !defined(__MVS__)
+template <class T>
+void getVector( Statement *stmt, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<Ref<T> > &vect)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ getVectorOfOCIRefs(stmt, index, vec_ref);
+
+ const Connection *sess = stmt->getConnection();
+
+ vect.clear();
+ unsigned int size = vec_ref.size();
+ vect.reserve( size );
+ for (unsigned int i=0; i< size; i++)
+ {
+ if (vec_ref[i] == (OCIRef *)0)
+ vect.push_back(Ref <T>()); // pushing a default-constructed Ref
+ else
+ vect.push_back(Ref<T> (sess, (OCIRef *)vec_ref[i], FALSE));
+ }
+
+}
+#endif
+
+// Platform independent get/setVectorOfRefs method added
+// get(set)Vector of Ref<T> and get(set)VectorOfRefs are identical
+// in functionality.
+
+/*------------------------ getVectorOfRefs for Ref<T> ----------------------*/
+/*
+ NAME
+ getVectorOfRefs - overloaded function. Retrieves the attribute in the
+ current position as a vector of Ref<T>
+
+ PARAMETERS
+ rs - ResultSet
+ vect- reference to vector of Ref<T>(OUT parameter).
+
+ DESCRIPTION
+ Retrieves the column in the specified position as a vector of Ref<T>.
+ The attribute at the current position should be a collection type (varray or
+ nested table). The SQL type of the elements in the collection should be
+ compatible with Ref<T>.
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : REF
+*/
+
+template <class T>
+void getVectorOfRefs( ResultSet *rs, unsigned int index,
+OCCI_STD_NAMESPACE::vector<Ref<T> > &vect)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ getVectorOfOCIRefs(rs, index, vec_ref);
+
+ const Connection *sess = rs->getStatement()->getConnection();
+
+ vect.clear();
+ unsigned int size = vec_ref.size();
+ vect.reserve( size );
+ for (unsigned int i=0; i< size; i++)
+ {
+ if (vec_ref[i] == (OCIRef *)0)
+ vect.push_back(Ref<T>()); // pushing a default-constructed Ref
+ else
+ vect.push_back(Ref<T>(sess, (OCIRef *)vec_ref[i], FALSE));
+ }
+}
+
+/*------------------------ setVectorOfRefs for Ref<T>-----------------------*/
+/*
+ NAME
+ setVectorOfRefs - overloaded function. Binds the attribute in the current
+ position with a vector of Ref<T>.
+
+ PARAMETERS
+ rs - ResultSet
+ vect- reference to vector of REF
+
+ DESCRIPTION
+ Binds the column in the specified position with a vector of signed int .
+ The column at the current position should be a collection type (varray or
+ nested table). The SQL type of the elements in the collection should be
+ compatible with OCIRef* .
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : REF
+
+ This will just call setVector(..., vector<OCIRef*>,..)
+
+
+*/
+
+template <class T>
+void setVectorOfRefs( Statement *stmt, unsigned int index,
+const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+const OCCI_STD_NAMESPACE::string &sqltype)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ OCCI_STD_NAMESPACE::vector<OCIInd> vec_ind;
+ unsigned int size = vect.size();
+ vec_ref.reserve( size );
+ vec_ind.reserve( size );
+
+ for (unsigned int i = 0; i < size; i++)
+ {
+ vec_ref.push_back((void *)vect[i].getRef());
+ vec_ind.push_back( vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+
+ setVectorOfOCIRefs(stmt, index, vec_ref, vec_ind, sqltype);
+}
+
+template <class T>
+void setVectorOfRefs( Statement *stmt, unsigned int index,
+const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+const OCCI_STD_NAMESPACE::string &schemaName,
+const OCCI_STD_NAMESPACE::string &typeName)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ OCCI_STD_NAMESPACE::vector<OCIInd> vec_ind;
+ unsigned int size = vect.size();
+ vec_ref.reserve( size );
+ vec_ind.reserve( size );
+
+ for (unsigned int i = 0; i < size; i++)
+ {
+ vec_ref.push_back((void *)vect[i].getRef());
+ vec_ind.push_back( vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+
+ setVectorOfOCIRefs(stmt, index, vec_ref, vec_ind, schemaName, typeName);
+}
+
+template <class T>
+void setVectorOfRefs( Statement *stmt, unsigned int index,
+const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+const UString &schemaName,
+const UString &typeName)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ OCCI_STD_NAMESPACE::vector<OCIInd> vec_ind;
+ unsigned int size = vect.size();
+ vec_ref.reserve( size );
+ vec_ind.reserve( size );
+
+ for (unsigned int i = 0; i < size; i++)
+ {
+ vec_ref.push_back((void *)vect[i].getRef());
+ vec_ind.push_back( vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+
+ setVectorOfOCIRefs(stmt, index, vec_ref, vec_ind, schemaName, typeName);
+}
+
+/*------------------------ getVectorOfRefs for Ref<T> ----------------------*/
+/*
+ NAME
+ getVectorOfRefs - overloaded function. Retrieves the attribute in the
+ current position as a vector of Ref<T>
+
+ PARAMETERS
+ stmt - Statement
+ vect- reference to vector of Ref<T>(OUT parameter).
+
+ DESCRIPTION
+ Retrieves the column in the specified position as a vector of Ref<T>.
+ The attribute at the current position should be a collection type (varray or
+ nested table). The SQL type of the elements in the collection should be
+ compatible with Ref<T>.
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : REF
+*/
+
+template <class T>
+void getVectorOfRefs( Statement *stmt, unsigned int index,
+OCCI_STD_NAMESPACE::vector <Ref<T> > &vect)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ getVectorOfOCIRefs(stmt, index, vec_ref);
+
+ const Connection *sess = stmt->getConnection();
+
+ vect.clear();
+ unsigned int size = vec_ref.size();
+ vect.reserve( size );
+ for (unsigned int i=0; i< size; i++)
+ {
+ if (vec_ref[i] == (OCIRef *)0)
+ vect.push_back(Ref <T>()); // pushing a default-constructed Ref
+ else
+ vect.push_back(Ref<T> (sess, (OCIRef *)vec_ref[i], FALSE));
+ }
+}
+/*----------------------------- pinVectorOfRefs---------------------*/
+/*
+ NAME
+ pinVectorOfRefs - array pin implementation
+
+ PARAMETERS
+ conn- Connection object
+ vecRef - vector of OCIRefs *
+ vecCor - vector of OCIComplexObject *
+ vecPOBj - vector of PObject * ( OUT )
+
+ DESCRIPTION
+ implements the array pin of refs passed and returns the corresponding
+ PObject s
+
+ RETURNS
+
+ NOTES
+*/
+template <class T>
+void pinVectorOfRefs( const Connection *conn,
+OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+OCCI_STD_NAMESPACE::vector<T* > &vectObj, LockOptions lockOpt)
+{
+
+ OCCI_STD_NAMESPACE::vector<void *> vecRef;
+ OCCI_STD_NAMESPACE::vector<void *> vecCor;
+ OCCI_STD_NAMESPACE::vector<PObject *> vecPObj;
+ unsigned int sz = vect.size();
+ vecRef.reserve( sz );
+ vecCor.reserve( sz );
+
+ for ( unsigned int i=0; i < sz; i++)
+ {
+ vecRef.push_back((void *)vect[i].getRef());
+ vecCor.push_back((void *)vect[i].getCor());
+ }
+ pinVectorOfOCIRefs(conn, vecRef, vecCor, vecPObj, lockOpt);
+ for ( unsigned int k=0; k < sz; k++)
+ {
+ vectObj.push_back((T *)vecPObj[k]);
+ vect[k].setPinnedObject(vecPObj[k]);
+ }
+}
+
+/*----------------------------- pinVectorOfRefs---------------------*/
+/*
+ NAME
+ pinVectorOfRefs - array pin implementation
+
+ PARAMETERS
+ conn- Connection object
+ vecRef - vector of OCIRefs *
+ vecCor - vector of OCIComplexObject *
+
+ DESCRIPTION
+ implements the array pin of refs passed
+
+ RETURNS
+
+ NOTES
+*/
+template <class T>
+void pinVectorOfRefs( const Connection *conn,
+OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+LockOptions lockOpt)
+{
+
+ OCCI_STD_NAMESPACE::vector<void *> vecRef;
+ OCCI_STD_NAMESPACE::vector<void *> vecCor;
+ OCCI_STD_NAMESPACE::vector<PObject *> vecPObj;
+ unsigned int sz = vect.size();
+ vecRef.reserve( sz );
+ vecCor.reserve( sz );
+
+ for ( unsigned int i=0; i < sz; i++)
+ {
+ vecRef.push_back((void *)vect[i].getRef());
+ vecCor.push_back((void *)vect[i].getCor());
+ }
+ pinVectorOfOCIRefs(conn, vecRef, vecCor,vecPObj, lockOpt);
+ for ( unsigned int k=0; k < sz; k++)
+ vect[k].setPinnedObject(vecPObj[k]);
+}
+
+
+
+/*---------------------------------------------------------------------------
+ INTERNAL FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+} /* end of namespace occi */
+} /* end of namespace oracle */
+#endif /* OCCICONTROL_ORACLE */
+
+#endif /* _olint */
--- /dev/null
+/* Copyright (c) 2000, 2009, Oracle and/or its affiliates.
+All rights reserved. */
+
+/*
+ NAME
+ occiData.h - header file for OCCI data classes
+
+ DESCRIPTION
+ Class definitions for Stream, Blob, Clob ,Bfile,
+ Number, Date, IntervalYM, IntervalDS, Time,
+ Timestamp
+
+ RELATED DOCUMENTS
+ <note any documents related to this facility>
+
+ EXPORT FUNCTION(S)
+ <external functions declared for use outside package -
+ one-line descriptions>
+
+ INTERNAL FUNCTION(S)
+ <other external functions declared - one-line descriptions>
+
+ EXAMPLES
+
+ NOTES
+ <other useful comments, qualifications, etc.>
+
+ MODIFIED (MM/DD/YY)
+ kkverma 11/23/09 - Replace OCIEnv* type ocienv member to Environment type
+ slynn 03/18/08 - Add get/setContentType.
+ slynn 09/14/06 - Remove string.clear()
+ slynn 07/28/06 - Migrate to new 11g LOB terminology
+ slynn 06/21/06 - Add LobRegion
+ slynn 05/25/06 - New NG Lob Functionality.
+ cparampa 09/06/04 - Date changes
+ shiyer 10/31/03 - Timestamp constructors issue
+ rvallam 10/07/03 - bug 3089939 - add private method in Date to compute
+ hour and min component in daysBetween to be passed
+ to set method of IntervalDS.
+ cparampa 08/21/03 - added toCopy to IntervalDS and IntervalYM
+ cparampa 07/14/03 - make SubscriptionImpl friend of Bytes class.
+ rvallam 02/12/03 - modified BFloat/BDouble interface - BFloat/BDouble
+ type is now a struct
+ cparampa 01/20/03 - made ProducerImpl friend of Bytes class
+ rvallam 11/19/02 - objects support for interval class
+ shiyer 11/15/02 - Add UTF16 support to IntervalYM & IntervalDS
+ cparampa 12/11/02 - removed references to class Payload
+ cparampa 10/12/02 - AQ additions
+ shiyer 10/12/02 - Added UTF16 version of get/set CharsetId in Clob
+ shiyer 09/06/02 - OCCI globalization support
+ aahluwal 06/04/02 - bug 2360115
+ vvinay 02/21/02 - operator= added for Bytes
+ gayyappa 10/23/01 - fix bug 2073327 , use string instead of
+ enum CharSet
+ vvinay 12/21/01 - signed char constructor and cast operator
+ (bug 2073334)
+ binary operator methods not friends any more
+ gayyappa 15/10/01 - add parameter toCopy to Lob/Timestamp private
+ constructors
+ rvallam 04/09/01 - change private constructor in Number to pass
+ parameter by reference and made it const
+ chliang 03/05/01 - disable olint
+ rvallam 01/27/02 - remove #include <ostream>
+ gayyappa 01/17/01 - add methods/operators to Interval and
+ timestamp classes..
+ gayyappa 12/15/00 - interface changes in set methods
+ rvallam 11/29/00 - change method signature in Bytes
+ added 3 new methods in Number
+ rvallam 10/20/00 - change method signatures in Date
+ rvallam 09/15/00 - make StmtImpl/ResultSetImpl friend to
+ interval classes
+ gayyappa 08/21/00 - modified timestamp, interval headers.
+ add OCIEnv to constructor of Bytes.,
+ removed getOCIRaw from Bytes.
+ add const to setVector mthds of anydata.
+ add void* data member to Timestamp/Interval.
+ rvallam 08/10/00 - modified CORE class headers to add friends ,
+ added private constructor in Bytes
+ slari 08/02/00 - comment out Stream
+ rratnam 08/04/00 - updated the LOB stream interface
+ rkasamse 08/07/00 - make getVector friend of Time
+ slari 07/31/00 - add const to Bytes methods
+ slari 07/25/00 - disable Bytes(Bytes *)
+ slari 07/23/00 - add Bytes
+ gayyappa 07/26/00 - update Timestamp, IntervalYM, IntervalDS.
+ gayyappa 07/04/00 - for fixing a problem in occiNumber
+ rratnam 06/13/00 - Updated LOB class headers
+ kmohan 05/31/00 - Change Environment to Environment * in
+ Date constructor
+ kmohan 05/29/00 - No string
+ rkasamse 04/25/00 - Added string class header
+ etucker 04/19/00 - Added CORE class headers
+ kmohan 04/11/00 - Creation
+
+*/
+
+#ifndef _olint /* disable olint check */
+
+#ifndef OCCIDATA_ORACLE
+# define OCCIDATA_ORACLE
+
+#ifndef OCCICOMMON_ORACLE
+#include <occiCommon.h>
+#endif
+
+#ifndef OCCICONTROL_ORACLE
+#include <occiControl.h>
+#endif
+
+namespace oracle {
+namespace occi {
+class Bytes
+{
+
+ public:
+
+ Bytes(const Environment *env = NULL); // default constructor
+
+ Bytes(unsigned char *value, unsigned int count,
+ unsigned int offset = 0, const Environment *env = NULL);
+
+ Bytes(const Bytes &e); // copy constructor
+
+
+ // public methods
+
+ void getBytes(unsigned char *dst, unsigned int count,
+ unsigned int srcBegin = 0,
+ unsigned int dstBegin = 0) const;
+
+ unsigned int length() const;
+
+ unsigned char byteAt(unsigned int index) const;
+
+ bool isNull() const;
+
+ void setNull();
+
+ void operator=(const Bytes &other);
+
+ ~Bytes();
+
+private:
+ // private data members
+ Bytes(OCIEnv *,OCIRaw *) ;
+ Bytes(Ptr<BytesImpl> bytesPtr) ;
+ Ptr<BytesImpl> ptr_;
+ friend class AnyDataImpl;
+ friend class aq::MessageImpl;
+ friend class aq::ProducerImpl;
+ friend class aq::SubscriptionImpl;
+ friend void getVector(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<Bytes> &vect) ;
+ friend void setVector(AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<Bytes> &vect) ;
+
+};
+
+class Bfile
+{
+ public :
+
+ Bfile();
+ Bfile(const Connection *connectionp) ;
+ Bfile(const Bfile &srcBfile) ;
+ ~Bfile();
+ unsigned int length() const ;
+ OCCI_STD_NAMESPACE::string getDirAlias() const ;
+ UString getUStringDirAlias() const ;
+ OCCI_STD_NAMESPACE::string getFileName() const ;
+ UString getUStringFileName() const ;
+ void setName(const OCCI_STD_NAMESPACE::string &dirAlias,
+ const OCCI_STD_NAMESPACE::string &fileName) ;
+ void setName(const UString &dirAlias, const UString &fileName) ;
+ bool fileExists() const ;
+ Bfile& operator =(const Bfile &srcBfile) ;
+ bool operator ==(const Bfile &srcBfile) const ;
+ bool operator !=(const Bfile &srcBfile) const ;
+ void setNull() ;
+ bool isNull() const ;
+ bool isInitialized() const;
+ void open() ;
+ void close() ;
+ bool isOpen() const ;
+ unsigned int read(unsigned int amt, unsigned char *buffer,
+ unsigned int bufsize, unsigned int offset = 1) const ;
+ Stream* getStream(unsigned int offset = 1,
+ unsigned int amount =0) ;
+ void closeStream(Stream *stream);
+
+ private:
+
+ //Data Members:
+
+ // pointer to the FILE locator
+ OCIBFileLocator *filep;
+
+ // pointer to the ConnectionImpl instance
+ const ConnectionImpl *connp;
+
+ // pointer to the LobStreamImpl instance obtained from this FILE
+ LobStreamImpl *streamp;
+
+ void *bfileExt;
+
+ //Enumerations:
+ enum {MAXDIRNAMELEN = 32, MAXFILENAMELEN = 256};
+
+ //Constructor:
+ Bfile(const Connection *connectionp,
+ OCIBFileLocator *locatorp, bool toCopy = true) ;
+
+ //Methods:
+ OCIBFileLocator* getLocator() const;
+ void do_getDirAlias( void * dirAlias, ub2 * dirAliasLen) const ;
+ void do_getFileName( void * fileName, ub2 * fileNameLen) const ;
+ void do_setName( void * alias, ub2 aliasLen,
+ void *fileName, ub2 fileNameLen);
+ // Friends
+ friend class AnyDataImpl;
+ friend class StatementImpl;
+ friend class ResultSetImpl;
+ friend class Blob;
+ friend class Clob;
+ friend class aq::MessageImpl;
+
+ friend void getVector(const AnyData&, OCCI_STD_NAMESPACE::vector<Bfile>&) ;
+ friend void getVector(Statement*, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Bfile>&) ;
+ friend void getVector(ResultSet*, unsigned int ,
+ OCCI_STD_NAMESPACE::vector<Bfile>&) ;
+ friend void setVector(AnyData&, const OCCI_STD_NAMESPACE::vector<Bfile>&) ;
+ friend void do_setVectorOfBfile(Statement*, unsigned int,
+ const OCCI_STD_NAMESPACE::vector<Bfile>&, void *, unsigned int,
+ void *, unsigned int ) ;
+
+#ifdef ORAXB8_DEFINED
+ friend void readVectorOfBfiles(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Bfile> &vec,
+ oraub8 *byte_amts, oraub8 *offsets,
+ unsigned char *buffers[], oraub8 *buffer_lens);
+#endif
+};
+
+
+#ifdef ORAXB8_DEFINED
+// See the end of this file for implementation of LobRegion
+template < typename lobType > class LobRegion
+{
+ private:
+ lobType *_primary;
+ oraub8 _primaryOffset;
+ oraub8 _offset;
+ oraub8 _length;
+ OCCI_STD_NAMESPACE::string _mimeType;
+
+ void setPrimary(const ConnectionImpl *connp,
+ OCILobLocator *locator);
+
+ public:
+ LobRegion();
+ ~LobRegion();
+ lobType *getPrimary();
+ oraub8 getPrimaryOffset();
+ oraub8 getOffset();
+ oraub8 getLength();
+ OCCI_STD_NAMESPACE::string getMimeType();
+
+ friend class Blob;
+ friend class Clob;
+};
+
+typedef LobRegion<Blob> BlobRegion;
+typedef LobRegion<Clob> ClobRegion;
+#endif
+
+
+class Blob
+{
+ public:
+
+ Blob();
+ Blob(const Connection *connectionp) ;
+ Blob(const Blob &srcBlob) ;
+ ~Blob();
+ unsigned int getChunkSize() const ;
+ unsigned int length() const ;
+ Blob& operator =(const Blob &srcBlob) ;
+ bool operator ==(const Blob &srcBlob) const ;
+ bool operator !=(const Blob &srcBlob) const ;
+ void setNull() ;
+ bool isNull() const ;
+ void setEmpty() ;
+ void setEmpty(const Connection *connectionp) ;
+ bool isInitialized() const;
+ void open(LobOpenMode mode=OCCI_LOB_READWRITE) ;
+ void close() ;
+ bool isOpen() const ;
+ void copy(const Blob &srcBlob, unsigned int numBytes,
+ unsigned int dstOffset =1, unsigned int srcOffset =1) ;
+ void copy(const Bfile &srcBfile, unsigned int numBytes,
+ unsigned int dstOffset =1, unsigned int srcOffset =1) ;
+ void append(const Blob &srcBlob) ;
+ unsigned int read(unsigned int amt, unsigned char *buffer,
+ unsigned int bufsize, unsigned int offset = 1) const ;
+ unsigned int write(unsigned int amt, unsigned char *buffer,
+ unsigned int bufsize, unsigned int offset = 1) ;
+ unsigned int writeChunk(unsigned int amt, unsigned char *buffer,
+ unsigned int bufsize, unsigned int offset = 1) ;
+ void trim(unsigned int newlen) ;
+ Stream* getStream(unsigned int offset = 1,
+ unsigned int amount =0) ;
+ void closeStream(Stream *stream);
+ LobOptionValue getOptions(LobOptionType optType);
+ void setOptions(LobOptionType optType, LobOptionValue value);
+ OCCI_STD_NAMESPACE::string getContentType(void);
+ void setContentType(const OCCI_STD_NAMESPACE::string contentType);
+
+ void getDeduplicateRegions(OCCI_STD_NAMESPACE::vector<BlobRegion> ®ions);
+ private:
+
+ //Data Members:
+
+ // pointer to the BLOB locator
+ OCIBlobLocator *lobp;
+
+ // pointer to the ConnectionImpl instance
+ const ConnectionImpl *connp;
+
+ // pointer to the LobStreamImpl instance obtained from this LOB
+ LobStreamImpl *streamp;
+
+ //for future use !
+ void *blobExt;
+
+ //Constructor:
+ Blob(const Connection *connectionp,
+ OCIBlobLocator *locatorp, bool toCopy=true) ;
+
+ //Methods:
+ OCIBlobLocator* getLocator() const;
+
+ // Friends
+ friend class AnyDataImpl;
+ friend class StatementImpl;
+ friend class ResultSetImpl;
+
+#ifdef ORAXB8_DEFINED
+ friend void
+ LobRegion<Blob>::setPrimary(const ConnectionImpl *connp,
+ OCILobLocator *locator);
+#endif
+ friend void getVector(const AnyData&, OCCI_STD_NAMESPACE::vector<Blob>&) ;
+ friend void getVector(Statement*, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Blob>&) ;
+ friend void getVector(ResultSet*, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Blob>&) ;
+ friend void setVector(AnyData&, const OCCI_STD_NAMESPACE::vector<Blob>&) ;
+ friend void do_setVectorOfBlob(Statement*, unsigned int,
+ const OCCI_STD_NAMESPACE::vector<Blob>&, void *,
+ unsigned int, void *, unsigned int ) ;
+#ifdef ORAXB8_DEFINED
+ friend void readVectorOfBlobs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Blob> &vec,
+ oraub8 *byte_amts, oraub8 *offsets,
+ unsigned char *buffers[], oraub8 *buffer_lens);
+ friend void writeVectorOfBlobs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Blob> &vec,
+ oraub8 *byte_amts, oraub8 *offsets,
+ unsigned char *buffers[], oraub8 *buffer_lens);
+#endif
+};
+
+class Clob
+{
+ public:
+
+ Clob();
+ Clob(const Connection *connectionp) ;
+ Clob(const Clob &srcClob) ;
+ ~Clob();
+ unsigned int getChunkSize() const ;
+ unsigned int length() const ;
+ OCCI_STD_NAMESPACE::string getCharSetId() const;
+ CharSetForm getCharSetForm() const;
+ void setCharSetId( const OCCI_STD_NAMESPACE::string &charset) ;
+ void setCharSetForm( CharSetForm csfrm) ;
+ Clob& operator =(const Clob &srcClob) ;
+ bool operator ==(const Clob &srcClob) const ;
+ bool operator !=(const Clob &srcClob) const ;
+ void setNull() ;
+ bool isNull() const ;
+ void setEmpty() ;
+ void setEmpty(const Connection *connectionp) ;
+ bool isInitialized() const;
+ void open(LobOpenMode mode=OCCI_LOB_READWRITE) ;
+ void close() ;
+ bool isOpen() const ;
+ void copy(const Clob &srcClob, unsigned int numBytes,
+ unsigned int dstOffset = 1, unsigned int srcOffset = 1) ;
+ void copy(const Bfile &srcBfile, unsigned int numBytes,
+ unsigned int dstOffset = 1, unsigned int srcOffset = 1) ;
+ void append(const Clob &srcClob) ;
+ unsigned int read(unsigned int amt, unsigned char *buffer,
+ unsigned int bufsize, unsigned int offset = 1) const;
+ unsigned int read(unsigned int amt, utext *buffer,
+ unsigned int bufsize, unsigned int offset = 1) const;
+ unsigned int write(unsigned int amt, unsigned char *buffer,
+ unsigned int bufsize, unsigned int offset = 1 );
+ unsigned int write(unsigned int amt, utext *buffer,
+ unsigned int bufsize, unsigned int offset = 1 );
+ unsigned int writeChunk(unsigned int amt, unsigned char *buffer,
+ unsigned int bufsize, unsigned int offset = 1 );
+ unsigned int writeChunk(unsigned int amt, utext *buffer,
+ unsigned int bufsize, unsigned int offset = 1 );
+ void trim(unsigned int newlen) ;
+ Stream* getStream(unsigned int offset = 1,
+ unsigned int amount =0 );
+ void closeStream(Stream *stream);
+ LobOptionValue getOptions(LobOptionType optType);
+ void setOptions(LobOptionType optType, LobOptionValue value);
+ OCCI_STD_NAMESPACE::string getContentType(void);
+ void setContentType(const OCCI_STD_NAMESPACE::string contentType);
+
+ UString getCharSetIdUString() const;
+ void setCharSetIdUString( const UString &charset) ;
+
+ void getDeduplicateRegions(OCCI_STD_NAMESPACE::vector<ClobRegion> ®ions);
+
+ private:
+
+ //Data Members:
+
+ // pointer to the CLOB locator
+ OCIClobLocator *lobp;
+
+ // pointer to the ConnectionImpl instance
+ const ConnectionImpl *connp;
+
+ // pointer to the LobStreamImpl instance obtained from this LOB
+ LobStreamImpl *streamp;
+
+ //charset id
+ ub2 charsetId;
+
+ //charset form
+ CharSetForm charsetForm;
+
+ //for future use !
+ void *clobExt;
+
+ //Constructor:
+ Clob(const Connection *connectionp,
+ OCIClobLocator *locatorp, bool toCopy =true ) ;
+
+ //Methods:
+ OCIClobLocator* getLocator() const;
+ unsigned int do_read( unsigned int amt, void *buffer,
+ unsigned int bufsize, unsigned int offset) const;
+ unsigned int do_write( unsigned int amt, void *buffer,
+ unsigned int bufsize, unsigned int offset) ;
+ unsigned int do_writeChunk( unsigned int amt, void *buffer,
+ unsigned int bufsize, unsigned int offset) ;
+
+ // Friends
+ friend class AnyDataImpl;
+ friend class StatementImpl;
+ friend class ResultSetImpl;
+
+#ifdef ORAXB8_DEFINED
+ friend void
+ LobRegion<Clob>::setPrimary(const ConnectionImpl *connp,
+ OCILobLocator *locator);
+#endif
+ friend void getVector(const AnyData&, OCCI_STD_NAMESPACE::vector<Clob>&) ;
+ friend void getVector(Statement*, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Clob>&) ;
+ friend void getVector(ResultSet*, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Clob>&) ;
+ friend void setVector(AnyData&, const OCCI_STD_NAMESPACE::vector<Clob>&) ;
+ friend void do_setVectorOfClob(Statement*, unsigned int,
+ const OCCI_STD_NAMESPACE::vector<Clob>&, void *,
+ unsigned int, void *, unsigned int ) ;
+#ifdef ORAXB8_DEFINED
+ friend void readVectorOfClobs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Clob> &vec,
+ oraub8 *byte_amts, oraub8 *char_amts, oraub8 *offsets,
+ unsigned char *buffers[], oraub8 *buffer_lens);
+ friend void writeVectorOfClobs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Clob> &vec,
+ oraub8 *byte_amts, oraub8 *char_amts, oraub8 *offsets,
+ unsigned char *buffers[], oraub8 *buffer_lens);
+ friend void readVectorOfClobs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Clob> &vec,
+ oraub8 *byte_amts, oraub8 *char_amts, oraub8 *offsets,
+ utext *buffers[], oraub8 *buffer_lens);
+ friend void writeVectorOfClobs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<Clob> &vec,
+ oraub8 *byte_amts, oraub8 *char_amts, oraub8 *offsets,
+ utext *buffers[], oraub8 *buffer_lens);
+#endif
+};
+
+class Number
+{
+
+ public:
+
+ // Constructors
+ /* default constructor added */
+ Number();
+ Number(const Number &srcNum);
+ Number(long double val) ;
+ Number(double val) ;
+ Number(float val) ;
+ Number(long val) ;
+ Number(int val) ;
+ Number(short val) ;
+ Number(char val) ;
+ Number(signed char val);
+ Number(unsigned long val) ;
+ Number(unsigned int val) ;
+ Number(unsigned short val) ;
+ Number(unsigned char val) ;
+
+ ~Number();
+ // Methods
+ const Number abs() const ;
+ // unary negate
+ const Number operator-() ;
+ // unary increment
+ Number& operator++() ;
+ const Number operator++(int) ;
+ // unary decrement
+ Number& operator--() ;
+ const Number operator--(int) ;
+ // assigment operator
+ Number& operator=(const Number &a);
+ // add and assign
+ Number& operator+=(const Number &a) ;
+ // subtract and assign
+ Number& operator-=(const Number &a) ;
+ // Mulitply an assign
+ Number& operator*=(const Number &a) ;
+ // divide and assign
+ Number& operator/=(const Number &a) ;
+ // Modulo and assign
+ Number& operator%=(const Number &a) ;
+ // casting operators
+ operator long() const;
+ operator int() const;
+ operator short() const;
+ operator char() const;
+ operator signed char() const;
+ operator unsigned long() const;
+ operator unsigned int() const;
+ operator unsigned short() const;
+ operator unsigned char() const;
+ operator long double() const;
+ operator double() const;
+ operator float() const;
+ // Decimal shift
+ const Number shift(int val) const ;
+ // Integer Power
+ const Number intPower(int val) const ;
+ const Number ceil() const ;
+ const Number floor() const ;
+ const Number squareroot() const ;
+ int sign() const ;
+ // conversion routines
+ // Format Number and return as a OCCI_STD_NAMESPACE::string
+ OCCI_STD_NAMESPACE::string toText(const Environment *envp,
+ const OCCI_STD_NAMESPACE::string &fmt,
+ const OCCI_STD_NAMESPACE::string &nlsParam="") const
+ ;
+ UString toText(const Environment *envp,
+ const UString &fmt,const UString &nlsParam) const
+ ;
+ // Create an Number from formatted text
+ void fromText(const Environment *envp,
+ const OCCI_STD_NAMESPACE::string &number,
+ const OCCI_STD_NAMESPACE::string &fmt,
+ const OCCI_STD_NAMESPACE::string &nlsParam = "")
+ ;
+ void fromText(const Environment *envp,
+ const UString &number,
+ const UString &fmt, const UString &nlsParam);
+ void fromBytes(const Bytes &s) ;
+ Bytes toBytes() const;
+ // truncate digits
+ const Number trunc(int decplace) const ;
+ // round to the decplace place.
+ const Number round(int decplace) const ;
+ // returns an Number with digits decimal digits
+ const Number prec(int digits) const ;
+ const Number sin() const ;
+ const Number cos() const ;
+ const Number tan() const ;
+ const Number hypSin() const ;
+ const Number hypCos() const ;
+ const Number hypTan() const ;
+ const Number arcSin() const ;
+ const Number arcCos() const ;
+ const Number arcTan() const ;
+ const Number arcTan2(const Number &val) const;
+ const Number power(const Number &val) const;
+ const Number exp() const ;
+ const Number ln() const ;
+ const Number log(const Number &val) const;
+ bool isNull() const;
+ void setNull();
+ private:
+ /* Private constructor for constructing number from methods inside */
+ Number(const OCINumber &result);
+ OCINumber getOCINumber() const;
+
+ OCINumber data;
+ /* a flag to indicate if the Number is null */
+ bool numberIsNull;
+ void *numberExt;
+
+ // a >= b
+ friend bool operator>=(const Number &a, const Number &b);
+ // a < = b
+ friend bool operator<=(const Number &a, const Number &b);
+ // a > b
+ friend bool operator>(const Number &a, const Number &b);
+ // a < b
+ friend bool operator<(const Number &a, const Number &b);
+
+ friend class IntervalDS;
+ friend class IntervalYM;
+ friend const IntervalYM operator*(const IntervalYM &a,
+ const Number& factor) ;
+ friend const IntervalDS operator*(const IntervalDS &a,
+ const Number& factor) ;
+ friend const IntervalYM operator/(const IntervalYM &a,
+ const Number &factor) ;
+ friend const IntervalDS operator/(const IntervalDS &a,
+ const Number &factor) ;
+ friend class ResultSetImpl;
+ friend class StatementImpl;
+ friend class AnyDataImpl;
+ friend void getVector(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<Number> &vect);
+ friend void setVector(AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<Number> &vect) ;
+ friend Number MetaData::getNumber(MetaData::AttrId attrid) const ;
+ friend void getVector(Statement *stmt, unsigned int paramIndex,
+ OCCI_STD_NAMESPACE::vector<Number> &vect) ;
+ friend void do_setVectorOfNumber(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Number> &vect, void *schemaName,
+ unsigned int schemaNameLen,
+ void *typeName, unsigned int typeNameLen);
+ friend void getVector(ResultSet *rs, unsigned int colIndex,
+ OCCI_STD_NAMESPACE::vector<Number> &vect);
+
+};
+
+class Date
+{
+ public:
+
+ // Constructors
+ Date();
+ Date(const Date &a);
+ Date(const Environment *envp,int year = 1,unsigned int month = 1,
+ unsigned int day = 1,unsigned int hour = 0,
+ unsigned int minute = 0, unsigned int seconds = 0);
+ ~Date();
+ // Methods
+
+ void setDate(int year = 1,unsigned int month = 1,unsigned int day = 1,
+ unsigned int hour = 0,unsigned int minute = 0,
+ unsigned int seconds = 0);
+ void getDate(int &year,unsigned int &month,unsigned int &day,
+ unsigned int &hour ,unsigned int &min ,unsigned int &sec) const;
+ Bytes toBytes() const ;
+ void fromBytes(const Bytes &byteStream,
+ const Environment *envp = NULL);
+ OCCI_STD_NAMESPACE::string toText(
+ const OCCI_STD_NAMESPACE::string &fmt = "",
+ const OCCI_STD_NAMESPACE::string &nlsParam = "") const;
+ UString toText(
+ const UString &fmt ,
+ const UString &nlsParam ) const;
+ void fromText(const OCCI_STD_NAMESPACE::string &datestr,
+ const OCCI_STD_NAMESPACE::string &fmt = "",
+ const OCCI_STD_NAMESPACE::string &nlsParam = "",
+ const Environment *envp = NULL);
+ void fromText(const UString &datestr,
+ const UString &fmt , const UString &nlsParam ,
+ const Environment *envp = NULL);
+ Date toZone(const OCCI_STD_NAMESPACE::string &zone1,
+ const OCCI_STD_NAMESPACE::string &zone2) const;
+ Date& operator=(const Date &d);
+ Date addMonths(int i) const;
+ Date addDays(int i) const ;
+ Date lastDay() const ;
+ IntervalDS daysBetween(const Date &d) const;
+ Date nextDay(const OCCI_STD_NAMESPACE::string &dow) const;
+ Date nextDay(const UString &dow) const;
+ bool isNull() const;
+ void setNull();
+ static Date getSystemDate(const Environment *envp) ;
+
+ private:
+ OCIDate date;
+ const EnvironmentImpl *envp;
+ bool dateIsNull;
+ void *dateExt;
+
+ /* private constructor */
+ Date(const Environment *env,OCIDate dateval);
+ OCIDate getOCIDate() const;
+ void constructHourAndMinute(sb4 &seconds, sb4 &hours, sb4 &minutes) const;
+ friend bool operator==(const Date &a,const Date &b);
+ friend bool operator>(const Date &a,const Date &b);
+ friend bool operator<(const Date &a,const Date &b);
+ friend bool operator!=(const Date &a,const Date &b);
+ friend bool operator>=(const Date &a,const Date &b);
+ friend bool operator<=(const Date &a,const Date &b);
+ friend class ResultSetImpl;
+ friend class StatementImpl;
+ friend class AnyDataImpl;
+ friend class aq::MessageImpl;
+ friend void getVector(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<Date> &vect) ;
+ friend void setVector(AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<Date> &vect);
+ friend void getVector(Statement *stmt, unsigned int paramIndex,
+ OCCI_STD_NAMESPACE::vector<Date> &vect) ;
+ friend void do_setVectorOfDate(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Date> &vect, void *schemaName,
+ unsigned int schemaNameLen,void *typeName, unsigned int typeNameLen) ;
+ friend void getVector(ResultSet *rs, unsigned int colIndex,
+ OCCI_STD_NAMESPACE::vector<Date> &vect) ;
+
+}; //class Date
+
+class Timestamp
+{
+ public:
+ Timestamp() ;
+
+ Timestamp( const Environment *env, int year=1,
+ unsigned int month=1, unsigned int day=1, unsigned int hour=0,
+ unsigned int min=0 ,unsigned int sec=0, unsigned int fs=0,
+ int tzhour=0, int tzmin=0) ;
+ Timestamp( const Environment *env, int year,
+ unsigned int month, unsigned int day, unsigned int hour,
+ unsigned int min ,unsigned int sec, unsigned int fs,
+ const OCCI_STD_NAMESPACE::string &timezone);
+ Timestamp( const Environment *env, int year,
+ unsigned int month, unsigned int day, unsigned int hour,
+ unsigned int min ,unsigned int sec, unsigned int fs,
+ const UString &timezone);
+ Timestamp( const Timestamp &src) ;
+ ~Timestamp();
+
+ void getTimeZoneOffset( int &hour, int &minute) const ;
+ void getTime( unsigned int &hour, unsigned int &minute,
+ unsigned int &second, unsigned int &fs) const ;
+ void getDate( int &year, unsigned int &month, unsigned int &day )const ;
+ OCCI_STD_NAMESPACE::string toText(const OCCI_STD_NAMESPACE::string &fmt,
+ unsigned int fsprec,
+ const OCCI_STD_NAMESPACE::string &nlsParam ="") const ;
+ UString toText(const UString &fmt,
+ unsigned int fsprec, const UString &nlsParam ) const ;
+ void setTimeZoneOffset( int hour, int minute) ;
+ void setTime( unsigned int hour, unsigned int minute,
+ unsigned int second, unsigned int fs) ;
+ void setDate( int year, unsigned int month, unsigned int day ) ;
+ void setNull() ;
+ void fromText( const OCCI_STD_NAMESPACE::string ×tmpStr,
+ const OCCI_STD_NAMESPACE::string &fmt ,
+ const OCCI_STD_NAMESPACE::string &nlsParam= "",
+ const Environment *env =NULL);
+ void fromText( const UString ×tmpStr,
+ const UString &fmt , const UString &nlsParam,
+ const Environment *env =NULL);
+ bool isNull() const;
+ Timestamp & operator =( const Timestamp &src) ;
+ const IntervalYM subYM(const Timestamp& val) const ;
+ const IntervalDS subDS(const Timestamp& val) const ;
+ const Timestamp intervalAdd(const IntervalDS& val) const ;
+ const Timestamp intervalSub(const IntervalDS& val) const ;
+ const Timestamp intervalAdd(const IntervalYM& val) const ;
+ const Timestamp intervalSub(const IntervalYM& val) const ;
+
+ friend bool operator==(const Timestamp &a,const Timestamp &b);
+ friend bool operator>(const Timestamp &a,const Timestamp &b);
+ friend bool operator<(const Timestamp &a,const Timestamp &b);
+ friend bool operator !=(const Timestamp &a,const Timestamp &b);
+ friend bool operator >=(const Timestamp &a,const Timestamp &b);
+ friend bool operator <=(const Timestamp &a,const Timestamp &b);
+
+ friend class ResultSetImpl;
+ friend class StatementImpl;
+ friend class AnyDataImpl;
+
+ private:
+ OCIDateTime *ocidatetime;
+ Environment *env_;
+ void *timestampExt;
+
+ OCIDateTime *getOCIDateTime() const;
+ void getTZString( OraText *TimeZone, int th, int tm );
+ Timestamp( Environment *env, OCIDateTime *dt, bool toCopy = true) ;
+ void allocateDataMembers( Environment *env) ;
+ void do_TimestampConstruct( const Environment *env, int year,
+ unsigned int month, unsigned int day, unsigned int hour, unsigned int min,
+ unsigned int sec, unsigned int fs, void *tz, int tsize);
+
+ friend void getVector(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<Timestamp> &vect);
+ friend void setVector(AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<Timestamp> &vect) ;
+ friend Timestamp MetaData::getTimestamp(
+ MetaData::AttrId attrid) const ;
+ friend void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Timestamp> &vect) ;
+ friend void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<Timestamp> &vect) ;
+ friend void do_setVectorOfTimestamp(Statement *stmt,
+ unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<Timestamp> &vect,
+ void *schemaName, unsigned int schemaNameLen,
+ void *typeName, unsigned int typeNameLen) ;
+}; // class Timestamp
+
+class IntervalDS
+{
+
+ public:
+ IntervalDS() ;
+ IntervalDS( const Environment *env,int day=0,
+ int hour=0, int minute=0, int second=0,
+ int fs=0) ;
+ IntervalDS( const IntervalDS &src) ;
+
+ ~IntervalDS();
+
+ int getDay () const ;
+ int getHour () const ;
+ int getMinute () const ;
+ int getSecond() const ;
+ int getFracSec () const ;
+ void set( int day, int hour, int minute, int second, int fracsec) ;
+ void setNull() ;
+ void fromText( const OCCI_STD_NAMESPACE::string &inpstr,
+ const OCCI_STD_NAMESPACE::string &nlsParam ="",
+ const Environment *env=NULL) ;
+ OCCI_STD_NAMESPACE::string toText( unsigned int lfprec, unsigned int fsprec,
+ const OCCI_STD_NAMESPACE::string &nlsParam="") const ;
+ bool isNull() const;
+ IntervalDS& operator =( const IntervalDS &src) ;
+ IntervalDS& operator +=( const IntervalDS &a);
+ IntervalDS& operator -=( const IntervalDS &a);
+ IntervalDS& operator *=( const Number &factor);
+ IntervalDS& operator /=( const Number &factor);
+
+ friend bool operator>(const IntervalDS &a,
+ const IntervalDS &b) ;
+ friend bool operator<(const IntervalDS &a,
+ const IntervalDS &b) ;
+ friend bool operator >=( const IntervalDS &a,
+ const IntervalDS &b);
+ friend bool operator <=( const IntervalDS &a,
+ const IntervalDS &b);
+
+ //UTF16 support
+ void fromUText( const UString &inpstr, const Environment *env=NULL );
+ UString toUText( unsigned int lfprec, unsigned int fsprec) const;
+
+ private:
+ OCIInterval *ociinter;
+ OCIEnv *ocienv;
+ void *intervalDSExt;
+
+ IntervalDS( OCIEnv *env, OCIInterval *inter, bool toCopy = true) ;
+ OCIInterval * getOCIInterval() const;
+
+ void allocateDataMembers( OCIEnv *env) ;
+ friend const IntervalDS Timestamp::subDS(
+ const Timestamp& val) const ;
+ friend const Timestamp Timestamp::intervalAdd(
+ const IntervalDS& val) const ;
+ friend const Timestamp Timestamp::intervalSub(
+ const IntervalDS& val) const ;
+ friend class Date;
+ friend void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<IntervalDS> &vect) ;
+ friend void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<IntervalDS> &vect) ;
+ friend void do_setVectorOfIntervalDS(Statement *stmt,
+ unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<IntervalDS> &vect,
+ void *schemaName, unsigned int schemaNameLen,
+ void *typeName, unsigned int typeNameLen) ;
+ friend class StatementImpl;
+ friend class ResultSetImpl;
+ friend class AnyDataImpl;
+ friend void getVector(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<IntervalDS> &vect);
+ friend void setVector(AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<IntervalDS> &vect) ;
+
+
+}; //class IntervalDS
+
+class IntervalYM
+{
+
+ public:
+ IntervalYM() ;
+ IntervalYM( const Environment *env,int year=0, int month=0) ;
+ IntervalYM( const IntervalYM &src) ;
+ ~IntervalYM();
+
+ int getYear() const ;
+ int getMonth() const ;
+
+ void set( int year, int month) ;
+ void setNull() ;
+ void fromText( const OCCI_STD_NAMESPACE::string &inpstr,
+ const OCCI_STD_NAMESPACE::string &nlsParam="",
+ const Environment *env=NULL) ;
+ OCCI_STD_NAMESPACE::string toText( unsigned int lfprec,
+ const OCCI_STD_NAMESPACE::string &nlsParam="") const;
+ bool isNull() const;
+ IntervalYM & operator =( const IntervalYM &src) ;
+ IntervalYM& operator +=( const IntervalYM &a);
+ IntervalYM& operator -=( const IntervalYM &a);
+ IntervalYM& operator *=( const Number &factor);
+ IntervalYM& operator /=( const Number &factor);
+
+ friend bool operator>(const IntervalYM &a, const IntervalYM &b) ;
+ friend bool operator<( const IntervalYM &a, const IntervalYM &b) ;
+ friend bool operator >=(const IntervalYM &a, const IntervalYM &b);
+ friend bool operator <=(const IntervalYM &a, const IntervalYM &b);
+
+ //UTF16 support
+ void fromUText( const UString &inpstr, const Environment *env=NULL );
+ UString toUText( unsigned int lfprec ) const;
+
+ private:
+ OCIInterval *ociinter;
+ OCIEnv *ocienv;
+ void *intervalYMExt;
+
+ IntervalYM( OCIEnv *env, OCIInterval *inter, bool toCopy = true) ;
+ OCIInterval *getOCIInterval() const;
+ void allocateDataMembers( OCIEnv *env) ;
+ friend const IntervalYM Timestamp :: subYM(
+ const Timestamp& val) const ;
+ friend const Timestamp Timestamp::intervalAdd(
+ const IntervalYM &val) const ;
+ friend const Timestamp Timestamp::intervalSub(
+ const IntervalYM &val) const ;
+
+ friend void getVector(ResultSet *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<IntervalYM> &vect) ;
+ friend void getVector(Statement *rs, unsigned int,
+ OCCI_STD_NAMESPACE::vector<IntervalYM> &vect) ;
+ friend void do_setVectorOfIntervalYM(Statement *stmt,
+ unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<IntervalYM> &vect,
+ void *schemaName, unsigned int schemaNameLen,
+ void *typeName, unsigned int typeNameLen) ;
+
+ friend class StatementImpl;
+ friend class ResultSetImpl;
+ friend class AnyDataImpl;
+ friend void getVector(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<IntervalYM> &vect);
+ friend void setVector(AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<IntervalYM> &vect) ;
+
+}; //class IntervalYM
+
+
+Number operator+(const Number &a, const Number &b) ;
+Number operator/(const Number ÷nd, const Number &divisor) ;
+Number operator*(const Number &a, const Number &b) ;
+Number operator%(const Number &a, const Number &b) ;
+Number operator-(const Number &subtrahend, const Number &subtractor) ;
+bool operator==(const Number &a, const Number &b);
+bool operator!=(const Number &a, const Number &b);
+
+const IntervalYM operator+(const IntervalYM &a, const IntervalYM &b) ;
+const IntervalYM operator-(const IntervalYM &a, const IntervalYM &b) ;
+const IntervalYM operator*(const IntervalYM &a, const Number& factor);
+const IntervalYM operator/(const IntervalYM &a, const Number &factor);
+bool operator==(const IntervalYM &a, const IntervalYM &b) ;
+bool operator!=(const IntervalYM &a, const IntervalYM &b) ;
+
+const IntervalDS operator+(const IntervalDS &a, const IntervalDS &b) ;
+const IntervalDS operator-(const IntervalDS &a, const IntervalDS &b) ;
+const IntervalDS operator*(const IntervalDS &a, const Number& factor);
+const IntervalDS operator/(const IntervalDS &a, const Number &factor);
+bool operator==(const IntervalDS &a, const IntervalDS &b) ;
+bool operator!=(const IntervalDS &a, const IntervalDS &b) ;
+
+
+typedef struct BFloat
+{
+ float value;
+ bool isNull;
+
+ BFloat()
+ {
+ isNull = false;
+ value = 0.;
+ }
+} BFloat;
+
+typedef struct BDouble
+{
+ double value;
+ bool isNull;
+
+ BDouble()
+ {
+ isNull = false;
+ value = 0.;
+ }
+} BDouble;
+
+/*---------------------------------------------------------------------------
+ EXPORT FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ INTERNAL FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+#ifdef ORAXB8_DEFINED
+/*
+ NAME
+ Lob Region class
+
+ DESCRIPTION
+ Contains the implementation of the Lob Region template Class.
+ This class is the underlying implementation for the BlobRegion and
+ ClobRegion classes.
+
+ RELATED DOCUMENTS
+ Functional/Design Specifications:
+ 18209 - Next Generation LOBs: API
+ 18206 - Next Generation LOBs: Comb. Storage, Compressio & Encryption
+
+ EXPORT FUNCTION(S)
+ LobRegion() - constructors
+ ~LobRegion() - destructor
+ getPrimary() - Get the Primary Lob object
+ getPrimaryOffset() - Get the offset of this region in the Primary Lob.
+ getOffset() - Get the offset of this region in this lob.
+ getLength() - Get the length of this region
+ getMimeType() - Get the mime type of this region
+
+ PUBLIC IMPLEMENTATION FUNCTION(S)
+
+ INTERNAL FUNCTION(S)
+ none
+
+ EXAMPLES
+
+ NOTES
+*/
+
+/*------------------------------ LobRegion ------------------*/
+/*
+ NAME
+ LobRegion - constructor for the class
+
+ PARAMETERS
+ none
+
+ DESCRIPTION
+ default constructor
+
+ RETURNS
+ Nothing
+
+ NOTES
+*/
+template <typename lobType>
+LobRegion<lobType>::LobRegion()
+{
+ _primary = (lobType *)0;
+ _primaryOffset = 0;
+ _offset = 0;
+ _length = 0;
+}
+
+/*------------------------------ ~LobRegion ------------------*/
+/*
+ NAME
+ ~LobRegion - destructor for the class
+
+ PARAMETERS
+ none
+
+ DESCRIPTION
+ default constructor
+
+ RETURNS
+ Nothing
+
+ NOTES
+*/
+template <typename lobType>
+LobRegion<lobType>::~LobRegion()
+{
+ if (_primary != (lobType *)0)
+ {
+ delete _primary;
+ }
+}
+
+template <typename lobType>
+lobType *LobRegion<lobType>::getPrimary()
+{
+ return _primary;
+}
+
+template <typename lobType>
+oraub8 LobRegion<lobType>::getPrimaryOffset()
+{
+ return _primaryOffset;
+}
+
+template <typename lobType>
+oraub8 LobRegion<lobType>::getOffset()
+{
+ return _offset;
+}
+
+template <typename lobType>
+oraub8 LobRegion<lobType>::getLength()
+{
+ return _length;
+}
+
+template <typename lobType>
+OCCI_STD_NAMESPACE::string LobRegion<lobType>::getMimeType()
+{
+ return _mimeType;
+}
+
+template <typename lobType>
+void LobRegion<lobType>::setPrimary(const ConnectionImpl *connp,
+ OCILobLocator *locator)
+{
+ if (locator != (OCILobLocator *)0)
+ {
+ _primary = new lobType(connp, locator, true);
+ }
+}
+
+#endif /* ORAXB8_DEFINED */
+
+} /* end of namespace occi */
+} /* end of namespace oracle */
+#endif /* OCCIDATA_ORACLE */
+
+#endif /* _olint */
--- /dev/null
+/* Copyright (c) 2000, 2007, Oracle. All rights reserved. */
+
+/*
+ NAME
+ occiObjects.h - header file for OCCI object classes
+
+ DESCRIPTION
+ Class definitions for Ref, RefAny, AnyData
+
+ RELATED DOCUMENTS
+ <note any documents related to this facility>
+
+ EXPORT FUNCTION(S)
+ <external functions declared for use outside package - one-line
+ descriptions>
+
+ INTERNAL FUNCTION(S)
+ <other external functions declared - one-line descriptions>
+
+ EXAMPLES
+
+ NOTES
+ <other useful comments, qualifications, etc.>
+
+
+*/
+
+#ifndef _olint /* disable olint check */
+
+#ifndef OCCIOBJECTS_ORACLE
+# define OCCIOBJECTS_ORACLE
+
+#ifndef OCCICOMMON_ORACLE
+#include <occiCommon.h>
+#endif
+
+namespace oracle {
+namespace occi {
+struct AnyDataCtx {
+ ConnectionImpl *occiSession;
+ OCIAnyData *anyData;
+ void *objHeader;
+ ub4 errNum;
+};
+typedef struct AnyDataCtx AnyDataCtx;
+
+class PObject
+{
+ public:
+ enum LockOption {OCCI_LOCK_WAIT, OCCI_LOCK_NOWAIT};
+ enum UnpinOption {OCCI_PINCOUNT_DECR, OCCI_PINCOUNT_RESET};
+ static void destroy(void *);
+ static void refresh(void *);
+ PObject();
+ PObject(const void *ctx);
+ PObject(const PObject& obj);
+ virtual ~PObject();
+ PObject& operator=(const PObject& obj);
+ void *operator new(size_t size);
+ void *operator new(size_t size, const Connection *x,
+ const OCCI_STD_NAMESPACE::string& tablename,
+ const char *typeName);
+ void *operator new(size_t size, const Connection *sess,
+ const OCCI_STD_NAMESPACE::string& tablename,
+ const OCCI_STD_NAMESPACE::string& typName ,
+ const OCCI_STD_NAMESPACE::string& schTabName="",
+ const OCCI_STD_NAMESPACE::string& schTypName = "");
+ void *operator new(size_t size, const Connection *sess,
+ const UString& tablename, const UString &typName,
+ const UString& schTabName, const UString& schTypName);
+ void *operator new(size_t size, void *adctx);
+ void operator delete(void *obj, size_t size);
+ RefAny getRef() const;
+ bool isLocked() const;
+ void unpin(UnpinOption mode=OCCI_PINCOUNT_DECR);
+ void pin();
+ void lock(PObject::LockOption lock_option);
+ void unmark();
+ void flush();
+ void markDelete();
+ void markModified();
+ bool isNull() const;
+ void setNull();
+ const Connection *getConnection() const;
+ virtual OCCI_STD_NAMESPACE::string getSQLTypeName() const = 0;
+ virtual void getSQLTypeName(Environment *env, void **schName,
+ unsigned int &schNameLen, void **typeName,
+ unsigned int &typeNameLen) const = 0;
+ void getSQLTypeName(Environment *env, void *(*rSQL)(void *),
+ void **schname, unsigned int &schnamelen,
+ void **typname, unsigned int &typnamelen) const;
+ virtual void writeSQL(AnyData& stream) = 0;
+ virtual void readSQL(AnyData& stream) = 0;
+ private:
+ static void initialise( void * obj, const Connection * sess,
+ void *schTabName, unsigned int schTabLen,
+ void *tableName, unsigned int tabLen,
+ void *schTypName, unsigned int schTypLen,
+ void *typeName, unsigned int typLen);
+
+ ConnectionImpl *occiSession_;
+ void *objHeader_;
+ ub2 customNewed_;
+ enum {CUSTOM_NEWED = 0x5cde};
+ ub2 flags_;
+ enum {NULL_INFO = 0x0001, GARBAGE_COLLECTED = 0x0002,
+ REFRESH_OBJECT = 0x0004,
+ CACHED_OBJECT = 0xBAF8};
+ //check PObject implementation for CACHED_OBJECT flag
+ // for future use
+ void *pobjectExt;
+ friend class RefImpl;
+};
+
+class AnyData
+{
+ public:
+ ~AnyData();
+ AnyData(void *any) ;
+ AnyData(const Connection *sessp);
+ AnyData(const Connection *sessp, OCIAnyData *any, bool freeImg = true) ;
+
+ AnyData(const AnyData &src);
+ AnyData& operator = (const AnyData &src);
+
+ OCIAnyData* getOCIAnyData() const;
+ const Connection* getConnection() const;
+
+
+ bool isNull() const ;
+ void setNull() ;
+ OCCI_STD_NAMESPACE::string getString() const ;
+ UString getUString() const ;
+ Blob getBlob() const ;
+ Clob getClob() const ;
+ Bfile getBfile() const ;
+ BFloat getBFloat() const ;
+ BDouble getBDouble() const ;
+ Number getNumber() const ;
+ Bytes getBytes() const ;
+ Date getDate() const ;
+ Timestamp getTimestamp() const ;
+ IntervalYM getIntervalYM() const ;
+ IntervalDS getIntervalDS() const ;
+ PObject *getObject(void *(*rSQL)(void *)) const ;
+ RefAny getRef() const ;
+
+ void setString(const OCCI_STD_NAMESPACE::string &str) ;
+ void setUString(const UString &str) ;
+ void setBlob(const Blob &blob) ;
+ void setClob(const Clob &clob) ;
+ void setBfile(const Bfile &bfile) ;
+ void setBFloat(const BFloat &n) ;
+ void setBDouble(const BDouble &n) ;
+ void setNumber(const Number &n) ;
+ void setBytes(const Bytes &bytes) ;
+ void setDate(const Date &date) ;
+ void setTimestamp(const Timestamp ×tamp) ;
+ void setIntervalYM(const IntervalYM &intervalym) ;
+ void setIntervalDS(const IntervalDS &intervalds) ;
+ void setObject(const PObject *objptr) ;
+ void setRef(const RefAny &ref) ;
+
+ void setFromString(const OCCI_STD_NAMESPACE::string &str) ;
+ void setFromBfile(const Bfile &bfile) ;
+ void setFromBFloat(const BFloat &n) ;
+ void setFromBDouble(const BDouble &n) ;
+ void setFromNumber(const Number &n) ;
+ void setFromBytes(const Bytes &bytes) ;
+ void setFromDate(const Date &date) ;
+ void setFromTimestamp(const Timestamp ×tamp) ;
+ void setFromIntervalYM(const IntervalYM &intervalym) ;
+ void setFromIntervalDS(const IntervalDS &intervalds) ;
+ void setFromObject(const PObject *objptr) ;
+ void setFromRef(const RefAny &ref,
+ const OCCI_STD_NAMESPACE::string &typname,
+ const OCCI_STD_NAMESPACE::string &schname) ;
+
+ OCCI_STD_NAMESPACE::string getAsString() const ;
+ Bfile getAsBfile() const ;
+ BFloat getAsBFloat() const ;
+ BDouble getAsBDouble() const ;
+ Number getAsNumber() const ;
+ Bytes getAsBytes() const ;
+ Date getAsDate() const ;
+ Timestamp getAsTimestamp() const ;
+ IntervalYM getAsIntervalYM() const ;
+ IntervalDS getAsIntervalDS() const ;
+ PObject *getAsObject() const ;
+ RefAny getAsRef() const ;
+
+ TypeCode getType() const;
+
+ private:
+
+
+ // private data members
+ Ptr<AnyDataImpl> anyDataImplPtr;
+
+
+};
+
+template <class T>
+class Ref
+{
+ public:
+
+ Ref();
+ Ref(const T *obj) ;
+ Ref(const RefAny &refAny) ;
+ Ref(const Ref<T> &src) ;
+ Ref(const Connection *sessp, OCIRef *tref, bool copy=TRUE)
+ ;
+ ~Ref();
+ Ref<T>& operator=(const Ref<T> &src)
+ ;
+ Ref<T>& operator=(const T *obj) ;
+ Ref<T>& operator=(const RefAny &src);
+ T * operator->() ;
+ T * ptr() ;
+ T & operator *() ;
+ const T * operator->() const;
+ const T * ptr() const;
+ const T & operator *() const ;
+ void markDelete() ;
+ void unmarkDelete() ;
+ void setNull();
+ bool isNull() const;
+ void clear() ;
+ bool isClear() const;
+ void setPrefetch(const OCCI_STD_NAMESPACE::string &typeName,
+ unsigned int depth);
+ void setPrefetch(const OCCI_STD_NAMESPACE::string &schName,
+ const OCCI_STD_NAMESPACE::string &typeName,
+ unsigned int depth);
+ void setPrefetch(const UString &schName,
+ const UString &typeName,
+ unsigned int depth);
+ void setPrefetch(unsigned int depth) ;
+ void setLock(LockOptions );
+ operator RefAny() const;
+ OCIRef *getRef() const;
+ const Connection *getConnection() const;
+ bool operator == (const Ref<T> &ref) const;
+ bool operator != (const Ref<T> &ref) const;
+ bool operator == (const RefAny &refAnyR) const ;
+ bool operator != (const RefAny &refAnyR) const ;
+ OCIComplexObject *getCor() const;
+ void setPinnedObject(PObject *objPtr);
+ private:
+
+ RefImpl *rimplPtr;
+};
+
+
+class RefImpl
+{
+ public:
+
+ RefImpl();
+ RefImpl(PObject *obj) ;
+ RefImpl(const RefAny &refAny) ;
+ RefImpl(const RefImpl &src) ;
+ RefImpl(const Connection *sessp, OCIRef *tref,
+ bool copy=TRUE) ;
+ ~RefImpl();
+ bool isNull() const ;
+ void setNull() ;
+ void markDelete() ;
+ void unmarkDelete() ;
+ void clear() ;
+ bool isClear() const ;
+ void setPrefetch(const OCCI_STD_NAMESPACE::string &typeName,
+ unsigned int depth) ;
+ void setPrefetch(const OCCI_STD_NAMESPACE::string &schName,
+ const OCCI_STD_NAMESPACE::string &typeName,
+ unsigned int depth);
+ void setPrefetch(const UString &schName,
+ const UString &typeName,
+ unsigned int depth);
+ void setPrefetch(unsigned int depth) ;
+ void setLock(LockOptions lckOption) ;
+ PObject *pin() ;
+ void unpin(PObject *obj) ;
+ void setRefFromObjPtr(const PObject *obj) ;
+ OCIRef* getRef() const;
+ void setRefImpl(RefImpl *rptr);
+ const Connection * getConnection() const;
+ bool operator == (const RefImpl &refI) const ;
+ bool operator == (const RefAny &refAnyR) const ;
+ void assignObj(PObject *newObjPtr) ;
+ void assignRefAny(const RefAny &src) ;
+ // added following methods
+ bool isEqual(PObject *obj);
+ void operator = ( const RefImpl &src);
+ OCIComplexObject *getCor() const;
+ void setPinnedObject( PObject *objPtr);
+ private:
+
+ OCIRef *ref;
+ const ConnectionImpl *sessp;
+ OCIComplexObject *corhp;
+ OCCI_STD_NAMESPACE::list<void *> descriptorList;
+ LockOptions lockOption;
+ // added data member for object header
+ void *objHeader;
+ //common implementation function for setPrefetch
+ void do_setPrefetch(void *schName, unsigned int schNameLen,
+ void *typeName, unsigned int typeNameLen,
+ unsigned int depth);
+};
+
+
+class RefAny
+{
+ public:
+
+ RefAny();
+ RefAny (const Connection *sessptr, const OCIRef *ref);
+ RefAny (const Connection *sessptr, const OCIRef *ref, bool isowner);
+ ~RefAny() ;
+ RefAny(const RefAny& src) ;
+ RefAny& operator=(const RefAny& src) ;
+ void markDelete() ;
+ void unmarkDelete() ;
+ void clear() ;
+ bool isNull() const;
+ OCIRef * getRef() const;
+ const Connection * getConnection() const;
+ bool operator == (const RefAny &refAnyR) const;
+ bool operator != (const RefAny &refAnyR) const;
+ bool isOwner() const;
+
+ private:
+
+ OCIRef *ref;
+ const ConnectionImpl *sessp;
+ // for future use
+ void *refanyExt;
+ bool owner;
+
+ friend RefAny MetaData::getRef(MetaData::AttrId) const;
+ friend RefAny PObject::getRef() const;
+ friend class AnyDataImpl;
+ friend class ResultSetImpl;
+ friend class StatementImpl;
+ friend void getVector(const ResultSet *rs,
+ unsigned int colIndex,
+ OCCI_STD_NAMESPACE::vector<RefAny> &vect) ;
+ friend void getVector(const Statement *stmt,
+ unsigned int colIndex,
+ OCCI_STD_NAMESPACE::vector<RefAny> &vect) ;
+};
+
+template <class T>
+Ref<T>::Ref()
+{
+ rimplPtr = new RefImpl();
+}
+
+template <class T>
+Ref<T>::Ref(const T *obj)
+{
+ rimplPtr = new RefImpl((PObject *)obj);
+}
+
+template <class T>
+Ref<T>::Ref(const RefAny &refAny)
+
+{
+ rimplPtr = new RefImpl(refAny);
+}
+
+template <class T>
+Ref<T>::Ref(const Ref<T>& src)
+
+{
+ rimplPtr = new RefImpl(*(src.rimplPtr));
+}
+
+template <class T>
+Ref<T>::Ref(const Connection *sessp, OCIRef *tref, bool copy)
+
+{
+ rimplPtr = new RefImpl(sessp, tref, copy);
+}
+
+template <class T>
+Ref<T>::~Ref()
+{
+ delete rimplPtr;
+}
+
+
+template <class T>
+Ref<T>& Ref<T>::operator=(const Ref<T> &src)
+{
+ if (&src == this)
+ return *this;
+ *rimplPtr = *(src.rimplPtr);
+ return *this;
+}
+
+template <class T>
+Ref<T>& Ref<T>::operator=(const T *obj)
+{
+ if (rimplPtr->isEqual((PObject *)obj))
+ return *this;
+ rimplPtr->assignObj((PObject *)obj);
+ return *this;
+}
+
+template <class T>
+Ref<T>& Ref<T>::operator=(const RefAny &src)
+{
+ rimplPtr->assignRefAny(src);
+ return *this;
+}
+
+template <class T>
+T* Ref<T>::operator->()
+{
+ return ((T *)rimplPtr->pin());
+}
+
+template <class T>
+T* Ref<T>::ptr()
+{
+ return ((T *)rimplPtr->pin());
+}
+
+template <class T>
+T& Ref<T>::operator * ()
+{
+ return ((T &)(*(rimplPtr->pin())));
+}
+
+template <class T>
+const T* Ref<T>::operator->() const
+{
+ return ((const T *)rimplPtr->pin());
+}
+
+template <class T>
+const T* Ref<T>::ptr() const
+{
+ return ((const T *)rimplPtr->pin());
+}
+
+template <class T>
+const T& Ref<T>::operator * () const
+{
+ return ((const T &)(*(rimplPtr->pin())));
+}
+
+template <class T>
+void Ref<T>::markDelete ()
+{
+ rimplPtr->markDelete();
+}
+
+template <class T>
+void Ref<T>::unmarkDelete ()
+{
+ rimplPtr->unmarkDelete();
+}
+
+template <class T>
+void Ref<T>::setNull()
+{
+ rimplPtr->setNull();
+}
+
+template <class T>
+bool Ref<T>::isNull() const
+{
+ return rimplPtr->isNull();
+}
+
+template <class T>
+void Ref<T>::clear ()
+{
+ rimplPtr->clear();
+}
+
+template <class T>
+bool Ref<T>::isClear() const
+{
+ return rimplPtr->isClear();
+}
+
+template <class T>
+void Ref<T>::setPrefetch (const OCCI_STD_NAMESPACE::string &typeName,
+unsigned int depth)
+
+{
+ rimplPtr->setPrefetch(typeName,depth);
+}
+
+template <class T>
+void Ref<T>::setPrefetch (const OCCI_STD_NAMESPACE::string &schemaName,
+const OCCI_STD_NAMESPACE::string &typeName,
+unsigned int depth)
+
+{
+ rimplPtr->setPrefetch(schemaName,typeName,depth);
+}
+
+template <class T>
+void Ref<T>::setPrefetch (const UString &schemaName,
+const UString &typeName,
+unsigned int depth)
+
+{
+ rimplPtr->setPrefetch(schemaName,typeName,depth);
+}
+
+template <class T>
+void Ref<T>::setPrefetch (unsigned int depth)
+
+{
+ rimplPtr->setPrefetch(depth);
+}
+
+template <class T>
+void Ref<T>::setLock (LockOptions lckOption)
+{
+ rimplPtr->setLock(lckOption);
+}
+
+template <class T>
+OCIRef* Ref<T>::getRef() const
+{
+ return (rimplPtr->getRef());
+}
+
+template<class T>
+const Connection* Ref<T>::getConnection () const
+{
+ return (rimplPtr->getConnection());
+}
+
+template <class T>
+Ref<T>::operator RefAny () const
+{
+ if (isNull())
+ return RefAny();
+ return (RefAny(rimplPtr->getConnection(), rimplPtr->getRef()));
+}
+
+template <class T>
+bool Ref<T>::operator ==(const Ref<T> &ref) const
+
+{
+ return ( (*rimplPtr) == (*(ref.rimplPtr)) );
+}
+
+template <class T>
+bool Ref<T>::operator !=(const Ref<T> &ref) const
+
+{
+ return ( !((*rimplPtr) == (*(ref.rimplPtr))) );
+}
+
+template <class T>
+bool Ref<T>::operator == (const RefAny & refAnyR) const
+
+{
+ return ( (*rimplPtr) == refAnyR );
+}
+
+template <class T>
+bool Ref<T>::operator != (const RefAny & refAnyR) const
+
+{
+ return ( !((*rimplPtr) == refAnyR ));
+}
+
+template <class T>
+OCIComplexObject * Ref<T>::getCor() const
+{
+ return (rimplPtr->getCor());
+}
+
+template < class T>
+void Ref<T>::setPinnedObject( PObject *objPtr)
+{
+ rimplPtr->setPinnedObject(objPtr);
+}
+
+/*---------------------------------------------------------------------------
+ PROTOTYPES USED BY FUNCTION TEMPLATES
+ ---------------------------------------------------------------------------*/
+ void getVectorOfOCIRefs( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<void *> &vect);
+ void getVectorOfPObjects( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector< PObject* > &vect,
+ void *(*rSQL)(void *)) ;
+ void setVectorOfOCIRefs( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<void *> &vect,
+ const OCCI_STD_NAMESPACE::vector< OCIInd> &vec_ind) ;
+ void setVectorOfPObjects( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector< PObject* > &vect) ;
+
+/*---------------------------------------------------------------------------
+ EXPORT FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+/*------------------- getVector for POBject----------------------------*/
+/*
+ NAME
+ getVector - overloaded function. Retrieves the attribute in the
+ current position as a vector of PObject
+
+ PARAMETERS
+ any - AnyData
+ vect- reference to vector of PObject (OUT parameter).
+
+ DESCRIPTION
+ Retrieves the attribute in the current position as a vector
+ of PObject
+ The attribute at the current position should be a collection
+ type (varray or nested table). The SQL type of the elements in
+ the collection should be compatible with PObject
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : user defined types (SQLT_NTY) etc.
+*/
+
+#if defined(WIN32COMMON) || defined(__MVS__)
+// and other platforms that do not support
+// partial function template specialization
+ template <class T>
+ void getVector(const AnyData &any, OCCI_STD_NAMESPACE::vector<T> &vect,
+ void *(*rSQL)(void *))
+ {
+ OCCI_STD_NAMESPACE::vector< PObject *> vec_pobj;
+ getVectorOfPObjects( any, vec_pobj, rSQL);
+
+ vect.clear();
+ unsigned int size= vec_pobj.size();
+ vect.reserve( size );
+ for( unsigned int i=0; i< size; i++)
+ vect.push_back( (T)vec_pobj[i] );
+ }
+#else
+ template <class T>
+ void getVector(const AnyData &any, OCCI_STD_NAMESPACE::vector<T*> &vect,
+ void *(*rSQL)(void *))
+ {
+ OCCI_STD_NAMESPACE::vector< PObject *> vec_pobj;
+ getVectorOfPObjects( any, vec_pobj, rSQL);
+
+ vect.clear();
+ unsigned int size= vec_pobj.size();
+ vect.reserve( size );
+ for( unsigned int i=0; i< size; i++)
+ vect.push_back( (T*)vec_pobj[i] );
+ }
+#endif /* end of #ifdef WIN32COMMON */
+
+ /*------------------- getVector for Ref<T>----------------------------*/
+/*
+ NAME
+ getVector - overloaded function. Retrieves the attribute in the
+ current position as a vector of PObject
+
+ PARAMETERS
+ any - AnyData
+ vect- reference to vector of PObject (OUT parameter).
+
+ DESCRIPTION
+ Retrieves the attribute in the current position as a vector
+ of PObject
+ The attribute at the current position should be a collection
+ type (varray or nested table). The SQL type of the elements in
+ the collection should be compatible with PObject
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : user defined types (SQLT_NTY) etc.
+*/
+#if !defined(WIN32COMMON) && !defined(__MVS__)
+ template <class T>
+ void getVector(const AnyData &any,OCCI_STD_NAMESPACE::vector< Ref<T> > &vect)
+ {
+ OCCI_STD_NAMESPACE::vector< void *> vec_ref;
+ getVectorOfOCIRefs( any, vec_ref);
+
+ vect.clear();
+ unsigned int size = vec_ref.size();
+ vect.reserve( size );
+ const Connection *sess = any.getConnection();
+
+ for (unsigned int i=0; i< size; i++)
+ {
+ if (vec_ref[i] == (OCIRef *)0)
+ vect.push_back(Ref<T>()); // pushing a default-constructed Ref
+ else
+ vect.push_back(Ref<T>(sess, (OCIRef *)vec_ref[i], FALSE));
+ }
+ }
+#endif /* end of #ifndef WIN32COMMON */
+
+/*-----------------------setVector for PObject--------------------------*/
+/*
+ NAME
+ setVector - overloaded function. sets the attribute in the current
+ position of anydata with the vector elements.
+
+ PARAMETERS
+ none.
+
+ DESCRIPTION
+ sets the attribute in the current position in anydata with the
+ vector elements.
+ The attribute in the current position of anydata should be a
+ collection type. If the collection type is a varray, the input vector
+ size should be equal to the size of the varray. Also the SQL type of
+ the collection's elements should be compatible with PObject.
+
+ RETURNS
+ nothing.
+
+ NOTES
+ compatible SQL types : SQLT_NTY (user defined types).
+*/
+#if defined(WIN32COMMON) || defined(__MVS__)
+// and other platforms that do not support
+// partial function template specialization
+
+ template <class T>
+ void setVector(AnyData &any, const OCCI_STD_NAMESPACE::vector<T> &vect)
+ {
+ OCCI_STD_NAMESPACE::vector< PObject *> vec_pobj;
+ unsigned int size= vect.size();
+ vec_pobj.reserve( size );
+ for( unsigned int i=0; i< size; i++)
+ vec_pobj.push_back( vect[i] );
+ setVectorOfPObjects( any, vec_pobj);
+
+ }
+
+#else
+
+ template <class T>
+ void setVector(AnyData &any, const OCCI_STD_NAMESPACE::vector<T*> &vect)
+ {
+ OCCI_STD_NAMESPACE::vector< PObject *> vec_pobj;
+ unsigned int size= vect.size();
+ vec_pobj.reserve( size );
+ for( unsigned int i=0; i< size; i++)
+ vec_pobj.push_back( vect[i] );
+ setVectorOfPObjects( any, vec_pobj);
+
+ }
+#endif /* end of #ifdef WIN32COMMON */
+
+/*-----------------------setVector for Ref<T>--------------------------*/
+/*
+ NAME
+ setVector - overloaded function. sets the attribute in the current
+ position of anydata with the vector elements.
+
+ PARAMETERS
+ none.
+
+ DESCRIPTION
+ sets the attribute in the current position in anydata with the
+ vector elements.
+ The attribute in the current position of anydata should be a
+ collection type. If the collection type is a varray, the input vector
+ size should be equal to the size of the varray. Also the SQL type of
+ the collection's elements should be compatible with PObject.
+
+ RETURNS
+ nothing.
+
+ NOTES
+ compatible SQL types : SQLT_NTY (user defined types).
+*/
+#if !defined(WIN32COMMON) && !defined(__MVS__)
+ template <class T>
+ void setVector(AnyData &any, const OCCI_STD_NAMESPACE::vector< Ref<T> > &vect)
+ {
+ OCCI_STD_NAMESPACE::vector< void *> vec_ref;
+ OCCI_STD_NAMESPACE::vector<OCIInd> vec_ind;
+
+ unsigned int size= vect.size();
+ vec_ref.reserve( size );
+ vec_ind.reserve( size );
+ for( unsigned int i=0; i< size; i++)
+ {
+ vec_ref.push_back( vect[i].getRef() );
+ vec_ind.push_back(vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+ setVectorOfOCIRefs( any, vec_ref, vec_ind);
+
+ }
+#endif /* end of #ifndef WIN32COMMON */
+
+// Platform independent get/setVectorOfRefs method added
+// get(set)Vector of Ref<T> and get(set)VectorOfRefs are identical
+// in functionality.
+
+ /*------------------- getVectorOfRefs for Ref<T>----------------------------*/
+/*
+ NAME
+ getVectorOfRefs - overloaded function. Retrieves the attribute in the
+ current position as a vector of PObject
+
+ PARAMETERS
+ any - AnyData
+ vect- reference to vector of PObject (OUT parameter).
+
+ DESCRIPTION
+ Retrieves the attribute in the current position as a vector
+ of PObject
+ The attribute at the current position should be a collection
+ type (varray or nested table). The SQL type of the elements in
+ the collection should be compatible with PObject
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : user defined types (SQLT_NTY) etc.
+*/
+
+ template <class T>
+ void getVectorOfRefs(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector< Ref<T> > &vect)
+ {
+ OCCI_STD_NAMESPACE::vector< void *> vec_ref;
+ getVectorOfOCIRefs( any, vec_ref);
+
+ vect.clear();
+ unsigned int size = vec_ref.size();
+ vect.reserve( size );
+ const Connection *sess = any.getConnection();
+
+ for (unsigned int i=0; i< size; i++)
+ {
+ if (vec_ref[i] == (OCIRef *)0)
+ vect.push_back(Ref<T>()); // pushing a default-constructed Ref
+ else
+ vect.push_back(Ref<T>(sess, (OCIRef *)vec_ref[i], FALSE));
+ }
+ }
+
+/*-----------------------setVectorOfRefs for Ref<T>--------------------------*/
+/*
+ NAME
+ setVectorOfRefs - overloaded function. sets the attribute in the current
+ position of anydata with the vector elements.
+
+ PARAMETERS
+ none.
+
+ DESCRIPTION
+ sets the attribute in the current position in anydata with the
+ vector elements.
+ The attribute in the current position of anydata should be a
+ collection type. If the collection type is a varray, the input vector
+ size should be equal to the size of the varray. Also the SQL type of
+ the collection's elements should be compatible with PObject.
+
+ RETURNS
+ nothing.
+
+ NOTES
+ compatible SQL types : SQLT_NTY (user defined types).
+*/
+
+ template <class T>
+ void setVectorOfRefs(AnyData &any,
+ const OCCI_STD_NAMESPACE::vector< Ref<T> > &vect)
+
+ {
+ OCCI_STD_NAMESPACE::vector< void *> vec_ref;
+ OCCI_STD_NAMESPACE::vector<OCIInd> vec_ind;
+
+ unsigned int size= vect.size();
+ vec_ref.reserve( size );
+ vec_ind.reserve( size );
+ for( unsigned int i=0; i< size; i++)
+ {
+ vec_ref.push_back( vect[i].getRef() );
+ vec_ind.push_back(vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+ setVectorOfOCIRefs( any, vec_ref, vec_ind);
+
+ }
+
+
+/*---------------------------------------------------------------------------
+ INTERNAL FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+} /* end of namespace occi */
+} /* end of namespace oracle */
+#endif /* OCCIOBJECTS_ORACLE */
+
+#endif /* _olint */
--- /dev/null
+/* Copyright (c) 1995, 2011, Oracle and/or its affiliates.
+All rights reserved. */
+
+/*
+ NAME
+ oci.h - V8 Oracle Call Interface public definitions
+
+ DESCRIPTION
+ This file defines all the constants and structures required by a V8
+ OCI programmer.
+
+ RELATED DOCUMENTS
+ V8 OCI Functional Specification
+ Oracle Call Interface Programmer's Guide Vol 1 and 2
+
+ INSPECTION STATUS
+ Inspection date:
+ Inspection status:
+ Estimated increasing cost defects per page:
+ Rule sets:
+
+ ACCEPTANCE REVIEW STATUS
+ Review date:
+ Review status:
+ Reviewers:
+
+ PUBLIC FUNCTION(S)
+ None
+
+ PRIVATE FUNCTION(S)
+ None
+
+ EXAMPLES
+
+ NOTES
+
+
+ MODIFIED (MM/DD/YY)
+ umabhat 05/29/11 - Backport umabhat_bug-10209825 from main
+ slari 03/24/11 - add OCI_ATTR_RESERVED_438 and OCI_ATTR_RESERVED_439
+ rphillip 09/28/10 - Bug 9835605: recnum changes
+ rphillip 08/03/09 - Bug 8720046: add OCI_ATTR_DIRPATH_USE_ACTIVE_TRANS
+ mbastawa 03/15/10 - add OCI_FETCH_RESERVED_6
+ ebatbout 12/28/09 - 8465341: Add OCI_ATTR_DIRPATH_RESERVED_22
+ ssahu 04/15/09 - Add user handle as an attribute to session pool
+ handle
+ dalpern 03/17/09 - bug 7646876: applying_crossedition_trigger
+ kneel 11/21/08 - bump OCI version to 11.2
+ thoang 09/24/08 - include ocixstream.h
+ asohi 08/25/08 - Bug 7320582 : AQ dequeue navigation flags fix
+ thoang 08/04/08 - Add XStream attributes
+ msowdaga 07/23/08 - Add flag OCI_SESSGET_SYSDBA
+ rphillip 03/21/08 - Add partition memory attribute
+ nikeda 04/15/08 - Support OCIP_ATTR_CONTYPE
+ mbastawa 12/24/07 - add server, envhp attributes
+ slynn 03/18/08 -
+ amullick 02/11/08 - add support for OCILobGet/SetContentType
+ tbhosle 01/07/08 - add OCI_ATTR_SUBSCR_IPADDR
+ nikeda 12/19/07 - Add OCI_SUBSCR_QOS_HAREG
+ rphillip 10/22/07 - Add OCI_ATTR_DIRPATH_NO_INDEX_ERRORS
+ debanerj 12/14/07 - Added OCI_ATTR_RESERVED_38 and OCI_ATTR_RESERVED_39
+ umabhat 09/20/07 - bug6119750 added OCI_FNCODE_APPCTXSET &
+ OCI_FNCODE_APPCTXCLEARALL
+ debanerj 04/10/07 - XDS Attributes
+ msakayed 05/24/07 - Bug #5095734: add OCI_ATTR_DIRPATH_RESERVED_19
+ schoi 03/02/07 - Get/SetOptions API change
+ ebatbout 03/30/07 - 5598333: Add OCI_ATTR_DIRPATH_RESERVED_18
+ nikeda 03/21/07 - Add OCI_ATTR_RESERVED_37
+ abande 03/06/07 - Remove attributes for global stmt cache and
+ metadata cache
+ rphillip 02/20/07 - Add OCI_ATTR_DIRPATH_RESERVED_17
+ shan 11/16/06 - bug 5595911.
+ msakayed 12/04/06 - Bug #5660845: add OCI_DIRPATH_INPUT_OCI
+ gviswana 10/26/06 - Remove OCI_ATTR_CURRENT_EDITION
+ maramali 09/29/06 - bug 5568492, added OCI_NLS_LOCALE_A2_ISO_2_ORA
+ gviswana 09/29/06 - CURRENT_EDITION -> EDITION
+ aramappa 09/20/06 - Update major and minor version information
+ slynn 07/28/06 - Migrate to new 11g LOB terminiology
+ debanerj 07/20/06 - Add OCI_ATTR_LOBPREFETCH_LENGTH
+ mbastawa 06/25/06 - add OCI_ATTR_RESERVED_36
+ hqian 05/22/06 - 11gR1 proj-18303: add OCI_SYSASM
+ dkogan 04/06/06 - disable charset validation by default
+ jhealy 05/15/06 - Add TimesTen OCI adapter.
+ slynn 06/20/06 - GetSharedRegions
+ rthammai 06/13/06 - add reserved attribute
+ msakayed 06/15/06 - Project 20586: interval partitioning support
+ debanerj 10/25/05 - LOB prefetch
+ slynn 05/25/06 - New NG Lob Functionality.
+ yujwang 05/16/06 - Add OCI_ATTR_RESERVED_33, OCI_ATTR_RESERVED_34
+ abande 04/25/06 - 18297: Add attributes for global stmt cache and
+ metadata cache
+ ssvemuri 04/26/06 - Constants for Query Notification support
+ jgiloni 05/05/06 - Add OCI_ATCH_RESERVED_7
+ mxyang 02/01/06 - Added OCI_ATTR_CURRENT_EDITION attribute
+ hqian 05/04/06 - new runtime capability attribute for asm volume
+ nikeda 06/06/06 - OCI_TT: Add new OCIP attributes
+ aramappa 04/17/06 - Added OCI_FNCODE_ARRAYDESCRIPTORALLOC and
+ OCI_FNCODE_ARRAYDESCRIPTORFREE
+ debanerj 05/04/06 - 18313: OCI Net Fusion
+ rupsingh 05/26/06 -
+ jacao 05/11/06 -
+ absaxena 04/17/06 - add notification grouping attributes
+ rpingte 02/02/06 - add OCI_ATCH_RESERVED_6
+ rpingte 04/27/06 - Add OCI_ATTR_DRIVER_NAME
+ jawilson 02/14/06 - add OCI_FNCODE_AQENQSTREAM
+ kneel 04/03/06 - Adding support in kjhn for critical severity
+ rphillip 03/31/06 - Add OCI_ATTR_DIRPATH_RESERVED_14
+ mxyang 02/01/06 - Added OCI_ATTR_APPLICATION_EDITION attribute
+ rphillip 01/30/06 - Add new DPAPI attrs
+ ebatbout 11/03/05 - Add direct path support for multiple subtypes
+ porangas 02/22/06 - 5055398: Define OCI_STMT_CALL
+ mbastawa 01/31/06 - add OCI_ATTR_RESERVED_26
+ yohu 01/27/06 - align Execution Modes macros
+ sjanardh 01/25/06 - add OCI_EXEC_RESERVED_6
+ sichandr 01/18/06 - add OCI_ATTR_XMLTYPE_BINARY_XML
+ yohu 12/22/05 - add OCI_TRANS_PROMOTE
+ srseshad 09/12/05 - stmtcache: callback
+ krajan 10/25/05 - Added ENABLE_BEQUEATH attach flag
+ mbastawa 09/16/05 - dbhygiene
+ porangas 07/20/04 - 1175350: adding attribute for ognfd
+ chliang 06/30/05 - add OCI_SUPPRESS_NLS_VALIDATION mode
+ aahluwal 03/15/05 - [Bug 4235014]:add ASM, Preconnect events
+ ssappara 08/12/04 - Bug3669429 add OCI_ATTR_DESC_SYNBAS
+ absaxena 03/24/05 - remove OCI_AQ_RESERVED_5
+ mbastawa 03/01/05 - add OCI_EXEC_RESERVED_5
+ msakayed 02/15/05 - Bug #3147299: Add OCI_ATTR_CURRENT_ERRCOL
+ aahluwal 01/11/05 - [Bug 3944589]: add OCI_AUTH_RESERVED_5
+ nikeda 11/15/04 - Add OCIP_IIO
+ rvissapr 11/10/04 - bug 3843644 - isencrypted
+ hohung 11/22/04 - add OCI_BIND_RESERVED_3
+ cchui 10/25/04 - add OCI_ATTR_PROXY_CLIENT
+ aahluwal 09/27/04 - add incarnation, reason, cardinality to event handle
+ msakayed 09/14/04 - column encryption support (project id 5578)
+ jacao 08/17/04 - Add OCI_ATTR_DB_CHARSET_ID
+ mhho 08/29/04 - resolve conflicting mode declaration
+ sgollapu 05/28/04 - Add OCI_AUTH_RESERVED_3
+ mbastawa 08/05/04 - add OCI_ATTR_RESERVED_21
+ ebatbout 07/27/04 - add OCI_ATTR_DIRPATH_RESERVED_9 and move all direct
+ path attributes into a separate area in this file.
+ clei 06/29/04 - add OCI_ATTR_ENCC_SIZE
+ weiwang 05/06/04 - add OCIAQListenOpts and OCIAQLisMsgProps
+ weiwang 04/30/04 - add OCI_AQ_RESERVED_5
+ nbhatt 04/27/04 - add new attribute
+ ssvemuri 06/19/04 - change notification descriptors and attributes
+ ksurlake 06/01/04 - grabtrans 'ksurlake_txn_skmishra_clone'
+ ksurlake 05/13/04 - add subscriber handle attributes
+ mbastawa 06/01/04 - add 3 more OCI_FETCH_RESERVED modes
+ chliang 05/28/04 - add nchar literal replacement modes
+ nikeda 05/14/04 - [OLS on RAC] new authentication mode
+ debanerj 05/17/04 - 13064: add fncodes for LOB array Read and Write
+ nikeda 05/20/04 - [OCI Events] Add incarnation, cardinality,reason
+ nikeda 05/18/04 - [OCI Events] Add OCI_ATTR_SERVICENAME
+ nikeda 05/17/04 - Add event handle
+ nikeda 05/13/04 - [OCI Events] Rename HACBK->EVTCBK, HACTX->EVTCTX
+ nikeda 05/10/04 - [OCI Events] code review changes
+ nikeda 04/15/04 - [OCI Events] OCI_SESSRLS_DROPSESS_FORCE
+ nikeda 04/12/04 - [OCI Events] Add OCI_ATTR_USER_MEMORY
+ aahluwal 04/12/04 - add OCI_HNDLFR_RESERVED5
+ vraja 04/28/04 - add options for redo sync on commit
+ aahluwal 05/29/04 - [OCI Events]: add support for svc, svc member events
+ nikeda 05/28/04 - grabtrans 'nikeda_oci_events_copy'
+ nikeda 05/18/04 - [OCI Events] Add OCI_ATTR_SERVICENAME
+ nikeda 05/17/04 - Add event handle
+ nikeda 05/13/04 - [OCI Events] Rename HACBK->EVTCBK, HACTX->EVTCTX
+ nikeda 05/10/04 - [OCI Events] code review changes
+ nikeda 04/15/04 - [OCI Events] OCI_SESSRLS_DROPSESS_FORCE
+ nikeda 04/12/04 - [OCI Events] Add OCI_ATTR_USER_MEMORY
+ aahluwal 04/12/04 - add OCI_HNDLFR_RESERVED5
+ jciminsk 04/28/04 - merge from RDBMS_MAIN_SOLARIS_040426
+ jacao 03/06/04 - add OCI_ATTR_CURRENT_SCHEMA
+ aahluwal 01/20/04 - remove OCI_KEEP_FETCH_STATE
+ aahluwal 03/25/04 - [OCI Events] add OCI_HTYPE_HAEVENT and related attrs
+ nikeda 03/19/04 - [OCI Events] Add OCI_ATTR_HACBK and OCI_ATTR_HACTX
+ dfrumkin 12/04/03 - Add database startup/shutdown
+ chliang 12/22/03 - grid/main merge: add OCI_ATTR_RESERVED_20
+ jciminsk 12/12/03 - merge from RDBMS_MAIN_SOLARIS_031209
+ sgollapu 09/19/03 - Add fetch modes
+ sgollapu 07/30/03 - Add TSM attributes
+ sgollapu 06/26/03 - Add OCI_MUTEX_TRY
+ aime 06/23/03 - sync grid with main
+ sgollapu 06/07/03 - Add reserved attribute
+ sgollapu 06/05/03 - Add reserved auth flag
+ rpingte 05/22/03 - Add OCI_ATCH_RESERVED_5
+ sgollapu 05/06/03 - Add TSM attributes
+ sgollapu 04/10/03 - Session migration Flags/interfaces
+ dfrumkin 04/23/04 - add OCI_PREP2_RESERVED_1
+ rpingte 05/06/04 - add major and minor version information
+ bsinha 04/06/04 - add new OCI_TRANS flag
+ chliang 11/26/03 - add OCI_ATTR_RESERVED_19
+ preilly 10/23/03 - Make OCI_ATTR_DIRPATH_METADATA_BUF private
+ chliang 08/07/03 - add OCI_ATTR_SKIP_BUFFER
+ srseshad 03/12/03 - convert public oci api to ansi
+ weiwang 05/14/03 - remove iot creation for rule sets
+ rkoti 04/15/03 - [2746515] add fntcodes for Unlimited size LOB 6003
+ tcruanes 05/13/03 - add slave SQL OCI execution mode
+ rkoti 02/21/03 - [2761455] add OCI_FNCODE_AQENQARRAY,
+ OCI_FNCODE_AQDEQARRAY and update OCI_FNCODE_MAXFCN
+ tkeefe 01/29/03 - bug-2773794: Add new interface for setting Kerb attrs
+ aahluwal 02/06/03 - add OCI_ATTR_TRANSFORMATION_NO
+ weiwang 12/05/02 - add OCI_ATTR_USER_PROPERTY
+ ataracha 01/03/03 - include ocixmldb.h
+ preilly 12/05/02 - Add wait attribute for locking when using dir path
+ tkeefe 01/03/03 - bug-2623771: Added OCI_ATTR_KERBEROS_KEY
+ lchidamb 12/13/02 - end-to-end tracing attributes
+ msakayed 10/28/02 - Bug #2643907: add OCI_ATTR_DIRPATH_SKIPINDEX_METHOD
+ rphillip 11/13/02 - Add OCIP_ATTR_DIRPATH_INDEX
+ sagrawal 10/13/02 - liniting
+ sagrawal 10/03/02 - PL/SQL Compiler warnings
+ jstenois 11/07/02 - remove ocixad.h
+ chliang 10/21/02 - add OCI_ATTR_RESERVED_16,17
+ hsbedi 10/30/02 - grabtrans 'jstenois_fix_xt_convert'
+ aahluwal 10/12/02 - add OCI_ATTR_AQ_NUM_E_ERRORS/OCI_ATTR_AQ_ERROR_INDEX
+ bdagevil 10/21/02 - add SQL analyze internal exec mode
+ csteinba 10/11/02 - add OCI_ATTR_RESERVED_16
+ chliang 10/12/02 - add bind row callback attributes
+ preilly 10/25/02 - Add new reserved parameters
+ tkeefe 10/31/02 - bug-2623771: Added OCI_ATTR_AUDIT_SESSION_ID
+ csteinba 10/04/02 - Add OCI_ATTR_RESERVED_15
+ mhho 10/11/02 - add new credential constant
+ thoang 09/25/02 - Add OCI_XMLTYPE_CREATE_CLOB
+ skaluska 10/07/02 - describe rules objects
+ csteinba 09/16/02 - Remove OCI_CACHE
+ gtarora 10/03/02 - OCI_ATTR_COL_SUBS => OCI_ATTR_OBJ_SUBS
+ msakayed 09/09/02 - Bug #2482469: add OCI_ATTR_DIRPATH_RESERVED_[3-6]
+ aahluwal 08/30/02 - adding dequeue across txn group
+ srseshad 04/24/02 - Add attribute OCI_ATTR_SPOOL_STMTCACHESIZE.
+ ebatbout 07/22/02 - Remove OCI_ATTR_RESERVED_11.
+ abande 01/17/02 - Bug 1788921; Add external attribute.
+ aahluwal 06/04/02 - bug 2360115
+ pbagal 05/24/02 - Incorporate review comments
+ pbagal 05/22/02 - Introduce instance type attribute.
+ whe 07/01/02 - add OCI_BIND_DEFINE_SOFT flags
+ gtarora 07/01/02 - Add OCI_ATTR_COL_SUBS
+ tkeefe 05/30/02 - Add support for new proxy authentication credentials
+ dgprice 12/18/01 - bug 2102779 add reserved force describe
+ schandir 11/19/01 - add/modify modes.
+ schandir 11/15/01 - add OCI_SPC_STMTCACHE.
+ schandir 12/06/01 - change mode value of OCI_SPOOL.
+ msakayed 11/02/01 - Bug #2094292: add OCI_ATTR_DIRPATH_INPUT
+ dsaha 11/09/01 - add OCI_DTYPE_RESERVED1
+ skabraha 11/05/01 - new method flag
+ skabraha 10/25/01 - another flag for XML
+ skabraha 10/11/01 - describe flags for subtypes
+ nbhatt 09/18/01 - new reserved AQ flags
+ celsbern 10/19/01 - merge LOG to MAIN
+ ksurlake 10/12/01 - add OCI_ATTR_RESERVED_13
+ ksurlake 08/13/01 - add OCI_ATTR_RESERVED_12
+ schandir 09/24/01 - Adding stmt caching
+ abande 09/04/01 - Adding session pooling
+ sagrawal 10/23/01 - add new bit for OCIPHandleFree
+ preilly 10/25/01 - Add support for specifying metadata on DirPathCtx
+ skabraha 09/24/01 - describe flags for XML type
+ schandir 09/24/01 - Adding stmt caching
+ abande 09/04/01 - Adding session pooling
+ stakeda 09/17/01 - add OCI_NLS_CHARSET_ID
+ whe 09/19/01 - add OCIXMLType create options
+ rpingte 09/11/01 - add OCI_MUTEX_ENV_ONLY and OCI_NO_MUTEX_STMT
+ cmlim 08/28/01 - mod datecache attrs to use same naming as dpapi attrs
+ wzhang 08/24/01 - Add new keywords for OCINlsNameMap.
+ rphillip 05/02/01 - Add date cache attributes
+ rphillip 08/22/01 - Add new stream version
+ ebatbout 04/13/01 - add definition, OCI_ATTR_RESERVED_11
+ chliang 04/12/01 - add shortnames for newer oci funcation
+ wzhang 04/11/01 - Add new OCI NLS constants.
+ cmlim 04/13/01 - remove attrs not used by dpapi (151 & 152 avail)
+ rkambo 03/23/01 - bugfix 1421793
+ cmlim 04/02/01 - remove OCI_ATTR_DIRPATH_{NESTED_TBL, SUBST_OBJ_TBL}
+ - note: attribute #s 186 & 205 available
+ whe 03/28/01 - add OCI_AFC_PAD_ON/OFF mode
+ preilly 03/05/01 - Add stream versioning support to DirPath context
+ schandir 12/18/00 - remove attr CONN_INCR_DELAY.
+ schandir 12/12/00 - change mode from OCI_POOL to OCI_CPOOL.
+ cbarclay 01/12/01 - add atribute for OCIP_ATTR_TMZ
+ whe 01/07/01 - add attributes related to UTF16 env mode
+ slari 12/29/00 - add blank line
+ slari 12/28/00 - OCI_ATTR_RESERVED_10
+ whe 12/19/00 - add OCI_ENVCR_RESERVED3
+ rpang 11/29/00 - Added OCI_ATTR_ORA_DEBUG_JDWP attribute
+ cmlim 11/28/00 - support substitutable object tables in dpapi
+ akatti 10/09/00 - [198379]:add OCIRowidToChar
+ sgollapu 10/11/00 - Add OCI_PREP_RESERVED_1
+ sgollapu 08/27/00 - add attribute to get erroneous column
+ sgollapu 07/29/00 - Add snapshot attributes
+ kmohan 09/18/00 - add OCI_FNCODE_LOGON2
+ abrumm 10/08/00 - include ocixad.h
+ mbastawa 10/04/00 - add OCI_ATTR_ROWS_FETCHED
+ nbhatt 08/24/00 - add transformation attribute
+ dmwong 08/22/00 - OCI_ATTR_CID_VALUE -> OCI_ATTR_CLIENT_IDENTIFIER.
+ cmlim 08/30/00 - add OCI_ATTR_DIRPATH_SID
+ dsaha 08/18/00 - add OCI_ATTR_RESERVED_5
+ amangal 08/17/00 - Merge into 8.2 : 1194361
+ slari 08/03/00 - add OCI_ATTR_HANDLE_POSITION
+ dsaha 07/20/00 - 2rt exec
+ sgollapu 07/04/00 - Add virtual session flag
+ cmlim 07/07/00 - add OCI_ATTR_DIRPATH_OID, OCI_ATTR_DIRPATH_NESTED_TBL
+ etucker 07/28/00 - add OCIIntervalFromTZ
+ rwessman 06/26/00 - N-tier: added new credential attributes
+ whe 07/27/00 - add OCI_UTF16 mode
+ vjayaram 07/18/00 - add connection pooling changes
+ etucker 07/12/00 - add dls apis
+ cmlim 07/07/00 - add OCI_ATTR_DIRPATH_OID, OCI_ATTR_DIRPATH_NESTED_TBL
+ sgollapu 07/04/00 - Add virtual session flag
+ najain 05/01/00 - AQ Signature support
+ sgollapu 06/14/00 - Add reserved OCI mode
+ rkambo 06/08/00 - notification presentation support
+ sagrawal 06/04/00 - ref cursor to c
+ ksurlake 06/07/00 - define OCI_POOL
+ mbastawa 06/05/00 - added scrollable cursor attributes
+ weiwang 03/31/00 - add LDAP support
+ whe 05/30/00 - add OCI_ATTR_MAXCHAR_SIZE
+ whe 05/23/00 - validate OCI_NO_CACHE mode
+ dsaha 02/02/00 - Add no-cache attr in statement handle
+ whe 05/23/00 - add OCIP_ICACHE
+ allee 05/17/00 - describe support for JAVA implmented TYPE
+ preilly 05/30/00 - Continue adding support for objects in direct path lo
+ cmlim 05/16/00 - 8.2 dpapi support of ADTs
+ rxgovind 05/04/00 - OCIAnyDataSet changes
+ rkasamse 05/25/00 - add OCIAnyDataCtx
+ rmurthy 04/26/00 - describe support for inheritance
+ ksurlake 04/18/00 - Add credential type
+ whe 05/24/00 - add OCI_ATTR_CHAR_ attrs
+ rkambo 04/19/00 - subscription enhancement
+ rmurthy 04/26/00 - describe support for inheritance
+ delson 03/28/00 - add OCI_ATTR_RESERVED_2
+ abrumm 03/31/00 - external table support
+ rkasamse 03/13/00 - add declarations for OCIAnyData
+ najain 02/24/00 - support for dequeue as select
+ dsaha 03/10/00 - Add OCI_ALWAYS_BLOCKING
+ esoyleme 04/25/00 - separated transactions
+ sgollapu 12/23/99 - OCIServerAttach extensions
+ slari 08/23/99 - add OCI_DTYPE_UCB
+ slari 08/20/99 - add OCI_UCBTYPE_REPLACE
+ hsbedi 08/31/99 - Memory Stats .
+ sgollapu 08/02/99 - oci sql routing
+ slari 08/06/99 - rename values for OCI_SERVER_STATUS
+ slari 08/02/99 - add OCI_ATTR_SERVER_STATUS
+ tnbui 07/28/99 - Remove OCI_DTYPE_TIMESTAMP_ITZ
+ amangal 07/19/99 - Merge into 8.1.6 : bug 785797
+ tnbui 07/07/99 - Change ADJUSTMENT modes
+ dsaha 07/07/99 - OCI_SAHRED_EXT
+ dmwong 06/08/99 - add OCI_ATTR_APPCTX_*
+ vyanaman 06/23/99 -
+ vyanaman 06/21/99 - Add new OCI Datetime and Interval descriptors
+ esoyleme 06/29/99 - expose MTS performance enhancements
+ rshaikh 04/23/99 - add OCI_SQL_VERSION_*
+ tnbui 05/24/99 - Remove OCIAdjStr
+ dsaha 05/21/99 - Add OCI_ADJUST_UNK
+ mluong 05/17/99 - fix merge
+ tnbui 04/05/99 - ADJUSTMENT values
+ abrumm 04/16/99 - dpapi: more attributes
+ dsaha 02/24/99 - Add OCI_SHOW_DML_WARNINGS
+ jiyang 12/07/98 - Add OCI_NLS_DUAL_CURRENCY
+ slari 12/07/98 - change OCI_NOMUTEX to OCI_NO_MUTEX
+ aroy 11/30/98 - change OCI_NOCALLBACK to OCI_NO_UCB
+ aroy 11/13/98 - add env modes to process modes
+ slari 09/08/98 - add OCI_FNCODE_SVC2HST and _SVCRH
+ aroy 09/04/98 - Add OCI_ATTR_MIGSESSION
+ skray 08/14/98 - server groups for session switching
+ mluong 08/11/98 - add back OCI_HTYPE_LAST.
+ aroy 05/25/98 - add process handle type
+ aroy 04/06/98 - add shared mode
+ slari 07/13/98 - merge forward to 8.1.4
+ slari 07/09/98 - add OCI_BIND_RESERVED_2
+ slari 07/08/98 - add OCI_EXACT_FETCH_RESERVED_1
+ dsaha 07/07/98 - Add OCI_PARSE_ONLY
+ dsaha 06/29/98 - Add OCI_PARSE_ONLY
+ slari 07/01/98 - add OCI_BIND_RESERVED_2
+ sgollapu 06/25/98 - Fix bug 683565
+ slari 06/17/98 - remove OC_FETCH_RESERVED_2
+ slari 06/11/98 - add OCI_FETCH_RESERVED_1 and 2
+ jhasenbe 05/27/98 - Remove definitions for U-Calls (Unicode)
+ jiyang 05/18/98 - remove OCI_ATTR_CARTLANG
+ nbhatt 05/20/98 - OCI_DEQ_REMOVE_NODATA
+ nbhatt 05/19/98 - correct AQ opcode
+ skmishra 05/06/98 - Add precision attribute to Attributes list
+ aroy 04/20/98 - merge forward 8.0.5 -> 8.1.3
+ schandra 05/01/98 - OCI sender id
+ sgollapu 02/19/98 - enhanced array DML
+ nbhatt 05/15/98 - AQ listen call
+ sgollapu 04/27/98 - more attributes
+ skaluska 04/06/98 - Add OCI_PTYPE_SCHEMA, OCI_PTYPE_DATABASE
+ slari 04/28/98 - add OCI_ATTR_PDPRC
+ lchidamb 05/05/98 - change OCI_NAMESPACE_AQ to 1
+ nbhatt 04/27/98 - AQ Notification Descriptor
+ abrumm 06/24/98 - more direct path attributes
+ abrumm 05/27/98 - OCI direct path interface support
+ abrumm 05/08/98 - OCI direct path interface support
+ lchidamb 03/02/98 - client notification additions
+ kkarun 04/17/98 - Add more Interval functions
+ vyanaman 04/16/98 - Add get/set TZ
+ kkarun 04/14/98 - Add OCI Datetime shortnames
+ vyanaman 04/13/98 - Add OCI DateTime and Interval check error codes
+ kkarun 04/07/98 - Add OCI_DTYPE_DATETIME and OCI_DTYPE_INTERVAL
+ esoyleme 12/15/97 - support failover callback retry
+ esoyleme 04/22/98 - merge support for failover callback retry
+ mluong 04/16/98 - add OCI_FNCODE_LOBLOCATORASSIGN
+ rkasamse 04/17/98 - add short names for OCIPickler(Memory/Ctx) cart servi
+ slari 04/10/98 - add OCI_FNCODE_SVCCTXTOLDA
+ slari 04/09/98 - add OCI_FNCODE_RESET
+ slari 04/07/98 - add OCI_FNCODE_LOBFILEISOPEN
+ slari 04/06/98 - add OCI_FNCODE_LOBOPEN
+ slari 03/20/98 - change OCI_CBTYPE_xxx to OCI_UCBTYPE_xxx
+ slari 03/18/98 - add OCI_FNCODE_MAXFCN
+ slari 02/12/98 - add OCI_ENV_NO_USRCB
+ skabraha 04/09/98 - adding shortnames for OCIFile
+ rhwu 04/03/98 - Add short names for the OCIThread package
+ tanguyen 04/03/98 - add OCI_ATTR_xxxx for type inheritance
+ rkasamse 04/02/98 - add OCI_ATTR_UCI_REFRESH
+ nramakri 04/01/98 - Add short names for the OCIExtract package
+ ewaugh 03/31/98 - Add short names for the OCIFormat package.
+ jhasenbe 04/06/98 - Add definitions for U-Calls (Unicode)
+ (OCI_TEXT, OCI_UTEXT, OCI_UTEXT4)
+ skmishra 03/03/98 - Add OCI_ATTR_PARSE_ERROR_OFFSET
+ rwessman 03/11/98 - Added OCI_CRED_PROXY for proxy authentication
+ abrumm 03/31/98 - OCI direct path interface support
+ nmallava 03/03/98 - add constants for temp lob apis
+ skotsovo 03/05/98 - resolve merge conflicts
+ skotsovo 02/24/98 - add OCI_DTYPE_LOC
+ skaluska 01/21/98 - Add OCI_ATTR_LTYPE
+ rkasamse 01/06/98 - add OCI_ATTR* for obj cache enhancements
+ dchatter 01/08/98 - more comments
+ skabraha 12/02/97 - moved oci1.h to the front of include files.
+ jiyang 12/18/97 - Add OCI_NLS_MAX_BUFSZ
+ rhwu 12/02/97 - move oci1.h up
+ ewaugh 12/15/97 - Add short names for the OCIFormat package.
+ rkasamse 12/02/97 - Add a constant for memory cartridge services -- OCI_M
+ nmallava 12/31/97 - open/close for internal lobs
+ khnguyen 11/27/97 - add OCI_ATTR_LFPRECISION, OCI_ATTR_FSPRECISION
+ rkasamse 11/03/97 - add types for pickler cartridge services
+ mluong 11/20/97 - changed ubig_ora to ub4 per skotsovo
+ ssamu 11/14/97 - add oci1.h
+ jiyang 11/13/97 - Add NLS service for cartridge
+ esoyleme 12/15/97 - support failover callback retry
+ jwijaya 10/21/97 - change OCILobOffset/Length from ubig_ora to ub4
+ cxcheng 07/28/97 - fix compile with SLSHORTNAME
+ schandra 06/25/97 - AQ OCI interface
+ sgollapu 07/25/97 - Add OCI_ATTR_DESC_PUBLIC
+ cxcheng 06/16/97 - add OCI_ATTR_TDO
+ skotsovo 06/05/97 - add fntcodes for lob buffering subsystem
+ esoyleme 05/13/97 - move failover callback prototype
+ skmishra 05/06/97 - stdc compiler fixes
+ skmishra 04/22/97 - Provide C++ compatibility
+ lchidamb 04/19/97 - add OCI_ATTR_SESSLANG
+ ramkrish 04/15/97 - Add OCI_LOB_BUFFER_(NO)FREE
+ sgollapu 04/18/97 - Add OCI_ATTR_TABLESPACE
+ skaluska 04/17/97 - Add OCI_ATTR_SUB_NAME
+ schandra 04/10/97 - Use long OCI names
+ aroy 03/27/97 - add OCI_DTYPE_FILE
+ sgollapu 03/26/97 - Add OCI_OTYPEs
+ skmishra 04/09/97 - Added constant OCI_ROWID_LEN
+ dchatter 03/21/97 - add attr OCI_ATTR_IN_V8_MODE
+ lchidamb 03/21/97 - add OCI_COMMIT_ON_SUCCESS execution mode
+ skmishra 03/20/97 - Added OCI_ATTR_LOBEMPTY
+ sgollapu 03/19/97 - Add OCI_ATTR_OVRLD_ID
+ aroy 03/17/97 - add postprocessing callback
+ sgollapu 03/15/97 - Add OCI_ATTR_PARAM
+ cxcheng 02/07/97 - change OCI_PTYPE codes for type method for consistenc
+ cxcheng 02/05/97 - add OCI_PTYPE_TYPE_RESULT
+ cxcheng 02/04/97 - rename OCI_PTYPE constants to be more consistent
+ cxcheng 02/03/97 - add OCI_ATTR, OCI_PTYPE contants for describe type
+ esoyleme 01/23/97 - merge neerja callback
+ sgollapu 12/30/96 - Remove OCI_DTYPE_SECURITY
+ asurpur 12/26/96 - CHanging OCI_NO_AUTH to OCI_AUTH
+ sgollapu 12/23/96 - Add more attrs to COL, ARG, and SEQ
+ sgollapu 12/12/96 - Add OCI_DESCRIBE_ONLY
+ slari 12/11/96 - change prototype of OCICallbackInBind
+ nbhatt 12/05/96 - "callback"
+ lchidamb 11/19/96 - handle subclassing
+ sgollapu 11/09/96 - OCI_PATTR_*
+ dchatter 11/04/96 - add attr OCI_ATTR_CHRCNT
+ mluong 11/01/96 - test
+ cxcheng 10/31/96 - add #defines for OCILobLength etc
+ dchatter 10/31/96 - add lob read write call back fp defs
+ dchatter 10/30/96 - more changes
+ rhari 10/30/96 - Include ociextp.h at the very end
+ lchidamb 10/22/96 - add fdo attribute for bind/server handle
+ dchatter 10/22/96 - change attr defn for prefetch parameters & lobs/file
+ calls
+ slari 10/21/96 - add OCI_ENV_NO_MUTEX
+ rhari 10/25/96 - Include ociextp.h
+ rxgovind 10/25/96 - add OCI_LOBMAXSIZE, remove OCI_FILE_READWRITE
+ sgollapu 10/24/96 - Correct OCILogon and OCILogoff
+ sgollapu 10/24/96 - Correct to OCILogon and OCILogoff
+ sgollapu 10/21/96 - Add ocilon and ociloff
+ skaluska 10/31/96 - Add OCI_PTYPE values
+ sgollapu 10/17/96 - correct OCI_ATTR_SVCCTX to OCI_ATTR_SERVER
+ rwessman 10/16/96 - Added security functions and fixed olint errors.
+ sthakur 10/14/96 - add more COR attributes
+ cxcheng 10/14/96 - re-enable LOB functions
+ sgollapu 10/10/96 - Add ocibdp and ocibdn
+ slari 10/07/96 - add back OCIRowid
+ aroy 10/08/96 - add typedef ocibfill for PRO*C
+ mluong 10/11/96 - replace OCI_ATTR_CHARSET* with OCI_ATTR_CHARSET_*
+ cxcheng 10/10/96 - temporarily take out #define for lob functions
+ sgollapu 10/02/96 - Rename OCI functions and datatypes
+ skotsovo 10/01/96 - move orl lob fnts to oci
+ aroy 09/10/96 - fix merge errors
+ aroy 08/19/96 - NCHAR support
+ jboonleu 09/05/96 - add OCI attributes for object cache
+ dchatter 08/20/96 - HTYPE ranges from 1-50; DTYPE from 50-255
+ slari 08/06/96 - define OCI_DTYPE_ROWID
+ sthakur 08/14/96 - complex object support
+ schandra 06/17/96 - Convert XA to use new OCI
+ abrik 08/15/96 - OCI_ATTR_HEAPALLOC added
+ aroy 07/17/96 - terminology change: ocilobd => ocilobl
+ aroy 07/03/96 - add lob typedefs for Pro*C
+ slari 06/28/96 - add OCI_ATTR_STMT_TYPE
+ lchidamb 06/26/96 - reorg #ifndef
+ schandra 05/31/96 - attribute types for internal and external client name
+ asurpur 05/30/96 - Changing the value of mode
+ schandra 05/18/96 - OCI_TRANS_TWOPHASE -> 0x00000001 to 0x00100000
+ slari 05/30/96 - add callback function prototypes
+ jbellemo 05/23/96 - remove ociisc
+ schandra 04/23/96 - loosely-coupled branches
+ asurpur 05/15/96 - New mode for ocicpw
+ aroy 04/24/96 - making ocihandles opaque
+ slari 04/18/96 - add missing defines
+ schandra 03/27/96 - V8OCI - add transaction related calls
+ dchatter 04/01/96 - add OCI_FILE options
+ dchatter 03/21/96 - add oci2lda conversion routines
+ dchatter 03/07/96 - add OCI piece definition
+ slari 03/12/96 - add describe attributes
+ slari 03/12/96 - add OCI_OTYPE_QUERY
+ aroy 02/28/96 - Add column attributes
+ slari 02/09/96 - add OCI_OBJECT
+ slari 02/07/96 - add OCI_HYTPE_DSC
+ aroy 01/10/96 - adding function code defines...
+ dchatter 01/03/96 - define OCI_NON_BLOCKING
+ dchatter 01/02/96 - Add Any descriptor
+ dchatter 01/02/96 - Add Select List descriptor
+ dchatter 12/29/95 - V8 OCI definitions
+ dchatter 12/29/95 - Creation
+
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef ORATYPES
+#include <oratypes.h>
+#endif
+
+#ifndef OCIDFN
+#include <ocidfn.h>
+#endif
+
+#ifndef OCI_ORACLE
+# define OCI_ORACLE
+
+
+/*---------------------------------------------------------------------------
+ Short names provided for platforms which do not allow extended symbolic names
+ ---------------------------------------------------------------------------*/
+
+#ifdef SLSHORTNAME
+/* Translation of the long function/type names to short names for IBM only */
+/* maybe lint will use this too */
+#define OCISessionEnd ocitac
+#define OCIResultSetToStmt ocirs2sh
+#define OCISessionBegin ociauth
+#define OCIServerAttach ociatch
+#define OCIDescriptorAlloc ocigdesc
+#define OCIServerDetach ocidtch
+#define OCIDescriptorFree ocifdesc
+#define OCIServerVersion ocivers
+#define OCIDescribeAny ocidsca
+#define OCIBindDynamic ocibda
+#define OCIBindByName ocibdn
+#define OCIBindByPos ocibdp
+#define OCIErrorGet ocigdr
+#define OCIBindArrayOfStruct ocibsa
+#define OCIEnvInit ociinit
+#define OCIBindObject ocibndt
+#define OCIHandleAlloc ocighndl
+#define OCIHandleFree ocifhndl
+#define OCIRowidToChar ociri2c
+#ifdef NEVER
+#define OCIStmtBindByPos ocibndp
+#define OCIStmtBindByName ocibndn
+#endif
+#define OCIAttrGet ocigattr
+#define OCIDefineByPos ocidfne
+#define OCIAttrSet ocisattr
+#define OCIDefineDynamic ociddf
+#define OCILdaToSvcCtx ocild2sv
+#define OCIDefineArrayOfStruct ocidarr
+#define OCIInitialize ocipi
+#define OCIDefineObject ocidndt
+#define OCIStmtExecute ociexec
+#define OCILobAppend ocilfap
+#define OCILobOpenFile ocifopn
+#define OCILobCloseFile ocifcls
+#define OCILobLocator ocilobd
+#define OCILobGetDeduplicateRegions ocilgshr
+#define OCILobRegion ocilregd
+#define OCILobCopy ocilfcp
+#define OCILobFileCreate ocifcrt
+#define OCILobFileDelete ocifdel
+#define OCILobGetLength ocilfln
+#define OCILobWrite ocilfwr
+#define OCILobRead ocilfrd
+#define OCILobErase ocilfer
+#define OCILobTrim ocilftr
+#define OCILobSetOptions ocinglso
+#define OCILobGetOptions ocinglgo
+#define OCILobFragmentInsert ocinglfi
+#define OCILobFragmentDelete ocinglfd
+#define OCILobFragmentMove ocinglfm
+#define OCILobFragmentReplace ocinglfr
+#define OCILobSetContentType ocinglsct
+#define OCILobGetContentType ocinglgct
+
+#define OCIStmtFetch ocifch
+#define OCIStmtGetBindInfo ocigbp
+#define OCIStmtGetPieceInfo ocigpi
+#define OCIStmtPrepare ocireq
+#define OCIStmtSetPieceInfo ocispi
+#define OCISvcCtxToLda ocisv2ld
+#define OCITransCommit ocitxcm
+#define OCITransDetach ocitxdt
+#define OCITransForget ocitxfgt
+#define OCITransPrepare ocitxpre
+#define OCITransRollback ocitxrl
+#define OCIPasswordChange ocicpw
+#define OCITransStart ocitxst
+#define OCITransMultiPrepare ocitxmp
+
+#define OCIBreak ocibreak
+#define OCIParamGet ocigparm
+#define OCIParamSet ocisparm
+
+#define OCISecurityOpenWallet ocizwOpenWallet
+#define OCISecurityCloseWallet ocizwCloseWallet
+#define OCISecurityCreateWallet ocizwCreateWallet
+#define OCISecurityDestroyWallet ocizwDestroyWallet
+#define OCISecurityStorePersona ocizeStorePersona
+#define OCISecurityOpenPersona ocizeOpenPersona
+#define OCISecurityClosePersona ocizeClosePersona
+#define OCISecurityRemovePersona ocizeRemovePersona
+#define OCISecurityCreatePersona ocizeCreatePersona
+#define OCISecuritySetProtection ocizeSetProtection
+#define OCISecurityGetProtection ocizeGetProtection
+#define OCISecurityRemoveIdentity ociziRemoveIdentity
+#define OCISecurityCreateIdentity ociziCreateIdentity
+#define OCISecurityAbortIdentity ociziAbortIdentity
+#define OCISecurityFreeIdentity ociziFreeIdentity
+#define OCISecurityStoreTrustedIdentity ociziStoreTrustedIdentity
+#define OCISecuritySign ocizSign
+#define OCISecuritySignExpansion ocizxSignExpansion
+#define OCISecurityVerify ocizVerify
+#define OCISecurityValidate ocizValidate
+#define OCISecuritySignDetached ocizsd_SignDetached
+#define OCISecuritySignDetExpansion ocizxsd_SignDetachedExpansion
+#define OCISecurityVerifyDetached ocizved_VerifyDetached
+#define OCISecurity_PKEncrypt ocizkec_PKEncrypt
+#define OCISecurityPKEncryptExpansion ocizxkec_PKEncryptExpansion
+#define OCISecurityPKDecrypt ocizkdc_PKDecrypt
+#define OCISecurityEncrypt ocizEncrypt
+#define OCISecurityEncryptExpansion ocizxEncryptExpansion
+#define OCISecurityDecrypt ocizDecrypt
+#define OCISecurityEnvelope ocizEnvelope
+#define OCISecurityDeEnvelope ocizDeEnvelope
+#define OCISecurityKeyedHash ocizKeyedHash
+#define OCISecurityKeyedHashExpansion ocizxKeyedHashExpansion
+#define OCISecurityHash ocizHash
+#define OCISecurityHashExpansion ocizxHashExpansion
+#define OCISecuritySeedRandom ocizSeedRandom
+#define OCISecurityRandomBytes ocizrb_RandomBytes
+#define OCISecurityRandomNumber ocizrn_RandomNumber
+#define OCISecurityInitBlock ocizibInitBlock
+#define OCISecurityReuseBlock ocizrbReuseBlock
+#define OCISecurityPurgeBlock ocizpbPurgeBlock
+#define OCISecuritySetBlock ocizsbSetBlock
+#define OCISecurityGetIdentity ocizgi_GetIdentity
+
+#define OCIExtractInit ocixeini
+#define OCIExtractTerm ocixetrm
+#define OCIExtractReset ocixerst
+#define OCIExtractSetNumKeys ocixesnk
+#define OCIExtractSetKey ocixesk
+#define OCIExtractFromFile ocixeff
+#define OCIExtractFromStr ocixefs
+#define OCIExtractToInt ocixeti
+#define OCIExtractToBool ocixetb
+#define OCIExtractToStr ocixets
+#define OCIExtractToOCINum ocixeton
+#define OCIExtractToList ocixetl
+#define OCIExtractFromList ocixefl
+
+#define OCIDateTimeGetTime ocidt01_GetTime
+#define OCIDateTimeGetDate ocidt02_GetDate
+#define OCIDateTimeGetTimeZoneOffset ocidt03_GetTZ
+#define OCIDateTimeSysTimeStamp ocidt07_SysTS
+#define OCIDateTimeAssign ocidt08_Assign
+#define OCIDateTimeToText ocidt09_ToText
+#define OCIDateTimeFromText ocidt10_FromText
+#define OCIDateTimeCompare ocidt11_Compare
+#define OCIDateTimeCheck ocidt12_Check
+#define OCIDateTimeConvert ocidt13_Convert
+#define OCIDateTimeSubtract ocidt14_Subtract
+#define OCIDateTimeIntervalAdd ocidt15_IntervalAdd
+#define OCIDateTimeIntervalSub ocidt16_IntervalSub
+#define OCIDateTimeGetTimeZoneName ocidt17_Gettzname
+#define OCIDateTimeToArray ocidt18_ToArray
+#define OCIDateTimeFromArray ocidt19_FromArray
+
+#define OCIIntervalSubtract ociint01_Subtract
+#define OCIIntervalAdd ociint02_Add
+#define OCIIntervalMultiply ociint03_Multiply
+#define OCIIntervalDivide ociint04_Divide
+#define OCIIntervalCompare ociint05_Compare
+#define OCIIntervalFromText ociint06_FromText
+#define OCIIntervalToText ociint07_ToText
+#define OCIIntervalToNumber ociint08_ToNumber
+#define OCIIntervalCheck ociint09_Check
+#define OCIIntervalAssign ociint10_Assign
+#define OCIIntervalGetYearMonth ociint11_GetYearMonth
+#define OCIIntervalSetYearMonth ociint12_SetYearMonth
+#define OCIIntervalGetDaySecond ociint13_GetDaySecond
+#define OCIIntervalSetDaySecond ociint14_SetDaySecond
+#define OCIIntervalFromNumber ociint15_FromNumber
+#define OCIIntervalFromTZ ociint16_FromTZ
+
+#define OCIFormatInit ocixs01_Init
+#define OCIFormatString ocixs02_Format
+#define OCIFormatTerm ocixs03_Term
+#define OCIFormatTUb1 ocixs04_TUb1
+#define OCIFormatTUb2 ocixs05_TUb2
+#define OCIFormatTUb4 ocixs06_TUb4
+#define OCIFormatTUword ocixs07_TUword
+#define OCIFormatTUbig_ora ocixs08_TUbig_ora
+#define OCIFormatTSb1 ocixs09_TSb1
+#define OCIFormatTSb2 ocixs10_TSb2
+#define OCIFormatTSb4 ocixs11_TSb4
+#define OCIFormatTSword ocixs12_TSword
+#define OCIFormatTSbig_ora ocixs13_TSbig_ora
+#define OCIFormatTEb1 ocixs14_TEb1
+#define OCIFormatTEb2 ocixs15_TEb2
+#define OCIFormatTEb4 ocixs16_TEb4
+#define OCIFormatTEword ocixs17_TEword
+#define OCIFormatTChar ocixs18_TChar
+#define OCIFormatTText ocixs19_TText
+#define OCIFormatTDouble ocixs20_TDouble
+#define OCIFormatTDvoid ocixs21_TDvoid
+#define OCIFormatTEnd ocixs22_TEnd
+
+#define OCIFileInit ocifinit
+#define OCIFileTerm ocifterm
+#define OCIFileOpen ocifopen
+#define OCIFileClose ocifclose
+#define OCIFileRead ocifread
+#define OCIFileWrite ocifwrite
+#define OCIFileSeek ocifseek
+#define OCIFileExists ocifexists
+#define OCIFileGetLength ocifglen
+#define OCIFileFlush ocifflush
+
+
+/* OCIThread short name */
+#define OCIThreadProcessInit ocitt01_ProcessInit
+#define OCIThreadInit ocitt02_Init
+#define OCIThreadTerm ocitt03_Term
+#define OCIThreadIsMulti ocitt04_IsMulti
+#define OCIThreadMutexInit ocitt05_MutexInit
+#define OCIThreadMutexDestroy ocitt06_MutexDestroy
+#define OCIThreadMutexAcquire ocitt07_MutexAcquire
+#define OCIThreadMutexRelease ocitt08_MutexRelease
+#define OCIThreadKeyInit ocitt09_KeyInit
+#define OCIThreadKeyDestroy ocitt10_KeyDestroy
+#define OCIThreadKeyGet ocitt11_KeyGet
+#define OCIThreadKeySet ocitt12_KeySet
+#define OCIThreadIdInit ocitt13_IdInit
+#define OCIThreadIdDestroy ocitt14_IdDestroy
+#define OCIThreadIdSet ocitt15_IdSet
+#define OCIThreadIdSetNull ocitt16_IdSetNull
+#define OCIThreadIdGet ocitt17_IdGet
+#define OCIThreadIdSame ocitt18_IdSame
+#define OCIThreadIdNull ocitt19_IdNull
+#define OCIThreadHndInit ocitt20_HndInit
+#define OCIThreadHndDestroy ocitt21_HndDestroy
+#define OCIThreadCreate ocitt22_Create
+#define OCIThreadJoin ocitt23_Join
+#define OCIThreadClose ocitt24_Close
+#define OCIThreadHandleGet ocitt25_HandleGet
+
+/* Translation between the old and new datatypes */
+
+#define OCISession ociusrh
+#define OCIBind ocibndh
+#define OCIDescribe ocidsch
+#define OCIDefine ocidfnh
+#define OCIEnv ocienvh
+#define OCIError ocierrh
+
+#define OCICPool ocicpool
+
+#define OCISPool ocispool
+#define OCIAuthInfo ociauthinfo
+
+
+#define OCILob ocilobd
+#define OCILobLength ocillen
+#define OCILobMode ocilmo
+#define OCILobOffset ociloff
+
+#define OCILobLocator ocilobd
+#define OCIBlobLocator ociblobl
+#define OCIClobLocator ociclobl
+#define OCILobRegion ocilregd
+#define OCIBFileLocator ocibfilel
+
+#define OCIParam ocipard
+#define OCIResult ocirstd
+#define OCISnapshot ocisnad
+#define OCIServer ocisrvh
+#define OCIStmt ocistmh
+#define OCISvcCtx ocisvch
+#define OCITrans ocitxnh
+#define OCICallbackInBind ocibicfp
+#define OCICallbackOutBind ocibocfp
+#define OCICallbackDefine ocidcfp
+#define OCICallbackLobRead ocilrfp
+#define OCICallbackLobWrite ocilwfp
+#define OCICallbackLobGetDededuplicateRegions ocilgshr
+#define OCISecurity ociossh
+#define OCIComplexObject ocicorh
+#define OCIComplexObjectComp ocicord
+#define OCIRowid ociridd
+
+#define OCIAQDeq ociaqdeq
+#define OCIAQEnq ociaqenq
+#define OCIConnectionPoolCreate ociconpc
+#define OCIConnectionPoolDestroy ociconpd
+#define OCIEnvCreate ocienvct
+#define OCILobAssign ociloass
+#define OCILobCharSetForm ocilocfm
+#define OCILobCharSetId ocilocid
+#define OCILobDisableBuffering ocilodbf
+#define OCILobEnableBuffering ociloebf
+#define OCILobFileClose ocilofcl
+#define OCILobFileCloseAll ocilofca
+#define OCILobFileExists ocilofex
+#define OCILobFileGetName ocilofgn
+#define OCILobFileIsOpen ocifiopn
+#define OCILobFileOpen ocilofop
+#define OCILobFileSetName ocilofsn
+#define OCILobFlushBuffer ocilofbf
+#define OCILobIsEqual ociloieq
+#define OCILobLoadFromFile ocilolff
+#define OCILobLocatorIsInit ocilolii
+#define OCILobLocatorAssign ocilolas
+#define OCILogon ocilogon
+#define OCILogon2 ocilgon2
+#define OCILogoff ocilgoff
+#endif /* ifdef SLSHORTNAME */
+
+/*---------------------------------------------------------------------------
+ PUBLIC TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+/*-----------------------------Handle Types----------------------------------*/
+ /* handle types range from 1 - 49 */
+#define OCI_HTYPE_FIRST 1 /* start value of handle type */
+#define OCI_HTYPE_ENV 1 /* environment handle */
+#define OCI_HTYPE_ERROR 2 /* error handle */
+#define OCI_HTYPE_SVCCTX 3 /* service handle */
+#define OCI_HTYPE_STMT 4 /* statement handle */
+#define OCI_HTYPE_BIND 5 /* bind handle */
+#define OCI_HTYPE_DEFINE 6 /* define handle */
+#define OCI_HTYPE_DESCRIBE 7 /* describe handle */
+#define OCI_HTYPE_SERVER 8 /* server handle */
+#define OCI_HTYPE_SESSION 9 /* authentication handle */
+#define OCI_HTYPE_AUTHINFO OCI_HTYPE_SESSION /* SessionGet auth handle */
+#define OCI_HTYPE_TRANS 10 /* transaction handle */
+#define OCI_HTYPE_COMPLEXOBJECT 11 /* complex object retrieval handle */
+#define OCI_HTYPE_SECURITY 12 /* security handle */
+#define OCI_HTYPE_SUBSCRIPTION 13 /* subscription handle */
+#define OCI_HTYPE_DIRPATH_CTX 14 /* direct path context */
+#define OCI_HTYPE_DIRPATH_COLUMN_ARRAY 15 /* direct path column array */
+#define OCI_HTYPE_DIRPATH_STREAM 16 /* direct path stream */
+#define OCI_HTYPE_PROC 17 /* process handle */
+#define OCI_HTYPE_DIRPATH_FN_CTX 18 /* direct path function context */
+#define OCI_HTYPE_DIRPATH_FN_COL_ARRAY 19 /* dp object column array */
+#define OCI_HTYPE_XADSESSION 20 /* access driver session */
+#define OCI_HTYPE_XADTABLE 21 /* access driver table */
+#define OCI_HTYPE_XADFIELD 22 /* access driver field */
+#define OCI_HTYPE_XADGRANULE 23 /* access driver granule */
+#define OCI_HTYPE_XADRECORD 24 /* access driver record */
+#define OCI_HTYPE_XADIO 25 /* access driver I/O */
+#define OCI_HTYPE_CPOOL 26 /* connection pool handle */
+#define OCI_HTYPE_SPOOL 27 /* session pool handle */
+#define OCI_HTYPE_ADMIN 28 /* admin handle */
+#define OCI_HTYPE_EVENT 29 /* HA event handle */
+
+#define OCI_HTYPE_LAST 29 /* last value of a handle type */
+
+/*---------------------------------------------------------------------------*/
+
+
+/*-------------------------Descriptor Types----------------------------------*/
+ /* descriptor values range from 50 - 255 */
+#define OCI_DTYPE_FIRST 50 /* start value of descriptor type */
+#define OCI_DTYPE_LOB 50 /* lob locator */
+#define OCI_DTYPE_SNAP 51 /* snapshot descriptor */
+#define OCI_DTYPE_RSET 52 /* result set descriptor */
+#define OCI_DTYPE_PARAM 53 /* a parameter descriptor obtained from ocigparm */
+#define OCI_DTYPE_ROWID 54 /* rowid descriptor */
+#define OCI_DTYPE_COMPLEXOBJECTCOMP 55
+ /* complex object retrieval descriptor */
+#define OCI_DTYPE_FILE 56 /* File Lob locator */
+#define OCI_DTYPE_AQENQ_OPTIONS 57 /* enqueue options */
+#define OCI_DTYPE_AQDEQ_OPTIONS 58 /* dequeue options */
+#define OCI_DTYPE_AQMSG_PROPERTIES 59 /* message properties */
+#define OCI_DTYPE_AQAGENT 60 /* aq agent */
+#define OCI_DTYPE_LOCATOR 61 /* LOB locator */
+#define OCI_DTYPE_INTERVAL_YM 62 /* Interval year month */
+#define OCI_DTYPE_INTERVAL_DS 63 /* Interval day second */
+#define OCI_DTYPE_AQNFY_DESCRIPTOR 64 /* AQ notify descriptor */
+#define OCI_DTYPE_DATE 65 /* Date */
+#define OCI_DTYPE_TIME 66 /* Time */
+#define OCI_DTYPE_TIME_TZ 67 /* Time with timezone */
+#define OCI_DTYPE_TIMESTAMP 68 /* Timestamp */
+#define OCI_DTYPE_TIMESTAMP_TZ 69 /* Timestamp with timezone */
+#define OCI_DTYPE_TIMESTAMP_LTZ 70 /* Timestamp with local tz */
+#define OCI_DTYPE_UCB 71 /* user callback descriptor */
+#define OCI_DTYPE_SRVDN 72 /* server DN list descriptor */
+#define OCI_DTYPE_SIGNATURE 73 /* signature */
+#define OCI_DTYPE_RESERVED_1 74 /* reserved for internal use */
+#define OCI_DTYPE_AQLIS_OPTIONS 75 /* AQ listen options */
+#define OCI_DTYPE_AQLIS_MSG_PROPERTIES 76 /* AQ listen msg props */
+#define OCI_DTYPE_CHDES 77 /* Top level change notification desc */
+#define OCI_DTYPE_TABLE_CHDES 78 /* Table change descriptor */
+#define OCI_DTYPE_ROW_CHDES 79 /* Row change descriptor */
+#define OCI_DTYPE_CQDES 80 /* Query change descriptor */
+#define OCI_DTYPE_LOB_REGION 81 /* LOB Share region descriptor */
+#define OCI_DTYPE_LAST 81 /* last value of a descriptor type */
+
+/*---------------------------------------------------------------------------*/
+
+/*--------------------------------LOB types ---------------------------------*/
+#define OCI_TEMP_BLOB 1 /* LOB type - BLOB ------------------ */
+#define OCI_TEMP_CLOB 2 /* LOB type - CLOB ------------------ */
+/*---------------------------------------------------------------------------*/
+
+/*-------------------------Object Ptr Types----------------------------------*/
+#define OCI_OTYPE_NAME 1 /* object name */
+#define OCI_OTYPE_REF 2 /* REF to TDO */
+#define OCI_OTYPE_PTR 3 /* PTR to TDO */
+/*---------------------------------------------------------------------------*/
+
+/*=============================Attribute Types===============================*/
+/*
+ Note: All attributes are global. New attibutes should be added to the end
+ of the list. Before you add an attribute see if an existing one can be
+ used for your handle.
+
+ If you see any holes please use the holes first.
+
+*/
+/*===========================================================================*/
+
+
+#define OCI_ATTR_FNCODE 1 /* the OCI function code */
+#define OCI_ATTR_OBJECT 2 /* is the environment initialized in object mode */
+#define OCI_ATTR_NONBLOCKING_MODE 3 /* non blocking mode */
+#define OCI_ATTR_SQLCODE 4 /* the SQL verb */
+#define OCI_ATTR_ENV 5 /* the environment handle */
+#define OCI_ATTR_SERVER 6 /* the server handle */
+#define OCI_ATTR_SESSION 7 /* the user session handle */
+#define OCI_ATTR_TRANS 8 /* the transaction handle */
+#define OCI_ATTR_ROW_COUNT 9 /* the rows processed so far */
+#define OCI_ATTR_SQLFNCODE 10 /* the SQL verb of the statement */
+#define OCI_ATTR_PREFETCH_ROWS 11 /* sets the number of rows to prefetch */
+#define OCI_ATTR_NESTED_PREFETCH_ROWS 12 /* the prefetch rows of nested table*/
+#define OCI_ATTR_PREFETCH_MEMORY 13 /* memory limit for rows fetched */
+#define OCI_ATTR_NESTED_PREFETCH_MEMORY 14 /* memory limit for nested rows */
+#define OCI_ATTR_CHAR_COUNT 15
+ /* this specifies the bind and define size in characters */
+#define OCI_ATTR_PDSCL 16 /* packed decimal scale */
+#define OCI_ATTR_FSPRECISION OCI_ATTR_PDSCL
+ /* fs prec for datetime data types */
+#define OCI_ATTR_PDPRC 17 /* packed decimal format */
+#define OCI_ATTR_LFPRECISION OCI_ATTR_PDPRC
+ /* fs prec for datetime data types */
+#define OCI_ATTR_PARAM_COUNT 18 /* number of column in the select list */
+#define OCI_ATTR_ROWID 19 /* the rowid */
+#define OCI_ATTR_CHARSET 20 /* the character set value */
+#define OCI_ATTR_NCHAR 21 /* NCHAR type */
+#define OCI_ATTR_USERNAME 22 /* username attribute */
+#define OCI_ATTR_PASSWORD 23 /* password attribute */
+#define OCI_ATTR_STMT_TYPE 24 /* statement type */
+#define OCI_ATTR_INTERNAL_NAME 25 /* user friendly global name */
+#define OCI_ATTR_EXTERNAL_NAME 26 /* the internal name for global txn */
+#define OCI_ATTR_XID 27 /* XOPEN defined global transaction id */
+#define OCI_ATTR_TRANS_LOCK 28 /* */
+#define OCI_ATTR_TRANS_NAME 29 /* string to identify a global transaction */
+#define OCI_ATTR_HEAPALLOC 30 /* memory allocated on the heap */
+#define OCI_ATTR_CHARSET_ID 31 /* Character Set ID */
+#define OCI_ATTR_CHARSET_FORM 32 /* Character Set Form */
+#define OCI_ATTR_MAXDATA_SIZE 33 /* Maximumsize of data on the server */
+#define OCI_ATTR_CACHE_OPT_SIZE 34 /* object cache optimal size */
+#define OCI_ATTR_CACHE_MAX_SIZE 35 /* object cache maximum size percentage */
+#define OCI_ATTR_PINOPTION 36 /* object cache default pin option */
+#define OCI_ATTR_ALLOC_DURATION 37
+ /* object cache default allocation duration */
+#define OCI_ATTR_PIN_DURATION 38 /* object cache default pin duration */
+#define OCI_ATTR_FDO 39 /* Format Descriptor object attribute */
+#define OCI_ATTR_POSTPROCESSING_CALLBACK 40
+ /* Callback to process outbind data */
+#define OCI_ATTR_POSTPROCESSING_CONTEXT 41
+ /* Callback context to process outbind data */
+#define OCI_ATTR_ROWS_RETURNED 42
+ /* Number of rows returned in current iter - for Bind handles */
+#define OCI_ATTR_FOCBK 43 /* Failover Callback attribute */
+#define OCI_ATTR_IN_V8_MODE 44 /* is the server/service context in V8 mode */
+#define OCI_ATTR_LOBEMPTY 45 /* empty lob ? */
+#define OCI_ATTR_SESSLANG 46 /* session language handle */
+
+#define OCI_ATTR_VISIBILITY 47 /* visibility */
+#define OCI_ATTR_RELATIVE_MSGID 48 /* relative message id */
+#define OCI_ATTR_SEQUENCE_DEVIATION 49 /* sequence deviation */
+
+#define OCI_ATTR_CONSUMER_NAME 50 /* consumer name */
+#define OCI_ATTR_DEQ_MODE 51 /* dequeue mode */
+#define OCI_ATTR_NAVIGATION 52 /* navigation */
+#define OCI_ATTR_WAIT 53 /* wait */
+#define OCI_ATTR_DEQ_MSGID 54 /* dequeue message id */
+
+#define OCI_ATTR_PRIORITY 55 /* priority */
+#define OCI_ATTR_DELAY 56 /* delay */
+#define OCI_ATTR_EXPIRATION 57 /* expiration */
+#define OCI_ATTR_CORRELATION 58 /* correlation id */
+#define OCI_ATTR_ATTEMPTS 59 /* # of attempts */
+#define OCI_ATTR_RECIPIENT_LIST 60 /* recipient list */
+#define OCI_ATTR_EXCEPTION_QUEUE 61 /* exception queue name */
+#define OCI_ATTR_ENQ_TIME 62 /* enqueue time (only OCIAttrGet) */
+#define OCI_ATTR_MSG_STATE 63/* message state (only OCIAttrGet) */
+ /* NOTE: 64-66 used below */
+#define OCI_ATTR_AGENT_NAME 64 /* agent name */
+#define OCI_ATTR_AGENT_ADDRESS 65 /* agent address */
+#define OCI_ATTR_AGENT_PROTOCOL 66 /* agent protocol */
+#define OCI_ATTR_USER_PROPERTY 67 /* user property */
+#define OCI_ATTR_SENDER_ID 68 /* sender id */
+#define OCI_ATTR_ORIGINAL_MSGID 69 /* original message id */
+
+#define OCI_ATTR_QUEUE_NAME 70 /* queue name */
+#define OCI_ATTR_NFY_MSGID 71 /* message id */
+#define OCI_ATTR_MSG_PROP 72 /* message properties */
+
+#define OCI_ATTR_NUM_DML_ERRORS 73 /* num of errs in array DML */
+#define OCI_ATTR_DML_ROW_OFFSET 74 /* row offset in the array */
+
+ /* AQ array error handling uses DML method of accessing errors */
+#define OCI_ATTR_AQ_NUM_ERRORS OCI_ATTR_NUM_DML_ERRORS
+#define OCI_ATTR_AQ_ERROR_INDEX OCI_ATTR_DML_ROW_OFFSET
+
+#define OCI_ATTR_DATEFORMAT 75 /* default date format string */
+#define OCI_ATTR_BUF_ADDR 76 /* buffer address */
+#define OCI_ATTR_BUF_SIZE 77 /* buffer size */
+
+/* For values 78 - 80, see DirPathAPI attribute section in this file */
+
+#define OCI_ATTR_NUM_ROWS 81 /* number of rows in column array */
+ /* NOTE that OCI_ATTR_NUM_COLS is a column
+ * array attribute too.
+ */
+#define OCI_ATTR_COL_COUNT 82 /* columns of column array
+ processed so far. */
+#define OCI_ATTR_STREAM_OFFSET 83 /* str off of last row processed */
+#define OCI_ATTR_SHARED_HEAPALLOC 84 /* Shared Heap Allocation Size */
+
+#define OCI_ATTR_SERVER_GROUP 85 /* server group name */
+
+#define OCI_ATTR_MIGSESSION 86 /* migratable session attribute */
+
+#define OCI_ATTR_NOCACHE 87 /* Temporary LOBs */
+
+#define OCI_ATTR_MEMPOOL_SIZE 88 /* Pool Size */
+#define OCI_ATTR_MEMPOOL_INSTNAME 89 /* Instance name */
+#define OCI_ATTR_MEMPOOL_APPNAME 90 /* Application name */
+#define OCI_ATTR_MEMPOOL_HOMENAME 91 /* Home Directory name */
+#define OCI_ATTR_MEMPOOL_MODEL 92 /* Pool Model (proc,thrd,both)*/
+#define OCI_ATTR_MODES 93 /* Modes */
+
+#define OCI_ATTR_SUBSCR_NAME 94 /* name of subscription */
+#define OCI_ATTR_SUBSCR_CALLBACK 95 /* associated callback */
+#define OCI_ATTR_SUBSCR_CTX 96 /* associated callback context */
+#define OCI_ATTR_SUBSCR_PAYLOAD 97 /* associated payload */
+#define OCI_ATTR_SUBSCR_NAMESPACE 98 /* associated namespace */
+
+#define OCI_ATTR_PROXY_CREDENTIALS 99 /* Proxy user credentials */
+#define OCI_ATTR_INITIAL_CLIENT_ROLES 100 /* Initial client role list */
+
+#define OCI_ATTR_UNK 101 /* unknown attribute */
+#define OCI_ATTR_NUM_COLS 102 /* number of columns */
+#define OCI_ATTR_LIST_COLUMNS 103 /* parameter of the column list */
+#define OCI_ATTR_RDBA 104 /* DBA of the segment header */
+#define OCI_ATTR_CLUSTERED 105 /* whether the table is clustered */
+#define OCI_ATTR_PARTITIONED 106 /* whether the table is partitioned */
+#define OCI_ATTR_INDEX_ONLY 107 /* whether the table is index only */
+#define OCI_ATTR_LIST_ARGUMENTS 108 /* parameter of the argument list */
+#define OCI_ATTR_LIST_SUBPROGRAMS 109 /* parameter of the subprogram list */
+#define OCI_ATTR_REF_TDO 110 /* REF to the type descriptor */
+#define OCI_ATTR_LINK 111 /* the database link name */
+#define OCI_ATTR_MIN 112 /* minimum value */
+#define OCI_ATTR_MAX 113 /* maximum value */
+#define OCI_ATTR_INCR 114 /* increment value */
+#define OCI_ATTR_CACHE 115 /* number of sequence numbers cached */
+#define OCI_ATTR_ORDER 116 /* whether the sequence is ordered */
+#define OCI_ATTR_HW_MARK 117 /* high-water mark */
+#define OCI_ATTR_TYPE_SCHEMA 118 /* type's schema name */
+#define OCI_ATTR_TIMESTAMP 119 /* timestamp of the object */
+#define OCI_ATTR_NUM_ATTRS 120 /* number of sttributes */
+#define OCI_ATTR_NUM_PARAMS 121 /* number of parameters */
+#define OCI_ATTR_OBJID 122 /* object id for a table or view */
+#define OCI_ATTR_PTYPE 123 /* type of info described by */
+#define OCI_ATTR_PARAM 124 /* parameter descriptor */
+#define OCI_ATTR_OVERLOAD_ID 125 /* overload ID for funcs and procs */
+#define OCI_ATTR_TABLESPACE 126 /* table name space */
+#define OCI_ATTR_TDO 127 /* TDO of a type */
+#define OCI_ATTR_LTYPE 128 /* list type */
+#define OCI_ATTR_PARSE_ERROR_OFFSET 129 /* Parse Error offset */
+#define OCI_ATTR_IS_TEMPORARY 130 /* whether table is temporary */
+#define OCI_ATTR_IS_TYPED 131 /* whether table is typed */
+#define OCI_ATTR_DURATION 132 /* duration of temporary table */
+#define OCI_ATTR_IS_INVOKER_RIGHTS 133 /* is invoker rights */
+#define OCI_ATTR_OBJ_NAME 134 /* top level schema obj name */
+#define OCI_ATTR_OBJ_SCHEMA 135 /* schema name */
+#define OCI_ATTR_OBJ_ID 136 /* top level schema object id */
+
+/* For values 137 - 141, see DirPathAPI attribute section in this file */
+
+
+#define OCI_ATTR_TRANS_TIMEOUT 142 /* transaction timeout */
+#define OCI_ATTR_SERVER_STATUS 143/* state of the server handle */
+#define OCI_ATTR_STATEMENT 144 /* statement txt in stmt hdl */
+
+/* For value 145, see DirPathAPI attribute section in this file */
+
+#define OCI_ATTR_DEQCOND 146 /* dequeue condition */
+#define OCI_ATTR_RESERVED_2 147 /* reserved */
+
+
+#define OCI_ATTR_SUBSCR_RECPT 148 /* recepient of subscription */
+#define OCI_ATTR_SUBSCR_RECPTPROTO 149 /* protocol for recepient */
+
+/* For values 150 - 151, see DirPathAPI attribute section in this file */
+
+#define OCI_ATTR_LDAP_HOST 153 /* LDAP host to connect to */
+#define OCI_ATTR_LDAP_PORT 154 /* LDAP port to connect to */
+#define OCI_ATTR_BIND_DN 155 /* bind DN */
+#define OCI_ATTR_LDAP_CRED 156 /* credentials to connect to LDAP */
+#define OCI_ATTR_WALL_LOC 157 /* client wallet location */
+#define OCI_ATTR_LDAP_AUTH 158 /* LDAP authentication method */
+#define OCI_ATTR_LDAP_CTX 159 /* LDAP adminstration context DN */
+#define OCI_ATTR_SERVER_DNS 160 /* list of registration server DNs */
+
+#define OCI_ATTR_DN_COUNT 161 /* the number of server DNs */
+#define OCI_ATTR_SERVER_DN 162 /* server DN attribute */
+
+#define OCI_ATTR_MAXCHAR_SIZE 163 /* max char size of data */
+
+#define OCI_ATTR_CURRENT_POSITION 164 /* for scrollable result sets*/
+
+/* Added to get attributes for ref cursor to statement handle */
+#define OCI_ATTR_RESERVED_3 165 /* reserved */
+#define OCI_ATTR_RESERVED_4 166 /* reserved */
+
+/* For value 167, see DirPathAPI attribute section in this file */
+
+#define OCI_ATTR_DIGEST_ALGO 168 /* digest algorithm */
+#define OCI_ATTR_CERTIFICATE 169 /* certificate */
+#define OCI_ATTR_SIGNATURE_ALGO 170 /* signature algorithm */
+#define OCI_ATTR_CANONICAL_ALGO 171 /* canonicalization algo. */
+#define OCI_ATTR_PRIVATE_KEY 172 /* private key */
+#define OCI_ATTR_DIGEST_VALUE 173 /* digest value */
+#define OCI_ATTR_SIGNATURE_VAL 174 /* signature value */
+#define OCI_ATTR_SIGNATURE 175 /* signature */
+
+/* attributes for setting OCI stmt caching specifics in svchp */
+#define OCI_ATTR_STMTCACHESIZE 176 /* size of the stm cache */
+
+/* --------------------------- Connection Pool Attributes ------------------ */
+#define OCI_ATTR_CONN_NOWAIT 178
+#define OCI_ATTR_CONN_BUSY_COUNT 179
+#define OCI_ATTR_CONN_OPEN_COUNT 180
+#define OCI_ATTR_CONN_TIMEOUT 181
+#define OCI_ATTR_STMT_STATE 182
+#define OCI_ATTR_CONN_MIN 183
+#define OCI_ATTR_CONN_MAX 184
+#define OCI_ATTR_CONN_INCR 185
+
+/* For value 187, see DirPathAPI attribute section in this file */
+
+#define OCI_ATTR_NUM_OPEN_STMTS 188 /* open stmts in session */
+#define OCI_ATTR_DESCRIBE_NATIVE 189 /* get native info via desc */
+
+#define OCI_ATTR_BIND_COUNT 190 /* number of bind postions */
+#define OCI_ATTR_HANDLE_POSITION 191 /* pos of bind/define handle */
+#define OCI_ATTR_RESERVED_5 192 /* reserverd */
+#define OCI_ATTR_SERVER_BUSY 193 /* call in progress on server*/
+
+/* For value 194, see DirPathAPI attribute section in this file */
+
+/* notification presentation for recipient */
+#define OCI_ATTR_SUBSCR_RECPTPRES 195
+#define OCI_ATTR_TRANSFORMATION 196 /* AQ message transformation */
+
+#define OCI_ATTR_ROWS_FETCHED 197 /* rows fetched in last call */
+
+/* --------------------------- Snapshot attributes ------------------------- */
+#define OCI_ATTR_SCN_BASE 198 /* snapshot base */
+#define OCI_ATTR_SCN_WRAP 199 /* snapshot wrap */
+
+/* --------------------------- Miscellanous attributes --------------------- */
+#define OCI_ATTR_RESERVED_6 200 /* reserved */
+#define OCI_ATTR_READONLY_TXN 201 /* txn is readonly */
+#define OCI_ATTR_RESERVED_7 202 /* reserved */
+#define OCI_ATTR_ERRONEOUS_COLUMN 203 /* position of erroneous col */
+#define OCI_ATTR_RESERVED_8 204 /* reserved */
+#define OCI_ATTR_ASM_VOL_SPRT 205 /* ASM volume supported? */
+
+/* For value 206, see DirPathAPI attribute section in this file */
+
+#define OCI_ATTR_INST_TYPE 207 /* oracle instance type */
+/******USED attribute 208 for OCI_ATTR_SPOOL_STMTCACHESIZE*******************/
+
+#define OCI_ATTR_ENV_UTF16 209 /* is env in utf16 mode? */
+#define OCI_ATTR_RESERVED_9 210 /* reserved */
+#define OCI_ATTR_RESERVED_10 211 /* reserved */
+
+/* For values 212 and 213, see DirPathAPI attribute section in this file */
+
+#define OCI_ATTR_RESERVED_12 214 /* reserved */
+#define OCI_ATTR_RESERVED_13 215 /* reserved */
+#define OCI_ATTR_IS_EXTERNAL 216 /* whether table is external */
+
+
+/* -------------------------- Statement Handle Attributes ------------------ */
+
+#define OCI_ATTR_RESERVED_15 217 /* reserved */
+#define OCI_ATTR_STMT_IS_RETURNING 218 /* stmt has returning clause */
+#define OCI_ATTR_RESERVED_16 219 /* reserved */
+#define OCI_ATTR_RESERVED_17 220 /* reserved */
+#define OCI_ATTR_RESERVED_18 221 /* reserved */
+
+/* --------------------------- session attributes ---------------------------*/
+#define OCI_ATTR_RESERVED_19 222 /* reserved */
+#define OCI_ATTR_RESERVED_20 223 /* reserved */
+#define OCI_ATTR_CURRENT_SCHEMA 224 /* Current Schema */
+#define OCI_ATTR_RESERVED_21 415 /* reserved */
+
+/* ------------------------- notification subscription ----------------------*/
+#define OCI_ATTR_SUBSCR_QOSFLAGS 225 /* QOS flags */
+#define OCI_ATTR_SUBSCR_PAYLOADCBK 226 /* Payload callback */
+#define OCI_ATTR_SUBSCR_TIMEOUT 227 /* Timeout */
+#define OCI_ATTR_SUBSCR_NAMESPACE_CTX 228 /* Namespace context */
+#define OCI_ATTR_SUBSCR_CQ_QOSFLAGS 229
+ /* change notification (CQ) specific QOS flags */
+#define OCI_ATTR_SUBSCR_CQ_REGID 230
+ /* change notification registration id */
+#define OCI_ATTR_SUBSCR_NTFN_GROUPING_CLASS 231/* ntfn grouping class */
+#define OCI_ATTR_SUBSCR_NTFN_GROUPING_VALUE 232/* ntfn grouping value */
+#define OCI_ATTR_SUBSCR_NTFN_GROUPING_TYPE 233 /* ntfn grouping type */
+#define OCI_ATTR_SUBSCR_NTFN_GROUPING_START_TIME 234/* ntfn grp start time */
+#define OCI_ATTR_SUBSCR_NTFN_GROUPING_REPEAT_COUNT 235 /* ntfn grp rep count */
+#define OCI_ATTR_AQ_NTFN_GROUPING_MSGID_ARRAY 236 /* aq grp msgid array */
+#define OCI_ATTR_AQ_NTFN_GROUPING_COUNT 237 /* ntfns recd in grp */
+
+/* ----------------------- row callback attributes ------------------------- */
+#define OCI_ATTR_BIND_ROWCBK 301 /* bind row callback */
+#define OCI_ATTR_BIND_ROWCTX 302 /* ctx for bind row callback */
+#define OCI_ATTR_SKIP_BUFFER 303 /* skip buffer in array ops */
+
+/* ----------------------- XStream API attributes -------------------------- */
+#define OCI_ATTR_XSTREAM_ACK_INTERVAL 350 /* XStream ack interval */
+#define OCI_ATTR_XSTREAM_IDLE_TIMEOUT 351 /* XStream idle timeout */
+
+/*----- Db Change Notification (CQ) statement handle attributes------------ */
+#define OCI_ATTR_CQ_QUERYID 304
+/* ------------- DB Change Notification reg handle attributes ---------------*/
+#define OCI_ATTR_CHNF_TABLENAMES 401 /* out: array of table names */
+#define OCI_ATTR_CHNF_ROWIDS 402 /* in: rowids needed */
+#define OCI_ATTR_CHNF_OPERATIONS 403
+ /* in: notification operation filter*/
+#define OCI_ATTR_CHNF_CHANGELAG 404
+ /* txn lag between notifications */
+
+/* DB Change: Notification Descriptor attributes -----------------------*/
+#define OCI_ATTR_CHDES_DBNAME 405 /* source database */
+#define OCI_ATTR_CHDES_NFYTYPE 406 /* notification type flags */
+#define OCI_ATTR_CHDES_XID 407 /* XID of the transaction */
+#define OCI_ATTR_CHDES_TABLE_CHANGES 408/* array of table chg descriptors*/
+
+#define OCI_ATTR_CHDES_TABLE_NAME 409 /* table name */
+#define OCI_ATTR_CHDES_TABLE_OPFLAGS 410 /* table operation flags */
+#define OCI_ATTR_CHDES_TABLE_ROW_CHANGES 411 /* array of changed rows */
+#define OCI_ATTR_CHDES_ROW_ROWID 412 /* rowid of changed row */
+#define OCI_ATTR_CHDES_ROW_OPFLAGS 413 /* row operation flags */
+
+/* Statement handle attribute for db change notification */
+#define OCI_ATTR_CHNF_REGHANDLE 414 /* IN: subscription handle */
+#define OCI_ATTR_NETWORK_FILE_DESC 415 /* network file descriptor */
+
+/* client name for single session proxy */
+#define OCI_ATTR_PROXY_CLIENT 416
+
+/* 415 is already taken - see OCI_ATTR_RESERVED_21 */
+
+/* TDE attributes on the Table */
+#define OCI_ATTR_TABLE_ENC 417/* does table have any encrypt columns */
+#define OCI_ATTR_TABLE_ENC_ALG 418 /* Table encryption Algorithm */
+#define OCI_ATTR_TABLE_ENC_ALG_ID 419 /* Internal Id of encryption Algorithm*/
+
+/* -------- Attributes related to Statement cache callback ----------------- */
+#define OCI_ATTR_STMTCACHE_CBKCTX 420 /* opaque context on stmt */
+#define OCI_ATTR_STMTCACHE_CBK 421 /* callback fn for stmtcache */
+
+/*---------------- Query change descriptor attributes -----------------------*/
+#define OCI_ATTR_CQDES_OPERATION 422
+#define OCI_ATTR_CQDES_TABLE_CHANGES 423
+#define OCI_ATTR_CQDES_QUERYID 424
+
+
+#define OCI_ATTR_CHDES_QUERIES 425 /* Top level change desc array of queries */
+
+/* Please use from 143 */
+
+/* -------- Internal statement attributes ------- */
+#define OCI_ATTR_RESERVED_26 422
+
+/* 424 is used by OCI_ATTR_DRIVER_NAME */
+/* --------- Attributes added to support server side session pool ---------- */
+#define OCI_ATTR_CONNECTION_CLASS 425
+#define OCI_ATTR_PURITY 426
+
+#define OCI_ATTR_PURITY_DEFAULT 0x00
+#define OCI_ATTR_PURITY_NEW 0x01
+#define OCI_ATTR_PURITY_SELF 0x02
+
+/* -------- Attributes for Times Ten --------------------------*/
+#define OCI_ATTR_RESERVED_28 426 /* reserved */
+#define OCI_ATTR_RESERVED_29 427 /* reserved */
+#define OCI_ATTR_RESERVED_30 428 /* reserved */
+#define OCI_ATTR_RESERVED_31 429 /* reserved */
+#define OCI_ATTR_RESERVED_32 430 /* reserved */
+#define OCI_ATTR_RESERVED_41 454 /* reserved */
+
+
+/* ----------- Reserve internal attributes for workload replay ------------ */
+#define OCI_ATTR_RESERVED_33 433
+#define OCI_ATTR_RESERVED_34 434
+
+/* statement attribute */
+#define OCI_ATTR_RESERVED_36 444
+
+/* -------- Attributes for Network Session Time Out--------------------------*/
+#define OCI_ATTR_SEND_TIMEOUT 435 /* NS send timeout */
+#define OCI_ATTR_RECEIVE_TIMEOUT 436 /* NS receive timeout */
+
+/*--------- Attributes related to LOB prefetch------------------------------ */
+#define OCI_ATTR_DEFAULT_LOBPREFETCH_SIZE 438 /* default prefetch size */
+#define OCI_ATTR_LOBPREFETCH_SIZE 439 /* prefetch size */
+#define OCI_ATTR_LOBPREFETCH_LENGTH 440 /* prefetch length & chunk */
+
+/*--------- Attributes related to LOB Deduplicate Regions ------------------ */
+#define OCI_ATTR_LOB_REGION_PRIMARY 442 /* Primary LOB Locator */
+#define OCI_ATTR_LOB_REGION_PRIMOFF 443 /* Offset into Primary LOB */
+#define OCI_ATTR_LOB_REGION_OFFSET 445 /* Region Offset */
+#define OCI_ATTR_LOB_REGION_LENGTH 446 /* Region Length Bytes/Chars */
+#define OCI_ATTR_LOB_REGION_MIME 447 /* Region mime type */
+
+/*--------------------Attribute to fetch ROWID ------------------------------*/
+#define OCI_ATTR_FETCH_ROWID 448
+
+/* server attribute */
+#define OCI_ATTR_RESERVED_37 449
+
+/*------------------- Client Internal Attributes -----------------------*/
+#define OCI_ATTR_RESERVED_38 450
+#define OCI_ATTR_RESERVED_39 451
+
+/* --------------- ip address attribute in environment handle -------------- */
+#define OCI_ATTR_SUBSCR_IPADDR 452 /* ip address to listen on */
+
+/* server attribute */
+#define OCI_ATTR_RESERVED_40 453
+
+/* ------------- round trip callback attributes in the process handle ----- */
+#define OCI_ATTR_RESERVED_458 458 /* reserved */
+#define OCI_ATTR_RESERVED_459 459 /* reserved */
+
+/* DB Change: Event types ---------------*/
+#define OCI_EVENT_NONE 0x0 /* None */
+#define OCI_EVENT_STARTUP 0x1 /* Startup database */
+#define OCI_EVENT_SHUTDOWN 0x2 /* Shutdown database */
+#define OCI_EVENT_SHUTDOWN_ANY 0x3 /* Startup instance */
+#define OCI_EVENT_DROP_DB 0x4 /* Drop database */
+#define OCI_EVENT_DEREG 0x5 /* Subscription deregistered */
+#define OCI_EVENT_OBJCHANGE 0x6 /* Object change notification */
+#define OCI_EVENT_QUERYCHANGE 0x7 /* query result change */
+
+/* DB Change: Operation types -----------*/
+#define OCI_OPCODE_ALLROWS 0x1 /* all rows invalidated */
+#define OCI_OPCODE_ALLOPS 0x0 /* interested in all operations */
+#define OCI_OPCODE_INSERT 0x2 /* INSERT */
+#define OCI_OPCODE_UPDATE 0x4 /* UPDATE */
+#define OCI_OPCODE_DELETE 0x8 /* DELETE */
+#define OCI_OPCODE_ALTER 0x10 /* ALTER */
+#define OCI_OPCODE_DROP 0x20 /* DROP TABLE */
+#define OCI_OPCODE_UNKNOWN 0x40 /* GENERIC/ UNKNOWN*/
+
+/* -------- client side character and national character set ids ----------- */
+#define OCI_ATTR_ENV_CHARSET_ID OCI_ATTR_CHARSET_ID /* charset id in env */
+#define OCI_ATTR_ENV_NCHARSET_ID OCI_ATTR_NCHARSET_ID /* ncharset id in env */
+
+/* ----------------------- ha event callback attributes -------------------- */
+#define OCI_ATTR_EVTCBK 304 /* ha callback */
+#define OCI_ATTR_EVTCTX 305 /* ctx for ha callback */
+
+/* ------------------ User memory attributes (all handles) ----------------- */
+#define OCI_ATTR_USER_MEMORY 306 /* pointer to user memory */
+
+/* ------- unauthorised access and user action auditing banners ------------ */
+#define OCI_ATTR_ACCESS_BANNER 307 /* access banner */
+#define OCI_ATTR_AUDIT_BANNER 308 /* audit banner */
+
+/* ----------------- port no attribute in environment handle ------------- */
+#define OCI_ATTR_SUBSCR_PORTNO 390 /* port no to listen */
+
+#define OCI_ATTR_RESERVED_35 437
+
+/*------------- Supported Values for protocol for recepient -----------------*/
+#define OCI_SUBSCR_PROTO_OCI 0 /* oci */
+#define OCI_SUBSCR_PROTO_MAIL 1 /* mail */
+#define OCI_SUBSCR_PROTO_SERVER 2 /* server */
+#define OCI_SUBSCR_PROTO_HTTP 3 /* http */
+#define OCI_SUBSCR_PROTO_MAX 4 /* max current protocols */
+
+/*------------- Supported Values for presentation for recepient -------------*/
+#define OCI_SUBSCR_PRES_DEFAULT 0 /* default */
+#define OCI_SUBSCR_PRES_XML 1 /* xml */
+#define OCI_SUBSCR_PRES_MAX 2 /* max current presentations */
+
+/*------------- Supported QOS values for notification registrations ---------*/
+#define OCI_SUBSCR_QOS_RELIABLE 0x01 /* reliable */
+#define OCI_SUBSCR_QOS_PAYLOAD 0x02 /* payload delivery */
+#define OCI_SUBSCR_QOS_REPLICATE 0x04 /* replicate to director */
+#define OCI_SUBSCR_QOS_SECURE 0x08 /* secure payload delivery */
+#define OCI_SUBSCR_QOS_PURGE_ON_NTFN 0x10 /* purge on first ntfn */
+#define OCI_SUBSCR_QOS_MULTICBK 0x20 /* multi instance callback */
+ /* 0x40 is used for a internal flag */
+#define OCI_SUBSCR_QOS_HAREG 0x80 /* HA reg */
+
+/* ----QOS flags specific to change notification/ continuous queries CQ -----*/
+#define OCI_SUBSCR_CQ_QOS_QUERY 0x01 /* query level notification */
+#define OCI_SUBSCR_CQ_QOS_BEST_EFFORT 0x02 /* best effort notification */
+#define OCI_SUBSCR_CQ_QOS_CLQRYCACHE 0x04 /* client query caching */
+
+/*------------- Supported Values for notification grouping class ------------*/
+#define OCI_SUBSCR_NTFN_GROUPING_CLASS_TIME 1 /* time */
+
+/*------------- Supported Values for notification grouping type -------------*/
+#define OCI_SUBSCR_NTFN_GROUPING_TYPE_SUMMARY 1 /* summary */
+#define OCI_SUBSCR_NTFN_GROUPING_TYPE_LAST 2 /* last */
+
+/* ----- Temporary attribute value for UCS2/UTF16 character set ID -------- */
+#define OCI_UCS2ID 1000 /* UCS2 charset ID */
+#define OCI_UTF16ID 1000 /* UTF16 charset ID */
+
+/*============================== End OCI Attribute Types ====================*/
+
+/*---------------- Server Handle Attribute Values ---------------------------*/
+
+/* OCI_ATTR_SERVER_STATUS */
+#define OCI_SERVER_NOT_CONNECTED 0x0
+#define OCI_SERVER_NORMAL 0x1
+
+/*---------------------------------------------------------------------------*/
+
+/*------------------------- Supported Namespaces ---------------------------*/
+#define OCI_SUBSCR_NAMESPACE_ANONYMOUS 0 /* Anonymous Namespace */
+#define OCI_SUBSCR_NAMESPACE_AQ 1 /* Advanced Queues */
+#define OCI_SUBSCR_NAMESPACE_DBCHANGE 2 /* change notification */
+#define OCI_SUBSCR_NAMESPACE_MAX 3 /* Max Name Space Number */
+
+
+/*-------------------------Credential Types----------------------------------*/
+#define OCI_CRED_RDBMS 1 /* database username/password */
+#define OCI_CRED_EXT 2 /* externally provided credentials */
+#define OCI_CRED_PROXY 3 /* proxy authentication */
+#define OCI_CRED_RESERVED_1 4 /* reserved */
+#define OCI_CRED_RESERVED_2 5 /* reserved */
+/*---------------------------------------------------------------------------*/
+
+/*------------------------Error Return Values--------------------------------*/
+#define OCI_SUCCESS 0 /* maps to SQL_SUCCESS of SAG CLI */
+#define OCI_SUCCESS_WITH_INFO 1 /* maps to SQL_SUCCESS_WITH_INFO */
+#define OCI_RESERVED_FOR_INT_USE 200 /* reserved */
+#define OCI_NO_DATA 100 /* maps to SQL_NO_DATA */
+#define OCI_ERROR -1 /* maps to SQL_ERROR */
+#define OCI_INVALID_HANDLE -2 /* maps to SQL_INVALID_HANDLE */
+#define OCI_NEED_DATA 99 /* maps to SQL_NEED_DATA */
+#define OCI_STILL_EXECUTING -3123 /* OCI would block error */
+/*---------------------------------------------------------------------------*/
+
+/*--------------------- User Callback Return Values -------------------------*/
+#define OCI_CONTINUE -24200 /* Continue with the body of the OCI function */
+#define OCI_ROWCBK_DONE -24201 /* done with user row callback */
+/*---------------------------------------------------------------------------*/
+
+/*------------------DateTime and Interval check Error codes------------------*/
+
+/* DateTime Error Codes used by OCIDateTimeCheck() */
+#define OCI_DT_INVALID_DAY 0x1 /* Bad day */
+#define OCI_DT_DAY_BELOW_VALID 0x2 /* Bad DAy Low/high bit (1=low)*/
+#define OCI_DT_INVALID_MONTH 0x4 /* Bad MOnth */
+#define OCI_DT_MONTH_BELOW_VALID 0x8 /* Bad MOnth Low/high bit (1=low) */
+#define OCI_DT_INVALID_YEAR 0x10 /* Bad YeaR */
+#define OCI_DT_YEAR_BELOW_VALID 0x20 /* Bad YeaR Low/high bit (1=low) */
+#define OCI_DT_INVALID_HOUR 0x40 /* Bad HouR */
+#define OCI_DT_HOUR_BELOW_VALID 0x80 /* Bad HouR Low/high bit (1=low) */
+#define OCI_DT_INVALID_MINUTE 0x100 /* Bad MiNute */
+#define OCI_DT_MINUTE_BELOW_VALID 0x200 /*Bad MiNute Low/high bit (1=low) */
+#define OCI_DT_INVALID_SECOND 0x400 /* Bad SeCond */
+#define OCI_DT_SECOND_BELOW_VALID 0x800 /*bad second Low/high bit (1=low)*/
+#define OCI_DT_DAY_MISSING_FROM_1582 0x1000
+ /* Day is one of those "missing" from 1582 */
+#define OCI_DT_YEAR_ZERO 0x2000 /* Year may not equal zero */
+#define OCI_DT_INVALID_TIMEZONE 0x4000 /* Bad Timezone */
+#define OCI_DT_INVALID_FORMAT 0x8000 /* Bad date format input */
+
+
+/* Interval Error Codes used by OCIInterCheck() */
+#define OCI_INTER_INVALID_DAY 0x1 /* Bad day */
+#define OCI_INTER_DAY_BELOW_VALID 0x2 /* Bad DAy Low/high bit (1=low) */
+#define OCI_INTER_INVALID_MONTH 0x4 /* Bad MOnth */
+#define OCI_INTER_MONTH_BELOW_VALID 0x8 /*Bad MOnth Low/high bit (1=low) */
+#define OCI_INTER_INVALID_YEAR 0x10 /* Bad YeaR */
+#define OCI_INTER_YEAR_BELOW_VALID 0x20 /*Bad YeaR Low/high bit (1=low) */
+#define OCI_INTER_INVALID_HOUR 0x40 /* Bad HouR */
+#define OCI_INTER_HOUR_BELOW_VALID 0x80 /*Bad HouR Low/high bit (1=low) */
+#define OCI_INTER_INVALID_MINUTE 0x100 /* Bad MiNute */
+#define OCI_INTER_MINUTE_BELOW_VALID 0x200
+ /*Bad MiNute Low/high bit(1=low) */
+#define OCI_INTER_INVALID_SECOND 0x400 /* Bad SeCond */
+#define OCI_INTER_SECOND_BELOW_VALID 0x800
+ /*bad second Low/high bit(1=low) */
+#define OCI_INTER_INVALID_FRACSEC 0x1000 /* Bad Fractional second */
+#define OCI_INTER_FRACSEC_BELOW_VALID 0x2000
+ /* Bad fractional second Low/High */
+
+
+/*------------------------Parsing Syntax Types-------------------------------*/
+#define OCI_V7_SYNTAX 2 /* V815 language - for backwards compatibility */
+#define OCI_V8_SYNTAX 3 /* V815 language - for backwards compatibility */
+#define OCI_NTV_SYNTAX 1 /* Use what so ever is the native lang of server */
+ /* these values must match the values defined in kpul.h */
+/*---------------------------------------------------------------------------*/
+
+/*------------------------(Scrollable Cursor) Fetch Options-------------------
+ * For non-scrollable cursor, the only valid (and default) orientation is
+ * OCI_FETCH_NEXT
+ */
+#define OCI_FETCH_CURRENT 0x00000001 /* refetching current position */
+#define OCI_FETCH_NEXT 0x00000002 /* next row */
+#define OCI_FETCH_FIRST 0x00000004 /* first row of the result set */
+#define OCI_FETCH_LAST 0x00000008 /* the last row of the result set */
+#define OCI_FETCH_PRIOR 0x00000010 /* previous row relative to current */
+#define OCI_FETCH_ABSOLUTE 0x00000020 /* absolute offset from first */
+#define OCI_FETCH_RELATIVE 0x00000040 /* offset relative to current */
+#define OCI_FETCH_RESERVED_1 0x00000080 /* reserved */
+#define OCI_FETCH_RESERVED_2 0x00000100 /* reserved */
+#define OCI_FETCH_RESERVED_3 0x00000200 /* reserved */
+#define OCI_FETCH_RESERVED_4 0x00000400 /* reserved */
+#define OCI_FETCH_RESERVED_5 0x00000800 /* reserved */
+#define OCI_FETCH_RESERVED_6 0x00001000 /* reserved */
+
+/*---------------------------------------------------------------------------*/
+
+/*------------------------Bind and Define Options----------------------------*/
+#define OCI_SB2_IND_PTR 0x00000001 /* unused */
+#define OCI_DATA_AT_EXEC 0x00000002 /* data at execute time */
+#define OCI_DYNAMIC_FETCH 0x00000002 /* fetch dynamically */
+#define OCI_PIECEWISE 0x00000004 /* piecewise DMLs or fetch */
+#define OCI_DEFINE_RESERVED_1 0x00000008 /* reserved */
+#define OCI_BIND_RESERVED_2 0x00000010 /* reserved */
+#define OCI_DEFINE_RESERVED_2 0x00000020 /* reserved */
+#define OCI_BIND_SOFT 0x00000040 /* soft bind or define */
+#define OCI_DEFINE_SOFT 0x00000080 /* soft bind or define */
+#define OCI_BIND_RESERVED_3 0x00000100 /* reserved */
+#define OCI_IOV 0x00000200 /* For scatter gather bind/define */
+/*---------------------------------------------------------------------------*/
+
+/*----------------------------- Various Modes ------------------------------*/
+#define OCI_DEFAULT 0x00000000
+ /* the default value for parameters and attributes */
+/*-------------OCIInitialize Modes / OCICreateEnvironment Modes -------------*/
+#define OCI_THREADED 0x00000001 /* appl. in threaded environment */
+#define OCI_OBJECT 0x00000002 /* application in object environment */
+#define OCI_EVENTS 0x00000004 /* application is enabled for events */
+#define OCI_RESERVED1 0x00000008 /* reserved */
+#define OCI_SHARED 0x00000010 /* the application is in shared mode */
+#define OCI_RESERVED2 0x00000020 /* reserved */
+/* The following *TWO* are only valid for OCICreateEnvironment call */
+#define OCI_NO_UCB 0x00000040 /* No user callback called during ini */
+#define OCI_NO_MUTEX 0x00000080 /* the environment handle will not be */
+ /* protected by a mutex internally */
+#define OCI_SHARED_EXT 0x00000100 /* Used for shared forms */
+/************************** 0x00000200 free **********************************/
+#define OCI_ALWAYS_BLOCKING 0x00000400 /* all connections always blocking */
+/************************** 0x00000800 free **********************************/
+#define OCI_USE_LDAP 0x00001000 /* allow LDAP connections */
+#define OCI_REG_LDAPONLY 0x00002000 /* only register to LDAP */
+#define OCI_UTF16 0x00004000 /* mode for all UTF16 metadata */
+#define OCI_AFC_PAD_ON 0x00008000
+ /* turn on AFC blank padding when rlenp present */
+#define OCI_ENVCR_RESERVED3 0x00010000 /* reserved */
+#define OCI_NEW_LENGTH_SEMANTICS 0x00020000 /* adopt new length semantics */
+ /* the new length semantics, always bytes, is used by OCIEnvNlsCreate */
+#define OCI_NO_MUTEX_STMT 0x00040000 /* Do not mutex stmt handle */
+#define OCI_MUTEX_ENV_ONLY 0x00080000 /* Mutex only the environment handle */
+#define OCI_SUPPRESS_NLS_VALIDATION 0x00100000 /* suppress nls validation */
+ /* nls validation suppression is on by default;
+ use OCI_ENABLE_NLS_VALIDATION to disable it */
+#define OCI_MUTEX_TRY 0x00200000 /* try and acquire mutex */
+#define OCI_NCHAR_LITERAL_REPLACE_ON 0x00400000 /* nchar literal replace on */
+#define OCI_NCHAR_LITERAL_REPLACE_OFF 0x00800000 /* nchar literal replace off*/
+#define OCI_ENABLE_NLS_VALIDATION 0x01000000 /* enable nls validation */
+#define OCI_ENVCR_RESERVED4 0x02000000 /* reserved */
+
+/*---------------------------------------------------------------------------*/
+/*------------------------OCIConnectionpoolCreate Modes----------------------*/
+
+#define OCI_CPOOL_REINITIALIZE 0x111
+
+/*---------------------------------------------------------------------------*/
+/*--------------------------------- OCILogon2 Modes -------------------------*/
+
+#define OCI_LOGON2_SPOOL 0x0001 /* Use session pool */
+#define OCI_LOGON2_CPOOL OCI_CPOOL /* Use connection pool */
+#define OCI_LOGON2_STMTCACHE 0x0004 /* Use Stmt Caching */
+#define OCI_LOGON2_PROXY 0x0008 /* Proxy authentiaction */
+
+/*---------------------------------------------------------------------------*/
+/*------------------------- OCISessionPoolCreate Modes ----------------------*/
+
+#define OCI_SPC_REINITIALIZE 0x0001 /* Reinitialize the session pool */
+#define OCI_SPC_HOMOGENEOUS 0x0002 /* Session pool is homogeneneous */
+#define OCI_SPC_STMTCACHE 0x0004 /* Session pool has stmt cache */
+#define OCI_SPC_NO_RLB 0x0008 /* Do not enable Runtime load balancing. */
+
+/*---------------------------------------------------------------------------*/
+/*--------------------------- OCISessionGet Modes ---------------------------*/
+
+#define OCI_SESSGET_SPOOL 0x0001 /* SessionGet called in SPOOL mode */
+#define OCI_SESSGET_CPOOL OCI_CPOOL /* SessionGet called in CPOOL mode */
+#define OCI_SESSGET_STMTCACHE 0x0004 /* Use statement cache */
+#define OCI_SESSGET_CREDPROXY 0x0008 /* SessionGet called in proxy mode */
+#define OCI_SESSGET_CREDEXT 0x0010
+#define OCI_SESSGET_SPOOL_MATCHANY 0x0020
+#define OCI_SESSGET_PURITY_NEW 0x0040
+#define OCI_SESSGET_PURITY_SELF 0x0080
+#define OCI_SESSGET_SYSDBA 0x0100 /* SessionGet with SYSDBA privileges */
+
+/*---------------------------------------------------------------------------*/
+/*------------------------ATTR Values for Session Pool-----------------------*/
+/* Attribute values for OCI_ATTR_SPOOL_GETMODE */
+#define OCI_SPOOL_ATTRVAL_WAIT 0 /* block till you get a session */
+#define OCI_SPOOL_ATTRVAL_NOWAIT 1 /* error out if no session avaliable */
+#define OCI_SPOOL_ATTRVAL_FORCEGET 2 /* get session even if max is exceeded */
+
+/*---------------------------------------------------------------------------*/
+/*--------------------------- OCISessionRelease Modes -----------------------*/
+
+#define OCI_SESSRLS_DROPSESS 0x0001 /* Drop the Session */
+#define OCI_SESSRLS_RETAG 0x0002 /* Retag the session */
+
+/*---------------------------------------------------------------------------*/
+/*----------------------- OCISessionPoolDestroy Modes -----------------------*/
+
+#define OCI_SPD_FORCE 0x0001 /* Force the sessions to terminate.
+ Even if there are some busy
+ sessions close them */
+
+/*---------------------------------------------------------------------------*/
+/*----------------------------- Statement States ----------------------------*/
+
+#define OCI_STMT_STATE_INITIALIZED 0x0001
+#define OCI_STMT_STATE_EXECUTED 0x0002
+#define OCI_STMT_STATE_END_OF_FETCH 0x0003
+
+/*---------------------------------------------------------------------------*/
+
+/*----------------------------- OCIMemStats Modes ---------------------------*/
+#define OCI_MEM_INIT 0x01
+#define OCI_MEM_CLN 0x02
+#define OCI_MEM_FLUSH 0x04
+#define OCI_DUMP_HEAP 0x80
+
+#define OCI_CLIENT_STATS 0x10
+#define OCI_SERVER_STATS 0x20
+
+/*----------------------------- OCIEnvInit Modes ----------------------------*/
+/* NOTE: NO NEW MODES SHOULD BE ADDED HERE BECAUSE THE RECOMMENDED METHOD
+ * IS TO USE THE NEW OCICreateEnvironment MODES.
+ */
+#define OCI_ENV_NO_UCB 0x01 /* A user callback will not be called in
+ OCIEnvInit() */
+#define OCI_ENV_NO_MUTEX 0x08 /* the environment handle will not be protected
+ by a mutex internally */
+
+/*---------------------------------------------------------------------------*/
+
+/*------------------------ Prepare Modes ------------------------------------*/
+#define OCI_NO_SHARING 0x01 /* turn off statement handle sharing */
+#define OCI_PREP_RESERVED_1 0x02 /* reserved */
+#define OCI_PREP_AFC_PAD_ON 0x04 /* turn on blank padding for AFC */
+#define OCI_PREP_AFC_PAD_OFF 0x08 /* turn off blank padding for AFC */
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------*/
+
+/*----------------------- Execution Modes -----------------------------------*/
+#define OCI_BATCH_MODE 0x00000001 /* batch the oci stmt for exec */
+#define OCI_EXACT_FETCH 0x00000002 /* fetch exact rows specified */
+/* #define 0x00000004 available */
+#define OCI_STMT_SCROLLABLE_READONLY \
+ 0x00000008 /* if result set is scrollable */
+#define OCI_DESCRIBE_ONLY 0x00000010 /* only describe the statement */
+#define OCI_COMMIT_ON_SUCCESS 0x00000020 /* commit, if successful exec */
+#define OCI_NON_BLOCKING 0x00000040 /* non-blocking */
+#define OCI_BATCH_ERRORS 0x00000080 /* batch errors in array dmls */
+#define OCI_PARSE_ONLY 0x00000100 /* only parse the statement */
+#define OCI_EXACT_FETCH_RESERVED_1 0x00000200 /* reserved */
+#define OCI_SHOW_DML_WARNINGS 0x00000400
+ /* return OCI_SUCCESS_WITH_INFO for delete/update w/no where clause */
+#define OCI_EXEC_RESERVED_2 0x00000800 /* reserved */
+#define OCI_DESC_RESERVED_1 0x00001000 /* reserved */
+#define OCI_EXEC_RESERVED_3 0x00002000 /* reserved */
+#define OCI_EXEC_RESERVED_4 0x00004000 /* reserved */
+#define OCI_EXEC_RESERVED_5 0x00008000 /* reserved */
+#define OCI_EXEC_RESERVED_6 0x00010000 /* reserved */
+#define OCI_RESULT_CACHE 0x00020000 /* hint to use query caching */
+#define OCI_NO_RESULT_CACHE 0x00040000 /*hint to bypass query caching*/
+#define OCI_EXEC_RESERVED_7 0x00080000 /* reserved */
+
+/*---------------------------------------------------------------------------*/
+
+/*------------------------Authentication Modes-------------------------------*/
+#define OCI_MIGRATE 0x00000001 /* migratable auth context */
+#define OCI_SYSDBA 0x00000002 /* for SYSDBA authorization */
+#define OCI_SYSOPER 0x00000004 /* for SYSOPER authorization */
+#define OCI_PRELIM_AUTH 0x00000008 /* for preliminary authorization */
+#define OCIP_ICACHE 0x00000010 /* Private OCI cache mode */
+#define OCI_AUTH_RESERVED_1 0x00000020 /* reserved */
+#define OCI_STMT_CACHE 0x00000040 /* enable OCI Stmt Caching */
+#define OCI_STATELESS_CALL 0x00000080 /* stateless at call boundary */
+#define OCI_STATELESS_TXN 0x00000100 /* stateless at txn boundary */
+#define OCI_STATELESS_APP 0x00000200 /* stateless at user-specified pts */
+#define OCI_AUTH_RESERVED_2 0x00000400 /* reserved */
+#define OCI_AUTH_RESERVED_3 0x00000800 /* reserved */
+#define OCI_AUTH_RESERVED_4 0x00001000 /* reserved */
+#define OCI_AUTH_RESERVED_5 0x00002000 /* reserved */
+#define OCI_SYSASM 0x00008000 /* for SYSASM authorization */
+#define OCI_AUTH_RESERVED_6 0x00010000 /* reserved */
+
+/*---------------------------------------------------------------------------*/
+
+/*------------------------Session End Modes----------------------------------*/
+#define OCI_SESSEND_RESERVED_1 0x0001 /* reserved */
+#define OCI_SESSEND_RESERVED_2 0x0002 /* reserved */
+/*---------------------------------------------------------------------------*/
+
+/*------------------------Attach Modes---------------------------------------*/
+
+/* The following attach modes are the same as the UPI modes defined in
+ * UPIDEF.H. Do not use these values externally.
+ */
+
+#define OCI_FASTPATH 0x0010 /* Attach in fast path mode */
+#define OCI_ATCH_RESERVED_1 0x0020 /* reserved */
+#define OCI_ATCH_RESERVED_2 0x0080 /* reserved */
+#define OCI_ATCH_RESERVED_3 0x0100 /* reserved */
+#define OCI_CPOOL 0x0200 /* Attach using server handle from pool */
+#define OCI_ATCH_RESERVED_4 0x0400 /* reserved */
+#define OCI_ATCH_RESERVED_5 0x2000 /* reserved */
+#define OCI_ATCH_ENABLE_BEQ 0x4000 /* Allow bequeath connect strings */
+#define OCI_ATCH_RESERVED_6 0x8000 /* reserved */
+#define OCI_ATCH_RESERVED_7 0x10000 /* reserved */
+#define OCI_ATCH_RESERVED_8 0x20000 /* reserved */
+
+#define OCI_SRVATCH_RESERVED5 0x01000000 /* reserved */
+#define OCI_SRVATCH_RESERVED6 0x02000000 /* reserved */
+
+/*---------------------OCIStmtPrepare2 Modes---------------------------------*/
+#define OCI_PREP2_CACHE_SEARCHONLY 0x0010 /* ONly Search */
+#define OCI_PREP2_GET_PLSQL_WARNINGS 0x0020 /* Get PL/SQL warnings */
+#define OCI_PREP2_RESERVED_1 0x0040 /* reserved */
+
+/*---------------------OCIStmtRelease Modes----------------------------------*/
+#define OCI_STRLS_CACHE_DELETE 0x0010 /* Delete from Cache */
+
+/*---------------------OCIHanlde Mgmt Misc Modes-----------------------------*/
+#define OCI_STM_RESERVED4 0x00100000 /* reserved */
+
+/*-----------------------------End Various Modes ----------------------------*/
+
+/*------------------------Piece Information----------------------------------*/
+#define OCI_PARAM_IN 0x01 /* in parameter */
+#define OCI_PARAM_OUT 0x02 /* out parameter */
+/*---------------------------------------------------------------------------*/
+
+/*------------------------ Transaction Start Flags --------------------------*/
+/* NOTE: OCI_TRANS_JOIN and OCI_TRANS_NOMIGRATE not supported in 8.0.X */
+#define OCI_TRANS_NEW 0x00000001 /* start a new local or global txn */
+#define OCI_TRANS_JOIN 0x00000002 /* join an existing global txn */
+#define OCI_TRANS_RESUME 0x00000004 /* resume the global txn branch */
+#define OCI_TRANS_PROMOTE 0x00000008 /* promote the local txn to global */
+#define OCI_TRANS_STARTMASK 0x000000ff /* mask for start operation flags */
+
+#define OCI_TRANS_READONLY 0x00000100 /* start a readonly txn */
+#define OCI_TRANS_READWRITE 0x00000200 /* start a read-write txn */
+#define OCI_TRANS_SERIALIZABLE 0x00000400 /* start a serializable txn */
+#define OCI_TRANS_ISOLMASK 0x0000ff00 /* mask for start isolation flags */
+
+#define OCI_TRANS_LOOSE 0x00010000 /* a loosely coupled branch */
+#define OCI_TRANS_TIGHT 0x00020000 /* a tightly coupled branch */
+#define OCI_TRANS_TYPEMASK 0x000f0000 /* mask for branch type flags */
+
+#define OCI_TRANS_NOMIGRATE 0x00100000 /* non migratable transaction */
+#define OCI_TRANS_SEPARABLE 0x00200000 /* separable transaction (8.1.6+) */
+#define OCI_TRANS_OTSRESUME 0x00400000 /* OTS resuming a transaction */
+#define OCI_TRANS_OTHRMASK 0xfff00000 /* mask for other start flags */
+
+
+/*---------------------------------------------------------------------------*/
+
+/*------------------------ Transaction End Flags ----------------------------*/
+#define OCI_TRANS_TWOPHASE 0x01000000 /* use two phase commit */
+#define OCI_TRANS_WRITEBATCH 0x00000001 /* force cmt-redo for local txns */
+#define OCI_TRANS_WRITEIMMED 0x00000002 /* no force cmt-redo */
+#define OCI_TRANS_WRITEWAIT 0x00000004 /* no sync cmt-redo */
+#define OCI_TRANS_WRITENOWAIT 0x00000008 /* sync cmt-redo for local txns */
+/*---------------------------------------------------------------------------*/
+
+/*------------------------- AQ Constants ------------------------------------
+ * NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
+ * The following constants must match the PL/SQL dbms_aq constants
+ * NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
+ */
+/* ------------------------- Visibility flags -------------------------------*/
+#define OCI_ENQ_IMMEDIATE 1 /* enqueue is an independent transaction */
+#define OCI_ENQ_ON_COMMIT 2 /* enqueue is part of current transaction */
+
+/* ----------------------- Dequeue mode flags -------------------------------*/
+#define OCI_DEQ_BROWSE 1 /* read message without acquiring a lock */
+#define OCI_DEQ_LOCKED 2 /* read and obtain write lock on message */
+#define OCI_DEQ_REMOVE 3 /* read the message and delete it */
+#define OCI_DEQ_REMOVE_NODATA 4 /* delete message w'o returning payload */
+#define OCI_DEQ_GETSIG 5 /* get signature only */
+
+/* ----------------- Dequeue navigation flags -------------------------------*/
+#define OCI_DEQ_FIRST_MSG 1 /* get first message at head of queue */
+#define OCI_DEQ_NEXT_MSG 3 /* next message that is available */
+#define OCI_DEQ_NEXT_TRANSACTION 2 /* get first message of next txn group */
+#define OCI_DEQ_FIRST_MSG_MULTI_GROUP 4
+ /* start from first message and array deq across txn groups */
+#define OCI_DEQ_MULT_TRANSACTION 5 /* array dequeue across txn groups */
+#define OCI_DEQ_NEXT_MSG_MULTI_GROUP OCI_DEQ_MULT_TRANSACTION
+ /* array dequeue across txn groups */
+
+/* ----------------- Dequeue Option Reserved flags ------------------------- */
+#define OCI_DEQ_RESERVED_1 0x000001
+
+/* --------------------- Message states -------------------------------------*/
+#define OCI_MSG_WAITING 1 /* the message delay has not yet completed */
+#define OCI_MSG_READY 0 /* the message is ready to be processed */
+#define OCI_MSG_PROCESSED 2 /* the message has been processed */
+#define OCI_MSG_EXPIRED 3 /* message has moved to exception queue */
+
+/* --------------------- Sequence deviation ---------------------------------*/
+#define OCI_ENQ_BEFORE 2 /* enqueue message before another message */
+#define OCI_ENQ_TOP 3 /* enqueue message before all messages */
+
+/* ------------------------- Visibility flags -------------------------------*/
+#define OCI_DEQ_IMMEDIATE 1 /* dequeue is an independent transaction */
+#define OCI_DEQ_ON_COMMIT 2 /* dequeue is part of current transaction */
+
+/* ------------------------ Wait --------------------------------------------*/
+#define OCI_DEQ_WAIT_FOREVER -1 /* wait forever if no message available */
+#define OCI_NTFN_GROUPING_FOREVER -1 /* send grouping notifications forever */
+#define OCI_DEQ_NO_WAIT 0 /* do not wait if no message is available */
+
+#define OCI_FLOW_CONTROL_NO_TIMEOUT -1
+ /* streaming enqueue: no timeout for flow control */
+
+/* ------------------------ Delay -------------------------------------------*/
+#define OCI_MSG_NO_DELAY 0 /* message is available immediately */
+
+/* ------------------------- Expiration -------------------------------------*/
+#define OCI_MSG_NO_EXPIRATION -1 /* message will never expire */
+
+#define OCI_MSG_PERSISTENT_OR_BUFFERED 3
+#define OCI_MSG_BUFFERED 2
+#define OCI_MSG_PERSISTENT 1
+
+/* ----------------------- Reserved/AQE pisdef flags ------------------------*/
+/* see aqeflg defines in kwqp.h */
+#define OCI_AQ_RESERVED_1 0x0002
+#define OCI_AQ_RESERVED_2 0x0004
+#define OCI_AQ_RESERVED_3 0x0008
+#define OCI_AQ_RESERVED_4 0x0010
+
+#define OCI_AQ_STREAMING_FLAG 0x02000000
+
+/* ------------------------------ Replay Info -------------------------------*/
+#define OCI_AQ_LAST_ENQUEUED 0
+#define OCI_AQ_LAST_ACKNOWLEDGED 1
+
+/* -------------------------- END AQ Constants ----------------------------- */
+
+/* --------------------END DateTime and Interval Constants ------------------*/
+
+/*-----------------------Object Types----------------------------------------*/
+/*-----------Object Types **** Not to be Used **** --------------------------*/
+/* Deprecated */
+#define OCI_OTYPE_UNK 0
+#define OCI_OTYPE_TABLE 1
+#define OCI_OTYPE_VIEW 2
+#define OCI_OTYPE_SYN 3
+#define OCI_OTYPE_PROC 4
+#define OCI_OTYPE_FUNC 5
+#define OCI_OTYPE_PKG 6
+#define OCI_OTYPE_STMT 7
+/*---------------------------------------------------------------------------*/
+
+/*=======================Describe Handle Parameter Attributes ===============*/
+/*
+ These attributes are orthogonal to the other set of attributes defined
+ above. These attrubutes are to be used only for the describe handle.
+*/
+/*===========================================================================*/
+/* Attributes common to Columns and Stored Procs */
+#define OCI_ATTR_DATA_SIZE 1 /* maximum size of the data */
+#define OCI_ATTR_DATA_TYPE 2 /* the SQL type of the column/argument */
+#define OCI_ATTR_DISP_SIZE 3 /* the display size */
+#define OCI_ATTR_NAME 4 /* the name of the column/argument */
+#define OCI_ATTR_PRECISION 5 /* precision if number type */
+#define OCI_ATTR_SCALE 6 /* scale if number type */
+#define OCI_ATTR_IS_NULL 7 /* is it null ? */
+#define OCI_ATTR_TYPE_NAME 8
+ /* name of the named data type or a package name for package private types */
+#define OCI_ATTR_SCHEMA_NAME 9 /* the schema name */
+#define OCI_ATTR_SUB_NAME 10 /* type name if package private type */
+#define OCI_ATTR_POSITION 11
+ /* relative position of col/arg in the list of cols/args */
+/* complex object retrieval parameter attributes */
+#define OCI_ATTR_COMPLEXOBJECTCOMP_TYPE 50
+#define OCI_ATTR_COMPLEXOBJECTCOMP_TYPE_LEVEL 51
+#define OCI_ATTR_COMPLEXOBJECT_LEVEL 52
+#define OCI_ATTR_COMPLEXOBJECT_COLL_OUTOFLINE 53
+
+/* Only Columns */
+#define OCI_ATTR_DISP_NAME 100 /* the display name */
+#define OCI_ATTR_ENCC_SIZE 101 /* encrypted data size */
+#define OCI_ATTR_COL_ENC 102 /* column is encrypted ? */
+#define OCI_ATTR_COL_ENC_SALT 103 /* is encrypted column salted ? */
+
+/*Only Stored Procs */
+#define OCI_ATTR_OVERLOAD 210 /* is this position overloaded */
+#define OCI_ATTR_LEVEL 211 /* level for structured types */
+#define OCI_ATTR_HAS_DEFAULT 212 /* has a default value */
+#define OCI_ATTR_IOMODE 213 /* in, out inout */
+#define OCI_ATTR_RADIX 214 /* returns a radix */
+#define OCI_ATTR_NUM_ARGS 215 /* total number of arguments */
+
+/* only named type attributes */
+#define OCI_ATTR_TYPECODE 216 /* object or collection */
+#define OCI_ATTR_COLLECTION_TYPECODE 217 /* varray or nested table */
+#define OCI_ATTR_VERSION 218 /* user assigned version */
+#define OCI_ATTR_IS_INCOMPLETE_TYPE 219 /* is this an incomplete type */
+#define OCI_ATTR_IS_SYSTEM_TYPE 220 /* a system type */
+#define OCI_ATTR_IS_PREDEFINED_TYPE 221 /* a predefined type */
+#define OCI_ATTR_IS_TRANSIENT_TYPE 222 /* a transient type */
+#define OCI_ATTR_IS_SYSTEM_GENERATED_TYPE 223 /* system generated type */
+#define OCI_ATTR_HAS_NESTED_TABLE 224 /* contains nested table attr */
+#define OCI_ATTR_HAS_LOB 225 /* has a lob attribute */
+#define OCI_ATTR_HAS_FILE 226 /* has a file attribute */
+#define OCI_ATTR_COLLECTION_ELEMENT 227 /* has a collection attribute */
+#define OCI_ATTR_NUM_TYPE_ATTRS 228 /* number of attribute types */
+#define OCI_ATTR_LIST_TYPE_ATTRS 229 /* list of type attributes */
+#define OCI_ATTR_NUM_TYPE_METHODS 230 /* number of type methods */
+#define OCI_ATTR_LIST_TYPE_METHODS 231 /* list of type methods */
+#define OCI_ATTR_MAP_METHOD 232 /* map method of type */
+#define OCI_ATTR_ORDER_METHOD 233 /* order method of type */
+
+/* only collection element */
+#define OCI_ATTR_NUM_ELEMS 234 /* number of elements */
+
+/* only type methods */
+#define OCI_ATTR_ENCAPSULATION 235 /* encapsulation level */
+#define OCI_ATTR_IS_SELFISH 236 /* method selfish */
+#define OCI_ATTR_IS_VIRTUAL 237 /* virtual */
+#define OCI_ATTR_IS_INLINE 238 /* inline */
+#define OCI_ATTR_IS_CONSTANT 239 /* constant */
+#define OCI_ATTR_HAS_RESULT 240 /* has result */
+#define OCI_ATTR_IS_CONSTRUCTOR 241 /* constructor */
+#define OCI_ATTR_IS_DESTRUCTOR 242 /* destructor */
+#define OCI_ATTR_IS_OPERATOR 243 /* operator */
+#define OCI_ATTR_IS_MAP 244 /* a map method */
+#define OCI_ATTR_IS_ORDER 245 /* order method */
+#define OCI_ATTR_IS_RNDS 246 /* read no data state method */
+#define OCI_ATTR_IS_RNPS 247 /* read no process state */
+#define OCI_ATTR_IS_WNDS 248 /* write no data state method */
+#define OCI_ATTR_IS_WNPS 249 /* write no process state */
+
+#define OCI_ATTR_DESC_PUBLIC 250 /* public object */
+
+/* Object Cache Enhancements : attributes for User Constructed Instances */
+#define OCI_ATTR_CACHE_CLIENT_CONTEXT 251
+#define OCI_ATTR_UCI_CONSTRUCT 252
+#define OCI_ATTR_UCI_DESTRUCT 253
+#define OCI_ATTR_UCI_COPY 254
+#define OCI_ATTR_UCI_PICKLE 255
+#define OCI_ATTR_UCI_UNPICKLE 256
+#define OCI_ATTR_UCI_REFRESH 257
+
+/* for type inheritance */
+#define OCI_ATTR_IS_SUBTYPE 258
+#define OCI_ATTR_SUPERTYPE_SCHEMA_NAME 259
+#define OCI_ATTR_SUPERTYPE_NAME 260
+
+/* for schemas */
+#define OCI_ATTR_LIST_OBJECTS 261 /* list of objects in schema */
+
+/* for database */
+#define OCI_ATTR_NCHARSET_ID 262 /* char set id */
+#define OCI_ATTR_LIST_SCHEMAS 263 /* list of schemas */
+#define OCI_ATTR_MAX_PROC_LEN 264 /* max procedure length */
+#define OCI_ATTR_MAX_COLUMN_LEN 265 /* max column name length */
+#define OCI_ATTR_CURSOR_COMMIT_BEHAVIOR 266 /* cursor commit behavior */
+#define OCI_ATTR_MAX_CATALOG_NAMELEN 267 /* catalog namelength */
+#define OCI_ATTR_CATALOG_LOCATION 268 /* catalog location */
+#define OCI_ATTR_SAVEPOINT_SUPPORT 269 /* savepoint support */
+#define OCI_ATTR_NOWAIT_SUPPORT 270 /* nowait support */
+#define OCI_ATTR_AUTOCOMMIT_DDL 271 /* autocommit DDL */
+#define OCI_ATTR_LOCKING_MODE 272 /* locking mode */
+
+/* for externally initialized context */
+#define OCI_ATTR_APPCTX_SIZE 273 /* count of context to be init*/
+#define OCI_ATTR_APPCTX_LIST 274 /* count of context to be init*/
+#define OCI_ATTR_APPCTX_NAME 275 /* name of context to be init*/
+#define OCI_ATTR_APPCTX_ATTR 276 /* attr of context to be init*/
+#define OCI_ATTR_APPCTX_VALUE 277 /* value of context to be init*/
+
+/* for client id propagation */
+#define OCI_ATTR_CLIENT_IDENTIFIER 278 /* value of client id to set*/
+
+/* for inheritance - part 2 */
+#define OCI_ATTR_IS_FINAL_TYPE 279 /* is final type ? */
+#define OCI_ATTR_IS_INSTANTIABLE_TYPE 280 /* is instantiable type ? */
+#define OCI_ATTR_IS_FINAL_METHOD 281 /* is final method ? */
+#define OCI_ATTR_IS_INSTANTIABLE_METHOD 282 /* is instantiable method ? */
+#define OCI_ATTR_IS_OVERRIDING_METHOD 283 /* is overriding method ? */
+
+#define OCI_ATTR_DESC_SYNBASE 284 /* Describe the base object */
+
+
+#define OCI_ATTR_CHAR_USED 285 /* char length semantics */
+#define OCI_ATTR_CHAR_SIZE 286 /* char length */
+
+/* SQLJ support */
+#define OCI_ATTR_IS_JAVA_TYPE 287 /* is java implemented type ? */
+
+/* N-Tier support */
+#define OCI_ATTR_DISTINGUISHED_NAME 300 /* use DN as user name */
+#define OCI_ATTR_KERBEROS_TICKET 301 /* Kerberos ticket as cred. */
+
+/* for multilanguage debugging */
+#define OCI_ATTR_ORA_DEBUG_JDWP 302 /* ORA_DEBUG_JDWP attribute */
+
+#define OCI_ATTR_EDITION 288 /* ORA_EDITION */
+
+#define OCI_ATTR_RESERVED_14 303 /* reserved */
+
+
+/*---------------------------End Describe Handle Attributes -----------------*/
+
+/* For values 303 - 307, see DirPathAPI attribute section in this file */
+
+/* ----------------------- Session Pool Attributes ------------------------- */
+#define OCI_ATTR_SPOOL_TIMEOUT 308 /* session timeout */
+#define OCI_ATTR_SPOOL_GETMODE 309 /* session get mode */
+#define OCI_ATTR_SPOOL_BUSY_COUNT 310 /* busy session count */
+#define OCI_ATTR_SPOOL_OPEN_COUNT 311 /* open session count */
+#define OCI_ATTR_SPOOL_MIN 312 /* min session count */
+#define OCI_ATTR_SPOOL_MAX 313 /* max session count */
+#define OCI_ATTR_SPOOL_INCR 314 /* session increment count */
+#define OCI_ATTR_SPOOL_STMTCACHESIZE 208 /*Stmt cache size of pool */
+#define OCI_ATTR_SPOOL_AUTH 460 /* Auth handle on pool handle*/
+/*------------------------------End Session Pool Attributes -----------------*/
+/*---------------------------- For XML Types ------------------------------- */
+/* For table, view and column */
+#define OCI_ATTR_IS_XMLTYPE 315 /* Is the type an XML type? */
+#define OCI_ATTR_XMLSCHEMA_NAME 316 /* Name of XML Schema */
+#define OCI_ATTR_XMLELEMENT_NAME 317 /* Name of XML Element */
+#define OCI_ATTR_XMLSQLTYPSCH_NAME 318 /* SQL type's schema for XML Ele */
+#define OCI_ATTR_XMLSQLTYPE_NAME 319 /* Name of SQL type for XML Ele */
+#define OCI_ATTR_XMLTYPE_STORED_OBJ 320 /* XML type stored as object? */
+#define OCI_ATTR_XMLTYPE_BINARY_XML 422 /* XML type stored as binary? */
+
+/*---------------------------- For Subtypes ------------------------------- */
+/* For type */
+#define OCI_ATTR_HAS_SUBTYPES 321 /* Has subtypes? */
+#define OCI_ATTR_NUM_SUBTYPES 322 /* Number of subtypes */
+#define OCI_ATTR_LIST_SUBTYPES 323 /* List of subtypes */
+
+/* XML flag */
+#define OCI_ATTR_XML_HRCHY_ENABLED 324 /* hierarchy enabled? */
+
+/* Method flag */
+#define OCI_ATTR_IS_OVERRIDDEN_METHOD 325 /* Method is overridden? */
+
+/* For values 326 - 335, see DirPathAPI attribute section in this file */
+
+/*------------- Attributes for 10i Distributed Objects ----------------------*/
+#define OCI_ATTR_OBJ_SUBS 336 /* obj col/tab substitutable */
+
+/* For values 337 - 338, see DirPathAPI attribute section in this file */
+
+/*---------- Attributes for 10i XADFIELD (NLS language, territory -----------*/
+#define OCI_ATTR_XADFIELD_RESERVED_1 339 /* reserved */
+#define OCI_ATTR_XADFIELD_RESERVED_2 340 /* reserved */
+/*------------- Kerberos Secure Client Identifier ---------------------------*/
+#define OCI_ATTR_KERBEROS_CID 341 /* Kerberos db service ticket*/
+
+
+/*------------------------ Attributes for Rules objects ---------------------*/
+#define OCI_ATTR_CONDITION 342 /* rule condition */
+#define OCI_ATTR_COMMENT 343 /* comment */
+#define OCI_ATTR_VALUE 344 /* Anydata value */
+#define OCI_ATTR_EVAL_CONTEXT_OWNER 345 /* eval context owner */
+#define OCI_ATTR_EVAL_CONTEXT_NAME 346 /* eval context name */
+#define OCI_ATTR_EVALUATION_FUNCTION 347 /* eval function name */
+#define OCI_ATTR_VAR_TYPE 348 /* variable type */
+#define OCI_ATTR_VAR_VALUE_FUNCTION 349 /* variable value function */
+#define OCI_ATTR_VAR_METHOD_FUNCTION 350 /* variable method function */
+#define OCI_ATTR_ACTION_CONTEXT 351 /* action context */
+#define OCI_ATTR_LIST_TABLE_ALIASES 352 /* list of table aliases */
+#define OCI_ATTR_LIST_VARIABLE_TYPES 353 /* list of variable types */
+#define OCI_ATTR_TABLE_NAME 356 /* table name */
+
+/* For values 357 - 359, see DirPathAPI attribute section in this file */
+
+#define OCI_ATTR_MESSAGE_CSCN 360 /* message cscn */
+#define OCI_ATTR_MESSAGE_DSCN 361 /* message dscn */
+
+/*--------------------- Audit Session ID ------------------------------------*/
+#define OCI_ATTR_AUDIT_SESSION_ID 362 /* Audit session ID */
+
+/*--------------------- Kerberos TGT Keys -----------------------------------*/
+#define OCI_ATTR_KERBEROS_KEY 363 /* n-tier Kerberos cred key */
+#define OCI_ATTR_KERBEROS_CID_KEY 364 /* SCID Kerberos cred key */
+
+
+#define OCI_ATTR_TRANSACTION_NO 365 /* AQ enq txn number */
+
+/*----------------------- Attributes for End To End Tracing -----------------*/
+#define OCI_ATTR_MODULE 366 /* module for tracing */
+#define OCI_ATTR_ACTION 367 /* action for tracing */
+#define OCI_ATTR_CLIENT_INFO 368 /* client info */
+#define OCI_ATTR_COLLECT_CALL_TIME 369 /* collect call time */
+#define OCI_ATTR_CALL_TIME 370 /* extract call time */
+#define OCI_ATTR_ECONTEXT_ID 371 /* execution-id context */
+#define OCI_ATTR_ECONTEXT_SEQ 372 /*execution-id sequence num */
+
+
+/*------------------------------ Session attributes -------------------------*/
+#define OCI_ATTR_SESSION_STATE 373 /* session state */
+#define OCI_SESSION_STATELESS 1 /* valid states */
+#define OCI_SESSION_STATEFUL 2
+
+#define OCI_ATTR_SESSION_STATETYPE 374 /* session state type */
+#define OCI_SESSION_STATELESS_DEF 0 /* valid state types */
+#define OCI_SESSION_STATELESS_CAL 1
+#define OCI_SESSION_STATELESS_TXN 2
+#define OCI_SESSION_STATELESS_APP 3
+
+#define OCI_ATTR_SESSION_STATE_CLEARED 376 /* session state cleared */
+#define OCI_ATTR_SESSION_MIGRATED 377 /* did session migrate */
+#define OCI_ATTR_SESSION_PRESERVE_STATE 388 /* preserve session state */
+#define OCI_ATTR_DRIVER_NAME 424 /* Driver Name */
+
+/* -------------------------- Admin Handle Attributes ---------------------- */
+
+#define OCI_ATTR_ADMIN_PFILE 389 /* client-side param file */
+
+/*----------------------- Attributes for End To End Tracing -----------------*/
+/* -------------------------- HA Event Handle Attributes ------------------- */
+
+#define OCI_ATTR_HOSTNAME 390 /* SYS_CONTEXT hostname */
+#define OCI_ATTR_DBNAME 391 /* SYS_CONTEXT dbname */
+#define OCI_ATTR_INSTNAME 392 /* SYS_CONTEXT instance name */
+#define OCI_ATTR_SERVICENAME 393 /* SYS_CONTEXT service name */
+#define OCI_ATTR_INSTSTARTTIME 394 /* v$instance instance start time */
+#define OCI_ATTR_HA_TIMESTAMP 395 /* event time */
+#define OCI_ATTR_RESERVED_22 396 /* reserved */
+#define OCI_ATTR_RESERVED_23 397 /* reserved */
+#define OCI_ATTR_RESERVED_24 398 /* reserved */
+#define OCI_ATTR_DBDOMAIN 399 /* db domain */
+#define OCI_ATTR_RESERVED_27 425 /* reserved */
+
+#define OCI_ATTR_EVENTTYPE 400 /* event type */
+#define OCI_EVENTTYPE_HA 0 /* valid value for OCI_ATTR_EVENTTYPE */
+
+#define OCI_ATTR_HA_SOURCE 401
+/* valid values for OCI_ATTR_HA_SOURCE */
+#define OCI_HA_SOURCE_INSTANCE 0
+#define OCI_HA_SOURCE_DATABASE 1
+#define OCI_HA_SOURCE_NODE 2
+#define OCI_HA_SOURCE_SERVICE 3
+#define OCI_HA_SOURCE_SERVICE_MEMBER 4
+#define OCI_HA_SOURCE_ASM_INSTANCE 5
+#define OCI_HA_SOURCE_SERVICE_PRECONNECT 6
+
+#define OCI_ATTR_HA_STATUS 402
+#define OCI_HA_STATUS_DOWN 0 /* valid values for OCI_ATTR_HA_STATUS */
+#define OCI_HA_STATUS_UP 1
+
+#define OCI_ATTR_HA_SRVFIRST 403
+
+#define OCI_ATTR_HA_SRVNEXT 404
+/* ------------------------- Server Handle Attributes -----------------------*/
+
+#define OCI_ATTR_TAF_ENABLED 405
+
+/* Extra notification attributes */
+#define OCI_ATTR_NFY_FLAGS 406
+
+#define OCI_ATTR_MSG_DELIVERY_MODE 407 /* msg delivery mode */
+#define OCI_ATTR_DB_CHARSET_ID 416 /* database charset ID */
+#define OCI_ATTR_DB_NCHARSET_ID 417 /* database ncharset ID */
+#define OCI_ATTR_RESERVED_25 418 /* reserved */
+
+#define OCI_ATTR_FLOW_CONTROL_TIMEOUT 423 /* AQ: flow control timeout */
+/*---------------------------------------------------------------------------*/
+/* ------------------DirPathAPI attribute Section----------------------------*/
+/* All DirPathAPI attributes are in this section of the file. Existing */
+/* attributes prior to this section being created are assigned values < 2000 */
+/* Add new DirPathAPI attributes to this section and their assigned value */
+/* should be whatever the last entry is + 1. */
+
+/*------------- Supported Values for Direct Path Stream Version -------------*/
+#define OCI_DIRPATH_STREAM_VERSION_1 100
+#define OCI_DIRPATH_STREAM_VERSION_2 200
+#define OCI_DIRPATH_STREAM_VERSION_3 300 /* default */
+
+
+#define OCI_ATTR_DIRPATH_MODE 78 /* mode of direct path operation */
+#define OCI_ATTR_DIRPATH_NOLOG 79 /* nologging option */
+#define OCI_ATTR_DIRPATH_PARALLEL 80 /* parallel (temp seg) option */
+
+#define OCI_ATTR_DIRPATH_SORTED_INDEX 137 /* index that data is sorted on */
+
+ /* direct path index maint method (see oci8dp.h) */
+#define OCI_ATTR_DIRPATH_INDEX_MAINT_METHOD 138
+
+ /* parallel load: db file, initial and next extent sizes */
+
+#define OCI_ATTR_DIRPATH_FILE 139 /* DB file to load into */
+#define OCI_ATTR_DIRPATH_STORAGE_INITIAL 140 /* initial extent size */
+#define OCI_ATTR_DIRPATH_STORAGE_NEXT 141 /* next extent size */
+ /* direct path index maint method (see oci8dp.h) */
+#define OCI_ATTR_DIRPATH_SKIPINDEX_METHOD 145
+
+ /* 8.2 dpapi support of ADTs */
+#define OCI_ATTR_DIRPATH_EXPR_TYPE 150 /* expr type of OCI_ATTR_NAME */
+
+/* For the direct path API there are three data formats:
+ * TEXT - used mainly by SQL*Loader, data is in textual form
+ * STREAM - used by datapump, data is in stream loadable form
+ * OCI - used by OCI programs utilizing the DpApi, data is in binary form
+ */
+#define OCI_ATTR_DIRPATH_INPUT 151
+#define OCI_DIRPATH_INPUT_TEXT 0x01 /* text */
+#define OCI_DIRPATH_INPUT_STREAM 0x02 /* stream (datapump) */
+#define OCI_DIRPATH_INPUT_OCI 0x04 /* binary (oci) */
+#define OCI_DIRPATH_INPUT_UNKNOWN 0x08
+
+#define OCI_ATTR_DIRPATH_FN_CTX 167 /* fn ctx ADT attrs or args */
+
+#define OCI_ATTR_DIRPATH_OID 187 /* loading into an OID col */
+#define OCI_ATTR_DIRPATH_SID 194 /* loading into an SID col */
+#define OCI_ATTR_DIRPATH_OBJ_CONSTR 206 /* obj type of subst obj tbl */
+
+/* Attr to allow setting of the stream version PRIOR to calling Prepare */
+#define OCI_ATTR_DIRPATH_STREAM_VERSION 212 /* version of the stream*/
+
+#define OCIP_ATTR_DIRPATH_VARRAY_INDEX 213 /* varray index column */
+
+/*------------- Supported Values for Direct Path Date cache -----------------*/
+#define OCI_ATTR_DIRPATH_DCACHE_NUM 303 /* date cache entries */
+#define OCI_ATTR_DIRPATH_DCACHE_SIZE 304 /* date cache limit */
+#define OCI_ATTR_DIRPATH_DCACHE_MISSES 305 /* date cache misses */
+#define OCI_ATTR_DIRPATH_DCACHE_HITS 306 /* date cache hits */
+#define OCI_ATTR_DIRPATH_DCACHE_DISABLE 307 /* on set: disable datecache
+ * on overflow.
+ * on get: datecache disabled?
+ * could be due to overflow
+ * or others */
+
+/*------------- Attributes for 10i Updates to the DirPath API ---------------*/
+#define OCI_ATTR_DIRPATH_RESERVED_7 326 /* reserved */
+#define OCI_ATTR_DIRPATH_RESERVED_8 327 /* reserved */
+#define OCI_ATTR_DIRPATH_CONVERT 328 /* stream conversion needed? */
+#define OCI_ATTR_DIRPATH_BADROW 329 /* info about bad row */
+#define OCI_ATTR_DIRPATH_BADROW_LENGTH 330 /* length of bad row info */
+#define OCI_ATTR_DIRPATH_WRITE_ORDER 331 /* column fill order */
+#define OCI_ATTR_DIRPATH_GRANULE_SIZE 332 /* granule size for unload */
+#define OCI_ATTR_DIRPATH_GRANULE_OFFSET 333 /* offset to last granule */
+#define OCI_ATTR_DIRPATH_RESERVED_1 334 /* reserved */
+#define OCI_ATTR_DIRPATH_RESERVED_2 335 /* reserved */
+
+/*------ Attributes for 10i DirPathAPI conversion (NLS lang, terr, cs) ------*/
+#define OCI_ATTR_DIRPATH_RESERVED_3 337 /* reserved */
+#define OCI_ATTR_DIRPATH_RESERVED_4 338 /* reserved */
+#define OCI_ATTR_DIRPATH_RESERVED_5 357 /* reserved */
+#define OCI_ATTR_DIRPATH_RESERVED_6 358 /* reserved */
+
+#define OCI_ATTR_DIRPATH_LOCK_WAIT 359 /* wait for lock in dpapi */
+
+#define OCI_ATTR_DIRPATH_RESERVED_9 2000 /* reserved */
+
+/*------ Attribute for 10iR2 for column encryption for Direct Path API ------*/
+#define OCI_ATTR_DIRPATH_RESERVED_10 2001 /* reserved */
+#define OCI_ATTR_DIRPATH_RESERVED_11 2002 /* reserved */
+
+/*------ Attribute to determine last column successfully converted ----------*/
+#define OCI_ATTR_CURRENT_ERRCOL 2003 /* current error column */
+
+ /*--Attributes for 11gR1 for multiple subtype support in Direct Path API - */
+#define OCI_ATTR_DIRPATH_SUBTYPE_INDEX 2004 /* sbtyp indx for attribute */
+
+#define OCI_ATTR_DIRPATH_RESERVED_12 2005 /* reserved */
+#define OCI_ATTR_DIRPATH_RESERVED_13 2006 /* reserver */
+
+ /*--Attribute for partitioning constraint optimization in Direct Path API */
+#define OCI_ATTR_DIRPATH_RESERVED_14 2007 /* reserved */
+
+ /*--Attribute for interval partitioning in Direct Path API */
+#define OCI_ATTR_DIRPATH_RESERVED_15 2008 /* reserved */
+
+ /*--Attribute for interval partitioning in Direct Path API */
+#define OCI_ATTR_DIRPATH_RESERVED_16 2009 /* reserved */
+
+/*--Attribute for allowing parallel lob loads in Direct Path API */
+#define OCI_ATTR_DIRPATH_RESERVED_17 2010 /* reserved */
+
+/*--Attribute for process order number of table being loaded/unloaded */
+#define OCI_ATTR_DIRPATH_RESERVED_18 2011 /* reserved */
+
+#define OCI_ATTR_DIRPATH_RESERVED_19 2012 /* reserved */
+
+#define OCI_ATTR_DIRPATH_NO_INDEX_ERRORS 2013 /* reserved */
+
+/*--Attribute for private sqlldr no index errors */
+#define OCI_ATTR_DIRPATH_RESERVED_20 2014 /* reserved */
+
+/*--Attribute for private sqlldr partition memory limit */
+#define OCI_ATTR_DIRPATH_RESERVED_21 2015 /* reserved */
+
+#define OCI_ATTR_DIRPATH_RESERVED_22 2016 /* reserved */
+
+/*--Attribute to use caller's transaction rather than starting on in kpodpp */
+#define OCI_ATTR_DIRPATH_USE_ACTIVE_TRANS 2017 /* reserved */
+
+/*--Attribute for recnum column */
+#define OCI_ATTR_DIRPATH_RESERVED_23 2018 /* reserved */
+
+/* Add DirPathAPI attributes above. Next value to be assigned is 2019 */
+
+
+
+/* ------------------End of DirPathAPI attribute Section --------------------*/
+/*---------------------------------------------------------------------------*/
+
+
+/*---------------- Describe Handle Parameter Attribute Values ---------------*/
+
+/* OCI_ATTR_CURSOR_COMMIT_BEHAVIOR */
+#define OCI_CURSOR_OPEN 0
+#define OCI_CURSOR_CLOSED 1
+
+/* OCI_ATTR_CATALOG_LOCATION */
+#define OCI_CL_START 0
+#define OCI_CL_END 1
+
+/* OCI_ATTR_SAVEPOINT_SUPPORT */
+#define OCI_SP_SUPPORTED 0
+#define OCI_SP_UNSUPPORTED 1
+
+/* OCI_ATTR_NOWAIT_SUPPORT */
+#define OCI_NW_SUPPORTED 0
+#define OCI_NW_UNSUPPORTED 1
+
+/* OCI_ATTR_AUTOCOMMIT_DDL */
+#define OCI_AC_DDL 0
+#define OCI_NO_AC_DDL 1
+
+/* OCI_ATTR_LOCKING_MODE */
+#define OCI_LOCK_IMMEDIATE 0
+#define OCI_LOCK_DELAYED 1
+
+/* ------------------- Instance type attribute values -----------------------*/
+#define OCI_INSTANCE_TYPE_UNKNOWN 0
+#define OCI_INSTANCE_TYPE_RDBMS 1
+#define OCI_INSTANCE_TYPE_OSM 2
+
+/* ---------------- ASM Volume Device Support attribute values --------------*/
+#define OCI_ASM_VOLUME_UNSUPPORTED 0
+#define OCI_ASM_VOLUME_SUPPORTED 1
+
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------OCIPasswordChange-------------------------------*/
+#define OCI_AUTH 0x08 /* Change the password but do not login */
+
+
+/*------------------------Other Constants------------------------------------*/
+#define OCI_MAX_FNS 100 /* max number of OCI Functions */
+#define OCI_SQLSTATE_SIZE 5
+#define OCI_ERROR_MAXMSG_SIZE 1024 /* max size of an error message */
+#define OCI_ERROR_MAXMSG_SIZE2 3072 /* new len max size of an error message */
+#define OCI_LOBMAXSIZE MINUB4MAXVAL /* maximum lob data size */
+#define OCI_ROWID_LEN 23
+#define OCI_LOB_CONTENTTYPE_MAXSIZE 128 /* max size of securefile contenttype */
+#define OCI_LOB_CONTENTTYPE_MAXBYTESIZE OCI_LOB_CONTENTTYPE_MAXSIZE
+/*---------------------------------------------------------------------------*/
+
+/*------------------------ Fail Over Events ---------------------------------*/
+#define OCI_FO_END 0x00000001
+#define OCI_FO_ABORT 0x00000002
+#define OCI_FO_REAUTH 0x00000004
+#define OCI_FO_BEGIN 0x00000008
+#define OCI_FO_ERROR 0x00000010
+/*---------------------------------------------------------------------------*/
+
+/*------------------------ Fail Over Callback Return Codes ------------------*/
+#define OCI_FO_RETRY 25410
+/*---------------------------------------------------------------------------*/
+
+/*------------------------- Fail Over Types ---------------------------------*/
+#define OCI_FO_NONE 0x00000001
+#define OCI_FO_SESSION 0x00000002
+#define OCI_FO_SELECT 0x00000004
+#define OCI_FO_TXNAL 0x00000008
+/*---------------------------------------------------------------------------*/
+
+/*-----------------------Function Codes--------------------------------------*/
+#define OCI_FNCODE_INITIALIZE 1 /* OCIInitialize */
+#define OCI_FNCODE_HANDLEALLOC 2 /* OCIHandleAlloc */
+#define OCI_FNCODE_HANDLEFREE 3 /* OCIHandleFree */
+#define OCI_FNCODE_DESCRIPTORALLOC 4 /* OCIDescriptorAlloc */
+#define OCI_FNCODE_DESCRIPTORFREE 5 /* OCIDescriptorFree */
+#define OCI_FNCODE_ENVINIT 6 /* OCIEnvInit */
+#define OCI_FNCODE_SERVERATTACH 7 /* OCIServerAttach */
+#define OCI_FNCODE_SERVERDETACH 8 /* OCIServerDetach */
+/* unused 9 */
+#define OCI_FNCODE_SESSIONBEGIN 10 /* OCISessionBegin */
+#define OCI_FNCODE_SESSIONEND 11 /* OCISessionEnd */
+#define OCI_FNCODE_PASSWORDCHANGE 12 /* OCIPasswordChange */
+#define OCI_FNCODE_STMTPREPARE 13 /* OCIStmtPrepare */
+ /* unused 14- 16 */
+#define OCI_FNCODE_BINDDYNAMIC 17 /* OCIBindDynamic */
+#define OCI_FNCODE_BINDOBJECT 18 /* OCIBindObject */
+ /* 19 unused */
+#define OCI_FNCODE_BINDARRAYOFSTRUCT 20 /* OCIBindArrayOfStruct */
+#define OCI_FNCODE_STMTEXECUTE 21 /* OCIStmtExecute */
+ /* unused 22-24 */
+#define OCI_FNCODE_DEFINEOBJECT 25 /* OCIDefineObject */
+#define OCI_FNCODE_DEFINEDYNAMIC 26 /* OCIDefineDynamic */
+#define OCI_FNCODE_DEFINEARRAYOFSTRUCT 27 /* OCIDefineArrayOfStruct */
+#define OCI_FNCODE_STMTFETCH 28 /* OCIStmtFetch */
+#define OCI_FNCODE_STMTGETBIND 29 /* OCIStmtGetBindInfo */
+ /* 30, 31 unused */
+#define OCI_FNCODE_DESCRIBEANY 32 /* OCIDescribeAny */
+#define OCI_FNCODE_TRANSSTART 33 /* OCITransStart */
+#define OCI_FNCODE_TRANSDETACH 34 /* OCITransDetach */
+#define OCI_FNCODE_TRANSCOMMIT 35 /* OCITransCommit */
+ /* 36 unused */
+#define OCI_FNCODE_ERRORGET 37 /* OCIErrorGet */
+#define OCI_FNCODE_LOBOPENFILE 38 /* OCILobFileOpen */
+#define OCI_FNCODE_LOBCLOSEFILE 39 /* OCILobFileClose */
+ /* 40 was LOBCREATEFILE, unused */
+ /* 41 was OCILobFileDelete, unused */
+#define OCI_FNCODE_LOBCOPY 42 /* OCILobCopy */
+#define OCI_FNCODE_LOBAPPEND 43 /* OCILobAppend */
+#define OCI_FNCODE_LOBERASE 44 /* OCILobErase */
+#define OCI_FNCODE_LOBLENGTH 45 /* OCILobGetLength */
+#define OCI_FNCODE_LOBTRIM 46 /* OCILobTrim */
+#define OCI_FNCODE_LOBREAD 47 /* OCILobRead */
+#define OCI_FNCODE_LOBWRITE 48 /* OCILobWrite */
+ /* 49 unused */
+#define OCI_FNCODE_SVCCTXBREAK 50 /* OCIBreak */
+#define OCI_FNCODE_SERVERVERSION 51 /* OCIServerVersion */
+
+#define OCI_FNCODE_KERBATTRSET 52 /* OCIKerbAttrSet */
+
+/* unused 53 */
+
+#define OCI_FNCODE_ATTRGET 54 /* OCIAttrGet */
+#define OCI_FNCODE_ATTRSET 55 /* OCIAttrSet */
+#define OCI_FNCODE_PARAMSET 56 /* OCIParamSet */
+#define OCI_FNCODE_PARAMGET 57 /* OCIParamGet */
+#define OCI_FNCODE_STMTGETPIECEINFO 58 /* OCIStmtGetPieceInfo */
+#define OCI_FNCODE_LDATOSVCCTX 59 /* OCILdaToSvcCtx */
+ /* 60 unused */
+#define OCI_FNCODE_STMTSETPIECEINFO 61 /* OCIStmtSetPieceInfo */
+#define OCI_FNCODE_TRANSFORGET 62 /* OCITransForget */
+#define OCI_FNCODE_TRANSPREPARE 63 /* OCITransPrepare */
+#define OCI_FNCODE_TRANSROLLBACK 64 /* OCITransRollback */
+#define OCI_FNCODE_DEFINEBYPOS 65 /* OCIDefineByPos */
+#define OCI_FNCODE_BINDBYPOS 66 /* OCIBindByPos */
+#define OCI_FNCODE_BINDBYNAME 67 /* OCIBindByName */
+#define OCI_FNCODE_LOBASSIGN 68 /* OCILobAssign */
+#define OCI_FNCODE_LOBISEQUAL 69 /* OCILobIsEqual */
+#define OCI_FNCODE_LOBISINIT 70 /* OCILobLocatorIsInit */
+
+#define OCI_FNCODE_LOBENABLEBUFFERING 71 /* OCILobEnableBuffering */
+#define OCI_FNCODE_LOBCHARSETID 72 /* OCILobCharSetID */
+#define OCI_FNCODE_LOBCHARSETFORM 73 /* OCILobCharSetForm */
+#define OCI_FNCODE_LOBFILESETNAME 74 /* OCILobFileSetName */
+#define OCI_FNCODE_LOBFILEGETNAME 75 /* OCILobFileGetName */
+#define OCI_FNCODE_LOGON 76 /* OCILogon */
+#define OCI_FNCODE_LOGOFF 77 /* OCILogoff */
+#define OCI_FNCODE_LOBDISABLEBUFFERING 78 /* OCILobDisableBuffering */
+#define OCI_FNCODE_LOBFLUSHBUFFER 79 /* OCILobFlushBuffer */
+#define OCI_FNCODE_LOBLOADFROMFILE 80 /* OCILobLoadFromFile */
+
+#define OCI_FNCODE_LOBOPEN 81 /* OCILobOpen */
+#define OCI_FNCODE_LOBCLOSE 82 /* OCILobClose */
+#define OCI_FNCODE_LOBISOPEN 83 /* OCILobIsOpen */
+#define OCI_FNCODE_LOBFILEISOPEN 84 /* OCILobFileIsOpen */
+#define OCI_FNCODE_LOBFILEEXISTS 85 /* OCILobFileExists */
+#define OCI_FNCODE_LOBFILECLOSEALL 86 /* OCILobFileCloseAll */
+#define OCI_FNCODE_LOBCREATETEMP 87 /* OCILobCreateTemporary */
+#define OCI_FNCODE_LOBFREETEMP 88 /* OCILobFreeTemporary */
+#define OCI_FNCODE_LOBISTEMP 89 /* OCILobIsTemporary */
+
+#define OCI_FNCODE_AQENQ 90 /* OCIAQEnq */
+#define OCI_FNCODE_AQDEQ 91 /* OCIAQDeq */
+#define OCI_FNCODE_RESET 92 /* OCIReset */
+#define OCI_FNCODE_SVCCTXTOLDA 93 /* OCISvcCtxToLda */
+#define OCI_FNCODE_LOBLOCATORASSIGN 94 /* OCILobLocatorAssign */
+
+#define OCI_FNCODE_UBINDBYNAME 95
+
+#define OCI_FNCODE_AQLISTEN 96 /* OCIAQListen */
+
+#define OCI_FNCODE_SVC2HST 97 /* reserved */
+#define OCI_FNCODE_SVCRH 98 /* reserved */
+ /* 97 and 98 are reserved for Oracle internal use */
+
+#define OCI_FNCODE_TRANSMULTIPREPARE 99 /* OCITransMultiPrepare */
+
+#define OCI_FNCODE_CPOOLCREATE 100 /* OCIConnectionPoolCreate */
+#define OCI_FNCODE_CPOOLDESTROY 101 /* OCIConnectionPoolDestroy */
+#define OCI_FNCODE_LOGON2 102 /* OCILogon2 */
+#define OCI_FNCODE_ROWIDTOCHAR 103 /* OCIRowidToChar */
+
+#define OCI_FNCODE_SPOOLCREATE 104 /* OCISessionPoolCreate */
+#define OCI_FNCODE_SPOOLDESTROY 105 /* OCISessionPoolDestroy */
+#define OCI_FNCODE_SESSIONGET 106 /* OCISessionGet */
+#define OCI_FNCODE_SESSIONRELEASE 107 /* OCISessionRelease */
+#define OCI_FNCODE_STMTPREPARE2 108 /* OCIStmtPrepare2 */
+#define OCI_FNCODE_STMTRELEASE 109 /* OCIStmtRelease */
+#define OCI_FNCODE_AQENQARRAY 110 /* OCIAQEnqArray */
+#define OCI_FNCODE_AQDEQARRAY 111 /* OCIAQDeqArray */
+#define OCI_FNCODE_LOBCOPY2 112 /* OCILobCopy2 */
+#define OCI_FNCODE_LOBERASE2 113 /* OCILobErase2 */
+#define OCI_FNCODE_LOBLENGTH2 114 /* OCILobGetLength2 */
+#define OCI_FNCODE_LOBLOADFROMFILE2 115 /* OCILobLoadFromFile2 */
+#define OCI_FNCODE_LOBREAD2 116 /* OCILobRead2 */
+#define OCI_FNCODE_LOBTRIM2 117 /* OCILobTrim2 */
+#define OCI_FNCODE_LOBWRITE2 118 /* OCILobWrite2 */
+#define OCI_FNCODE_LOBGETSTORAGELIMIT 119 /* OCILobGetStorageLimit */
+#define OCI_FNCODE_DBSTARTUP 120 /* OCIDBStartup */
+#define OCI_FNCODE_DBSHUTDOWN 121 /* OCIDBShutdown */
+#define OCI_FNCODE_LOBARRAYREAD 122 /* OCILobArrayRead */
+#define OCI_FNCODE_LOBARRAYWRITE 123 /* OCILobArrayWrite */
+#define OCI_FNCODE_AQENQSTREAM 124 /* OCIAQEnqStreaming */
+#define OCI_FNCODE_AQGETREPLAY 125 /* OCIAQGetReplayInfo */
+#define OCI_FNCODE_AQRESETREPLAY 126 /* OCIAQResetReplayInfo */
+#define OCI_FNCODE_ARRAYDESCRIPTORALLOC 127 /*OCIArrayDescriptorAlloc */
+#define OCI_FNCODE_ARRAYDESCRIPTORFREE 128 /* OCIArrayDescriptorFree */
+#define OCI_FNCODE_LOBGETOPT 129 /* OCILobGetCptions */
+#define OCI_FNCODE_LOBSETOPT 130 /* OCILobSetCptions */
+#define OCI_FNCODE_LOBFRAGINS 131 /* OCILobFragementInsert */
+#define OCI_FNCODE_LOBFRAGDEL 132 /* OCILobFragementDelete */
+#define OCI_FNCODE_LOBFRAGMOV 133 /* OCILobFragementMove */
+#define OCI_FNCODE_LOBFRAGREP 134 /* OCILobFragementReplace */
+#define OCI_FNCODE_LOBGETDEDUPLICATEREGIONS 135/* OCILobGetDeduplicateRegions */
+#define OCI_FNCODE_APPCTXSET 136 /* OCIAppCtxSet */
+#define OCI_FNCODE_APPCTXCLEARALL 137 /* OCIAppCtxClearAll */
+
+#define OCI_FNCODE_LOBGETCONTENTTYPE 138 /* OCILobGetContentType */
+#define OCI_FNCODE_LOBSETCONTENTTYPE 139 /* OCILobSetContentType */
+#define OCI_FNCODE_MAXFCN 139 /* maximum OCI function code */
+
+/*---------------Statement Cache callback modes-----------------------------*/
+#define OCI_CBK_STMTCACHE_STMTPURGE 0x01
+
+/*---------------------------------------------------------------------------*/
+
+/*-----------------------Handle Definitions----------------------------------*/
+typedef struct OCIEnv OCIEnv; /* OCI environment handle */
+typedef struct OCIError OCIError; /* OCI error handle */
+typedef struct OCISvcCtx OCISvcCtx; /* OCI service handle */
+typedef struct OCIStmt OCIStmt; /* OCI statement handle */
+typedef struct OCIBind OCIBind; /* OCI bind handle */
+typedef struct OCIDefine OCIDefine; /* OCI Define handle */
+typedef struct OCIDescribe OCIDescribe; /* OCI Describe handle */
+typedef struct OCIServer OCIServer; /* OCI Server handle */
+typedef struct OCISession OCISession; /* OCI Authentication handle */
+typedef struct OCIComplexObject OCIComplexObject; /* OCI COR handle */
+typedef struct OCITrans OCITrans; /* OCI Transaction handle */
+typedef struct OCISecurity OCISecurity; /* OCI Security handle */
+typedef struct OCISubscription OCISubscription; /* subscription handle */
+
+typedef struct OCICPool OCICPool; /* connection pool handle */
+typedef struct OCISPool OCISPool; /* session pool handle */
+typedef struct OCIAuthInfo OCIAuthInfo; /* auth handle */
+typedef struct OCIAdmin OCIAdmin; /* admin handle */
+typedef struct OCIEvent OCIEvent; /* HA event handle */
+
+/*-----------------------Descriptor Definitions------------------------------*/
+typedef struct OCISnapshot OCISnapshot; /* OCI snapshot descriptor */
+typedef struct OCIResult OCIResult; /* OCI Result Set Descriptor */
+typedef struct OCILobLocator OCILobLocator; /* OCI Lob Locator descriptor */
+typedef struct OCILobRegion OCILobRegion; /* OCI Lob Regions descriptor */
+typedef struct OCIParam OCIParam; /* OCI PARameter descriptor */
+typedef struct OCIComplexObjectComp OCIComplexObjectComp;
+ /* OCI COR descriptor */
+typedef struct OCIRowid OCIRowid; /* OCI ROWID descriptor */
+
+typedef struct OCIDateTime OCIDateTime; /* OCI DateTime descriptor */
+typedef struct OCIInterval OCIInterval; /* OCI Interval descriptor */
+
+typedef struct OCIUcb OCIUcb; /* OCI User Callback descriptor */
+typedef struct OCIServerDNs OCIServerDNs; /* OCI server DN descriptor */
+
+/*-------------------------- AQ Descriptors ---------------------------------*/
+typedef struct OCIAQEnqOptions OCIAQEnqOptions; /* AQ Enqueue Options hdl */
+typedef struct OCIAQDeqOptions OCIAQDeqOptions; /* AQ Dequeue Options hdl */
+typedef struct OCIAQMsgProperties OCIAQMsgProperties; /* AQ Mesg Properties */
+typedef struct OCIAQAgent OCIAQAgent; /* AQ Agent descriptor */
+typedef struct OCIAQNfyDescriptor OCIAQNfyDescriptor; /* AQ Nfy descriptor */
+typedef struct OCIAQSignature OCIAQSignature; /* AQ Siganture */
+typedef struct OCIAQListenOpts OCIAQListenOpts; /* AQ listen options */
+typedef struct OCIAQLisMsgProps OCIAQLisMsgProps; /* AQ listen msg props */
+
+/*---------------------------------------------------------------------------*/
+
+/* Lob typedefs for Pro*C */
+typedef struct OCILobLocator OCIClobLocator; /* OCI Character LOB Locator */
+typedef struct OCILobLocator OCIBlobLocator; /* OCI Binary LOB Locator */
+typedef struct OCILobLocator OCIBFileLocator; /* OCI Binary LOB File Locator */
+/*---------------------------------------------------------------------------*/
+
+/* Undefined value for tz in interval types*/
+#define OCI_INTHR_UNK 24
+
+ /* These defined adjustment values */
+#define OCI_ADJUST_UNK 10
+#define OCI_ORACLE_DATE 0
+#define OCI_ANSI_DATE 1
+
+/*------------------------ Lob-specific Definitions -------------------------*/
+
+/*
+ * ociloff - OCI Lob OFFset
+ *
+ * The offset in the lob data. The offset is specified in terms of bytes for
+ * BLOBs and BFILes. Character offsets are used for CLOBs, NCLOBs.
+ * The maximum size of internal lob data is 4 gigabytes. FILE LOB
+ * size is limited by the operating system.
+ */
+typedef ub4 OCILobOffset;
+
+/*
+ * ocillen - OCI Lob LENgth (of lob data)
+ *
+ * Specifies the length of lob data in bytes for BLOBs and BFILes and in
+ * characters for CLOBs, NCLOBs. The maximum length of internal lob
+ * data is 4 gigabytes. The length of FILE LOBs is limited only by the
+ * operating system.
+ */
+typedef ub4 OCILobLength;
+/*
+ * ocilmo - OCI Lob open MOdes
+ *
+ * The mode specifies the planned operations that will be performed on the
+ * FILE lob data. The FILE lob can be opened in read-only mode only.
+ *
+ * In the future, we may include read/write, append and truncate modes. Append
+ * is equivalent to read/write mode except that the FILE is positioned for
+ * writing to the end. Truncate is equivalent to read/write mode except that
+ * the FILE LOB data is first truncated to a length of 0 before use.
+ */
+enum OCILobMode
+{
+ OCI_LOBMODE_READONLY = 1, /* read-only */
+ OCI_LOBMODE_READWRITE = 2 /* read_write for internal lobs only */
+};
+typedef enum OCILobMode OCILobMode;
+
+/*---------------------------------------------------------------------------*/
+
+
+/*----------------------------Piece Definitions------------------------------*/
+
+/* if ocidef.h is being included in the app, ocidef.h should precede oci.h */
+
+/*
+ * since clients may use oci.h, ocidef.h and ocidfn.h the following defines
+ * need to be guarded, usually internal clients
+ */
+
+#ifndef OCI_FLAGS
+#define OCI_FLAGS
+#define OCI_ONE_PIECE 0 /* one piece */
+#define OCI_FIRST_PIECE 1 /* the first piece */
+#define OCI_NEXT_PIECE 2 /* the next of many pieces */
+#define OCI_LAST_PIECE 3 /* the last piece */
+#endif
+/*---------------------------------------------------------------------------*/
+
+/*--------------------------- FILE open modes -------------------------------*/
+#define OCI_FILE_READONLY 1 /* readonly mode open for FILE types */
+/*---------------------------------------------------------------------------*/
+/*--------------------------- LOB open modes --------------------------------*/
+#define OCI_LOB_READONLY 1 /* readonly mode open for ILOB types */
+#define OCI_LOB_READWRITE 2 /* read write mode open for ILOBs */
+#define OCI_LOB_WRITEONLY 3 /* Writeonly mode open for ILOB types*/
+#define OCI_LOB_APPENDONLY 4 /* Appendonly mode open for ILOB types */
+#define OCI_LOB_FULLOVERWRITE 5 /* Completely overwrite ILOB */
+#define OCI_LOB_FULLREAD 6 /* Doing a Full Read of ILOB */
+
+/*----------------------- LOB Buffering Flush Flags -------------------------*/
+#define OCI_LOB_BUFFER_FREE 1
+#define OCI_LOB_BUFFER_NOFREE 2
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------LOB Option Types -------------------------------*/
+#define OCI_LOB_OPT_COMPRESS 1 /* SECUREFILE Compress */
+#define OCI_LOB_OPT_ENCRYPT 2 /* SECUREFILE Encrypt */
+#define OCI_LOB_OPT_DEDUPLICATE 4 /* SECUREFILE Deduplicate */
+#define OCI_LOB_OPT_ALLOCSIZE 8 /* SECUREFILE Allocation Size */
+#define OCI_LOB_OPT_CONTENTTYPE 16 /* SECUREFILE Content Type */
+#define OCI_LOB_OPT_MODTIME 32 /* SECUREFILE Modification Time */
+
+/*------------------------ LOB Option Values ------------------------------*/
+/* Compression */
+#define OCI_LOB_COMPRESS_OFF 0 /* Compression off */
+#define OCI_LOB_COMPRESS_ON 1 /* Compression on */
+/* Encryption */
+#define OCI_LOB_ENCRYPT_OFF 0 /* Encryption Off */
+#define OCI_LOB_ENCRYPT_ON 2 /* Encryption On */
+/* Deduplciate */
+#define OCI_LOB_DEDUPLICATE_OFF 0 /* Deduplicate Off */
+#define OCI_LOB_DEDUPLICATE_ON 4 /* Deduplicate Lobs */
+
+/*--------------------------- OCI Statement Types ---------------------------*/
+
+#define OCI_STMT_UNKNOWN 0 /* Unknown statement */
+#define OCI_STMT_SELECT 1 /* select statement */
+#define OCI_STMT_UPDATE 2 /* update statement */
+#define OCI_STMT_DELETE 3 /* delete statement */
+#define OCI_STMT_INSERT 4 /* Insert Statement */
+#define OCI_STMT_CREATE 5 /* create statement */
+#define OCI_STMT_DROP 6 /* drop statement */
+#define OCI_STMT_ALTER 7 /* alter statement */
+#define OCI_STMT_BEGIN 8 /* begin ... (pl/sql statement)*/
+#define OCI_STMT_DECLARE 9 /* declare .. (pl/sql statement ) */
+#define OCI_STMT_CALL 10 /* corresponds to kpu call */
+/*---------------------------------------------------------------------------*/
+
+/*--------------------------- OCI Parameter Types ---------------------------*/
+#define OCI_PTYPE_UNK 0 /* unknown */
+#define OCI_PTYPE_TABLE 1 /* table */
+#define OCI_PTYPE_VIEW 2 /* view */
+#define OCI_PTYPE_PROC 3 /* procedure */
+#define OCI_PTYPE_FUNC 4 /* function */
+#define OCI_PTYPE_PKG 5 /* package */
+#define OCI_PTYPE_TYPE 6 /* user-defined type */
+#define OCI_PTYPE_SYN 7 /* synonym */
+#define OCI_PTYPE_SEQ 8 /* sequence */
+#define OCI_PTYPE_COL 9 /* column */
+#define OCI_PTYPE_ARG 10 /* argument */
+#define OCI_PTYPE_LIST 11 /* list */
+#define OCI_PTYPE_TYPE_ATTR 12 /* user-defined type's attribute */
+#define OCI_PTYPE_TYPE_COLL 13 /* collection type's element */
+#define OCI_PTYPE_TYPE_METHOD 14 /* user-defined type's method */
+#define OCI_PTYPE_TYPE_ARG 15 /* user-defined type method's arg */
+#define OCI_PTYPE_TYPE_RESULT 16/* user-defined type method's result */
+#define OCI_PTYPE_SCHEMA 17 /* schema */
+#define OCI_PTYPE_DATABASE 18 /* database */
+#define OCI_PTYPE_RULE 19 /* rule */
+#define OCI_PTYPE_RULE_SET 20 /* rule set */
+#define OCI_PTYPE_EVALUATION_CONTEXT 21 /* evaluation context */
+#define OCI_PTYPE_TABLE_ALIAS 22 /* table alias */
+#define OCI_PTYPE_VARIABLE_TYPE 23 /* variable type */
+#define OCI_PTYPE_NAME_VALUE 24 /* name value pair */
+
+/*---------------------------------------------------------------------------*/
+
+/*----------------------------- OCI List Types ------------------------------*/
+#define OCI_LTYPE_UNK 0 /* unknown */
+#define OCI_LTYPE_COLUMN 1 /* column list */
+#define OCI_LTYPE_ARG_PROC 2 /* procedure argument list */
+#define OCI_LTYPE_ARG_FUNC 3 /* function argument list */
+#define OCI_LTYPE_SUBPRG 4 /* subprogram list */
+#define OCI_LTYPE_TYPE_ATTR 5 /* type attribute */
+#define OCI_LTYPE_TYPE_METHOD 6 /* type method */
+#define OCI_LTYPE_TYPE_ARG_PROC 7 /* type method w/o result argument list */
+#define OCI_LTYPE_TYPE_ARG_FUNC 8 /* type method w/result argument list */
+#define OCI_LTYPE_SCH_OBJ 9 /* schema object list */
+#define OCI_LTYPE_DB_SCH 10 /* database schema list */
+#define OCI_LTYPE_TYPE_SUBTYPE 11 /* subtype list */
+#define OCI_LTYPE_TABLE_ALIAS 12 /* table alias list */
+#define OCI_LTYPE_VARIABLE_TYPE 13 /* variable type list */
+#define OCI_LTYPE_NAME_VALUE 14 /* name value list */
+
+/*---------------------------------------------------------------------------*/
+
+/*-------------------------- Memory Cartridge Services ---------------------*/
+#define OCI_MEMORY_CLEARED 1
+
+/*-------------------------- Pickler Cartridge Services ---------------------*/
+typedef struct OCIPicklerTdsCtx OCIPicklerTdsCtx;
+typedef struct OCIPicklerTds OCIPicklerTds;
+typedef struct OCIPicklerImage OCIPicklerImage;
+typedef struct OCIPicklerFdo OCIPicklerFdo;
+typedef ub4 OCIPicklerTdsElement;
+
+typedef struct OCIAnyData OCIAnyData;
+
+typedef struct OCIAnyDataSet OCIAnyDataSet;
+typedef struct OCIAnyDataCtx OCIAnyDataCtx;
+
+/*---------------------------------------------------------------------------*/
+
+/*--------------------------- User Callback Constants -----------------------*/
+#define OCI_UCBTYPE_ENTRY 1 /* entry callback */
+#define OCI_UCBTYPE_EXIT 2 /* exit callback */
+#define OCI_UCBTYPE_REPLACE 3 /* replacement callback */
+
+/*---------------------------------------------------------------------------*/
+
+/*--------------------- NLS service type and constance ----------------------*/
+#define OCI_NLS_DAYNAME1 1 /* Native name for Monday */
+#define OCI_NLS_DAYNAME2 2 /* Native name for Tuesday */
+#define OCI_NLS_DAYNAME3 3 /* Native name for Wednesday */
+#define OCI_NLS_DAYNAME4 4 /* Native name for Thursday */
+#define OCI_NLS_DAYNAME5 5 /* Native name for Friday */
+#define OCI_NLS_DAYNAME6 6 /* Native name for for Saturday */
+#define OCI_NLS_DAYNAME7 7 /* Native name for for Sunday */
+#define OCI_NLS_ABDAYNAME1 8 /* Native abbreviated name for Monday */
+#define OCI_NLS_ABDAYNAME2 9 /* Native abbreviated name for Tuesday */
+#define OCI_NLS_ABDAYNAME3 10 /* Native abbreviated name for Wednesday */
+#define OCI_NLS_ABDAYNAME4 11 /* Native abbreviated name for Thursday */
+#define OCI_NLS_ABDAYNAME5 12 /* Native abbreviated name for Friday */
+#define OCI_NLS_ABDAYNAME6 13 /* Native abbreviated name for for Saturday */
+#define OCI_NLS_ABDAYNAME7 14 /* Native abbreviated name for for Sunday */
+#define OCI_NLS_MONTHNAME1 15 /* Native name for January */
+#define OCI_NLS_MONTHNAME2 16 /* Native name for February */
+#define OCI_NLS_MONTHNAME3 17 /* Native name for March */
+#define OCI_NLS_MONTHNAME4 18 /* Native name for April */
+#define OCI_NLS_MONTHNAME5 19 /* Native name for May */
+#define OCI_NLS_MONTHNAME6 20 /* Native name for June */
+#define OCI_NLS_MONTHNAME7 21 /* Native name for July */
+#define OCI_NLS_MONTHNAME8 22 /* Native name for August */
+#define OCI_NLS_MONTHNAME9 23 /* Native name for September */
+#define OCI_NLS_MONTHNAME10 24 /* Native name for October */
+#define OCI_NLS_MONTHNAME11 25 /* Native name for November */
+#define OCI_NLS_MONTHNAME12 26 /* Native name for December */
+#define OCI_NLS_ABMONTHNAME1 27 /* Native abbreviated name for January */
+#define OCI_NLS_ABMONTHNAME2 28 /* Native abbreviated name for February */
+#define OCI_NLS_ABMONTHNAME3 29 /* Native abbreviated name for March */
+#define OCI_NLS_ABMONTHNAME4 30 /* Native abbreviated name for April */
+#define OCI_NLS_ABMONTHNAME5 31 /* Native abbreviated name for May */
+#define OCI_NLS_ABMONTHNAME6 32 /* Native abbreviated name for June */
+#define OCI_NLS_ABMONTHNAME7 33 /* Native abbreviated name for July */
+#define OCI_NLS_ABMONTHNAME8 34 /* Native abbreviated name for August */
+#define OCI_NLS_ABMONTHNAME9 35 /* Native abbreviated name for September */
+#define OCI_NLS_ABMONTHNAME10 36 /* Native abbreviated name for October */
+#define OCI_NLS_ABMONTHNAME11 37 /* Native abbreviated name for November */
+#define OCI_NLS_ABMONTHNAME12 38 /* Native abbreviated name for December */
+#define OCI_NLS_YES 39 /* Native string for affirmative response */
+#define OCI_NLS_NO 40 /* Native negative response */
+#define OCI_NLS_AM 41 /* Native equivalent string of AM */
+#define OCI_NLS_PM 42 /* Native equivalent string of PM */
+#define OCI_NLS_AD 43 /* Native equivalent string of AD */
+#define OCI_NLS_BC 44 /* Native equivalent string of BC */
+#define OCI_NLS_DECIMAL 45 /* decimal character */
+#define OCI_NLS_GROUP 46 /* group separator */
+#define OCI_NLS_DEBIT 47 /* Native symbol of debit */
+#define OCI_NLS_CREDIT 48 /* Native sumbol of credit */
+#define OCI_NLS_DATEFORMAT 49 /* Oracle date format */
+#define OCI_NLS_INT_CURRENCY 50 /* International currency symbol */
+#define OCI_NLS_LOC_CURRENCY 51 /* Locale currency symbol */
+#define OCI_NLS_LANGUAGE 52 /* Language name */
+#define OCI_NLS_ABLANGUAGE 53 /* Abbreviation for language name */
+#define OCI_NLS_TERRITORY 54 /* Territory name */
+#define OCI_NLS_CHARACTER_SET 55 /* Character set name */
+#define OCI_NLS_LINGUISTIC_NAME 56 /* Linguistic name */
+#define OCI_NLS_CALENDAR 57 /* Calendar name */
+#define OCI_NLS_DUAL_CURRENCY 78 /* Dual currency symbol */
+#define OCI_NLS_WRITINGDIR 79 /* Language writing direction */
+#define OCI_NLS_ABTERRITORY 80 /* Territory Abbreviation */
+#define OCI_NLS_DDATEFORMAT 81 /* Oracle default date format */
+#define OCI_NLS_DTIMEFORMAT 82 /* Oracle default time format */
+#define OCI_NLS_SFDATEFORMAT 83 /* Local string formatted date format */
+#define OCI_NLS_SFTIMEFORMAT 84 /* Local string formatted time format */
+#define OCI_NLS_NUMGROUPING 85 /* Number grouping fields */
+#define OCI_NLS_LISTSEP 86 /* List separator */
+#define OCI_NLS_MONDECIMAL 87 /* Monetary decimal character */
+#define OCI_NLS_MONGROUP 88 /* Monetary group separator */
+#define OCI_NLS_MONGROUPING 89 /* Monetary grouping fields */
+#define OCI_NLS_INT_CURRENCYSEP 90 /* International currency separator */
+#define OCI_NLS_CHARSET_MAXBYTESZ 91 /* Maximum character byte size */
+#define OCI_NLS_CHARSET_FIXEDWIDTH 92 /* Fixed-width charset byte size */
+#define OCI_NLS_CHARSET_ID 93 /* Character set id */
+#define OCI_NLS_NCHARSET_ID 94 /* NCharacter set id */
+
+#define OCI_NLS_MAXBUFSZ 100 /* Max buffer size may need for OCINlsGetInfo */
+
+#define OCI_NLS_BINARY 0x1 /* for the binary comparison */
+#define OCI_NLS_LINGUISTIC 0x2 /* for linguistic comparison */
+#define OCI_NLS_CASE_INSENSITIVE 0x10 /* for case-insensitive comparison */
+
+#define OCI_NLS_UPPERCASE 0x20 /* convert to uppercase */
+#define OCI_NLS_LOWERCASE 0x40 /* convert to lowercase */
+
+#define OCI_NLS_CS_IANA_TO_ORA 0 /* Map charset name from IANA to Oracle */
+#define OCI_NLS_CS_ORA_TO_IANA 1 /* Map charset name from Oracle to IANA */
+#define OCI_NLS_LANG_ISO_TO_ORA 2 /* Map language name from ISO to Oracle */
+#define OCI_NLS_LANG_ORA_TO_ISO 3 /* Map language name from Oracle to ISO */
+#define OCI_NLS_TERR_ISO_TO_ORA 4 /* Map territory name from ISO to Oracle*/
+#define OCI_NLS_TERR_ORA_TO_ISO 5 /* Map territory name from Oracle to ISO*/
+#define OCI_NLS_TERR_ISO3_TO_ORA 6 /* Map territory name from 3-letter ISO */
+ /* abbreviation to Oracle */
+#define OCI_NLS_TERR_ORA_TO_ISO3 7 /* Map territory name from Oracle to */
+ /* 3-letter ISO abbreviation */
+#define OCI_NLS_LOCALE_A2_ISO_TO_ORA 8
+ /*Map locale name from A2 ISO to oracle*/
+#define OCI_NLS_LOCALE_A2_ORA_TO_ISO 9
+ /*Map locale name from oracle to A2 ISO*/
+
+typedef struct OCIMsg OCIMsg;
+typedef ub4 OCIWchar;
+
+#define OCI_XMLTYPE_CREATE_OCISTRING 1
+#define OCI_XMLTYPE_CREATE_CLOB 2
+#define OCI_XMLTYPE_CREATE_BLOB 3
+
+/*------------------------- Kerber Authentication Modes ---------------------*/
+#define OCI_KERBCRED_PROXY 1 /* Apply Kerberos Creds for Proxy */
+#define OCI_KERBCRED_CLIENT_IDENTIFIER 2/*Apply Creds for Secure Client ID */
+
+/*------------------------- Database Startup Flags --------------------------*/
+#define OCI_DBSTARTUPFLAG_FORCE 0x00000001 /* Abort running instance, start */
+#define OCI_DBSTARTUPFLAG_RESTRICT 0x00000002 /* Restrict access to DBA */
+
+/*------------------------- Database Shutdown Modes -------------------------*/
+#define OCI_DBSHUTDOWN_TRANSACTIONAL 1 /* Wait for all the transactions */
+#define OCI_DBSHUTDOWN_TRANSACTIONAL_LOCAL 2 /* Wait for local transactions */
+#define OCI_DBSHUTDOWN_IMMEDIATE 3 /* Terminate and roll back */
+#define OCI_DBSHUTDOWN_ABORT 4 /* Terminate and don't roll back */
+#define OCI_DBSHUTDOWN_FINAL 5 /* Orderly shutdown */
+
+/*------------------------- Version information -----------------------------*/
+#define OCI_MAJOR_VERSION 11 /* Major release version */
+#define OCI_MINOR_VERSION 2 /* Minor release version */
+
+/*---------------------- OCIIOV structure definitions -----------------------*/
+struct OCIIOV
+{
+ void *bfp; /* The Pointer to the data buffer */
+ ub4 bfl; /* Length of the Data Buffer */
+};
+typedef struct OCIIOV OCIIOV;
+
+/*---------------------------------------------------------------------------
+ PRIVATE TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+/* None */
+
+/*---------------------------------------------------------------------------
+ PUBLIC FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+/* see ociap.h or ocikp.h */
+
+/*---------------------------------------------------------------------------
+ PRIVATE FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+/* None */
+
+
+#endif /* OCI_ORACLE */
+
+
+/* more includes */
+
+#ifndef OCI1_ORACLE
+#include <oci1.h>
+#endif
+
+#ifndef ORO_ORACLE
+#include <oro.h>
+#endif
+
+#ifndef ORI_ORACLE
+#include <ori.h>
+#endif
+
+#ifndef ORL_ORACLE
+#include <orl.h>
+#endif
+
+#ifndef ORT_ORACLE
+#include <ort.h>
+#endif
+
+#ifndef OCIEXTP_ORACLE
+#include <ociextp.h>
+#endif
+
+#include <ociapr.h>
+#include <ociap.h>
+
+#ifndef OCIXMLDB_ORACLE
+#include <ocixmldb.h>
+#endif
+
+#ifndef OCI8DP_ORACLE
+#include <oci8dp.h> /* interface definitions for the direct path api */
+#endif
+
+#ifndef OCIEXTP_ORACLE
+#include <ociextp.h>
+#endif
+
+#ifndef OCIXSTREAM_ORACLE
+#include <ocixstream.h>
+#endif
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
--- /dev/null
+
+/* Copyright (c) 1997, 2005, Oracle. All rights reserved. */
+
+/* NOTE: See 'header_template.doc' in the 'doc' dve under the 'forms'
+ directory for the header file template that includes instructions.
+*/
+
+/*
+ NAME
+ oci1.h - Cartridge Service definitions
+
+ DESCRIPTION
+ <short description of component this file declares/defines>
+
+ RELATED DOCUMENTS
+
+ INSPECTION STATUS
+ Inspection date:
+ Inspection status:
+ Estimated increasing cost defects per page:
+ Rule sets:
+
+ ACCEPTANCE REVIEW STATUS
+ Review date:
+ Review status:
+ Reviewers:
+
+ PUBLIC FUNCTION(S)
+ <list of external functions declared/defined - with one-line descriptions>
+
+ PRIVATE FUNCTION(S)
+ <list of static functions defined in .c file - with one-line descriptions>
+
+ EXAMPLES
+
+ NOTES
+ <other useful comments, qualifications, etc.>
+
+ MODIFIED (MM/DD/YY)
+ mbastawa 09/16/05 - dbhygiene
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ nramakri 01/16/98 - remove #ifdef NEVER clause
+ ewaugh 12/18/97 - Turn type wrappers into functions.
+ skabraha 12/02/97 - Adding data structures & constants for OCIFile
+ rhwu 12/02/97 - OCI Thread
+ nramakri 12/15/97 - move to core4
+ ewaugh 12/11/97 - add OCIFormat package constants
+ ssamu 12/10/97 - do not include s.h
+ nramakri 11/19/97 - add OCIExtract definitions
+ ssamu 11/14/97 - creation
+
+*/
+
+
+#ifndef OCI1_ORACLE
+# define OCI1_ORACLE
+
+# ifndef ORATYPES
+# include <oratypes.h>
+# endif
+
+
+/*---------------------------------------------------------------------------
+ PUBLIC TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+/* Constants required by the OCIFormat package. */
+
+#define OCIFormatUb1(variable) OCIFormatTUb1(), &(variable)
+#define OCIFormatUb2(variable) OCIFormatTUb2(), &(variable)
+#define OCIFormatUb4(variable) OCIFormatTUb4(), &(variable)
+#define OCIFormatUword(variable) OCIFormatTUword(), &(variable)
+#define OCIFormatUbig_ora(variable) OCIFormatTUbig_ora(), &(variable)
+#define OCIFormatSb1(variable) OCIFormatTSb1(), &(variable)
+#define OCIFormatSb2(variable) OCIFormatTSb2(), &(variable)
+#define OCIFormatSb4(variable) OCIFormatTSb4(), &(variable)
+#define OCIFormatSword(variable) OCIFormatTSword(), &(variable)
+#define OCIFormatSbig_ora(variable) OCIFormatTSbig_ora(), &(variable)
+#define OCIFormatEb1(variable) OCIFormatTEb1(), &(variable)
+#define OCIFormatEb2(variable) OCIFormatTEb2(), &(variable)
+#define OCIFormatEb4(variable) OCIFormatTEb4(), &(variable)
+#define OCIFormatEword(variable) OCIFormatTEword(), &(variable)
+#define OCIFormatChar(variable) OCIFormatTChar(), &(variable)
+#define OCIFormatText(variable) OCIFormatTText(), (variable)
+#define OCIFormatDouble(variable) OCIFormatTDouble(), &(variable)
+#define OCIFormatDvoid(variable) OCIFormatTDvoid(), (variable)
+#define OCIFormatEnd OCIFormatTEnd()
+
+#define OCIFormatDP 6
+
+
+/*----------------- Public Constants for OCIFile -------------------------*/
+
+/* flags for open.*/
+/* flags for mode */
+#define OCI_FILE_READ_ONLY 1 /* open for read only */
+#define OCI_FILE_WRITE_ONLY 2 /* open for write only */
+#define OCI_FILE_READ_WRITE 3 /* open for read & write */
+/* flags for create */
+#define OCI_FILE_EXIST 0 /* the file should exist */
+#define OCI_FILE_CREATE 1 /* create if the file doesn't exist */
+#define OCI_FILE_EXCL 2 /* the file should not exist */
+#define OCI_FILE_TRUNCATE 4 /* create if the file doesn't exist,
+ else truncate file the file to 0 */
+#define OCI_FILE_APPEND 8 /* open the file in append mode */
+
+/* flags for seek */
+#define OCI_FILE_SEEK_BEGINNING 1 /* seek from the beginning of the file */
+#define OCI_FILE_SEEK_CURRENT 2 /* seek from the current position */
+#define OCI_FILE_SEEK_END 3 /* seek from the end of the file */
+
+#define OCI_FILE_FORWARD 1 /* seek forward */
+#define OCI_FILE_BACKWARD 2 /* seek backward */
+
+/* file type */
+#define OCI_FILE_BIN 0 /* binary file */
+#define OCI_FILE_TEXT 1 /* text file */
+#define OCI_FILE_STDIN 2 /* standard i/p */
+#define OCI_FILE_STDOUT 3 /* standard o/p */
+#define OCI_FILE_STDERR 4 /* standard error */
+
+/* Represents an open file */
+typedef struct OCIFileObject OCIFileObject;
+
+
+/*--------------------- OCI Thread Object Definitions------------------------*/
+
+/* OCIThread Context */
+typedef struct OCIThreadContext OCIThreadContext;
+
+/* OCIThread Mutual Exclusion Lock */
+typedef struct OCIThreadMutex OCIThreadMutex;
+
+/* OCIThread Key for Thread-Specific Data */
+typedef struct OCIThreadKey OCIThreadKey;
+
+/* OCIThread Thread ID */
+typedef struct OCIThreadId OCIThreadId;
+
+/* OCIThread Thread Handle */
+typedef struct OCIThreadHandle OCIThreadHandle;
+
+
+/*-------------------- OCI Thread Callback Function Pointers ----------------*/
+
+/* OCIThread Key Destructor Function Type */
+typedef void (*OCIThreadKeyDestFunc)( void * );
+
+
+/* Flags passed into OCIExtractFromXXX routines to direct processing */
+#define OCI_EXTRACT_CASE_SENSITIVE 0x1 /* matching is case sensitive */
+#define OCI_EXTRACT_UNIQUE_ABBREVS 0x2 /* unique abbreviations for keys
+ are allowed */
+#define OCI_EXTRACT_APPEND_VALUES 0x4 /* if multiple values for a key
+ exist, this determines if the
+ new value should be appended
+ to (or replace) the current
+ list of values */
+
+/* Constants passed into OCIExtractSetKey routine */
+#define OCI_EXTRACT_MULTIPLE 0x8 /* key can accept multiple values */
+#define OCI_EXTRACT_TYPE_BOOLEAN 1 /* key type is boolean */
+#define OCI_EXTRACT_TYPE_STRING 2 /* key type is string */
+#define OCI_EXTRACT_TYPE_INTEGER 3 /* key type is integer */
+#define OCI_EXTRACT_TYPE_OCINUM 4 /* key type is ocinum */
+
+/*---------------------------------------------------------------------------
+ PRIVATE TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ PUBLIC FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ PRIVATE FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+#endif /* OCI1_ORACLE */
--- /dev/null
+/*
+ *
+ */
+
+/* Copyright (c) 1998, 2005, Oracle. All rights reserved. */
+
+/*
+ NAME
+ oci8dp.h - OCI: Direct Path API interface prototypes.
+
+ DESCRIPTION
+ Public types, constants, and interfaces to the direct path API.
+
+ RELATED DOCUMENTS
+
+ NOTES
+ This file is not directly included by the application, this file
+ is included by "oci.h", which the application should include.
+
+ MODIFIED (MM/DD/YY)
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ rphillip 02/27/04 - Add OCI_DIRPATH_COL_ERROR
+ srseshad 03/12/03 - convert oci public api to ansi
+ msakayed 10/28/02 - Bug #2643907: add OCI_ATTR_DIRPATH_SKIPINDEX_METHOD
+ cmlim 04/13/01 - remove OCIDirPathStreamToStream - not used by dpapi
+ cmlim 04/02/01 - OCI_DIRPATH_EXPR_OPQ_SQL_FN to OCI_DIRPATH_EXPR_SQL
+ ebatbout 01/22/01 - PARTIAL value for OCIDirPathDataSave action parameter
+ cmlim 07/20/00 - support opaques/sql strings in 8.2 dpapi
+ cmlim 08/14/00 - support refs in 8.2 dpapi
+ cmlim 04/17/00 - add defines for OCIDirPathFuncCtx handle & OCI_ATTR_D
+ whe 09/01/99 - 976457:check __cplusplus for C++ code
+ abrumm 04/16/99 - dpapi: more attributes
+ abrumm 02/26/99 - add defines for DataSave action
+ abrumm 10/04/98 - clen must be a ub4
+ abrumm 05/27/98 - add column array flag values
+ abrumm 05/12/98 - direct path api support
+ abrumm 03/31/98 - OCI direct path interface support
+ abrumm 03/18/98 - Creation
+
+*/
+
+#ifndef OCI8DP_ORACLE
+# define OCI8DP_ORACLE
+
+#ifndef ORATYPES
+#include <oratypes.h>
+#endif
+
+#ifndef OCIDFN
+#include <ocidfn.h>
+#endif
+
+#ifndef OCI_ORACLE
+#include <oci.h>
+#endif
+
+
+/*---------------------------------------------------------------------------
+ PUBLIC TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+/*----- Handles and descriptors for direct path operations (OCIDirPath*) ----*/
+
+typedef struct OCIDirPathCtx OCIDirPathCtx; /* context */
+typedef struct OCIDirPathFuncCtx OCIDirPathFuncCtx; /* function context */
+typedef struct OCIDirPathColArray OCIDirPathColArray; /* column array */
+typedef struct OCIDirPathStream OCIDirPathStream; /* stream */
+typedef struct OCIDirPathDesc OCIDirPathDesc; /* direct path descriptor */
+
+ /*----- Defines for Direct Path Options -----*/
+
+ /* values for OCI_ATTR_DIRPATH_MODE attribute */
+#define OCI_DIRPATH_LOAD 1 /* direct path load operation */
+#define OCI_DIRPATH_UNLOAD 2 /* direct path unload operation */
+#define OCI_DIRPATH_CONVERT 3 /* direct path convert only operation */
+
+ /*----- values for OCI_ATTR_DIRPATH_INDEX_MAINT_METHOD attribute -----*/
+#define OCI_DIRPATH_INDEX_MAINT_SINGLE_ROW 1
+
+/* Note that there are two attributes dealing with index maintenance -
+ * OCI_ATTR_DIRPATH_INDEX_MAINT_METHOD and OCI_ATTR_DIRPATH_SKIPINDEX_METHOD.
+ * OCI_ATTR_DIRPATH_SKIPINDEX_METHOD exists to isolate the behavior for
+ * skipping index maintenance since maintenance of unusable indexes is
+ * orthogonal to that of single row insertion.
+ * For backwards compatibility we still allow users to specify skip
+ * methods in OCI_ATTR_DIRPATH_INDEX_MAINT_METHOD so make sure the
+ * enumerations for the two attributes are distinct.
+ */
+ /*----- values for OCI_ATTR_DIRPATH_SKIPINDEX_METHOD attribute -----*/
+#define OCI_DIRPATH_INDEX_MAINT_SKIP_UNUSABLE 2
+#define OCI_DIRPATH_INDEX_MAINT_DONT_SKIP_UNUSABLE 3
+#define OCI_DIRPATH_INDEX_MAINT_SKIP_ALL 4
+
+ /* values for OCI_ATTR_STATE attribute of OCIDirPathCtx */
+#define OCI_DIRPATH_NORMAL 1 /* can accept rows, last row complete */
+#define OCI_DIRPATH_PARTIAL 2 /* last row was partial */
+#define OCI_DIRPATH_NOT_PREPARED 3 /* direct path context is not prepared */
+
+ /*----- values for cflg argument to OCIDirpathColArrayEntrySet -----*/
+#define OCI_DIRPATH_COL_COMPLETE 0 /* column data is complete */
+#define OCI_DIRPATH_COL_NULL 1 /* column is null */
+#define OCI_DIRPATH_COL_PARTIAL 2 /* column data is partial */
+#define OCI_DIRPATH_COL_ERROR 3 /* column error, ignore row */
+ /*----- values for action parameter to OCIDirPathDataSave -----*/
+#define OCI_DIRPATH_DATASAVE_SAVEONLY 0 /* data save point only */
+#define OCI_DIRPATH_DATASAVE_FINISH 1 /* execute finishing logic */
+/* save portion of input data (before space error occurred) and finish */
+#define OCI_DIRPATH_DATASAVE_PARTIAL 2
+
+ /*- OCI_ATTR_DIRPATH_EXPR_TYPE values (describes OCI_ATTR_NAME expr type) -*/
+#define OCI_DIRPATH_EXPR_OBJ_CONSTR 1 /* NAME is an object constructor */
+#define OCI_DIRPATH_EXPR_SQL 2 /* NAME is an opaque or sql function */
+#define OCI_DIRPATH_EXPR_REF_TBLNAME 3 /* NAME is table name if ref is scoped*/
+
+
+/*---------------------------------------------------------------------------
+ PUBLIC FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+/*------------------------ OCIDirPathCtx Operations -------------------------*/
+
+/*
+ NAME
+ OCIDirPathAbort - OCI: Abort a direct path operation.
+
+ DESCRIPTION
+ Aborts a direct path operation. Upon successful completion
+ the direct path context is no longer valid.
+
+ RETURNS
+ An OCI error code, Oracle errors are returned via the error handle.
+ NOTES
+ */
+sword
+OCIDirPathAbort( OCIDirPathCtx *dpctx, OCIError *errhp );
+
+/*
+ NAME
+ OCIDirPathDataSave - OCI: Execute a data save point.
+
+ DESCRIPTION
+ Successful return of this function indicates that a data save
+ point has been executed.
+
+ RETURNS
+ An OCI error code, Oracle errors are returned via the error handle.
+ NOTES
+ */
+sword
+OCIDirPathDataSave( OCIDirPathCtx *dpctx, OCIError *errhp, ub4 action );
+
+/*
+ NAME
+ OCIDirPathFinish - OCI: Finish a direct path operation.
+
+ DESCRIPTION
+ Finishes a direct path operation.
+
+ RETURNS
+ An OCI error code, Oracle errors are returned via the error handle.
+ NOTES
+ */
+sword
+OCIDirPathFinish( OCIDirPathCtx *dpctx, OCIError *errhp );
+
+/*
+ NAME
+ OCIDirPathFlushRow - OCI: Flush a partial row from the server.
+
+ DESCRIPTION
+ Flushes a partially loaded row from the server.
+
+ RETURNS
+ An OCI error code, Oracle errors are returned via the error handle.
+ NOTES
+ */
+sword
+OCIDirPathFlushRow( OCIDirPathCtx *dpctx, OCIError *errhp );
+
+/*
+ NAME
+ OCIDirPathPrepare - OCI: Prepare a direct path operation.
+
+ DESCRIPTION
+ Prepares a table/partition for a direct path operation.
+
+ RETURNS
+ An OCI error code, Oracle errors are returned via the error handle.
+ NOTES
+ */
+sword
+OCIDirPathPrepare( OCIDirPathCtx *dpctx, OCISvcCtx *svchp,
+ OCIError *errhp );
+
+/*
+ NAME
+ OCIDirPathLoadStream - OCI: Load a direct path stream.
+
+ DESCRIPTION
+ Load a direct path stream to the object associated with
+ the direct path context.
+
+ RETURNS
+ An OCI error code, Oracle errors are returned via the error handle.
+ NOTES
+ */
+sword
+OCIDirPathLoadStream( OCIDirPathCtx *dpctx, OCIDirPathStream *dpstr,
+ OCIError *errhp );
+
+
+/*---------------------- OCIDirPathColArray Operations ----------------------*/
+
+/*
+ NAME
+ OCIDirPathColArrayEntryGet - OCI: Get column array entry.
+
+ DESCRIPTION
+ Column array function which is used to get a specified entry in
+ a column array.
+
+ RETURNS
+ An OCI error code, Oracle errors are returned via the error handle.
+ NOTES
+ */
+sword
+OCIDirPathColArrayEntryGet( OCIDirPathColArray *dpca, OCIError *errhp,
+ ub4 rownum, ub2 colIdx, ub1 **cvalpp, ub4 *clenp,
+ ub1 *cflgp );
+
+/*
+ NAME
+ OCIDirPathColArrayEntrySet - OCI: Set column array entry.
+
+ DESCRIPTION
+ Column array function which is used to set a specified entry in
+ a column array.
+
+ RETURNS
+ An OCI error code, Oracle errors are returned via the error handle.
+ NOTES
+ */
+sword
+OCIDirPathColArrayEntrySet( OCIDirPathColArray *dpca, OCIError *errhp,
+ ub4 rownum, ub2 colIdx, ub1 *cvalp, ub4 clen,
+ ub1 cflg );
+
+/*
+ NAME
+ OCIDirPathColArrayRowGet - OCI: Get column array row pointers.
+
+ DESCRIPTION
+ Column array function which is used to get the base row pointers
+ for a specified row in a column array.
+ To be used in lieu of OCIDirPathColArrayEntryGet() and
+ OCIDirPathColArrayEntrySet().
+
+ RETURNS
+ An OCI error code, Oracle errors are returned via the error handle.
+ NOTES
+ */
+sword
+OCIDirPathColArrayRowGet( OCIDirPathColArray *dpca, OCIError *errhp,
+ ub4 rownum, ub1 ***cvalppp, ub4 **clenpp,
+ ub1 **cflgpp );
+
+/*
+ NAME
+ OCIDirPathColArrayReset - OCI: Reset Column Array State
+
+ DESCRIPTION
+ Function which resets the column array state.
+
+ RETURNS
+ An OCI error code, Oracle errors are returned via the error handle.
+ NOTES
+ Resetting the column array state is necessary when piecing in a large
+ column and an error occurs in the middle of loading the column.
+ */
+sword
+OCIDirPathColArrayReset( OCIDirPathColArray *dpca, OCIError *errhp );
+
+/*
+ NAME
+ OCIDirPathColArrayToStream - OCI: Convert Column Array to Stream Format.
+
+ DESCRIPTION
+ Convert from column array format to stream format which is suitable
+ for loading via OCIDirPathLoadStream().
+
+ RETURNS
+ An OCI error code, Oracle errors are returned via the error handle.
+ NOTES
+ */
+sword
+OCIDirPathColArrayToStream( OCIDirPathColArray *dpca, OCIDirPathCtx *dpctx,
+ OCIDirPathStream *dpstr, OCIError *errhp,
+ ub4 rowcnt, ub4 rowoff );
+
+
+
+/*----------------------- OCIDirPathStream Operations -----------------------*/
+
+/*
+ NAME
+ OCIDirPathStreamReset - OCI:
+
+ DESCRIPTION
+
+ RETURNS
+ An OCI error code, Oracle errors are returned via the error handle.
+ NOTES
+ */
+sword
+OCIDirPathStreamReset( OCIDirPathStream *dpstr, OCIError *errhp );
+
+#endif /* OCI8DP_ORACLE */
--- /dev/null
+/* Copyright (c) 1996, 2011, Oracle and/or its affiliates.
+All rights reserved. */
+
+/*
+ NAME
+ ociap.h
+
+ DESCRIPTION
+ Oracle Call Interface - Ansi Prototypes
+
+ RELATED DOCUMENTS
+
+ INSPECTION STATUS
+ Inspection date:
+ Inspection status:
+ Estimated increasing cost defects per page:
+ Rule sets:
+
+ ACCEPTANCE REVIEW STATUS
+ Review date:
+ Review status:
+ Reviewers:
+
+ PUBLIC FUNCTION(S)
+ OCIAttrGet
+ OCIAttrSet
+ OCIBindArrayOfStruct
+ OCIBindByName
+ OCIBindByPos
+ OCIBindDynamic
+ OCIBindObject
+ OCIBreak
+ OCIConnectionPoolCreate
+ OCISessionPoolCreate
+ OCISessionGet
+ OCISessionRelease
+ OCIDateTimeAssign
+ OCIDateTimeCheck
+ OCIDateTimeCompare
+ OCIDateTimeConvert
+ OCIDateTimeFromText
+ OCIDateTimeGetDate
+ OCIDateTimeGetTime
+ OCIDateTimeGetTime
+ OCIDateTimeGetTimeZoneOffset
+ OCIDateTimeSysTimeStamp
+ OCIDateTimeIntervalAdd
+ OCIDateTimeIntervalSub
+ OCIDateTimeConstruct
+ OCIDateTimeSubtract
+ OCIDateTimeToText
+ OCIDateTimeGetTimeZoneName
+ OCIDateTimeToArray
+ OCIDateTimeFromArray
+ OCIRowidToChar
+ OCIDefineArrayOfStruct
+ OCIDefineByPos
+ OCIDefineDynamic
+ OCIDefineObject
+ OCIDescAlloc
+ OCIDescFree
+ OCIDescribeAny
+ OCIEnvCreate
+ OCIEnvNlsCreate
+ OCIEnvInit
+ OCIErrorGet
+ OCIExtractSetKey
+ OCIExtractFromFile
+ OCIIntervalSubtract
+ OCIIntervalMultiply
+ OCIIntervalToNumber
+ OCIIntervalToText
+ OCIIntervalFromTZ
+ OCIKerbAttrSet
+ OCILdaToSvcCtx
+ OCILobAppend
+ OCILobAssign
+ OCILobCharSetForm
+ OCILobCharSetId
+ OCILobCopy
+ OCILobCreateTemporary
+ OCILobDisableBuffering
+ OCILobEnableBuffering
+ OCILobErase
+ OCILobOpen
+ OCILobClose
+ OCILobFileClose
+ OCILobFileCLoseAll
+ OCILobFileExists
+ OCILobFileGetName
+ OCILobFileIsOpen
+ OCILobFileOpen
+ OCILobFileSetName
+ OCILobFlushBuffer
+ OCILobFreeTemporary
+ OCILobGetChunkSize
+ OCILobGetLength
+ OCILobIsEqual
+ OCILobIsTemporary
+ OCILobLoadFromFile
+ OCILobLocatorAssign
+ OCILobLocatorIsInit
+ OCILobRead
+ OCILobTrim
+ OCILobWrite
+ OCILobWriteAppend
+ OCILobGetStorageLimit
+ OCILobGetOptions
+ OCILobSetOptions
+ OCILobGetContentType
+ OCILobSetContentType
+ OCILogoff
+ OCILogon
+ OCILogon2
+ OCIMemoryFree
+ OCIParamGet
+ OCIParamGet
+ OCIPasswordChange
+ OCIReset
+ OCIResultSetToStmt
+ OCIServerAttach
+ OCIServerDetach
+ OCIServerVersion
+ OCISessionBegin
+ OCISessionEnd
+ OCIStmtExecute
+ OCIStmtFetch
+ OCIStmtFetch2
+ OCIStmtGetPieceInfo
+ OCIStmtPrepare
+ OCIStmtPrepare2
+ OCIStmtRelease
+ OCIStmtSetPieceInfo
+ OCIFormatString
+ OCISvcCtxToLda
+ OCITransCommit
+ OCITransDetach
+ OCITransForget
+ OCITransMultiPrepare
+ OCITransPrepare
+ OCITransRollback
+ OCITransStart
+ OCIInitialize
+ OCIEnvCreate
+ OCIEnvNlsCreate
+ OCIFEnvCreate
+ OCIHandleAlloc
+ OCIDescriptorAlloc
+ OCIDescriptorFree
+ OCIArrayDescriptorAlloc
+ OCIArrayDescriptorFree
+ OCIEnvInit
+ OCIServerAttach
+ OCISessionBegin
+ OCISessionEnd
+ OCILogon
+ OCILogon2
+ OCIPasswordChange
+ OCIStmtPrepare
+ OCIStmtPrepare2
+ OCIStmtRelease
+ OCIBindByPos
+ OCIBindByName
+ OCIBindObject
+ OCIBindDynamic
+ OCIBindArrayOfStruct
+ OCIStmtGetPieceInfo
+ OCIStmtSetPieceInfo
+ OCIStmtExecute
+ OCIDefineByPos
+ OCIDefineObject
+ OCIDefineDynamic
+ OCIRowidToChar
+ OCIDefineArrayOfStruct
+ OCIStmtFetch
+ OCIStmtFetch2
+ OCIStmtGetBindInfo
+ OCIDescribeAny
+ OCIParamGet
+ OCIParamSet
+ OCITransStart
+ OCITransMultiPrepare
+ OCIErrorGet
+ OCILobAppend
+ OCILobAssign
+ OCILobCharSetForm
+ OCILobCharSetId
+ OCILobCopy
+ OCILobCreateTemporary
+ OCILobClose
+ OCILobDisableBuffering
+ OCILobEnableBuffering
+ OCILobErase
+ OCILobFileClose
+ OCILobFileExists
+ OCILobFileGetName
+ OCILobFileIsOpen
+ OCILobFileOpen
+ OCILobFileSetName
+ OCILobFlushBuffer
+ OCILobFreeTemporary
+ OCILobGetChunkSize
+ OCILobGetLength
+ OCILobIsEqual
+ OCILobIsOpen
+ OCILobIsTemporary
+ OCILobLoadFromFile
+ OCILobLocatorAssign
+ OCILobLocatorIsInit
+ OCILobOpen
+ OCILobRead
+ OCILobTrim
+ OCILobWrite
+ OCILobWriteAppend
+ OCIServerVersion
+ OCIServerRelease
+ OCIAttrGet
+ OCIAttrSet
+ OCIUserCallbackRegister
+ OCIUserCallbackGet
+ OCISharedLibInit
+ OCIFileExists
+ OCIFileGetLength
+ OCIFileOpen
+ OCIFileRead
+ OCIFileSeek
+ OCIFileWrite
+ OCILobCopy2
+ OCILobErase2
+ OCILobGetLength2
+ OCILobLoadFromFile2
+ OCILobRead2
+ OCILobArrayRead
+ OCILobTrim2
+ OCILobWrite2
+ OCILobArrayWrite
+ OCILobWriteAppend2
+ OCILobGetStorageLimit
+ OCISecurityOpenWallet
+ OCISecurityCloseWallet
+ OCISecurityCreateWallet
+ OCISecurityDestroyWallet
+ OCISecurityStorePersona
+ OCISecurityOpenPersona
+ OCISecurityClosePersona
+ OCISecurityRemovePersona
+ OCISecurityCreatePersona
+ OCISecuritySetProtection
+ OCISecurityGetProtection
+ OCISecurityRemoveIdentity
+ OCISecurityCreateIdentity
+ OCISecurityAbortIdentity
+ OCISecurityFreeIdentity
+ OCISecurityStoreTrustedIdentity
+ OCISecuritySign
+ OCISecuritySignExpansion
+ OCISecurityVerify
+ OCISecurityValidate
+ OCISecuritySignDetached
+ OCISecuritySignDetExpansion
+ OCISecurityVerifyDetached
+ OCISecurity_PKEncrypt
+ OCISecurityPKEncryptExpansion
+ OCISecurityPKDecrypt
+ OCISecurityEncrypt
+ OCISecurityEncryptExpansion
+ OCISecurityDecrypt
+ OCISecurityEnvelope
+ OCISecurityDeEnvelope
+ OCISecurityKeyedHash
+ OCISecurityKeyedHashExpansion
+ OCISecurityHash
+ OCISecurityHashExpansion
+ OCISecuritySeedRandom
+ OCISecurityRandomBytes
+ OCISecurityRandomNumber
+ OCISecurityInitBlock
+ OCISecurityReuseBlock
+ OCISecurityPurgeBlock
+ OCISecuritySetBlock
+ OCISecurityGetIdentity
+ OCIAQEnq
+ OCIAQDeq
+ OCIAQEnqArray
+ OCIAQEnqStreaming
+ OCIAQDeqArray
+ OCIAQListen
+ OCIAQListen2
+ OCIExtractSetKey
+ OCIExtractFromFile
+ OCIExtractToInt
+ OCIExtractToBool
+ OCIExtractToStr
+ OCIExtractToOCINum
+ OCIExtractFromList
+ OCIMemoryAlloc
+ OCIMemoryResize
+ OCIContextSetValue
+ OCIContextGetValue
+ OCIContextClearValue
+ OCIMemorySetCurrentIDs
+ OCIPicklerTdsCtxInit
+ OCIPicklerTdsInit
+ OCIPicklerTdsCreateElementNumber
+ OCIPicklerTdsCreateElementChar
+ OCIPicklerTdsCreateElementVarchar
+ OCIPicklerTdsCreateElementRaw
+ OCIPicklerTdsCreateElement
+ OCIPicklerTdsAddAttr
+ OCIPicklerTdsGenerate
+ OCIPicklerTdsGetAttr
+ OCIPicklerFdoInit
+ OCIPicklerFdoFree
+ OCIPicklerImageInit
+ OCIPicklerImageFree
+ OCIPicklerImageAddScalar
+ OCIPicklerImageAddNullScalar
+ OCIPicklerImageGenerate
+ OCIPicklerImageGetScalarSize
+ OCIPicklerImageGetScalar
+ OCIPicklerImageCollBegin
+ OCIPicklerImageCollAddScalar
+ OCIPicklerImageCollEnd
+ OCIPicklerImageCollBeginScan
+ OCIPicklerImageCollGetScalarSize
+ OCIPicklerImageCollGetScalar
+ OCIAnyDataGetType
+ OCIAnyDataIsNull
+ OCIAnyDataConvert
+ OCIAnyDataBeginCreate
+ OCIAnyDataAttrSet
+ OCIAnyDataCollAddElem
+ OCIAnyDataEndCreate
+ OCIAnyDataAccess
+ OCIAnyDataGetCurrAttrNum
+ OCIAnyDataAttrGet
+ OCIAnyDataCollGetElem
+ OCIPicklerTdsCtxInit
+ OCIPicklerTdsInit
+ OCIPicklerTdsCreateElementNumber
+ OCIPicklerTdsCreateElementChar
+ OCIPicklerTdsCreateElementVarchar
+ OCIPicklerTdsCreateElementRaw
+ OCIPicklerTdsCreateElement
+ OCIPicklerTdsAddAttr
+ OCIPicklerTdsGenerate
+ OCIPicklerTdsGetAttr
+ OCIPicklerFdoInit
+ OCIPicklerFdoFree
+ OCIPicklerImageInit
+ OCIPicklerImageFree
+ OCIPicklerImageAddScalar
+ OCIPicklerImageAddNullScalar
+ OCIPicklerImageGenerate
+ OCIPicklerImageGetScalarSize
+ OCIPicklerImageGetScalar
+ OCIPicklerImageCollBegin
+ OCIPicklerImageCollAddScalar
+ OCIPicklerImageCollEnd
+ OCIPicklerImageCollBeginScan
+ OCIPicklerImageCollGetScalarSize
+ OCIPicklerImageCollGetScalar
+ OCIAnyDataGetType
+ OCIAnyDataIsNull
+ OCIAnyDataConvert
+ OCIAnyDataBeginCreate
+ OCIAnyDataAttrSet
+ OCIAnyDataCollAddElem
+ OCIAnyDataEndCreate
+ OCIAnyDataAccess
+ OCIAnyDataGetCurrAttrNum
+ OCIAnyDataAttrGet
+ OCIAnyDataCollGetElem
+ OCIPicklerTdsCtxInit
+ OCIPicklerTdsInit
+ OCIPicklerTdsCreateElementNumber
+ OCIPicklerTdsCreateElementChar
+ OCIPicklerTdsCreateElementVarchar
+ OCIPicklerTdsCreateElementRaw
+ OCIPicklerTdsCreateElement
+ OCIPicklerTdsAddAttr
+ OCIPicklerTdsGenerate
+ OCIPicklerTdsGetAttr
+ OCIPicklerFdoInit
+ OCIPicklerFdoFree
+ OCIPicklerImageInit
+ OCIPicklerImageFree
+ OCIPicklerImageAddScalar
+ OCIPicklerImageAddNullScalar
+ OCIPicklerImageGenerate
+ OCIPicklerImageGetScalarSize
+ OCIPicklerImageGetScalar
+ OCIPicklerImageCollBegin
+ OCIPicklerImageCollAddScalar
+ OCIPicklerImageCollEnd
+ OCIPicklerImageCollBeginScan
+ OCIPicklerImageCollGetScalarSize
+ OCIPicklerImageCollGetScalar
+ OCIAnyDataGetType
+ OCIAnyDataIsNull
+ OCIAnyDataConvert
+ OCIAnyDataBeginCreate
+ OCIAnyDataAttrSet
+ OCIAnyDataCollAddElem
+ OCIAnyDataEndCreate
+ OCIAnyDataAccess
+ OCIAnyDataGetCurrAttrNum
+ OCIAnyDataAttrGet
+ OCIAnyDataCollGetElem
+ OCIAnyDataSetBeginCreate
+ OCIAnyDataSetDestroy
+ OCIAnyDataSetAddInstance
+ OCIAnyDataSetEndCreate
+ OCIAnyDataSetGetType
+ OCIAnyDataSetGetCount
+ OCIAnyDataSetGetInstance
+ OCIFormatString
+ OCINlsGetInfo
+ OCINlsNameMap
+ OCIMultiByteToWideChar
+ OCIMultiByteInSizeToWideChar
+ OCIWideCharToMultiByte
+ OCIWideCharInSizeToMultiByte
+ OCIWideCharStrcmp
+ OCIWideCharStrncmp
+ OCIWideCharStrcat
+ *OCIWideCharStrchr
+ OCIWideCharStrcpy
+ OCIWideCharStrncat
+ OCIWideCharStrncpy
+ *OCIWideCharStrrchr
+ OCIWideCharStrCaseConversion
+ OCIMultiByteStrcmp
+ OCIMultiByteStrncmp
+ OCIMultiByteStrcat
+ OCIMultiByteStrcpy
+ OCIMultiByteStrncat
+ OCIMultiByteStrncpy
+ OCIMultiByteStrnDisplayLength
+ OCIMultiByteStrCaseConversion
+ OCICharSetToUnicode
+ OCIUnicodeToCharSet
+ OCINlsCharSetConvert
+ OCINlsEnvironmentVariableGet
+ OCIMessageOpen
+ OCIMessageGet
+ OCIThreadMutexInit
+ OCIThreadMutexDestroy
+ OCIThreadMutexAcquire
+ OCIThreadMutexRelease
+ OCIThreadKeyInit
+ OCIThreadKeyDestroy
+ OCIThreadKeyGet
+ OCIThreadKeySet
+ OCIThreadIdSet
+ OCIThreadIdSetNull
+ OCIThreadIdGet
+ OCIThreadIdSame
+ OCIThreadIdNull
+ OCIThreadHndInit
+ OCIThreadHndDestroy
+ OCIThreadCreate
+ OCIThreadHandleGet
+ OCIThreadMutexInit
+ OCIThreadMutexDestroy
+ OCIThreadMutexAcquire
+ OCIThreadMutexRelease
+ OCIThreadKeyInit
+ OCIThreadKeyDestroy
+ OCIThreadKeyGet
+ OCIThreadKeySet
+ OCIThreadIdSet
+ OCIThreadIdSame
+ OCIThreadIdNull
+ OCIThreadCreate
+ OCISubscriptionRegister
+ OCISubscriptionPost
+ OCISubscriptionUnRegister
+ OCISubscriptionDisable
+ OCISubscriptionEnable
+ OCIDateTimeGetTime
+ OCIDateTimeGetDate
+ OCIDateTimeGetTimeZoneOffset
+ OCIDateTimeConstruct
+ OCIDateTimeSysTimeStamp
+ OCIDateTimeAssign
+ OCIDateTimeToText
+ OCIDateTimeFromText
+ OCIDateTimeCompare
+ OCIDateTimeCheck
+ OCIDateTimeConvert
+ OCIDateTimeSubtract
+ OCIDateTimeIntervalAdd
+ OCIDateTimeIntervalSub
+ OCIIntervalSubtract
+ OCIIntervalAdd
+ OCIIntervalMultiply
+ OCIIntervalDivide
+ OCIIntervalCompare
+ OCIIntervalFromNumber
+ OCIIntervalFromText
+ OCIIntervalToText
+ OCIIntervalToNumber
+ OCIIntervalCheck
+ OCIIntervalAssign
+ OCIIntervalSetYearMonth
+ OCIIntervalGetYearMonth
+ OCIIntervalSetDaySecond
+ OCIIntervalGetDaySecond
+ OCIDateTimeToArray
+ OCIDateTimeFromArray
+ OCIDateTimeGetTimeZoneName
+ OCIIntervalFromTZ
+ OCIConnectionPoolCreate
+ OCIConnectionPoolDestroy
+ OCISessionPoolCreate
+ OCISessionPoolDestroy
+ OCISessionGet
+ OCISessionRelease
+ OCIAppCtxSet
+ OCIAppCtxClearAll
+ OCIMemStats
+ OCIKerbAttrSet
+ OCIDBStartup
+ OCIDBShutdown
+ OCIClientVersion
+ OCIInitEventHandle
+ OCIStmtBindByPos
+ OCIStmtBindByName
+
+ PRIVATE FUNCTION(S)
+
+ EXAMPLES
+
+ NOTES
+
+ MODIFIED (MM/DD/YY)
+ slari 03/24/11 - OCIRoundTripCallback
+ slynn 03/18/08 - OCILobSet/SetContenttype->OCILobGet/SetContentType
+ amullick 02/11/08 - add OCILobGet/SetContenttype APIs
+ schoi 02/27/07 - OCILobGet/SetOptions API change
+ slynn 07/28/06 - Migrate to new 11g LOB terminology
+ hqian 05/22/06 - add OCI_SYSASM
+ slynn 06/21/06 - Add Lob Get Shared Regions Functionality
+ slynn 05/25/06 - New NG Lob Functionality.
+ jawilson 05/22/06 - add TDO out parameter for streaming enq callback
+ aramappa 01/19/06 - Added OCIArrayDescriptorAlloc,
+ OCIArrayDescriptorFree
+ jawilson 02/09/06 - add OCIAQEnqStreaming
+ mxu 03/08/06 - Fix bug 5037807
+ srseshad 09/12/05 - stmtcache: callback
+ mbastawa 09/16/05 - dbhygiene
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ nbhatt 06/17/04 - merge conflicts
+ nbhatt 05/24/04 - merge conflicts
+ weiwang 05/06/04 - add OCIAQListen2
+ rvissapr 06/21/04 - add OCIAppCtx API
+ debanerj 05/17/04 - 13064: LOB array Read and Write
+ aahluwal 06/02/04 - [OCI Events]: add OCIInitEventHandle
+ nikeda 05/28/04 - grabtrans 'nikeda_oci_events_copy'
+ nikeda 05/13/04 - [OCI Events] Rename HACBK->EVTCBK, HACTX->EVTCTX
+ nikeda 05/10/04 - [OCI Events] code review changes
+ aahluwal 04/09/04 - [OCI Events]: add OCIHAServerHandleGet
+ nikeda 03/18/04 - [OCI Events] New Server Handle Callback
+ dfrumkin 12/04/03 - Add OCIDBStartup, OCIDBShutdown
+ jciminsk 12/12/03 - merge from RDBMS_MAIN_SOLARIS_031209
+ sgollapu 06/26/03 - Change OCIPing prototype
+ sgollapu 05/05/03 - Add OCIPing
+ debanerj 01/16/03 - Bug 2753018: Lob Locator parameter for
+ OCILobGetStorageLimit
+ rpingte 05/06/04 - add OCIClientVersion
+ debanerj 08/26/03 - 6003: Lob interface changes
+ sgollapu 06/23/03 - Add OCIPing
+ debanerj 01/16/03 - Bug 2753018: Lob Locator parameter for
+ OCILobGetStorageLimit
+ tkeefe 02/17/03 - bug-2773794: Add new interface for setting Kerb attrs
+ ataracha 01/03/03 - Move OCIXMLType functions to ocixml.h
+ akatti 11/28/02 - [2521361]:add OCIRowidToChar prototype
+ chliang 10/23/02 - add OCIFetchRowCallback
+ cparampa 10/13/02 - Fix the prototype of OCIAQListen(ansi prototype)
+ chliang 10/12/02 - add OCIBindRowCallback
+ debanerj 09/30/02 - Unlimited size LOB 6003
+ thoang 09/25/02 - Add csid to XMLType create functions
+ thoang 04/19/02 - Add OCIXMLTypeGetNS
+ aahluwal 08/09/02 - adding OCIAQDeqArray
+ aahluwal 06/03/02 - bug 2360115
+ skabraha 04/16/02 - fix compiler warnings
+ sichandr 02/12/02 - fix OCIXMLTypeExists
+ gayyappa 02/01/02 - fix 2210776 : change Dom to DOM
+ sichandr 10/24/01 - OCISvcCtx for XMLType create routines
+ schandir 09/14/01 - Add prototypes for Stmt Caching
+ abande 09/04/01 - Add Prototypes for Session Pooling Methods
+ stakeda 09/12/01 - add OCINlsCharSetConvert
+ whe 08/28/01 - add OCIEnvNlsCreate
+ wzhang 08/22/01 - Add OCINlsCharSetNameToId.
+ whe 10/05/01 - add prototype for OCIXMLType functions
+ mdmehta 04/06/01 - Bug 1683763, OCIDateTimeToText: buf_size to ub4*
+ schandir 12/12/00 - modify the ociconnectionpoolcreate() interface.
+ porangas 12/04/00 - Forward merge bug#974710 to 9i
+ rpingte 11/29/00 - Fix bug# 1485795.
+ gtarora 11/30/00 - fix comment for OCILobIsTemporary
+ akatti 11/07/00 - [1198379]:add OCIRowidToChar
+ bpalaval 10/15/00 - Forward merge 892654.
+ kmohan 09/18/00 - add OCILogon2
+ etucker 07/28/00 - add OCIIntervalFromTZ
+ vjayaram 07/18/00 - add connection pooling changes
+ etucker 07/13/00 - add dls apis for oci
+ hmasaki 07/05/00 - fix 1230846: forward merge into 8.2
+ mbastawa 06/05/00 - add OCIStmtFetch2
+ rxgovind 06/07/00 - update OCIAnyData interfaces
+ rxgovind 05/04/00 - add OCIAnyDataSet interfaces
+ rkasamse 05/01/00 - remove attrno from OCIAnyDataAttrGet
+ rkasamse 03/13/00 - add prototype s for OCCIAnyData
+ slari 09/01/99 - remove OCIEnvCallback
+ slari 08/23/99 - add OCIUcb in user callback functions
+ dsaha 07/07/99 - Add OCIFEnvCreate for forms
+ vyanaman 06/21/99 - Change OCI DateTime/Interval APIs.
+ esoyleme 07/01/99 - expose MTS performance enhancements
+ whe 06/14/99 - bug727872:add CONST to match definitions
+ kkarun 02/23/99 - Fix OCIDateTime APIs
+ jiyang 12/07/98 - Add comments for OCI_NLS_DUAL_CURRENCY
+ aroy 12/01/98 - add OCIEnvCreate
+ slari 11/23/98 - use ORASTDARG
+ slari 11/21/98 - replace ellipsis by arglist in OCIUserCallback
+ thchang 10/20/98 - correct comment on OCILobCreateTemporary
+ slari 09/08/98 - allow envh to receive error info also in CallbackReg/
+ kkarun 09/02/98 - Change const to CONST
+ aroy 08/04/98 - add OCITerminate calls
+ nramakri 06/25/98 - remove CONST from some OCIPickler APIs
+ jiyang 06/22/98 - Fix a lint error
+ nmallava 06/08/98 - ociistemporary -> envhp
+ jhasenbe 05/27/98 - Remove definitions for U-Calls (Unicode)
+ nmallava 05/18/98 - add comments
+ sgollapu 05/19/98 - Change text to OraText
+ aroy 04/20/98 - merge forward 8.0.5 -> 8.1.3
+ nbhatt 05/14/98 - aq listen call
+ lchidamb 03/02/98 - Client Notification prototypes
+ vyanaman 04/19/98 - System Timestamp
+ kkarun 04/17/98 - Add more Interval functions
+ vyanaman 04/17/98 - Fix min (proc error)
+ vyanaman 04/16/98 - Add get/set TZ
+ kkarun 04/13/98 - Add Datetime prototypes
+ rkasamse 04/13/98 - change OCIEnv* to dvoid* for context/memory cart serv
+ rkasamse 04/15/98 - chage pickler cart interface
+ slari 03/20/98 - change proto of OCIUserCallback
+ slari 02/17/98 - add OCIUserCallback
+ jiyang 04/02/98 - Accept both env and user handles for NLS
+ rkasamse 03/20/98 - remove prototypes for OCIMemoryDuration* functions.
+ tsaulys 03/20/98 - use environment or session handle
+ nmallava 04/09/98 - OCILobLocatorAssign
+ nmallava 04/07/98 - lobgetchunksize and writeappend apis
+ jhasenbe 04/06/98 - Add new interfaces for Unicode support
+ nmallava 03/17/98 - add interfaces
+ nmallava 03/16/98 - add open/close apis
+ nmallava 03/10/98 - add temporary lobs apis
+ sgollapu 07/10/97 - Add OCIReset
+ sgollapu 02/09/98 - OCI non-blocking
+ nramakri 01/16/98 - remove #ifdef NEVER clause for OCIExtract
+ rmurthy 01/08/98 - OCIContextGenerateKey: change ub1 to ub4
+ ewaugh 12/18/97 - Turn type wrappers into functions.
+ skabraha 12/02/97 - adding OCIFile functions
+ rhwu 12/02/97 - add OCI Thread
+ nramakri 12/15/97 - move to core4
+ nramakri 12/11/97 - modify OCIExtract prototype
+ ewaugh 12/10/97 - add OCIFormat prototypes
+ nmallava 12/17/97 - Add ilob open and close apis
+ rkasamse 12/03/97 - Change some of the function names for pickler cartrid
+ nramakri 11/12/97 - add OCIExtract prototypes
+ rkasamse 11/21/97 - add prototypes for memory cartridge services and cont
+ rkasamse 11/03/97 - Add pickler cartridge interfaces.
+ jiyang 11/11/97 - Add NLS service for cartridge
+ tanguyen 08/19/97 -
+ cxcheng 07/30/97 - replace OCISvcCtx with OCISvcCtx
+ schandra 06/25/97 - AQ OCI interface
+ bnainani 07/21/97 - add prototypes for Oracle XA extensions
+ esoyleme 05/13/97 - move failover callback prototype
+ skmishra 05/06/97 - stdc compiler fixes
+ skmishra 04/24/97 - C++ Compatibility changes
+ skotsovo 04/21/97 - make lob parameter names consistent
+ rwhitman 04/16/97 - Fix LOB prototypes - Olint OCI 8.0.3
+ ramkrish 04/15/97 - Add free flag to OCILobFlushBuffer
+ dchatter 04/10/97 - add nzt.h inclusion
+ cxcheng 04/09/97 - change objnamp from CONST text* to dvoid*
+ cxcheng 04/08/97 - fix prototype of OCIDescribeAny()
+ skotsovo 03/31/97 - remove OCILobLocatorSize
+ skotsovo 03/27/97 - add OCILobLoadFromFile
+ bcchang 02/18/97 - Fix syntax error
+ dchatter 01/13/97 - fix comments on LOB calls
+ aroy 01/10/97 - remove ocilobfilecreate delete
+ sgollapu 12/27/96 - Correct OCILogon prototype
+ dchatter 01/04/97 - comments to describe the functions
+ sgollapu 11/25/96 - Change OCILobFileIsExistent
+ schandra 11/18/96 - Remove xa.h include
+ sgollapu 11/09/96 - Change prototype of OCIDescribeAny
+ dchatter 10/31/96 - delete CONST from lob write cb fn
+ dchatter 10/30/96 - more changes
+ dchatter 10/26/96 - lob/file long name corrections
+ slari 10/16/96 - delete unused calls
+ rwessman 10/29/96 - Fixed OCISecurityGetIdentity prototype
+ bcchang 10/25/96 - Fix syntax error
+ sgollapu 10/22/96 - Add OCILogon and OCILogoff
+ rwessman 10/16/96 - Added cryptographic and digital signature functions
+ sgollapu 10/10/96 - Add ocibdp and ocibdn
+ rxgovind 10/07/96 - add oci file calls
+ skotsovo 10/01/96 - move orl lob fnts to oci
+ skotsovo 09/20/96 - in OCILobGetLength(), remove the 'isnull' parameter.
+ aroy 08/29/96 - change prototype for Nchar Lob support
+ dchatter 08/21/96 - OCIResultSetToStmt prototype change
+ sthakur 08/14/96 - add OCIParamSet
+ schandra 07/26/96 - TX OCI return values - sb4->sword
+ aroy 07/17/96 - terminology change: OCILobLocator => OCILobLocator
+ dchatter 07/01/96 - create ANSI prototypes
+ dchatter 07/01/96 - Creation
+
+*/
+
+
+#ifndef OCIAP_ORACLE
+# define OCIAP_ORACLE
+
+# ifndef ORATYPES
+# include <oratypes.h>
+# endif
+
+#ifndef ORASTDARG
+#include <stdarg.h>
+#define ORASTDARG
+#endif
+
+#ifndef OCIDFN
+#include <ocidfn.h>
+#endif
+
+#ifndef NZT_ORACLE
+#include <nzt.h>
+#endif /* NZT_ORACLE */
+
+#ifndef OCI_ORACLE
+#include <oci.h>
+#endif
+
+#ifndef ORT_ORACLE
+#include <ort.h>
+#endif
+
+
+
+/*---------------------------------------------------------------------------
+ PUBLIC TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ PRIVATE TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ PUBLIC FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+/*****************************************************************************
+ DESCRIPTION
+******************************************************************************
+Note: the descriptions of the functions are alphabetically arranged. Please
+maintain the arrangement when adding a new function description. The actual
+prototypes are below this comment section and donot follow any alphabetical
+ordering.
+
+
+--------------------------------OCIAttrGet------------------------------------
+
+OCIAttrGet()
+Name
+OCI Attribute Get
+Purpose
+This call is used to get a particular attribute of a handle.
+Syntax
+sword OCIAttrGet ( const void *trgthndlp,
+ ub4 trghndltyp,
+ void *attributep,
+ ub4 *sizep,
+ ub4 attrtype,
+ OCIError *errhp );
+Comments
+This call is used to get a particular attribute of a handle.
+See Appendix B, "Handle Attributes", for a list of handle types and their
+readable attributes.
+Parameters
+trgthndlp (IN) - is the pointer to a handle type.
+trghndltyp (IN) - is the handle type.
+attributep (OUT) - is a pointer to the storage for an attribute value. The
+attribute value is filled in.
+sizep (OUT) - is the size of the attribute value.
+This can be passed in as NULL for most parameters as the size is well known.
+For text* parameters, a pointer to a ub4 must be passed in to get the length
+of the string.
+attrtype (IN) - is the type of attribute.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+Related Functions
+OCIAttrSet()
+
+--------------------------------OCIAttrSet------------------------------------
+
+
+OCIAttrSet()
+Name
+OCI Attribute Set
+Purpose
+This call is used to set a particular attribute of a handle or a descriptor.
+Syntax
+sword OCIAttrSet ( void *trgthndlp,
+ ub4 trghndltyp,
+ void *attributep,
+ ub4 size,
+ ub4 attrtype,
+ OCIError *errhp );
+Comments
+This call is used to set a particular attribute of a handle or a descriptor.
+See Appendix B for a list of handle types and their writeable attributes.
+Parameters
+trghndlp (IN/OUT) - the pointer to a handle type whose attribute gets
+modified.
+trghndltyp (IN/OUT) - is the handle type.
+attributep (IN) - a pointer to an attribute value.
+The attribute value is copied into the target handle. If the attribute value
+is a pointer, then only the pointer is copied, not the contents of the pointer.
+size (IN) - is the size of an attribute value. This can be passed in as 0 for
+most attributes as the size is already known by the OCI library. For text*
+attributes, a ub4 must be passed in set to the length of the string.
+attrtype (IN) - the type of attribute being set.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+Related Functions
+OCIAttrGet()
+
+
+
+--------------------------------OCIBindArrayOfStruct--------------------------
+
+
+
+OCIBindArrayOfStruct()
+Name
+OCI Bind for Array of Structures
+Purpose
+This call sets up the skip parameters for a static array bind.
+Syntax
+sword OCIBindArrayOfStruct ( OCIBind *bindp,
+ OCIError *errhp,
+ ub4 pvskip,
+ ub4 indskip,
+ ub4 alskip,
+ ub4 rcskip );
+Comments
+This call sets up the skip parameters necessary for a static array bind.
+This call follows a call to OCIBindByName() or OCIBindByPos(). The bind
+handle returned by that initial bind call is used as a parameter for the
+OCIBindArrayOfStruct() call.
+For information about skip parameters, see the section "Arrays of Structures"
+on page 4-16.
+Parameters
+bindp (IN) - the handle to a bind structure.
+errhp (IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+pvskip (IN) - skip parameter for the next data value.
+indskip (IN) - skip parameter for the next indicator value or structure.
+alskip (IN) - skip parameter for the next actual length value.
+rcskip (IN) - skip parameter for the next column-level return code value.
+Related Functions
+OCIAttrGet()
+
+
+--------------------------------OCIBindByName---------------------------------
+
+OCIBindByName()
+Name
+OCI Bind by Name
+Purpose
+Creates an association between a program variable and a placeholder in a SQL
+statement or PL/SQL block.
+Syntax
+sword OCIBindByName (
+ OCIStmt *stmtp,
+ OCIBind **bindp,
+ OCIError *errhp,
+ const OraText *placeholder,
+ sb4 placeh_len,
+ void *valuep,
+ sb4 value_sz,
+ ub2 dty,
+ void *indp,
+ ub2 *alenp,
+ ub2 *rcodep,
+ ub4 maxarr_len,
+ ub4 *curelep,
+ ub4 mode );
+Description
+This call is used to perform a basic bind operation. The bind creates an
+association between the address of a program variable and a placeholder in a
+SQL statement or PL/SQL block. The bind call also specifies the type of data
+which is being bound, and may also indicate the method by which data will be
+provided at runtime.
+This function also implicitly allocates the bind handle indicated by the bindp
+parameter.
+Data in an OCI application can be bound to placeholders statically or
+dynamically. Binding is static when all the IN bind data and the OUT bind
+buffers are well-defined just before the execute. Binding is dynamic when the
+IN bind data and the OUT bind buffers are provided by the application on
+demand at execute time to the client library. Dynamic binding is indicated by
+setting the mode parameter of this call to OCI_DATA_AT_EXEC.
+Related Functions: For more information about dynamic binding, see
+the section "Runtime Data Allocation and Piecewise Operations" on
+page 5-16.
+Both OCIBindByName() and OCIBindByPos() take as a parameter a bind handle,
+which is implicitly allocated by the bind call A separate bind handle is
+allocated for each placeholder the application is binding.
+Additional bind calls may be required to specify particular attributes
+necessary when binding certain data types or handling input data in certain
+ways:
+If arrays of structures are being utilized, OCIBindArrayOfStruct() must
+be called to set up the necessary skip parameters.
+If data is being provided dynamically at runtime, and the application
+will be using user-defined callback functions, OCIBindDynamic() must
+be called to register the callbacks.
+If a named data type is being bound, OCIBindObject() must be called to
+specify additional necessary information.
+Parameters
+stmth (IN/OUT) - the statement handle to the SQL or PL/SQL statement
+being processed.
+bindp (IN/OUT) - a pointer to a pointer to a bind handle which is implicitly
+allocated by this call. The bind handle maintains all the bind information
+for this particular input value. The handle is feed implicitly when the
+statement handle is deallocated.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+placeholder (IN) - the placeholder attributes are specified by name if
+ocibindn() is being called.
+placeh_len (IN) - the length of the placeholder name specified in placeholder.
+valuep (IN/OUT) - a pointer to a data value or an array of data values of the
+type specified in the dty parameter. An array of data values can be specified
+for mapping into a PL/SQL table or for providing data for SQL multiple-row
+operations. When an array of bind values is provided, this is called an array
+bind in OCI terms. Additional attributes of the array bind (not bind to a
+column of ARRAY type) are set up in OCIBindArrayOfStruct() call.
+For a REF, named data type bind, the valuep parameter is used only for IN
+bind data. The pointers to OUT buffers are set in the pgvpp parameter
+initialized by OCIBindObject(). For named data type and REF binds, the bind
+values are unpickled into the Object Cache. The OCI object navigational calls
+can then be used to navigate the objects and the refs in the Object Cache.
+If the OCI_DATA_AT_EXEC mode is specified in the mode parameter, valuep
+is ignored for all data types. OCIBindArrayOfStruct() cannot be used and
+OCIBindDynamic() must be invoked to provide callback functions if desired.
+value_sz (IN) - the size of a data value. In the case of an array bind, this is
+the maximum size of any element possible with the actual sizes being specified
+in the alenp parameter.
+If the OCI_DATA_AT_EXEC mode is specified, valuesz defines the maximum
+size of the data that can be ever provided at runtime for data types other than
+named data types or REFs.
+dty (IN) - the data type of the value(s) being bound. Named data types
+(SQLT_NTY) and REFs (SQLT_REF) are valid only if the application has been
+initialized in object mode. For named data types, or REFs, additional calls
+must be made with the bind handle to set up the datatype-specific attributes.
+indp (IN/OUT) - pointer to an indicator variable or array. For scalar data
+types, this is a pointer to sb2 or an array of sb2s. For named data types,
+this pointer is ignored and the actual pointer to the indicator structure or
+an array of indicator structures is initialized by OCIBindObject().
+Ignored for dynamic binds.
+See the section "Indicator Variables" on page 2-43 for more information about
+indicator variables.
+alenp (IN/OUT) - pointer to array of actual lengths of array elements. Each
+element in alenp is the length of the data in the corresponding element in the
+bind value array before and after the execute. This parameter is ignored for
+dynamic binds.
+rcodep (OUT) - pointer to array of column level return codes. This parameter
+is ignored for dynamic binds.
+maxarr_len (IN) - the maximum possible number of elements of type dty in a
+PL/SQL binds. This parameter is not required for non-PL/SQL binds. If
+maxarr_len is non-zero, then either OCIBindDynamic() or
+OCIBindArrayOfStruct() can be invoked to set up additional bind attributes.
+curelep(IN/OUT) - a pointer to the actual number of elements. This parameter
+is only required for PL/SQL binds.
+mode (IN) - the valid modes for this parameter are:
+OCI_DEFAULT. This is default mode.
+OCI_DATA_AT_EXEC. When this mode is selected, the value_sz
+parameter defines the maximum size of the data that can be ever
+provided at runtime. The application must be ready to provide the OCI
+library runtime IN data buffers at any time and any number of times.
+Runtime data is provided in one of the two ways:
+callbacks using a user-defined function which must be registered
+with a subsequent call to OCIBindDynamic().
+a polling mechanism using calls supplied by the OCI. This mode
+is assumed if no callbacks are defined.
+For more information about using the OCI_DATA_AT_EXEC mode, see
+the section "Runtime Data Allocation and Piecewise Operations" on
+page 5-16.
+When the allocated buffers are not required any more, they should be
+freed by the client.
+Related Functions
+OCIBindDynamic(), OCIBindObject(), OCIBindArrayOfStruct(), OCIAttrGet()
+
+
+
+-------------------------------OCIBindByPos-----------------------------------
+
+
+OCIBindByPos()
+Name
+OCI Bind by Position
+Purpose
+Creates an association between a program variable and a placeholder in a SQL
+statement or PL/SQL block.
+Syntax
+sword OCIBindByPos (
+ OCIStmt *stmtp,
+ OCIBind **bindp,
+ OCIError *errhp,
+ ub4 position,
+ void *valuep,
+ sb4 value_sz,
+ ub2 dty,
+ void *indp,
+ ub2 *alenp,
+ ub2 *rcodep,
+ ub4 maxarr_len,
+ ub4 *curelep,
+ ub4 mode);
+
+Description
+This call is used to perform a basic bind operation. The bind creates an
+association between the address of a program variable and a placeholder in a
+SQL statement or PL/SQL block. The bind call also specifies the type of data
+which is being bound, and may also indicate the method by which data will be
+provided at runtime.
+This function also implicitly allocates the bind handle indicated by the bindp
+parameter.
+Data in an OCI application can be bound to placeholders statically or
+dynamically. Binding is static when all the IN bind data and the OUT bind
+buffers are well-defined just before the execute. Binding is dynamic when the
+IN bind data and the OUT bind buffers are provided by the application on
+demand at execute time to the client library. Dynamic binding is indicated by
+setting the mode parameter of this call to OCI_DATA_AT_EXEC.
+Related Functions: For more information about dynamic binding, see
+the section "Runtime Data Allocation and Piecewise Operations" on
+page 5-16
+Both OCIBindByName() and OCIBindByPos() take as a parameter a bind handle,
+which is implicitly allocated by the bind call A separate bind handle is
+allocated for each placeholder the application is binding.
+Additional bind calls may be required to specify particular attributes
+necessary when binding certain data types or handling input data in certain
+ways:
+If arrays of structures are being utilized, OCIBindArrayOfStruct() must
+be called to set up the necessary skip parameters.
+If data is being provided dynamically at runtime, and the application
+will be using user-defined callback functions, OCIBindDynamic() must
+be called to register the callbacks.
+If a named data type is being bound, OCIBindObject() must be called to
+specify additional necessary information.
+Parameters
+stmth (IN/OUT) - the statement handle to the SQL or PL/SQL statement
+being processed.
+bindp (IN/OUT) - a pointer to a pointer to a bind handle which is implicitly
+allocated by this call. The bind handle maintains all the bind information
+for this particular input value. The handle is feed implicitly when the
+statement handle is deallocated.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+position (IN) - the placeholder attributes are specified by position if
+ocibindp() is being called.
+valuep (IN/OUT) - a pointer to a data value or an array of data values of the
+type specified in the dty parameter. An array of data values can be specified
+for mapping into a PL/SQL table or for providing data for SQL multiple-row
+operations. When an array of bind values is provided, this is called an array
+bind in OCI terms. Additional attributes of the array bind (not bind to a
+column of ARRAY type) are set up in OCIBindArrayOfStruct() call.
+For a REF, named data type bind, the valuep parameter is used only for IN
+bind data. The pointers to OUT buffers are set in the pgvpp parameter
+initialized by OCIBindObject(). For named data type and REF binds, the bind
+values are unpickled into the Object Cache. The OCI object navigational calls
+can then be used to navigate the objects and the refs in the Object Cache.
+If the OCI_DATA_AT_EXEC mode is specified in the mode parameter, valuep
+is ignored for all data types. OCIBindArrayOfStruct() cannot be used and
+OCIBindDynamic() must be invoked to provide callback functions if desired.
+value_sz (IN) - the size of a data value. In the case of an array bind, this is
+the maximum size of any element possible with the actual sizes being specified
+in the alenp parameter.
+If the OCI_DATA_AT_EXEC mode is specified, valuesz defines the maximum
+size of the data that can be ever provided at runtime for data types other than
+named data types or REFs.
+dty (IN) - the data type of the value(s) being bound. Named data types
+(SQLT_NTY) and REFs (SQLT_REF) are valid only if the application has been
+initialized in object mode. For named data types, or REFs, additional calls
+must be made with the bind handle to set up the datatype-specific attributes.
+indp (IN/OUT) - pointer to an indicator variable or array. For scalar data
+types, this is a pointer to sb2 or an array of sb2s. For named data types,
+this pointer is ignored and the actual pointer to the indicator structure or
+an array of indicator structures is initialized by OCIBindObject(). Ignored
+for dynamic binds.
+See the section "Indicator Variables" on page 2-43 for more information about
+indicator variables.
+alenp (IN/OUT) - pointer to array of actual lengths of array elements. Each
+element in alenp is the length of the data in the corresponding element in the
+bind value array before and after the execute. This parameter is ignored for
+dynamic binds.
+rcodep (OUT) - pointer to array of column level return codes. This parameter
+is ignored for dynamic binds.
+maxarr_len (IN) - the maximum possible number of elements of type dty in a
+PL/SQL binds. This parameter is not required for non-PL/SQL binds. If
+maxarr_len is non-zero, then either OCIBindDynamic() or
+OCIBindArrayOfStruct() can be invoked to set up additional bind attributes.
+curelep(IN/OUT) - a pointer to the actual number of elements. This parameter
+is only required for PL/SQL binds.
+mode (IN) - the valid modes for this parameter are:
+OCI_DEFAULT. This is default mode.
+OCI_DATA_AT_EXEC. When this mode is selected, the value_sz
+parameter defines the maximum size of the data that can be ever
+provided at runtime. The application must be ready to provide the OCI
+library runtime IN data buffers at any time and any number of times.
+Runtime data is provided in one of the two ways:
+callbacks using a user-defined function which must be registered
+with a subsequent call to OCIBindDynamic() .
+a polling mechanism using calls supplied by the OCI. This mode
+is assumed if no callbacks are defined.
+For more information about using the OCI_DATA_AT_EXEC mode, see
+the section "Runtime Data Allocation and Piecewise Operations" on
+page 5-16.
+When the allocated buffers are not required any more, they should be
+freed by the client.
+Related Functions
+OCIBindDynamic(), OCIBindObject(), OCIBindArrayOfStruct(), OCIAttrGet()
+
+
+
+-------------------------------OCIBindDynamic---------------------------------
+
+OCIBindDynamic()
+Name
+OCI Bind Dynamic Attributes
+Purpose
+This call is used to register user callbacks for dynamic data allocation.
+Syntax
+sword OCIBindDynamic( OCIBind *bindp,
+ OCIError *errhp,
+ void *ictxp,
+ OCICallbackInBind (icbfp)(
+ void *ictxp,
+ OCIBind *bindp,
+ ub4 iter,
+ ub4 index,
+ void **bufpp,
+ ub4 *alenp,
+ ub1 *piecep,
+ void **indp ),
+ void *octxp,
+ OCICallbackOutBind (ocbfp)(
+ void *octxp,
+ OCIBind *bindp,
+ ub4 iter,
+ ub4 index,
+ void **bufp,
+ ub4 **alenpp,
+ ub1 *piecep,
+ void **indpp,
+ ub2 **rcodepp) );
+Comments
+This call is used to register user-defined callback functions for providing
+data for an UPDATE or INSERT if OCI_DATA_AT_EXEC mode was specified in a
+previous call to OCIBindByName() or OCIBindByPos().
+The callback function pointers must return OCI_CONTINUE if it the call is
+successful. Any return code other than OCI_CONTINUE signals that the client
+wishes to abort processing immediately.
+For more information about the OCI_DATA_AT_EXEC mode, see the section
+"Runtime Data Allocation and Piecewise Operations" on page 5-16.
+Parameters
+bindp (IN/OUT) - a bind handle returned by a call to OCIBindByName() or
+OCIBindByPos().
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+ictxp (IN) - the context pointer required by the call back function icbfp.
+icbfp (IN) - the callback function which returns a pointer to the IN bind
+value or piece at run time. The callback takes in the following parameters.
+ictxp (IN/OUT) - the context pointer for this callback function.
+bindp (IN) - the bind handle passed in to uniquely identify this bind
+variable.
+iter (IN) - 1-based execute iteration value.
+index (IN) - index of the current array, for an array bind. 1 based not
+greater than curele parameter of the bind call.
+index (IN) - index of the current array, for an array bind. This parameter
+is 1-based, and may not be greater than curele parameter of the bind call.
+bufpp (OUT) - the pointer to the buffer.
+piecep (OUT) - which piece of the bind value. This can be one of the
+following values - OCI_ONE_PIECE, OCI_FIRST_PIECE,
+OCI_NEXT_PIECE and OCI_LAST_PIECE.
+indp (OUT) - contains the indicator value. This is apointer to either an
+sb2 value or a pointer to an indicator structure for binding named data
+types.
+indszp (OUT) - contains the indicator value size. A pointer containing
+the size of either an sb2 or an indicator structure pointer.
+octxp (IN) - the context pointer required by the callback function ocbfp.
+ocbfp (IN) - the callback function which returns a pointer to the OUT bind
+value or piece at run time. The callback takes in the following parameters.
+octxp (IN/OUT) - the context pointer for this call back function.
+bindp (IN) - the bind handle passed in to uniquely identify this bind
+variable.
+iter (IN) - 1-based execute iteration value.
+index (IN) - index of the current array, for an array bind. This parameter
+is 1-based, and must not be greater than curele parameter of the bind call.
+bufpp (OUT) - a pointer to a buffer to write the bind value/piece.
+buflp (OUT) - returns the buffer size.
+alenpp (OUT) - a pointer to a storage for OCI to fill in the size of the bind
+value/piece after it has been read.
+piecep (IN/OUT) - which piece of the bind value. It will be set by the
+library to be one of the following values - OCI_ONE_PIECE or
+OCI_NEXT_PIECE. The callback function can leave it unchanged or set
+it to OCI_FIRST_PIECE or OCI_LAST_PIECE. By default -
+OCI_ONE_PIECE.
+indpp (OUT) - returns a pointer to contain the indicator value which
+either an sb2 value or a pointer to an indicator structure for named data
+types.
+indszpp (OUT) - returns a pointer to return the size of the indicator
+value which is either size of an sb2 or size of an indicator structure.
+rcodepp (OUT) - returns a pointer to contains the return code.
+Related Functions
+OCIAttrGet()
+
+
+---------------------------------OCIBindObject--------------------------------
+
+
+OCIBindObject()
+Name
+OCI Bind Object
+Purpose
+This function sets up additional attributes which are required for a named
+data type (object) bind.
+Syntax
+sword OCIBindObject ( OCIBind *bindp,
+ OCIError *errhp,
+ const OCIType *type,
+ void **pgvpp,
+ ub4 *pvszsp,
+ void **indpp,
+ ub4 *indszp, );
+Comments
+This function sets up additional attributes which binding a named data type
+or a REF. An error will be returned if this function is called when the OCI
+environment has been initialized in non-object mode.
+This call takes as a paramter a type descriptor object (TDO) of datatype
+OCIType for the named data type being defined. The TDO can be retrieved
+with a call to OCITypeByName().
+If the OCI_DATA_AT_EXEC mode was specified in ocibindn() or ocibindp(), the
+pointers to the IN buffers are obtained either using the callback icbfp
+registered in the OCIBindDynamic() call or by the OCIStmtSetPieceInfo() call.
+The buffers are dynamically allocated for the OUT data and the pointers to
+these buffers are returned either by calling ocbfp() registered by the
+OCIBindDynamic() or by setting the pointer to the buffer in the buffer passed
+in by OCIStmtSetPieceInfo() called when OCIStmtExecute() returned
+OCI_NEED_DATA. The memory of these client library- allocated buffers must be
+freed when not in use anymore by using the OCIObjectFreee() call.
+Parameters
+bindp ( IN/OUT) - the bind handle returned by the call to OCIBindByName()
+or OCIBindByPos().
+errhp ( IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+type ( IN) - points to the TDO which describes the type of the program
+variable being bound. Retrieved by calling OCITypeByName().
+pgvpp ( IN/OUT) - points to a pointer to the program variable buffer. For an
+array, pgvpp points to an array of pointers. When the bind variable is also an
+OUT variable, the OUT Named Data Type value or REF is allocated
+(unpickled) in the Object Cache, and a pointer to the value or REF is returned,
+At the end of execute, when all OUT values have been received, pgvpp points
+to an array of pointer(s) to these newly allocated named data types in the
+object cache.
+pgvpp is ignored if the OCI_DATA_AT_EXEC mode is set. Then the Named
+Data Type buffers are requested at runtime. For static array binds, skip
+factors may be specified using the OCIBindArrayOfStruct() call. The skip
+factors are used to compute the address of the next pointer to the value, the
+indicator structure and their sizes.
+pvszsp ( IN/OUT) - points to the size of the program variable. The size of the
+named data type is not required on input. For an array, pvszsp is an array of
+ub4s. On return, for OUT bind variables, this points to size(s) of the Named
+Data Types and REFs received. pvszsp is ignored if the OCI_DATA_AT_EXEC
+mode is set. Then the size of the buffer is taken at runtime.
+indpp ( IN/OUT) - points to a pointer to the program variable buffer
+containing the parallel indicator structure. For an array, points to an array
+of pointers. When the bind variable is also an OUT bind variable, memory is
+allocated in the object cache, to store the unpickled OUT indicator values. At
+the end of the execute when all OUT values have been received, indpp points
+to the pointer(s) to these newly allocated indicator structure(s).
+indpp is ignored if the OCI_DATA_AT_EXEC mode is set. Then the indicator
+is requested at runtime.
+indszp ( IN/OUT) - points to the size of the IN indicator structure program
+variable. For an array, it is an array of sb2s. On return for OUT bind
+variables, this points to size(s) of the received OUT indicator structures.
+indszp is ignored if the OCI_DATA_AT_EXEC mode is set. Then the indicator
+size is requested at runtime.
+Related Functions
+OCIAttrGet()
+
+
+
+----------------------------------OCIBreak------------------------------------
+
+
+OCIBreak()
+Name
+OCI Break
+Purpose
+This call performs an immediate (asynchronous) abort of any currently
+executing OCI function that is associated with a server .
+Syntax
+sword OCIBreak ( void *hndlp,
+ OCIError *errhp);
+Comments
+This call performs an immediate (asynchronous) abort of any currently
+executing OCI function that is associated with a server. It is normally used
+to stop a long-running OCI call being processed on the server.
+This call can take either the service context handle or the server context
+handle as a parameter to identify the function to be aborted.
+Parameters
+hndlp (IN) - the service context handle or the server context handle.
+errhp (IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+Related Functions
+
+-----------------------------OCIConnectionPoolCreate --------------------------
+Name:
+OCIConnectionPoolCreate
+
+Purpose:
+Creates the connections in the pool
+
+Syntax:
+OCIConnectionPoolCreate (OCIEnv *envhp, OCIError *errhp, OCICPool *poolhp,
+ OraText **poolName, sb4 *poolNameLen,
+ const Oratext *dblink, sb4 dblinkLen,
+ ub4 connMin, ub4 connMax, ub4 connIncr,
+ const OraText *poolUsername, sb4 poolUserLen,
+ const OraText *poolPassword, sb4 poolPassLen,
+ ub4 mode)
+Comments:
+This call is used to create a connection pool. conn_min connections
+to the database are started on calling OCIConnectionPoolCreate.
+
+Parameters:
+envhp (IN/OUT) - A pointer to the environment where the Conencton Pool
+ is to be created
+errhp (IN/OUT) - An error handle which can be passed to OCIErrorGet().
+poolhp (IN/OUT) - An uninitialiazed pool handle.
+poolName (OUT) - The connection pool name.
+poolNameLen (OUT) - The length of the connection pool name
+dblink (IN/OUT) - Specifies the database(server) to connect. This will also
+ be used as the default pool name.
+dblinkLen (IN) - The length of the string pointed to by dblink.
+connMin (IN) - Specifies the minimum number of connections in the
+ Connection Pool at any instant.
+ connMin number of connections are started when
+ OCIConnectionPoolCreate() is called.
+connMax (IN) - Specifies the maximum number of connections that can be
+ opened to the database. Once this value is reached, no
+ more connections are opened.
+connIncr (IN) - Allows application to set the next increment for
+ connections to be opened to the database if the current
+ number of connections are less than conn_max.
+poolUsername (IN/OUT) - Connection pooling requires an implicit proxy
+ session and this attribute provides a username
+ for that session.
+poolUserLen (IN) - This represents the length of pool_username.
+poolPassword (IN/OUT) - The password for the parameter pool_username passed
+ above.
+poolPassLen (IN) - This represents the length of pool_password.
+
+mode (IN) - The modes supported are OCI_DEFAULT and
+OCI_CPOOL_REINITIALIZE
+
+Related Functions
+OCIConnectionPoolDestroy()
+
+---------------------------------------------------------------------------
+
+----------------------------OCIConnectionPoolDestroy-------------------------
+Name:
+OCIConnectionPoolDestroy
+
+Purpose:
+Terminates the connections in the pool
+
+Syntax:
+OCIConnectionPoolDestroy (OCICPool *poolhp, OCIError *errhp, ub4 mode)
+
+Comments:
+On calling OCIConnectionPoolDestroy, all the open connections in the pool
+are closed and the pool is destroyed.
+
+Parameters:
+poolhp (IN/OUT) - An initialiazed pool handle.
+errhp (IN/OUT) - An error handle which can be passed to OCIErrorGet().
+mode (IN) - Currently, OCIConnectionPoolDestroy() will support only
+ the OCI_DEFAULT mode.
+
+Related Functions:
+OCIConnectionPoolCreate()
+
+-----------------------------------------------------------------------------
+----------------------------OCISessionPoolCreate-----------------------------
+Name:
+OCISessionPoolCreate
+
+Purpose:
+Creates the sessions in the session pool.
+
+Syntax:
+sword OCISessionPoolCreate (OCIEnv *envhp, OCIError *errhp, OCISpool *spoolhp,
+ OraText **poolName, ub4 *poolNameLen,
+ const OraText *connStr, ub4 connStrLen,
+ ub4 sessMin, ub4 sessMax, ub4 sessIncr,
+ OraText *userid, ub4 useridLen,
+ OraText *password, ub4 passwordLen,
+ ub4 mode)
+
+Comments:
+When OCISessionPoolCreate is called, a session pool is initialized for
+the associated environment and the database specified by the
+connStr parameter. This pool is named uniquely and the name
+is returned to the user in the poolname parameter.
+
+Parameters:
+envhp (IN/OUT) - A pointer to the environment handle in which the session
+ pool needs to be created.
+errhp (IN/OUT) - An error handle which can be passed to OCIErrorGet().
+spoolhp (IN/OUT) - A pointer to the session pool handle that is created.
+poolName (OUT) - Session pool name returned to the user.
+poolNameLen (OUT) - Length of the PoolName
+connStr (IN) - The TNS alias of the database to connect to.
+connStrLen (IN) - Length of the connStr.
+sessMin (IN) - Specifies the minimum number of sessions in the Session Pool.
+ These are the number of sessions opened in the beginning, if
+ in Homogeneous mode. Else, the parameter is ignored.
+sessMax (IN) - Specifies the maximum number of sessions in the Session Pool.
+ Once this value is reached, no more sessions are opened,
+ unless the OCI_ATTR_SPOOL_FORCEGET is set.
+userid (IN) - Specifies the userid with which to start up the sessions.
+useridLen (IN) - Length of userid.
+password (IN) - Specifies the password for the corresponding userid.
+passwordLen (IN) - Specifies the length of the password
+mode(IN) - May be OCI_DEFAULT, OCI_SPC_SPOOL_REINITIALIZE, or
+ OCI_SPC_SPOOL_HOMOGENEOUS.
+
+Returns:
+SUCCESS - If pool could be allocated and created successfully.
+ERROR - If above conditions could not be met.
+
+Related Functions:
+OCISessionPoolDestroy()
+-----------------------------------------------------------------------------
+-----------------------------OCISessionPoolDestroy---------------------------
+Name:
+OCISessionPoolDestroy
+
+Purpose:
+Terminates all the sessions in the session pool.
+
+Syntax:
+sword OCISessionPoolDestroy (OCISPool *spoolhp, OCIError *errhp, ub4 mode)
+
+Comments:
+spoolhp (IN/OUT) - The pool handle of the session pool to be destroyed.
+errhp (IN/OUT) - An error handle which can be passed to OCIErrorGet().
+mode (IN) - Currently only OCI_DEFAULT mode is supported.
+
+Returns:
+SUCCESS - All the sessions could be closed.
+ERROR - If the above condition is not met.
+
+Related Functions:
+OCISessionPoolCreate()
+-----------------------------------------------------------------------------
+-------------------------------OCISessionGet---------------------------------
+Name:
+OCISessionGet
+
+Purpose:
+Get a session. This could be from a session pool, connection pool or
+a new standalone session.
+
+Syntax:
+sword OCISessionGet(OCIenv *envhp, OCIError *errhp, OCISvcCtx **svchp,
+ OCIAuthInfo *authhp,
+ OraText *poolName, ub4 poolName_len,
+ const OraText *tagInfo, ub4 tagInfo_len,
+ OraText **retTagInfo, ub4 *retTagInfo_len,
+ boolean *found,
+ ub4 mode)
+
+Comments:
+envhp (IN/OUT) - OCI environment handle.
+errhp (IN/OUT) - OCI error handle to be passed to OCIErrorGet().
+svchp (IN/OUT) - Address of an OCI service context pointer. This will be
+ filled with a server and session handle, attached to the
+ pool.
+authhp (IN/OUT) - OCI Authentication Information handle.
+poolName (IN) - This indicates the session/connection pool to get the
+ session/connection from in the OCI_SPOOL/OCI_CPOOL mode.
+ In the OCI_DEFAULT mode it refers to the connect string.
+poolName_len (IN) - length of poolName.
+tagInfo (IN) - indicates the tag of the session that the user wants. If the
+ user wants a default session, he must specify a NULL here.
+ Only used for Session Pooling.
+tagInfo_len (IN) - the length of tagInfo.
+retTagInfo (OUT) - This indicates the type of session that is returned to
+ the user. Only used for Session Pooling.
+retTagInfo_len (OUT) - the length of retTagInfo.
+found (OUT) - set to true if the user gets a session he had requested, else
+ set to false. Only used for Session Pooling.
+mode (IN) - The supported modes are OCI_DEFAULT, OCI_CRED_PROXY and
+ OCI_GET_SPOOL_MATCHANY, OCI_SPOOL and OCI_CPOOL. OCI_SPOOL and
+ OCI_CPOOL are mutually exclusive.
+
+Returns:
+SUCCESS - if a session was successfully returned into svchp.
+SUCCESS_WITH_INFO - if a session was successfully returned into svchp and the
+ total number of sessions > maxsessions. Only valid for
+ Session Pooling.
+ERROR - If a session could not be retrieved.
+
+Related Functions:
+OCISessionRelease()
+-----------------------------------------------------------------------------
+---------------------------OCISessionRelease---------------------------------
+Name:
+OCISessionRelease
+
+Purpose:
+Release the session.
+
+Syntax:
+sword OCISessionRelease ( OCISvcCtx *svchp, OCIError *errhp,
+ OraText *tag, ub4 tag_len,
+ ub4 mode);
+
+Comments:
+svchp (IN/OUT) - The service context associated with the session/connection.
+errhp (IN/OUT) - OCI error handle to be passed to OCIErrorGet().
+tag (IN) - Only used for Session Pooling.
+ This parameter will be ignored unless mode OCI_RLS_SPOOL_RETAG is
+ specified. In this case, the session is labelled with this tag and
+ returned to the pool. If this is NULL, then the session is untagged.
+tag_len (IN) - Length of the tag. This is ignored unless mode
+ OCI_RLS_SPOOL_RETAG is set.
+mode (IN) - The supported modes are OCI_DEFAULT, OCI_RLS_SPOOL_DROPSESS,
+ OCI_RLS_SPOOL_RETAG. The last 2 are only valid for Session Pooling.
+ When OCI_RLS_SPOOL_DROPSESS is specified, the session
+ will be removed from the session pool. If OCI_RLS_SPOOL_RETAG
+ is set, the tag on the session will be altered. If this mode is
+ not set, the tag and tag_len parameters will be ignored.
+
+Returns:
+ERROR - If the session could not be released successfully.
+SUCCESS - In all other cases.
+
+Related Functions:
+OCISessionGet().
+-----------------------------------------------------------------------------
+------------------------------OCIDateTimeAssign --------------------------
+sword OCIDateTimeAssign(void *hndl, OCIError *err, const OCIDateTime *from,
+ OCIDateTime *to);
+NAME: OCIDateTimeAssign - OCIDateTime Assignment
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+from (IN) - datetime to be assigned
+to (OUT) - lhs of assignment
+DESCRIPTION:
+ Performs date assignment. The type of the output will be same as that
+ of input
+
+------------------------------OCIDateTimeCheck----------------------------
+sword OCIDateTimeCheck(void *hndl, OCIError *err, const OCIDateTime *date,
+ ub4 *valid );
+NAME: OCIDateTimeCheck - OCIDateTime CHecK if the given date is valid
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+date (IN) - date to be checked
+valid (OUT) - returns zero for a valid date, otherwise
+ the ORed combination of all error bits specified below:
+ Macro name Bit number Error
+ ---------- ---------- -----
+ OCI_DATE_INVALID_DAY 0x1 Bad day
+ OCI_DATE_DAY_BELOW_VALID 0x2 Bad DAy Low/high bit (1=low)
+ OCI_DATE_INVALID_MONTH 0x4 Bad MOnth
+ OCI_DATE_MONTH_BELOW_VALID 0x8 Bad MOnth Low/high bit (1=low)
+ OCI_DATE_INVALID_YEAR 0x10 Bad YeaR
+ OCI_DATE_YEAR_BELOW_VALID 0x20 Bad YeaR Low/high bit (1=low)
+ OCI_DATE_INVALID_HOUR 0x40 Bad HouR
+ OCI_DATE_HOUR_BELOW_VALID 0x80 Bad HouR Low/high bit (1=low)
+ OCI_DATE_INVALID_MINUTE 0x100 Bad MiNute
+ OCI_DATE_MINUTE_BELOW_VALID 0x200 Bad MiNute Low/high bit (1=low)
+ OCI_DATE_INVALID_SECOND 0x400 Bad SeCond
+ OCI_DATE_SECOND_BELOW_VALID 0x800 bad second Low/high bit (1=low)
+ OCI_DATE_DAY_MISSING_FROM_1582 0x1000 Day is one of those "missing"
+ from 1582
+ OCI_DATE_YEAR_ZERO 0x2000 Year may not equal zero
+ OCI_DATE_INVALID_TIMEZONE 0x4000 Bad Timezone
+ OCI_DATE_INVALID_FORMAT 0x8000 Bad date format input
+
+ So, for example, if the date passed in was 2/0/1990 25:61:10 in
+ (month/day/year hours:minutes:seconds format), the error returned
+ would be OCI_DATE_INVALID_DAY | OCI_DATE_DAY_BELOW_VALID |
+ OCI_DATE_INVALID_HOUR | OCI_DATE_INVALID_MINUTE
+
+DESCRIPTION:
+ Check if the given date is valid.
+RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'date' and 'valid' pointers are NULL pointers
+
+------------------------------- OCIDateTimeCompare----------------------------
+sword OCIDateTimeCompare(void *hndl, OCIError *err, const OCIDateTime *date1,
+ const OCIDateTime *date2, sword *result );
+NAME: OCIDateTimeCompare - OCIDateTime CoMPare dates
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+date1, date2 (IN) - dates to be compared
+result (OUT) - comparison result, 0 if equal, -1 if date1 < date2,
+ 1 if date1 > date2
+DESCRIPTION:
+The function OCIDateCompare compares two dates. It returns -1 if
+date1 is smaller than date2, 0 if they are equal, and 1 if date1 is
+greater than date2.
+RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ invalid date
+ input dates are not mutually comparable
+
+------------------------------OCIDateTimeConvert----------------------
+sword OCIDateTimeConvert(void *hndl, OCIError *err, OCIDateTime *indate,
+ OCIDateTime *outdate);
+NAME: OCIDateTimeConvert - Conversion between different DATETIME types
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+indate (IN) - pointer to input date
+outdate (OUT) - pointer to output datetime
+DESCRIPTION: Converts one datetime type to another. The result type is
+ the type of the 'outdate' descriptor.
+RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ conversion not possible.
+
+---------------------------- OCIDateTimeFromText-----------------------
+sword OCIDateTimeFromText(void *hndl, OCIError *err, const OraText *date_str,
+ size_t d_str_length, const OraText *fmt, ub1 fmt_length,
+ const OraText *lang_name, size_t lang_length, OCIDateTime *date );
+NAME: OCIDateTimeFromText - OCIDateTime convert String FROM Date
+PARAMETERS:
+hndl (IN) - Session/Env handle. If Session Handle is passed, the
+ conversion takes place in session NLS_LANGUAGE and
+ session NLS_CALENDAR, otherwise the default is used.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+date_str (IN) - input string to be converted to Oracle date
+d_str_length (IN) - size of the input string, if the length is -1
+ then 'date_str' is treated as a null terminated string
+fmt (IN) - conversion format; if 'fmt' is a null pointer, then
+ the string is expected to be in the default format for
+ the datetime type.
+fmt_length (IN) - length of the 'fmt' parameter
+lang_name (IN) - language in which the names and abbreviations of
+ days and months are specified, if null i.e. (OraText *)0,
+ the default language of session is used,
+lang_length (IN) - length of the 'lang_name' parameter
+date (OUT) - given string converted to date
+DESCRIPTION:
+ Converts the given string to Oracle datetime type set in the
+ OCIDateTime descriptor according to the specified format. Refer to
+ "TO_DATE" conversion function described in "Oracle SQL Language
+ Reference Manual" for a description of format.
+RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ invalid format
+ unknown language
+ invalid input string
+
+--------------------------- OCIDateTimeGetDate-------------------------
+sword OCIDateTimeGetDate(void *hndl, OCIError *err, const OCIDateTime *date,
+ sb2 *year, ub1 *month, ub1 *day );
+NAME: OCIDateTimeGetDate - OCIDateTime Get Date (year, month, day)
+ portion of DATETIME.
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+datetime (IN) - Pointer to OCIDateTime
+year (OUT) - year value
+month (OUT) - month value
+day (OUT) - day value
+
+--------------------------- OCIDateTimeGetTime ------------------------
+sword OCIDateTimeGetTime(void *hndl, OCIError *err, OCIDateTime *datetime,
+ ub1 *hour, ub1 *minute, ub1 *sec, ub4 *fsec);
+NAME: OCIDateTimeGetTime - OCIDateTime Get Time (hour, min, second,
+ fractional second) of DATETIME.
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+datetime (IN) - Pointer to OCIDateTime
+hour (OUT) - hour value
+minute (OUT) - minute value
+sec (OUT) - second value
+fsec (OUT) - Fractional Second value
+
+--------------------------- OCIDateTimeGetTimeZoneOffset ----------------------
+sword OCIDateTimeGetTimeZoneOffset(void *hndl,OCIError *err,const
+ OCIDateTime *datetime,sb1 *hour,sb1 *minute);
+
+NAME: OCIDateTimeGetTimeZoneOffset - OCIDateTime Get TimeZone (hour, minute)
+ portion of DATETIME.
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+datetime (IN) - Pointer to OCIDateTime
+hour (OUT) - TimeZone Hour value
+minute (OUT) - TimeZone Minute value
+
+--------------------------- OCIDateTimeSysTimeStamp---------------------
+sword OCIDateTimeSysTimeStamp(void *hndl, OCIError *err,
+ OCIDateTime *sys_date );
+
+NAME: OCIDateTimeSysTimeStamp - Returns system date/time as a TimeStamp with
+ timezone
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+sys_date (OUT) - Pointer to output timestamp
+
+DESCRIPTION:
+ Gets the system current date and time as a timestamp with timezone
+RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+
+
+------------------------------OCIDateTimeIntervalAdd----------------------
+sword OCIDateTimeIntervalAdd(void *hndl, OCIError *err, OCIDateTime *datetime,
+ OCIInterval *inter, OCIDateTime *outdatetime);
+NAME: OCIDateTimeIntervalAdd - Adds an interval to datetime
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+datetime (IN) - pointer to input datetime
+inter (IN) - pointer to interval
+outdatetime (IN) - pointer to output datetime. The output datetime
+ will be of same type as input datetime
+DESCRIPTION:
+ Adds an interval to a datetime to produce a resulting datetime
+RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if:
+ resulting date is before Jan 1, -4713
+ resulting date is after Dec 31, 9999
+
+------------------------------OCIDateTimeIntervalSub----------------------
+sword OCIDateTimeIntervalSub(void *hndl, OCIError *err, OCIDateTime *datetime,
+ OCIInterval *inter, OCIDateTime *outdatetime);
+NAME: OCIDateTimeIntervalSub - Subtracts an interval from a datetime
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+datetime (IN) - pointer to input datetime
+inter (IN) - pointer to interval
+outdatetime (IN) - pointer to output datetime. The output datetime
+ will be of same type as input datetime
+DESCRIPTION:
+ Subtracts an interval from a datetime and stores the result in a
+ datetime
+RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if:
+ resulting date is before Jan 1, -4713
+ resulting date is after Dec 31, 9999
+
+--------------------------- OCIDateTimeConstruct-------------------------
+sword OCIDateTimeConstruct(void *hndl,OCIError *err,OCIDateTime *datetime,
+ sb2 year,ub1 month,ub1 day,ub1 hour,ub1 min,ub1 sec,ub4 fsec,
+ OraText *timezone,size_t timezone_length);
+
+NAME: OCIDateTimeConstruct - Construct an OCIDateTime. Only the relevant
+ fields for the OCIDateTime descriptor types are used.
+PARAMETERS:
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ datetime (IN) - Pointer to OCIDateTime
+ year (IN) - year value
+ month (IN) - month value
+ day (IN) - day value
+ hour (IN) - hour value
+ min (IN) - minute value
+ sec (IN) - second value
+ fsec (IN) - Fractional Second value
+ timezone (IN) - Timezone string
+ timezone_length(IN) - Length of timezone string
+
+DESCRIPTION:
+ Constructs a DateTime descriptor. The type of the datetime is the
+ type of the OCIDateTime descriptor. Only the relevant fields based
+ on the type are used. For Types with timezone, the date and time
+ fields are assumed to be in the local time of the specified timezone.
+ If timezone is not specified, then session default timezone is
+ assumed.
+RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_ERROR if datetime is not valid.
+
+------------------------------OCIDateTimeSubtract-----------------------
+sword OCIDateTimeSubtract(void *hndl, OCIError *err, OCIDateTime *indate1,
+ OCIDateTime *indate2, OCIInterval *inter);
+NAME: OCIDateTimeSubtract - subtracts two datetimes to return an interval
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+indate1(IN) - pointer to subtrahend
+indate2(IN) - pointer to minuend
+inter (OUT) - pointer to output interval
+DESCRIPTION:
+ Takes two datetimes as input and stores their difference in an
+ interval. The type of the interval is the type of the 'inter'
+ descriptor.
+RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ datetimes are not comparable.
+
+--------------------------- OCIDateTimeToText--------------------------
+sword OCIDateTimeToText(void *hndl, OCIError *err, const OCIDateTime *date,
+ const OraText *fmt, ub1 fmt_length, ub1 fsprec,
+ const OraText *lang_name, size_t lang_length,
+ ub4 *buf_size, OraText *buf );
+NAME: OCIDateTimeToText - OCIDateTime convert date TO String
+PARAMETERS:
+hndl (IN) - Session/Env handle. If Session Handle is passed, the
+ conversion takes place in session NLS_LANGUAGE and
+ session NLS_CALENDAR, otherwise the default is used.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+date (IN) - Oracle datetime to be converted
+fmt (IN) - conversion format, if null string pointer (OraText*)0, then
+ the date is converted to a character string in the
+ default format for that type.
+fmt_length (IN) - length of the 'fmt' parameter
+fsprec (IN) - specifies the fractional second precision in which the
+ fractional seconds is returned.
+lang_name (IN) - specifies the language in which the names and
+ abbreviations of months and days are returned;
+ default language of session is used if 'lang_name'
+ is null i.e. (OraText *)0
+lang_length (IN) - length of the 'nls_params' parameter
+buf_size (IN/OUT) - size of the buffer; size of the resulting string
+ is returned via this parameter
+buf (OUT) - buffer into which the converted string is placed
+DESCRIPTION:
+ Converts the given date to a string according to the specified format.
+ Refer to "TO_DATE" conversion function described in
+ "Oracle SQL Language Reference Manual" for a description of format
+ and NLS arguments. The converted null-terminated date string is
+ stored in the buffer 'buf'.
+RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ buffer too small
+ invalid format
+ unknown language
+ overflow error
+
+----------------------------OCIDateTimeGetTimeZoneName------------------------
+sword OCIDateTimeGetTimeZoneName(void *hndl,
+ OCIError *err,
+ const OCIDateTime *datetime,
+ ub1 *buf,
+ ub4 *buflen);
+NAME OCIDateTimeGetTimeZoneName - OCI DateTime Get the Time Zone Name
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+datetime (IN) - Pointer to an OCIDateTime.
+buf (OUT) - User allocated storage for name string.
+buflen (IN/OUT) - length of buf on input, length of name on out
+DESCRIPTION:
+ Returns either the timezone region name or the absolute hour and minute
+ offset. If the DateTime was created with a region id then the region
+ name will be returned in the buf. If the region id is zero, then the
+ hour and minute offset is returned as "[-]HH:MM".
+RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ buffer too small
+ error retrieving timezone data
+ invalid region
+ invalid LdiDateTime type
+
+---------------------------------OCIDateTimeToArray----------------------------
+sword OCIDateTimeToArray(void *hndl,
+ OCIError *err,
+ const OCIDateTime *datetime,
+ const OCIInterval *reftz,
+ ub1 *outarray,
+ ub4 *len
+ ub1 *fsprec);
+NAME OCIDateTimeToArray - OCI DateTime convert To Array format
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+datetime (IN) - Pointer to OCIDateTime to be converted.
+outarray (OUT) - Result array storage
+len (OUT) - pointer to length of outarray.
+fsprec (IN) - Number of fractional seconds digits.
+DESCRIPTION:
+ Returns an array representing the input DateTime descriptor.
+RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ buffer too small
+ error retrieving timezone data
+ invalid region
+ invalid LdiDateTime type
+
+--------------------------------OCIDateTimeFromArray---------------------------
+sword OCIDateTimeFromArray(void *hndl,
+ OCIError *err,
+ ub1 *inarray,
+ ub4 len
+ ub1 type
+ OCIDateTime *datetime,
+ OCIInterval *reftz,
+ ub1 fsprec);
+NAME OCIDateTimeFromArray - OCI DateTime convert From Array format
+PARAMETERS:
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+inarray (IN) - Pointer to input array representtion of DateTime
+len (IN) - len of inarray.
+type (IN) - One of SQLT_DATE, SQLT_TIME, SQLT_TIME_TZ, SQLT_TIMESTAMP,
+ SQLT_TIMESTAMP_TZ, or SQLT_TIMESTAMP_LTZ.
+datetime (OUT) - Pointer to the result OCIDateTime.
+reftz (IN) - timezone interval used with SQLT_TIMESTAMP_LTZ.
+fsprec (IN) - fractionl seconds digits of precision (0-9).
+DESCRIPTION:
+ Returns a pointer to an OCIDateTime of type type converted from
+ the inarray.
+RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ buffer too small
+ error retrieving timezone data
+ invalid region
+ invalid LdiDateTime type
+
+----------------------------------OCIRowidToChar-----------------------------
+Name
+OCIRowidToChar
+
+Purpose
+Converts physical/logical (universal) ROWID to chracter extended (Base 64)
+representation into user provided buffer outbfp of length outbflp. After
+execution outbflp contains amount of bytes converted.In case of truncation
+error, outbflp contains required size to make this conversion successful
+and returns ORA-1405.
+
+Syntax
+sword OCIRowidToChar( OCIRowid *rowidDesc,
+ OraText *outbfp,
+ ub2 *outbflp,
+ OCIError *errhp)
+
+Comments
+After this conversion, ROWID in character format can be bound using
+OCIBindByPos or OCIBindByName call and used to query a row at a
+desired ROWID.
+
+Parameters
+rowidDesc (IN) - rowid DESCriptor which is allocated from OCIDescritorAlloc
+ and populated by a prior SQL statement execution
+outbfp (OUT) - pointer to the buffer where converted rowid in character
+ representation is stored after successful execution.
+outbflp (IN/OUT) - pointer to output buffer length variable.
+ Before execution (IN mode) *outbflp contains the size of
+ outbfp, after execution (OUT mode) *outbflp contains amount
+ of bytes converted. In an event of truncation during
+ conversion *outbflp contains the required length to make
+ conversion successful.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+ diagnostic information in the event of an error.
+
+------------------------------OCIDefineArrayOfStruct--------------------------
+
+
+OCIDefineArrayOfStruct()
+Name
+OCI Define for Array of Structures
+Purpose
+This call specifies additional attributes necessary for a static array define.
+Syntax
+sword OCIDefineArrayOfStruct ( OCIDefine *defnp,
+ OCIError *errhp,
+ ub4 pvskip,
+ ub4 indskip,
+ ub4 rlskip,
+ ub4 rcskip );
+Comments
+This call specifies additional attributes necessary for an array define,
+used in an array of structures (multi-row, multi-column) fetch.
+For more information about skip parameters, see the section "Skip Parameters"
+on page 4-17.
+Parameters
+defnp (IN) - the handle to the define structure which was returned by a call
+to OCIDefineByPos().
+errhp (IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+pvskip (IN) - skip parameter for the next data value.
+indskip (IN) - skip parameter for the next indicator location.
+rlskip (IN) - skip parameter for the next return length value.
+rcskip (IN) - skip parameter for the next return code.
+Related Functions
+OCIAttrGet()
+
+
+
+
+
+OCIDefineByPos()
+Name
+OCI Define By Position
+Purpose
+Associates an item in a select-list with the type and output data buffer.
+Syntax
+sb4 OCIDefineByPos (
+ OCIStmt *stmtp,
+ OCIDefine **defnp,
+ OCIError *errhp,
+ ub4 position,
+ void *valuep,
+ sb4 value_sz,
+ ub2 dty,
+ void *indp,
+ ub2 *rlenp,
+ ub2 *rcodep,
+ ub4 mode );
+Comments
+This call defines an output buffer which will receive data retreived from
+Oracle. The define is a local step which is necessary when a SELECT statement
+returns data to your OCI application.
+This call also implicitly allocates the define handle for the select-list item.
+Defining attributes of a column for a fetch is done in one or more calls. The
+first call is to OCIDefineByPos(), which defines the minimal attributes
+required to specify the fetch.
+This call takes as a parameter a define handle, which must have been
+previously allocated with a call to OCIHandleAlloc().
+Following the call to OCIDefineByPos() additional define calls may be
+necessary for certain data types or fetch modes:
+A call to OCIDefineArrayOfStruct() is necessary to set up skip parameters
+for an array fetch of multiple columns.
+A call to OCIDefineObject() is necessary to set up the appropriate
+attributes of a named data type fetch. In this case the data buffer pointer
+in ocidefn() is ignored.
+Both OCIDefineArrayOfStruct() and OCIDefineObject() must be called
+after ocidefn() in order to fetch multiple rows with a column of named
+data types.
+For a LOB define, the buffer pointer must be a lob locator of type
+OCILobLocator , allocated by the OCIDescAlloc() call. LOB locators, and not
+LOB values, are always returned for a LOB column. LOB values can then be
+fetched using OCI LOB calls on the fetched locator.
+For NCHAR (fixed and varying length), the buffer pointer must point to an
+array of bytes sufficient for holding the required NCHAR characters.
+Nested table columns are defined and fetched like any other named data type.
+If the mode parameter is this call is set to OCI_DYNAMIC_FETCH, the client
+application can fetch data dynamically at runtime.
+Runtime data can be provided in one of two ways:
+callbacks using a user-defined function which must be registered with a
+subsequent call to OCIDefineDynamic(). When the client library needs a
+buffer to return the fetched data, the callback will be invoked and the
+runtime buffers provided will return a piece or the whole data.
+a polling mechanism using calls supplied by the OCI. This mode is
+assumed if no callbacks are defined. In this case, the fetch call returns the
+OCI_NEED_DATA error code, and a piecewise polling method is used
+to provide the data.
+Related Functions: For more information about using the
+OCI_DYNAMIC_FETCH mode, see the section "Runtime Data
+Allocation and Piecewise Operations" on page 5-16 of Volume 1..
+For more information about the define step, see the section "Defining"
+on page 2-30.
+Parameters
+stmtp (IN) - a handle to the requested SQL query operation.
+defnp (IN/OUT) - a pointer to a pointer to a define handle which is implicitly
+allocated by this call. This handle is used to store the define information
+for this column.
+errhp (IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+position (IN) - the position of this value in the select list. Positions are
+1-based and are numbered from left to right. For example, in the SELECT
+statement
+SELECT empno, ssn, mgrno FROM employees;
+empno is at position 1, ssn is at position 2, and mgrno is at position 3.
+valuep (IN/OUT) - a pointer to a buffer or an array of buffers of the type
+specified in the dty parameter. A number of buffers can be specified when
+results for more than one row are desired in a single fetch call.
+value_sz (IN) - the size of each valuep buffer in bytes. If the data is stored
+internally in VARCHAR2 format, the number of characters desired, if different
+from the buffer size in bytes, may be additionally specified by the using
+OCIAttrSet().
+In an NLS conversion environment, a truncation error will be generated if the
+number of bytes specified is insufficient to handle the number of characters
+desired.
+dty (IN) - the data type. Named data type (SQLT_NTY) and REF (SQLT_REF)
+are valid only if the environment has been intialized with in object mode.
+indp - pointer to an indicator variable or array. For scalar data types,
+pointer to sb2 or an array of sb2s. Ignored for named data types. For named
+data types, a pointer to a named data type indicator structure or an array of
+named data type indicator structures is associated by a subsequent
+OCIDefineObject() call.
+See the section "Indicator Variables" on page 2-43 for more information about
+indicator variables.
+rlenp (IN/OUT) - pointer to array of length of data fetched. Each element in
+rlenp is the length of the data in the corresponding element in the row after
+the fetch.
+rcodep (OUT) - pointer to array of column-level return codes
+mode (IN) - the valid modes are:
+OCI_DEFAULT. This is the default mode.
+OCI_DYNAMIC_FETCH. For applications requiring dynamically
+allocated data at the time of fetch, this mode must be used. The user may
+additionally call OCIDefineDynamic() to set up a callback function that
+will be invoked to receive the dynamically allocated buffers and to set
+up the memory allocate/free callbacks and the context for the callbacks.
+valuep and value_sz are ignored in this mode.
+Related Functions
+OCIDefineArrayOfStruct(), OCIDefineDynamic(), OCIDefineObject()
+
+
+
+
+OCIDefineDynamic()
+Name
+OCI Define Dynamic Fetch Attributes
+Purpose
+This call is used to set the additional attributes required if the
+OCI_DYNAMIC_FETCH mode was selected in OCIDefineByPos().
+Syntax
+sword OCIDefineDynamic( OCIDefine *defnp,
+ OCIError *errhp,
+ void *octxp,
+ OCICallbackDefine (ocbfp)(
+ void *octxp,
+ OCIDefine *defnp,
+ ub4 iter,
+ void **bufpp,
+ ub4 **alenpp,
+ ub1 *piecep,
+ void **indpp,
+ ub2 **rcodep) );
+Comments
+This call is used to set the additional attributes required if the
+OCI_DYNAMIC_FETCH mode has been selected in a call to
+OCIDefineByPos().
+When the OCI_DYNAMIC_FETCH mode is selected, buffers will be
+dynamically allocated for REF, and named data type, values to receive the
+data. The pointers to these buffers will be returned.
+If OCI_DYNAMIC_FETCH mode was selected, and the call to
+OCIDefineDynamic() is skipped, then the application can fetch data piecewise
+using OCI calls.
+For more information about OCI_DYNAMIC_FETCH mode, see the section
+"Runtime Data Allocation and Piecewise Operations" on page 5-16.
+Parameters
+defnp (IN/OUT) - the handle to a define structure returned by a call to
+OCIDefineByPos().
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+octxp (IN) - points to a context for the callback function.
+ocbfp (IN) - points to a callback function. This is invoked at runtime to get
+a pointer to the buffer into which the fetched data or a piece of it will be
+retreived. The callback also specifies the indicator, the return code and the
+lengths of the data piece and indicator. The callback has the following
+parameters:
+octxp (IN) - a context pointer passed as an argument to all the callback
+functions.
+defnp (IN) - the define handle.
+iter (IN) - which row of this current fetch.
+bufpp (OUT) - returns a pointer to a buffer to store the column value, ie.
+*bufp points to some appropriate storage for the column value.
+alenpp (OUT) - returns a pointer to the length of the buffer. *alenpp
+contains the size of the buffer after return from callback. Gets set to
+actual data size after fetch.
+piecep (IN/OUT) - returns a piece value, as follows:
+The IN value can be OCI_ONE_PIECE, OCI_FIRST_PIECE or
+OCI_NEXT_PIECE.
+The OUT value can be OCI_ONE_PIECE if the IN value was
+OCI_ONE_PIECE.
+The OUT value can be OCI_ONE_PIECE or OCI_FIRST_PIECE if
+the IN value was OCI_FIRST_PIECE.
+The OUT value can only be OCI_NEXT_PIECE or
+OCI_LAST_PIECE if the IN value was OCI_NEXT_PIECE.
+indpp (IN) - indicator variable pointer
+rcodep (IN) - return code variable pointer
+Related Functions
+OCIAttrGet()
+OCIDefineObject()
+
+
+
+
+OCIDefineObject()
+Name
+OCI Define Named Data Type attributes
+Purpose
+Sets up additional attributes necessary for a Named Data Type define.
+Syntax
+sword OCIDefineObject ( OCIDefine *defnp,
+ OCIError *errhp,
+ const OCIType *type,
+ void **pgvpp,
+ ub4 *pvszsp,
+ void **indpp,
+ ub4 *indszp );
+Comments
+This call sets up additional attributes necessary for a Named Data Type define.
+An error will be returned if this function is called when the OCI environment
+has been initialized in non-Object mode.
+This call takes as a paramter a type descriptor object (TDO) of datatype
+OCIType for the named data type being defined. The TDO can be retrieved
+with a call to OCITypeByName().
+See the description of OCIInitialize() on page 13 - 43 for more information
+about initializing the OCI process environment.
+Parameters
+defnp (IN/OUT) - a define handle previously allocated in a call to
+OCIDefineByPos().
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+type (IN, optional) - points to the Type Descriptor Object (TDO) which
+describes the type of the program variable. Only used for program variables
+of type SQLT_NTY. This parameter is optional, and may be passed as NULL
+if it is not being used.
+pgvpp (IN/OUT) - points to a pointer to a program variable buffer. For an
+array, pgvpp points to an array of pointers. Memory for the fetched named data
+type instance(s) is dynamically allocated in the object cache. At the end of
+the fetch when all the values have been received, pgvpp points to the
+pointer(s) to these newly allocated named data type instance(s). The
+application must call OCIObjectMarkDel() to deallocate the named data type
+instance(s) when they are no longer needed.
+pvszsp (IN/OUT) - points to the size of the program variable. For an array, it
+is an array of ub4s. On return points to the size(s) of unpickled fetched
+values.
+indpp (IN/OUT) - points to a pointer to the program variable buffer
+containing the parallel indicator structure. For an array, points to an array
+of pointers. Memory is allocated to store the indicator structures in the
+object cache. At the end of the fetch when all values have been received,
+indpp points to the pointer(s) to these newly allocated indicator structure(s).
+indszp (IN/OUT) - points to the size(s) of the indicator structure program
+variable. For an array, it is an array of ub4s. On return points to the size(s)
+of the unpickled fetched indicator values.
+Related Functions
+OCIAttrGet()
+
+
+
+OCIDescAlloc()
+Name
+OCI Get DESCriptor or lob locator
+Purpose
+Allocates storage to hold certain data types. The descriptors can be used as
+bind or define variables.
+Syntax
+sword OCIDescAlloc ( const void *parenth,
+ void **descpp,
+ ub4 type,
+ size_t xtramem_sz,
+ void **usrmempp);
+Comments
+Returns a pointer to an allocated and initialized structure, corresponding to
+the type specified in type. A non-NULL descriptor or LOB locator is returned
+on success. No diagnostics are available on error.
+This call returns OCI_SUCCESS if successful, or OCI_INVALID_HANDLE if
+an out-of-memory error occurs.
+Parameters
+parenth (IN) - an environment handle.
+descpp (OUT) - returns a descriptor or LOB locator of desired type.
+type (IN) - specifies the type of descriptor or LOB locator to be allocated.
+The specific types are:
+OCI_DTYPE_SNAP - specifies generation of snapshot descriptor of C
+type - OCISnapshot
+OCI_DTYPE_LOB - specifies generation of a LOB data type locator of C
+type - OCILobLocator
+OCI_DTYPE_RSET - specifies generation of a descriptor of C type
+OCIResult that references a result set (a number of rows as a result of a
+query). This descriptor is bound to a bind variable of data type
+SQLT_RSET (result set). The descriptor has to be converted into a
+statement handle using a function - OCIResultSetToStmt() - which can
+then be passed to OCIDefineByPos() and OCIStmtFetch() to retrieve the
+rows of the result set.
+OCI_DTYPE_ROWID - specifies generation of a ROWID descriptor of C
+type OCIRowid.
+OCI_DTYPE_COMPLEXOBJECTCOMP - specifies generation of a
+complex object retrieval descriptor of C type
+OCIComplexObjectComp.
+xtramemsz (IN) - specifies an amount of user memory to be allocated for use
+by the application.
+usrmempp (OUT) - returns a pointer to the user memory of size xtramemsz
+allocated by the call for the user.
+Related Functions
+OCIDescFree()
+
+
+
+
+OCIDescFree()
+Name
+OCI Free DESCriptor
+Purpose
+Deallocates a previously allocated descriptor.
+Syntax
+sword OCIDescFree ( void *descp,
+ ub4 type);
+Comments
+This call frees up storage associated with the descriptor, corresponding to the
+type specified in type. Returns OCI_SUCCESS or OCI_INVALID_HANDLE.
+All descriptors must be explicitly deallocated. OCI will not deallocate a
+descriptor if the environment handle is deallocated.
+Parameters
+descp (IN) - an allocated descriptor.
+type (IN) - specifies the type of storage to be freed. The specific types are:
+OCI_DTYPE_SNAP - snapshot descriptor
+OCI_DTYPE_LOB - a LOB data type descriptor
+OCI_DTYPE_RSET - a descriptor that references a result set (a number
+of rows as a result of a query).
+OCI_DTYPE_ROWID - a ROWID descriptor
+OCI_DTYPE_COMPLEXOBJECTCOMP - a complex object retrieval
+descriptor
+Related Functions
+OCIDescAlloc()
+
+
+
+OCIDescribeAny()
+Name
+OCI DeSCribe Any
+Purpose
+Describes existing schema objects.
+Syntax
+sword OCIDescribeAny ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ void *objptr,
+ ub4 objnm_len,
+ ub1 objptr_typ,
+ ub1 info_level,
+ ub1 objtype,
+ OCIDesc *dschp );
+Comments
+This is a generic describe call that describes existing schema objects: tables,
+views, synonyms, procedures, functions, packages, sequences, and types. As a
+result of this call, the describe handle is populated with the object-specific
+attributes which can be obtained through an OCIAttrGet() call.
+An OCIParamGet() on the describe handle returns a parameter descriptor for a
+specified position. Parameter positions begin with 1. Calling OCIAttrGet() on
+the parameter descriptor returns the specific attributes of a stored procedure
+or function parameter or a table column descriptor as the case may be.
+These subsequent calls do not need an extra round trip to the server because
+the entire schema object description cached on the client side by
+OCIDescribeAny(). Calling OCIAttrGet() on the describe handle can also return
+the total number of positions.
+See the section "Describing" on page 2-33 for more information about describe
+operations.
+Parameters
+TO BE UPDATED
+svchp (IN/OUT) - a service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+objptr (IN) - the name of the object (a null-terminated string) to be
+described. Only procedure or function names are valid when connected to an
+Oracle7 Server.
+objptr_len (IN) - the length of the string. Must be non-zero.
+objptr_typ (IN) - Must be OCI_OTYPE_NAME, OCI_OTYPE_REF, or OCI_OTYPE_PTR.
+info_level (IN) - reserved for future extensions. Pass OCI_DEFAULT.
+objtype (IN/OUT) - object type.
+dschp (IN/OUT) - a describe handle that is populated with describe
+information about the object after the call.
+Related Functions
+OCIAttrGet()
+
+
+
+OCIEnvCreate()
+Name
+OCI ENVironment CREATE
+Purpose
+This function creates and initializes an environment for the rest of
+the OCI functions to work under. This call is a replacement for both
+the OCIInitialize and OCIEnvInit calls.
+Syntax
+sword OCIEnvCreate ( OCIEnv **envhpp,
+ ub4 mode,
+ const void *ctxp,
+ const void *(*malocfp)
+ (void *ctxp,
+ size_t size),
+ const void *(*ralocfp)
+ (void *ctxp,
+ void *memptr,
+ size_t newsize),
+ const void (*mfreefp)
+ ( void *ctxp,
+ void *memptr))
+ size_t xtramemsz,
+ void **usrmempp );
+
+Comments
+This call creates an environment for all the OCI calls using the modes
+specified by the user. This call can be used instead of the two calls
+OCIInitialize and OCIEnvInit. This function returns an environment handle
+which is then used by the remaining OCI functions. There can be multiple
+environments in OCI each with its own environment modes. This function
+also performs any process level initialization if required by any mode.
+For example if the user wants to initialize an environment as OCI_THREADED,
+then all libraries that are used by OCI are also initialized in the
+threaded mode.
+
+This call should be invoked before anny other OCI call and should be used
+instead of the OCIInitialize and OCIEnvInit calls. This is the recommended
+call, although OCIInitialize and OCIEnvInit calls will still be supported
+for backward compatibility.
+
+envpp (OUT) - a pointer to a handle to the environment.
+mode (IN) - specifies initialization of the mode. The valid modes are:
+OCI_DEFAULT - default mode.
+OCI_THREADED - threaded environment. In this mode, internal data
+structures are protected from concurrent accesses by multiple threads.
+OCI_OBJECT - will use navigational object interface.
+ctxp (IN) - user defined context for the memory call back routines.
+malocfp (IN) - user-defined memory allocation function. If mode is
+OCI_THREADED, this memory allocation routine must be thread safe.
+ctxp - context pointer for the user-defined memory allocation function.
+size - size of memory to be allocated by the user-defined memory
+allocation function
+ralocfp (IN) - user-defined memory re-allocation function. If mode is
+OCI_THREADED, this memory allocation routine must be thread safe.
+ctxp - context pointer for the user-defined memory reallocation
+function.
+memp - pointer to memory block
+newsize - new size of memory to be allocated
+mfreefp (IN) - user-defined memory free function. If mode is
+OCI_THREADED, this memory free routine must be thread safe.
+ctxp - context pointer for the user-defined memory free function.
+memptr - pointer to memory to be freed
+xtramemsz (IN) - specifies the amount of user memory to be allocated.
+usrmempp (OUT) - returns a pointer to the user memory of size xtramemsz
+allocated by the call for the user.
+
+Example
+
+Related Functions
+OCIInitialize, OCIEnvInit
+
+OCIEnvNlsCreate()
+Name
+OCI ENVironment CREATE with NLS info
+Purpose
+This function does almost everything OCIEnvCreate does, plus enabling setting
+of charset and ncharset programmatically, except OCI_UTF16 mode.
+Syntax
+sword OCIEnvNlsCreate(OCIEnv **envhpp,
+ ub4 mode,
+ void *ctxp,
+ void *(*malocfp)
+ (void *ctxp,
+ size_t size),
+ void *(*ralocfp)
+ (void *ctxp,
+ void *memptr,
+ size_t newsize),
+ void (*mfreefp)
+ (void *ctxp,
+ void *memptr),
+ size_t xtramemsz,
+ void **usrmempp,
+ ub2 charset,
+ ub2 ncharset)
+Comments
+The charset and ncharset must be both zero or non-zero.
+The parameters have the same meaning as the ones in OCIEnvCreate().
+When charset or ncharset is non-zero, the corresponding character set will
+be used to replace the ones specified in NLS_LANG or NLS_NCHAR. Moreover,
+OCI_UTF16ID is allowed to be set as charset and ncharset.
+On the other hand, OCI_UTF16 mode is deprecated with this function.
+Applications can achieve the same effects by setting
+both charset and ncharset as OCI_UTF16ID.
+
+
+OCIEnvInit()
+Name
+OCI INITialize environment
+Purpose
+This call initializes the OCI environment handle.
+Syntax
+sword OCIEnvInit ( OCIEnv **envp,
+ ub4 mode,
+ size_t xtramemsz,
+ void **usrmempp );
+Comments
+Initializes the OCI environment handle. No changes are done on an initialized
+handle. If OCI_ERROR or OCI_SUCCESS_WITH_INFO is returned, the
+environment handle can be used to obtain ORACLE specific errors and
+diagnostics.
+This call is processed locally, without a server round-trip.
+Parameters
+envpp (OUT) - a pointer to a handle to the environment.
+mode (IN) - specifies initialization of an environment mode. The only valid
+mode is OCI_DEFAULT for default mode
+xtramemsz (IN) - specifies the amount of user memory to be allocated.
+usrmempp (OUT) - returns a pointer to the user memory of size xtramemsz
+allocated by the call for the user.
+Example
+See the description of OCISessionBegin() on page 13-84 for an example showing
+the use of OCIEnvInit().
+Related Functions
+
+
+
+
+OCIErrorGet()
+Name
+OCI Get Diagnostic Record
+Purpose
+Returns an error message in the buffer provided and an ORACLE error.
+Syntax
+sword OCIErrorGet ( void *hndlp,
+ ub4 recordno,
+ OraText *sqlstate,
+ ub4 *errcodep,
+ OraText *bufp,
+ ub4 bufsiz,
+ ub4 type );
+Comments
+Returns an error message in the buffer provided and an ORACLE error.
+Currently does not support SQL state. This call can be called a multiple
+number of times if there are more than one diagnostic record for an error.
+The error handle is originally allocated with a call to OCIHandleAlloc().
+Parameters
+hndlp (IN) - the error handle, in most cases, or the environment handle (for
+errors on OCIEnvInit(), OCIHandleAlloc()).
+recordno (IN) - indicates the status record from which the application seeks
+info. Starts from 1.
+sqlstate (OUT) - Not supported in Version 8.0.
+errcodep (OUT) - an ORACLE Error is returned.
+bufp (OUT) - the error message text is returned.
+bufsiz (IN) - the size of the buffer provide to get the error message.
+type (IN) - the type of the handle.
+Related Functions
+OCIHandleAlloc()
+
+OCIExtractInit
+Name
+OCI Extract Initialize
+Purpose
+This function initializes the parameter manager.
+Syntax
+sword OCIExtractInit(void *hndl, OCIError *err);
+Comments
+It must be called before calling any other parameter manager routine. The NLS
+information is stored inside the parameter manager context and used in
+subsequent calls to OCIExtract routines.
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+Parameters
+hndl (IN/OUT) - The OCI environment or session handle.
+err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+ err and this function returns OCI_ERROR. Diagnostic information
+ can be obtained by calling OCIErrorGet().
+Related Functions
+OCIExtractTerm()
+
+OCIExtractTerm
+Name
+OCI Extract Terminate
+Purpose
+This function releases all dynamically allocated storage and may perform
+other internal bookkeeping functions.
+Syntax
+sword OCIExtractTerm(void *hndl, OCIError *err);
+Comments
+It must be called when the parameter manager is no longer being used.
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+Parameters
+hndl (IN/OUT) - The OCI environment or session handle.
+err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+ err and this function returns OCI_ERROR. Diagnostic information
+ can be obtained by calling OCIErrorGet().
+Related Functions
+OCIExtractInit()
+
+OCIExtractReset
+Name
+OCI Extract Reset
+Purpose
+The memory currently used for parameter storage, key definition storage, and
+parameter value lists is freed and the structure is reinitialized.
+Syntax
+sword OCIExtractReset(void *hndl, OCIError *err);
+Comments
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+Parameters
+hndl (IN/OUT) - The OCI environment or session handle.
+err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+ err and this function returns OCI_ERROR. Diagnostic information
+ can be obtained by calling OCIErrorGet().
+Related Functions
+
+OCIExtractSetNumKeys
+Name
+OCI Extract Set Number of Keys
+Purpose
+Informs the parameter manager of the number of keys that will be registered.
+Syntax
+sword OCIExtractSetNumKeys(void *hndl, OCIError *err, uword numkeys);
+Comments
+This routine must be called prior to the first call of OCIExtractSetKey().
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+Parameters
+hndl (IN/OUT) - The OCI environment or session handle.
+err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+ err and this function returns OCI_ERROR. Diagnostic information
+ can be obtained by calling OCIErrorGet().
+numkeys (IN) - The number of keys that will be registered with
+ OCIExtractSetKey().
+Related Functions
+OCIExtractSetKey()
+
+OCIExtractSetKey
+Name
+OCI Extract Set Key definition
+Purpose
+Registers information about a key with the parameter manager.
+Syntax
+sword OCIExtractSetKey(void *hndl, OCIError *err, const OraText *name,
+ ub1 type, ub4 flag, const void *defval,
+ const sb4 *intrange, const OraText *const *strlist);
+Comments
+This routine must be called after calling OCIExtractSetKey() and before
+calling OCIExtractFromFile() or OCIExtractFromStr().
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+Parameters
+hndl (IN/OUT) - The OCI environment or session handle.
+err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+ err and this function returns OCI_ERROR. Diagnostic information
+ can be obtained by calling OCIErrorGet().
+name (IN) - The name of the key.
+type (IN) - The type of the key (OCI_EXTRACT_TYPE_INTEGER,
+ OCI_EXTRACT_TYPE_OCINUM, OCI_EXTRACT_TYPE_STRING, or
+ OCI_EXTRACT_TYPE_BOOLEAN).
+flag (IN) - Set to OCI_EXTRACT_MULTIPLE if the key can take multiple values
+ or 0 otherwise.
+defval (IN) - Set to the default value for the key. May be NULL if there is
+ no default. A string default must be a (text*) type, an
+ integer default must be an (sb4*) type, and a boolean default
+ must be a (ub1*) type.
+intrange (IN) - Starting and ending values for the allowable range of integer
+ values. May be NULL if the key is not an integer type or if
+ all integer values are acceptable.
+strlist (IN) - List of all acceptable text strings for the key. May be NULL
+ if the key is not a string type or if all text values are
+ acceptable.
+Related Functions
+OCIExtractSetNumKeys()
+
+OCIExtractFromFile
+Name
+OCI Extract parameters From File
+Purpose
+The keys and their values in the given file are processed.
+Syntax
+sword OCIExtractFromFile(void *hndl, OCIError *err, ub4 flag,
+ OraText *filename);
+Comments
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+Parameters
+hndl (IN/OUT) - The OCI environment or session handle.
+err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+ err and this function returns OCI_ERROR. Diagnostic information
+ can be obtained by calling OCIErrorGet().
+flag (IN) - Zero or has one or more of the following bits set:
+ OCI_EXTRACT_CASE_SENSITIVE, OCI_EXTRACT_UNIQUE_ABBREVS, or
+ OCI_EXTRACT_APPEND_VALUES.
+filename (IN) - Null-terminated filename string.
+Related Functions
+
+OCIExtractFromStr
+Name
+OCI Extract parameters From String
+Purpose
+The keys and their values in the given string are processed.
+Syntax
+sword OCIExtractFromStr(void *hndl, OCIError *err, ub4 flag, OraText *input);
+Comments
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+Parameters
+hndl (IN/OUT) - The OCI environment or session handle.
+err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+ err and this function returns OCI_ERROR. Diagnostic information
+ can be obtained by calling OCIErrorGet().
+flag (IN) - Zero or has one or more of the following bits set:
+ OCI_EXTRACT_CASE_SENSITIVE, OCI_EXTRACT_UNIQUE_ABBREVS, or
+ OCI_EXTRACT_APPEND_VALUES.
+input (IN) - Null-terminated input string.
+Related Functions
+
+OCIExtractToInt
+Name
+OCI Extract To Integer
+Purpose
+Gets the integer value for the specified key.
+Syntax
+sword OCIExtractToInt(void *hndl, OCIError *err, OraText *keyname,
+ uword valno, sb4 *retval);
+Comments
+The valno'th value (starting with 0) is returned.
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, OCI_NO_DATA, or OCI_ERROR.
+OCI_NO_DATA means that there is no valno'th value for this key.
+Parameters
+hndl (IN) - The OCI environment or session handle.
+err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+ err and this function returns OCI_ERROR. Diagnostic information
+ can be obtained by calling OCIErrorGet().
+keyname (IN) - Key name.
+valno (IN) - Which value to get for this key.
+retval (OUT) - The actual integer value.
+Related Functions
+
+OCIExtractToBool
+Name
+OCI Extract To Boolean
+Purpose
+Gets the boolean value for the specified key.
+Syntax
+sword OCIExtractToBool(void *hndl, OCIError *err, OraText *keyname,
+ uword valno, ub1 *retval);
+Comments
+The valno'th value (starting with 0) is returned.
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, OCI_NO_DATA, or OCI_ERROR.
+OCI_NO_DATA means that there is no valno'th value for this key.
+Parameters
+hndl (IN) - The OCI environment or session handle.
+err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+ err and this function returns OCI_ERROR. Diagnostic information
+ can be obtained by calling OCIErrorGet().
+keyname (IN) - Key name.
+valno (IN) - Which value to get for this key.
+retval (OUT) - The actual boolean value.
+Related Functions
+
+OCIExtractToStr
+Name
+OCI Extract To String
+Purpose
+Gets the string value for the specified key.
+Syntax
+sword OCIExtractToStr(void *hndl, OCIError *err, OraText *keyname,
+ uword valno, OraText *retval, uword buflen);
+Comments
+The valno'th value (starting with 0) is returned.
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, OCI_NO_DATA, or OCI_ERROR.
+OCI_NO_DATA means that there is no valno'th value for this key.
+Parameters
+hndl (IN) - The OCI environment or session handle.
+err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+ err and this function returns OCI_ERROR. Diagnostic information
+ can be obtained by calling OCIErrorGet().
+keyname (IN) - Key name.
+valno (IN) - Which value to get for this key.
+retval (OUT) - The actual null-terminated string value.
+buflen (IN) - The length of the buffer for retval.
+Related Functions
+
+Note: The following OCIExtract functions are unavailable in this release
+
+OCIExtractToOCINum
+Name
+OCI Extract To OCI Number
+Purpose
+Gets the OCINumber value for the specified key.
+Syntax
+sword OCIExtractToOCINum(void *hndl, OCIError *err, OraText *keyname,
+ uword valno, OCINumber *retval);
+Comments
+The valno'th value (starting with 0) is returned.
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, OCI_NO_DATA, or OCI_ERROR.
+OCI_NO_DATA means that there is no valno'th value for this key.
+Parameters
+hndl (IN) - The OCI environment or session handle.
+err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+ err and this function returns OCI_ERROR. Diagnostic information
+ can be obtained by calling OCIErrorGet().
+keyname (IN) - Key name.
+valno (IN) - Which value to get for this key.
+retval (OUT) - The actual OCINumber value.
+Related Functions
+
+OCIExtractToList
+Name
+OCI Extract To parameter List
+Purpose
+Generates a list of parameters from the parameter structures that are stored
+in memory.
+Syntax
+sword OCIExtractToList(void *hndl, OCIError *err, uword *numkeys);
+Comments
+Must be called before OCIExtractValues() is called.
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+Parameters
+hndl (IN) - The OCI environment or session handle.
+err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+ err and this function returns OCI_ERROR. Diagnostic information
+ can be obtained by calling OCIErrorGet().
+numkeys (OUT) - Number of distinct keys stored in memory.
+Related Functions
+OCIExtractFromList()
+
+OCIExtractFromList
+Name
+OCI Extract From parameter List
+Purpose
+Generates a list of values for the a parameter in the parameter list.
+Syntax
+sword OCIExtractFromList(void *hndl, OCIError *err, uword index,
+ OraText *name, ub1 *type, uword *numvals,
+ void ***values);
+Comments
+Parameters are specified by an index. OCIExtractToList() must be called prior
+to calling this routine to generate the parameter list from the parameter
+structures that are stored in memory.
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+Parameters
+hndl (IN) - The OCI environment or session handle.
+err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+ err and this function returns OCI_ERROR. Diagnostic information
+ can be obtained by calling OCIErrorGet().
+name (OUT) - Name of the key for the current parameter.
+type (OUT) - Type of the current parameter (OCI_EXTRACT_TYPE_STRING,
+ OCI_EXTRACT_TYPE_INTEGER, OCI_EXTRACT_TYPE_OCINUM, or
+ OCI_EXTRACT_TYPE_BOOLEAN)
+numvals (OUT) - Number of values for this parameter.
+values (OUT) - The values for this parameter.
+Related Functions
+OCIExtractToList()
+
+
+************************ OCIFileClose() ***********************************
+
+Name
+ OCIFileClose - Oracle Call Interface FILE i/o CLOSE
+
+Purpose
+ Close a previously opened file.
+
+Syntax
+ sword OCIFileClose ( void *hndl,
+ OCIError *err,
+ OCIFileObject *filep )
+
+Comments
+ This function will close a previously opened file. If the function succeeds
+ then OCI_SUCCESS will be returned, else OCI_ERROR.
+
+Parameters
+ hndl (IN) - the OCI environment or session handle.
+ err (OUT) - the OCI error handle
+ filep (IN) - the OCIFile file object
+
+Related Functions
+ OCIFileOpen.
+
+
+
+********************* OCIFileExists() **************************************
+
+Name
+ OCIFileExists - Oracle Call Interface FILE i/o EXIST
+
+Purpose
+ Check to see if the file exists.
+
+Syntax
+ sword OCIFileExists ( void *hndl,
+ OCIError *err,
+ OraText *filename,
+ OraText *path,
+ ub1 *flag )
+
+Comments
+ This function will set the flag to TRUE if the file exists else it will
+ be set to FALSE.
+ The function will return OCI_ERROR if any error is encountered, else
+ it will return OCI_ERROR.
+
+Parameters
+ hndl(IN) - OCI environment or session handle
+ err(OUT) - OCI error handle
+ filename(IN) - filename
+ path(IN) - path of the file
+ flag(OUT) - whether the file exists or not
+
+Related Functions.
+ None.
+
+
+ **************************** OCIFileFlush() ******************************
+
+
+Name
+ OCIFileFlush - Oracle Call Interface File i/o FLUSH
+
+Purpose
+ Flush the buffers associated with the file to the disk.
+
+Syntax
+ sword OCIFileFlush ( void *hndl,
+ OCIError *err,
+ OCIFileObject *filep )
+
+Comments
+ The function will return OCI_ERROR if any error is encountered, else
+ it will return OCI_ERROR.
+
+Parameters
+ hndl (IN) - the OCI environment or session handle.
+ err (OUT) - the OCI error handle
+ filep (IN) - the OCIFile file object
+
+Related Functions
+ OCIFileOpen, OCIFileWrite
+
+
+
+ *************************** OCIFileGetLength() ****************************
+
+Name
+ OCIFileGetLength - Oracle Call Interface FILE i/o GET file LENGTH
+
+Purpose
+ Get the length of a file.
+
+Syntax
+ OCIFileGetLength(void *hndl,
+ OCIError *err,
+ OraText *filename,
+ OraText *path,
+ ubig_ora *lenp )
+
+Comments
+ The length of the file will be returned in lenp.
+ The function will return OCI_ERROR if any error is encountered, else
+ it will return OCI_ERROR.
+
+Parameters
+ hndl (IN) - the OCI environment or session handle.
+ err (OUT) - the OCI error handle. If there is an error, it is recorded
+ in err and this function returns OCI_ERROR. Diagnostic information can be
+ obtained by calling OCIErrorGet().
+ filename (IN) - file name.
+ path (IN) - path of the file.
+ lenp (OUT) - On output, it is the length of the file in bytes.
+ is the number of bytes in the file.
+
+Related Functions
+ None.
+
+
+
+******************************** OCIFileInit() *****************************
+
+Name
+ OCIFileInit - Oracle Call Interface FILE i/o INITialize
+
+Purpose
+ Initialize the OCI File I/O package and create the OCIFile context.
+
+Syntax
+ sword OCIFileInit ( void *hndl,
+ OCIError *err)
+
+Comments
+ This function should be called before any of the OCIFile functions are
+ used.
+ The function will return OCI_ERROR if any error is encountered, else
+ it will return OCI_ERROR.
+
+Parameters
+ hndl(IN) - OCI environment or session handle.
+ err(OUT) - OCI error structure.
+
+Related Functions
+ OCIFileTerm
+
+
+
+********************************* OCIFileOpen() *****************************
+
+Name
+ OCIFileOpen - Oracle Call Interface File i/o OPEN
+
+Purpose
+ Open a file.
+
+Syntax
+ sword OCIFileOpen ( void *hndl,
+ OCIError *err,
+ OCIFileObject **filep,
+ OraText *filename,
+ OraText *path,
+ ub4 mode,
+ ub4 create,
+ ub4 type )
+
+Comments
+ OCIFileOpen returns a handle to the open file in filep if the file is
+ successfully opened.
+ If one wants to use the standard file objects (stdin, stdout & stderr)
+ then OCIFileOpen whould be called with the type filed containing the
+ appropriate type (see the parameter type). If any of the standard files
+ are specified then filename, path, mode and create are ignored.
+ The function will return OCI_ERROR if any error is encountered, else
+ it will return OCI_ERROR.
+
+Parameters
+ hndl (OUT) - the OCI environment or session handle.
+ err (OUT) - the OCI error handle. If there is an error, it is recorded
+ in err and this function returns OCI_ERROR. Diagnostic information can be
+ obtained by calling OCIErrorGet().
+ filep (OUT) - the file object to be returned.
+ filename (IN) - file name (NULL terminated string).
+ path (IN) - path of the file (NULL terminated string).
+ mode - mode in which to open the file (valid modes are OCI_FILE_READONLY,
+ OCI_FILE_WRITEONLY, OCI_FILE_READ_WRITE).
+ create - should the file be created if it does not exist. Valid values
+ are:
+ OCI_FILE_TRUNCATE - create a file regardless of whether or not it exists.
+ If the file already exists overwrite it.
+ OCI_FILE_EXIST - open it if it exists, else fail.
+ OCI_FILE_EXCL - fail if the file exists, else create.
+ OCI_FILE_CREATE - open the file if it exists, and create it if it doesn't.
+ OCI_FILE_APPEND - set the file pointer to the end of the file prior to
+ writing(this flag can be OR'ed with OCI_FILE_EXIST or
+ OCI_FILE_CREATE).
+type - file type. Valid values are OCI_FILE_TEXT, OCI_FILE_BIN,
+ OCI_FILE_STDIN, OCI_FILE_STDOUT and OCI_FILE_STDERR.
+ If any of the standard files are specified then filename, path, mode
+ and create are ignored.
+
+Related Functions.
+ OCIFileClose
+
+
+
+************************** OCIFileRead() ************************************
+
+Name
+ OCIFileRead - Oracle Call Interface FILE i/o READ
+
+Purpose
+ Read from a file into a buffer.
+
+Syntax
+ sword OCIFileRead ( void *hndl,
+ OCIError *err,
+ OCIFileObject *filep,
+ void *bufp,
+ ub4 bufl,
+ ub4 *bytesread )
+
+Comments
+ Upto bufl bytes from the file will be read into bufp. The user should
+ allocate memory for the buffer.
+ The number of bytes read would be in bytesread.
+ The function will return OCI_ERROR if any error is encountered, else
+ it will return OCI_ERROR.
+
+Parameters
+ hndl (IN) - the OCI environment or session handle.
+ err (OUT) - the OCI error handle. If there is an error, it is recorded
+ in err and this function returns OCI_ERROR. Diagnostic information can be
+ obtained by calling OCIErrorGet().
+ filep (IN/OUT) - a File Object that uniquely references the file.
+ bufp (IN) - the pointer to a buffer into which the data will be read. The
+ length of the allocated memory is assumed to be bufl.
+ bufl - the length of the buffer in bytes.
+ bytesread (OUT) - the number of bytes read.
+
+Related Functions
+ OCIFileOpen, OCIFileSeek, OCIFileWrite
+
+
+
+****************************** OCIFileSeek() ******************************
+
+Name
+ OCIFileSeek - Oracle Call Interface FILE i/o SEEK
+
+Purpose
+ Perfom a seek to a byte position.
+
+Syntax
+ sword OCIFileSeek ( void *hndl,
+ OCIError *err,
+ OCIFileObject *filep,
+ uword origin,
+ ubig_ora offset,
+ sb1 dir)
+
+Comments
+ The function will return OCI_ERROR if any error is encountered, else
+ it will return OCI_ERROR.
+
+Parameters
+ hndl (IN) - the OCI environment or session handle.
+ err (OUT) - the OCI error handle. If there is an error, it is recorded
+ in err and this function returns OCI_ERROR. Diagnostic information can be
+ obtained by calling OCIErrorGet().
+ filep (IN/OUT) - a file handle that uniquely references the file.
+ origin - The starting point we want to seek from. NOTE: The starting
+ point may be OCI_FILE_SEEK_BEGINNING (beginning), OCI_FILE_SEEK_CURRENT
+ (current position), or OCI_FILE_SEEK_END (end of file).
+ offset - The number of bytes from the origin we want to start reading from.
+ dir - The direction we want to go from the origin. NOTE: The direction
+ can be either OCI_FILE_FORWARD or OCI_FILE_BACKWARD.
+
+Related Function
+ OCIFileOpen, OCIFileRead, OCIFileWrite
+
+
+
+*************************** OCIFileTerm() **********************************
+
+Name
+ OCIFileTerm - Oracle Call Interface FILE i/o TERMinate
+
+Purpose
+ Terminate the OCI File I/O package and destroy the OCI File context.
+
+Syntax
+ sword OCIFileTerm ( void *hndl,
+ OCIError *err )
+
+Comments
+ After this function has been called no OCIFile function should be used.
+ The function will return OCI_ERROR if any error is encountered, else
+ it will return OCI_ERROR.
+
+Parameters
+ hndl(IN) - OCI environment or session handle.
+ err(OUT) - OCI error structure.
+
+Related Functions
+ OCIFileInit
+
+
+********************************* OCIFileWrite() ****************************
+
+Name
+ OCIFileWrite - Oracle Call Interface FILE i/o WRITE
+
+Purpose
+ Write data from buffer into a file.
+
+Syntax
+ sword OCIFileWrite ( void *hndl,
+ OCIError *err,
+ OCIFileObject *filep,
+ void *bufp,
+ ub4 buflen
+ ub4 *byteswritten )
+
+Comments
+ The number of bytes written will be in *byteswritten.
+ The function will return OCI_ERROR if any error is encountered, else
+ it will return OCI_ERROR.
+
+Parameters
+ hndl (IN) - the OCI environment or session handle.
+ err (OUT) - the OCI error handle. If there is an error, it is recorded
+ in err and this function returns OCI_ERROR. Diagnostic information can be
+ obtained by calling OCIErrorGet().
+ filep (IN/OUT) - a file handle that uniquely references the file.
+ bufp (IN) - the pointer to a buffer from which the data will be written.
+ The length of the allocated memory is assumed to be the value passed
+ in bufl.
+ bufl - the length of the buffer in bytes.
+ byteswritten (OUT) - the number of bytes written.
+
+Related Functions
+ OCIFileOpen, OCIFileSeek, OCIFileRead
+
+
+
+
+
+OCIHandleAlloc()
+Name
+OCI Get HaNDLe
+Purpose
+This call returns a pointer to an allocated and initialized handle.
+Syntax
+sword OCIHandleAlloc ( const void *parenth,
+ void **hndlpp,
+ ub4 type,
+ size_t xtramem_sz,
+ void **usrmempp);
+Comments
+Returns a pointer to an allocated and initialized structure, corresponding to
+the type specified in type. A non-NULL handle is returned on success. Bind
+handle and define handles are allocated with respect to a statement handle. All
+other handles are allocated with respect to an environment handle which is
+passed in as a parent handle.
+No diagnostics are available on error. This call returns OCI_SUCCESS if
+successful, or OCI_INVALID_HANDLE if an out-of-memory error occurs.
+Handles must be allocated using OCIHandleAlloc() before they can be passed
+into an OCI call.
+Parameters
+parenth (IN) - an environment or a statement handle.
+hndlpp (OUT) - returns a handle to a handle type.
+type (IN) - specifies the type of handle to be allocated. The specific types
+are:
+OCI_HTYPE_ERROR - specifies generation of an error report handle of
+C type OCIError
+OCI_HTYPE_SVCCTX - specifies generation of a service context handle
+of C type OCISvcCtx
+OCI_HTYPE_STMT - specifies generation of a statement (application
+request) handle of C type OCIStmt
+OCI_HTYPE_BIND - specifies generation of a bind information handle
+of C type OCIBind
+OCI_HTYPE_DEFINE - specifies generation of a column definition
+handle of C type OCIDefine
+OCI_HTYPE_DESCRIBE - specifies generation of a select list
+description handle of C type OCIDesc
+OCI_HTYPE_SERVER - specifies generation of a server context handle
+of C type OCIServer
+OCI_HTYPE_SESSION - specifies generation of an authentication
+context handle of C type OCISession
+OCI_HTYPE_TRANS - specifies generation of a transaction context
+handle of C type OCITrans
+OCI_HTYPE_COMPLEXOBJECT - specifies generation of a complex
+object retrieval handle of C type OCIComplexObject
+OCI_HTYPE_SECURITY - specifies generation of a security handle of C
+type OCISecurity
+xtramem_sz (IN) - specifies an amount of user memory to be allocated.
+usrmempp (OUT) - returns a pointer to the user memory of size xtramemsz
+allocated by the call for the user.
+Related Functions
+OCIHandleFree()
+
+
+
+OCIHandleFree()
+Name
+OCI Free HaNDLe
+Purpose
+This call explicitly deallocates a handle.
+Syntax
+sword OCIHandleFree ( void *hndlp,
+ ub4 type);
+Comments
+This call frees up storage associated with a handle, corresponding to the type
+specified in the type parameter.
+This call returns either OCI_SUCCESS or OCI_INVALID_HANDLE.
+All handles must be explicitly deallocated. OCI will not deallocate a child
+handle if the parent is deallocated.
+Parameters
+hndlp (IN) - an opaque pointer to some storage.
+type (IN) - specifies the type of storage to be allocated. The specific types
+are:
+OCI_HTYPE_ENV - an environment handle
+OCI_HTYPE_ERROR - an error report handle
+OCI_HTYPE_SVCCTX - a service context handle
+OCI_HTYPE_STMT - a statement (application request) handle
+OCI_HTYPE_BIND - a bind information handle
+OCI_HTYPE_DEFINE - a column definition handle
+OCI_HTYPE_DESCRIBE - a select list description handle
+OCI_HTYPE_SERVER - a server handle
+OCI_HTYPE_SESSION - a user authentication handle
+OCI_HTYPE_TRANS - a transaction handle
+OCI_HTYPE_COMPLEXOBJECT - a complex object retrieval handle
+OCI_HTYPE_SECURITY - a security handle
+Related Functions
+OCIHandleAlloc()
+
+
+
+
+OCIInitialize()
+Name
+OCI Process Initialize
+Purpose
+Initializes the OCI process environment.
+Syntax
+sword OCIInitialize ( ub4 mode,
+ const void *ctxp,
+ const void *(*malocfp)
+ ( void *ctxp,
+ size_t size ),
+ const void *(*ralocfp)
+ ( void *ctxp,
+ void *memp,
+ size_t newsize ),
+ const void (*mfreefp)
+ ( void *ctxp,
+ void *memptr ));
+Comments
+This call initializes the OCI process environment.
+OCIInitialize() must be invoked before any other OCI call.
+Parameters
+mode (IN) - specifies initialization of the mode. The valid modes are:
+OCI_DEFAULT - default mode.
+OCI_THREADED - threaded environment. In this mode, internal data
+structures are protected from concurrent accesses by multiple threads.
+OCI_OBJECT - will use navigational object interface.
+ctxp (IN) - user defined context for the memory call back routines.
+malocfp (IN) - user-defined memory allocation function. If mode is
+OCI_THREADED, this memory allocation routine must be thread safe.
+ctxp - context pointer for the user-defined memory allocation function.
+size - size of memory to be allocated by the user-defined memory
+allocation function
+ralocfp (IN) - user-defined memory re-allocation function. If mode is
+OCI_THREADED, this memory allocation routine must be thread safe.
+ctxp - context pointer for the user-defined memory reallocation
+function.
+memp - pointer to memory block
+newsize - new size of memory to be allocated
+mfreefp (IN) - user-defined memory free function. If mode is
+OCI_THREADED, this memory free routine must be thread safe.
+ctxp - context pointer for the user-defined memory free function.
+memptr - pointer to memory to be freed
+Example
+See the description of OCIStmtPrepare() on page 13-96 for an example showing
+the use of OCIInitialize().
+Related Functions
+
+-------------------------------OCITerminate------------------------------------
+
+OCITerminate()
+Name
+OCI process Terminate
+Purpose
+Do cleanup before process termination
+Syntax
+sword OCITerminate (ub4 mode);
+
+Comments
+This call performs OCI related clean up before the OCI process terminates.
+If the process is running in shared mode then the OCI process is disconnected
+from the shared memory subsystem.
+
+OCITerminate() should be the last OCI call in any process.
+
+Parameters
+mode (IN) - specifies different termination modes.
+
+OCI_DEFAULT - default mode.
+
+Example
+
+Related Functions
+OCIInitialize()
+
+------------------------ OCIAppCtxSet--------------------------------------
+Name
+OCI Application context Set
+Purpose
+Set an attribute and its value for a particular application context
+ namespace
+Syntax
+ (sword) OCIAppCtxSet((void *) sesshndl, (void *)nsptr,(ub4) nsptrlen,
+ (void *)attrptr, (ub4) attrptrlen, (void *)valueptr,
+ (ub4) valueptrlen, errhp, (ub4)mode);
+
+Comments
+Please note that the information set on the session handle is sent to the
+server during the next OCIStatementExecute or OCISessionBegin.
+
+This information is cleared from the session handle, once the information
+ has been sent over to the server,and should be setup again if needed.
+
+Parameters
+ sesshndl (IN/OUT) - Pointer to a session handle
+ nsptr (IN) - Pointer to namespace string
+ nsptrlen (IN) - length of the nsptr
+ attrptr (IN) - Pointer to attribute string
+ attrptrlen (IN) - length of the attrptr
+ valueptr (IN) - Pointer to value string
+ valueptrlen(IN) - length of the valueptr
+ errhp (OUT) - Error from the API
+ mode (IN) - mode of operation (OCI_DEFAULT)
+
+Returns
+ error if any
+Example
+
+Related Functions
+ OCIAppCtxClearAll
+
+
+------------------------ OCIAppCtxClearAll---------------------------------
+Name
+ OCI Application Context Clear all attributes in a namespace
+Purpose
+ To clear the values all attributes in a namespace
+Syntax
+ (sword) OCIAppCtxClearAll((void *) sesshndl, (void *)nsptr, (ub4) nsptrlen,
+ (OCIError *)errhp, (ub4)mode);
+
+Comments
+This will clean up the context information on the server side during the
+next piggy-back to the server.
+
+Parameters
+ sesshndl (IN/OUT) - Pointer to a session handle
+ nsptr (IN) - Pointer to namespace string where the values of all
+ attributes are cleared
+ nsptrlen (IN) - length of the nsptr
+ errhp (OUT) - Error from the API
+ mode (IN) - mode of operation (OCI_DEFAULT)
+Example
+
+Returns
+ error if any
+
+Related Functions
+ OCIAppCtxSet
+---------------------- OCIIntervalAssign ---------------------------------
+sword OCIIntervalAssign(void *hndl, OCIError *err,
+ const OCIInterval *inpinter, OCIInterval *outinter );
+
+ DESCRIPTION
+ Copies one interval to another to create a replica
+ PARAMETERS
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ (IN) inpinter - Input Interval
+ (OUT) outinter - Output Interval
+ RETURNS
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_SUCCESS otherwise
+
+ ---------------------- OCIIntervalCheck ------------------------------------
+sword OCIIntervalCheck(void *hndl, OCIError *err, const OCIInterval *interval,
+ ub4 *valid );
+
+ DESCRIPTION
+ Checks the validity of an interval
+ PARAMETERS
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ (IN) interval - Interval to be checked
+ (OUT) valid - Zero if the interval is valid, else returns an Ored
+ combination of the following codes.
+
+ Macro name Bit number Error
+ ---------- ---------- -----
+ OCI_INTER_INVALID_DAY 0x1 Bad day
+ OCI_INTER_DAY_BELOW_VALID 0x2 Bad DAy Low/high bit (1=low)
+ OCI_INTER_INVALID_MONTH 0x4 Bad MOnth
+ OCI_INTER_MONTH_BELOW_VALID 0x8 Bad MOnth Low/high bit (1=low)
+ OCI_INTER_INVALID_YEAR 0x10 Bad YeaR
+ OCI_INTER_YEAR_BELOW_VALID 0x20 Bad YeaR Low/high bit (1=low)
+ OCI_INTER_INVALID_HOUR 0x40 Bad HouR
+ OCI_INTER_HOUR_BELOW_VALID 0x80 Bad HouR Low/high bit (1=low)
+ OCI_INTER_INVALID_MINUTE 0x100 Bad MiNute
+ OCI_INTER_MINUTE_BELOW_VALID 0x200 Bad MiNute Low/high bit(1=low)
+ OCI_INTER_INVALID_SECOND 0x400 Bad SeCond
+ OCI_INTER_SECOND_BELOW_VALID 0x800 bad second Low/high bit(1=low)
+ OCI_INTER_INVALID_FRACSEC 0x1000 Bad Fractional second
+ OCI_INTER_FRACSEC_BELOW_VALID 0x2000 Bad fractional second Low/High
+
+
+ RETURNS
+ OCI_SUCCESS if interval is okay
+ OCI_INVALID_HANDLE if 'err' is NULL.
+
+ ---------------------- OCIIntervalCompare -----------------------------------
+sword OCIIntervalCompare(void *hndl, OCIError *err, OCIInterval *inter1,
+ OCIInterval *inter2, sword *result );
+
+ DESCRIPTION
+ Compares two intervals, returns 0 if equal, -1 if inter1 < inter2,
+ 1 if inter1 > inter2
+ PARAMETERS
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ inter1 (IN) - Interval to be compared
+ inter2 (IN) - Interval to be compared
+ result (OUT) - comparison result, 0 if equal, -1 if inter1 < inter2,
+ 1 if inter1 > inter2
+
+ RETURNS
+ OCI_SUCCESS on success
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ the two input datetimes are not mutually comparable.
+
+---------------------- OCIIntervalDivide ------------------------------------
+sword OCIIntervalDivide(void *hndl, OCIError *err, OCIInterval *dividend,
+ OCINumber *divisor, OCIInterval *result );
+
+ DESCRIPTION
+ Divides an interval by an Oracle Number to produce an interval
+ PARAMETERS
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ dividend (IN) - Interval to be divided
+ divisor (IN) - Oracle Number dividing `dividend'
+ result (OUT) - resulting interval (dividend / divisor)
+ RETURNS
+ OCI_SUCCESS on success
+ OCI_INVALID_HANDLE if 'err' is NULL.
+
+ ---------------------- OCIIntervalFromNumber --------------------
+sword OCIIntervalFromNumber(void *hndl, OCIError *err,
+ OCIInterval *inter, OCINumber *number);
+ DESCRIPTION
+ Converts an interval to an Oracle Number
+ PARAMETERS
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ (OUT) interval - Interval to be converted
+ (IN) number - Oracle number result (in years for YEARMONTH interval
+ and in days for DAYSECOND)
+ RETURNS
+ OCI_SUCCESS on success
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR on error.
+ NOTES
+ Fractional portions of the date (for instance, minutes and seconds if
+ the unit chosen is hours) will be included in the Oracle number produced.
+ Excess precision will be truncated.
+
+ ---------------------- OCIIntervalFromText ---------------------------------
+sword OCIIntervalFromText( void *hndl, OCIError *err, const OraText *inpstr,
+ size_t str_len, OCIInterval *result );
+
+ DESCRIPTION
+ Given an interval string produce the interval represented by the string.
+ The type of the interval is the type of the 'result' descriptor.
+ PARAMETERS
+
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ (IN) inpstr - Input string
+ (IN) str_len - Length of input string
+ (OUT) result - Resultant interval
+ RETURNS
+ OCI_SUCCESS on success
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ there are too many fields in the literal string
+ the year is out of range (-4713 to 9999)
+ if the month is out of range (1 to 12)
+ if the day of month is out of range (1 to 28...31)
+ if hour is not in range (0 to 23)
+ if hour is not in range (0 to 11)
+ if minute is not in range (0 to 59)
+ if seconds in minute not in range (0 to 59)
+ if seconds in day not in range (0 to 86399)
+ if the interval is invalid
+
+
+ ---------------------- OCIIntervalGetDaySecond --------------------
+
+ DESCRIPTION
+ Gets values of day second interval
+ PARAMETERS
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ day (OUT) - number of days
+ hour (OUT) - number of hours
+ min (OUT) - number of mins
+ sec (OUT) - number of secs
+ fsec (OUT) - number of fractional seconds
+ result (IN) - resulting interval
+ RETURNS
+ OCI_SUCCESS on success
+ OCI_INVALID_HANDLE if 'err' is NULL.
+
+
+ ---------------------- OCIIntervalGetYearMonth --------------------
+
+ DESCRIPTION
+ Gets year month from an interval
+ PARAMETERS
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ year (OUT) - year value
+ month (OUT) - month value
+ result (IN) - resulting interval
+ RETURNS
+ OCI_SUCCESS on success
+ OCI_INVALID_HANDLE if 'err' is NULL.
+
+
+
+-------------------------- OCIIntervalAdd ------------------------------
+sword OCIIntervalAdd(void *hndl, OCIError *err, OCIInterval *addend1,
+ OCIInterval *addend2, OCIInterval *result );
+NAME OCIIntervalAdd - Adds two intervals
+PARAMETERS
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+addend1 (IN) - Interval to be added
+addend2 (IN) - Interval to be added
+result (OUT) - resulting interval (addend1 + addend2)
+DESCRIPTION
+ Adds two intervals to produce a resulting interval
+RETURNS
+ OCI_SUCCESS on success
+ OCI_ERROR if:
+ the two input intervals are not mutually comparable.
+ the resulting year would go above SB4MAXVAL
+ the resulting year would go below SB4MINVAL
+ OCI_INVALID_HANDLE if 'err' is NULL.
+NOTES
+ The two input intervals must be mutually comparable
+
+ ---------------------- OCIIntervalSubtract -------------------------------
+sword OCIIntervalSubtract(void *hndl, OCIError *err, OCIInterval *minuend,
+ OCIInterval *subtrahend, OCIInterval *result );
+NAME - OCIIntervalSubtract - subtracts two intervals
+PARAMETERS
+hndl (IN) - Session/Env handle.
+err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+minuend (IN) - interval to be subtracted from
+subtrahend (IN) - interval subtracted from minuend
+result (OUT) - resulting interval (minuend - subtrahend)
+DESCRIPTION
+ Subtracts two intervals and stores the result in an interval
+RETURNS
+ OCI_SUCCESS on success
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if:
+ the two input intervals are not mutually comparable.
+ the resulting leading field would go below SB4MINVAL
+ the resulting leading field would go above SB4MAXVAL
+
+---------------------- OCIIntervalMultiply ---------------------------------
+sword OCIIntervalMultiply(void *hndl, OCIError *err, const OCIInterval *inter,
+ OCINumber *nfactor, OCIInterval *result );
+
+ DESCRIPTION
+ Multiplies an interval by an Oracle Number to produce an interval
+ PARAMETERS
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ inter (IN) - Interval to be multiplied
+ nfactor (IN) - Oracle Number to be multiplied
+ result (OUT) - resulting interval (ifactor * nfactor)
+ RETURNS
+ OCI_SUCCESS on success
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if:
+ the resulting year would go above SB4MAXVAL
+ the resulting year would go below SB4MINVAL
+
+
+ ---------------------- OCIIntervalSetDaySecond --------------------
+
+ DESCRIPTION
+ Sets day second interval
+ PARAMETERS
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ day (IN) - number of days
+ hour (IN) - number of hours
+ min (IN) - number of mins
+ sec (IN) - number of secs
+ fsec (IN) - number of fractional seconds
+ result (OUT) - resulting interval
+ RETURNS
+ OCI_SUCCESS on success
+ OCI_INVALID_HANDLE if 'err' is NULL.
+
+
+ ---------------------- OCIIntervalSetYearMonth --------------------
+
+ DESCRIPTION
+ Sets year month interval
+ PARAMETERS
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ year (IN) - year value
+ month (IN) - month value
+ result (OUT) - resulting interval
+ RETURNS
+ OCI_SUCCESS on success
+ OCI_INVALID_HANDLE if 'err' is NULL.
+
+
+----------------------- OCIIntervalToNumber ---------------------------------
+sword OCIIntervalToNumber(void *hndl, OCIError *err, const OCIInterval *inter,
+ OCINumber *number);
+
+ DESCRIPTION
+ Converts an interval to an Oracle Number
+ PARAMETERS
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ (IN) inter - Interval to be converted
+ (OUT) number - Oracle number result (in years for YEARMONTH interval
+ and in days for DAYSECOND)
+ RETURNS
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_SUCCESS on success
+ NOTES
+ Fractional portions of the date (for instance, minutes and seconds if
+ the unit chosen is hours) will be included in the Oracle number produced.
+ Excess precision will be truncated.
+
+------------------------------- OCIIntervalToText -------------------------
+sword OCIIntervalToText( void *hndl, OCIError *err, const OCIInterval *inter,
+ ub1 lfprec, ub1 fsprec, OraText *buffer,
+ size_t buflen, size_t *resultlen );
+
+ DESCRIPTION
+ Given an interval, produces a string representing the interval.
+ PARAMETERS
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ (IN) inter - Interval to be converted
+ (IN) lfprec - Leading field precision. Number of digits used to
+ represent the leading field.
+ (IN) fsprec - Fractional second precision of the interval. Number of
+ digits used to represent the fractional seconds.
+ (OUT) buffer - buffer to hold result
+ (IN) buflen - length of above buffer
+ (OUT) resultlen - length of result placed into buffer
+
+ RETURNS
+ OCI_SUCCESS on success
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR
+ if the buffer is not large enough to hold the result
+ NOTES
+ The interval literal will be output as `year' or `[year-]month' for
+ YEAR-MONTH intervals and as `seconds' or `minutes[:seconds]' or
+ `hours[:minutes[:seconds]]' or `days[ hours[:minutes[:seconds]]]' for
+ DAY-TIME intervals (where optional fields are surrounded by brackets).
+
+ ---------------------- OCIIntervalFromTZ --------------------
+sword OCIIntervalFromTZ(void *hndl, OCIError *err, const oratext *inpstring,
+ size_t str_len, OCIInterval *result);
+
+ DESCRIPTION
+ Retuns an OCI_DTYPE_INTERVAL_DS OCIInterval with the region id (if
+ the region is specified in the input string) set and the current
+ absolute offset or an absolut offset with the region id set to 0.
+ PARAMETERS
+ hndl (IN) - Session/Env handle.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ inpstring (IN) - pointer to the input string
+ str_len (IN) - inpstring length
+ result - Output Interval
+ RETURNS
+ OCI_SUCCESS on success
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR on error
+ Bad interval type
+ Timezone errors
+ NOTES
+ The input string must be of the form [+/-]TZH:TZM or 'TZR [TZD]'
+
+ ----------------------- OCIKerbAttrSet ---------------------
+sword OCIKerbAttrSet(OCISession *trgthndlp, ub4 auth_mode,
+ ub1 *ftgt_ticket, ub4 ftgt_ticket_len,
+ ub1 *ftgt_sesskey, ub4 ftgt_sesskey_len,
+ ub2 ftgt_keytype, ub4 ftgt_ticket_flags,
+ sb4 ftgt_auth_time, sb4 ftgt_start_time,
+ sb4 ftgt_end_time, sb4 ftgt_renew_time,
+ oratext *ftgt_principal, ub4 ftgt_principal_len,
+ oratext *ftgt_realm, ub4 ftgt_realm_len,
+ OCIError *errhp);
+
+ DESCRIPTION
+ This call sets the attributes required for Kerberos authentication
+ on the user handle.
+
+ PARAMETERS
+ trgthndlp (IN) - The pointer to a user handle.
+ auth_mode (IN) - Indicates what type of Kerberos credentials should
+ be set. Options are:
+
+ OCI_KERBCRED_PROXY
+ - Set Kerberos credentials for use with
+ proxy authentication.
+ OCI_KERBCRED_CLIENT_IDENTIFIER
+ - Set Kerberos credentials for use
+ with secure client identifier.
+
+ ftgt_ticket (IN) - Forwardable Ticket Granting Ticket (FTGT).
+ ftgt_ticket_len (IN) - Length of FTGT.
+ ftgt_sesskey(IN) - Session Key associated with FTGT.
+ ftgt_sesskey_len (IN) - Length of session key.
+ ftgt_keytype (IN) - Type of encryption key used to encrypt FTGT.
+ ftgt_ticket_flags (IN) - Flags associated with encryption of FTGT.
+ ftgt_auth_time (IN) - Authentication time compatible with that in FTGT.
+ ftgt_start_time (IN) - Start time compatible with that indicated in FTGT.
+ ftgt_end_time (IN) - End time compatible with that indicated in FTGT.
+ ftgt_renew_time (IN) - Renew time compatible with that indicated in FTGT.
+ ftgt_principal (IN) - Client principal name from FTGT.
+ ftgt_principal_len (IN) - Length of client principal name.
+ ftgt_realm (IN) - Client realm name from FTGT.
+ ftgt_realm_len (IN) - Client realm name length.
+ errhp (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ RETURNS
+ OCI_SUCCESS on success
+ OCI_ERROR on error
+ NOTES
+
+OCILdaToSvcCtx()
+Name
+OCI toggle version 7 Lda_Def to SerVice context handle
+Purpose
+Converts a V7 Lda_Def to a V8 service context handle.
+Syntax
+sword OCILdaToSvcCtx ( OCISvcCtx **svchpp,
+ OCIError *errhp,
+ Lda_Def *ldap );
+Comments
+Converts a V7 Lda_Def to a V8 service context handle. The action of this call
+can be reversed by passing the resulting service context handle to the
+OCISvcCtxToLda() function.
+Parameters
+svchpp (IN/OUT) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+ldap (IN/OUT) - the V7 logon data area returned by OCISvcCtxToLda() from
+this service context.
+Related Functions
+OCISvcCtxToLda()
+
+
+
+
+OCILobAppend()
+
+Name
+OCI Lob APpend
+
+Purpose
+Appends a LOB value at the end of another LOB.
+
+Syntax
+sword OCILobAppend ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *dst_locp,
+ OCILobLocator *src_locp );
+Comments
+Appends a LOB value at the end of LOB. The data is
+copied from the source to the destination at the end of the destination. The
+source and the destination must already exist. The destination LOB is
+extended to accommodate the newly written data.
+
+It is an error to extend the destination LOB beyond the maximum length
+allowed or to try to copy from a NULL LOB.
+
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+dst_locp (IN/OUT) - a locator uniquely referencing the destination LOB.
+src_locp (IN/OUT) - a locator uniquely referencing the source LOB.
+
+Related Functions
+OCILobTrim()
+OCIErrorGet()
+OCILobWrite()
+OCILobCopy()
+
+
+
+OCILobAssign()
+
+Name
+OCI Lob ASsiGn
+
+Purpose
+Assigns one LOB/FILE locator to another.
+
+Syntax
+sword OCILobAssign ( OCIEnv *envhp,
+ OCIError *errhp,
+ const OCILobLocator *src_locp,
+ OCILobLocator **dst_locpp );
+
+Comments
+Assign source locator to destination locator. After the assignment, both
+locators refer to the same LOB data. For internal LOBs, the source locator's
+LOB data gets copied to the destination locator's LOB data only when the
+destination locator gets stored in the table. Therefore, issuing a flush of
+the object containing the destination locator will copy the LOB data. For
+FILEs only the locator that refers to the OS file is copied to the table. The
+OS file is not copied.
+Note: The only difference between this and OCILobLocatorAssign is that this
+takes an environment handle whereas OCILobLocatorAssign takes an OCI service
+handle
+
+Parameters
+envhp (IN/OUT) - OCI environment handle initialized in object mode.
+errhp (IN/OUT) - The OCI error handle. If there is an error, it is recorded
+in errhp and this function returns OCI_ERROR. Diagnostic information can be
+obtained by calling OCIErrorGet().
+src_locp (IN) - LOB locator to copy from.
+dst_locpp (IN/OUT) - LOB locator to copy to. The caller must allocate space
+for the OCILobLocator by calling OCIDescriptorAlloc().
+
+See also
+OCIErrorGet()
+OCILobIsEqual()
+OCILobLocatorIsInit()
+OCILobLocatorAssign()
+
+
+OCILobCharSetForm()
+
+Name
+OCI Lob Get Character Set Form
+
+Purpose
+Gets the LOB locator's character set fpr,, if any.
+
+Syntax
+sword OCILobCharSetForm ( OCIEnv *envhp,
+ OCIError *errhp,
+ const OCILobLocator *locp,
+ ub1 *csfrm );
+
+Comments
+Returns the character set form of the input LOB locator in the csfrm output
+parameter.
+
+Parameters
+envhp (IN/OUT) - OCI environment handle initialized in object mode.
+errhp (IN/OUT) - error handle. The OCI error handle. If there is an error, it
+is recorded in err and this function returns OCI_ERROR. Diagnostic
+information can be obtained by calling OCIErrorGet().
+locp (IN) - LOB locator for which to get the character set form.
+csfrm(OUT) - character set form of the input LOB locator. If the input
+locator is for a BLOB or a BFILE, csfrm is set to 0 since there is no concept
+of a character set for binary LOBs/FILEs. The caller must allocate space for
+the csfrm (ub1) and not write into the space.
+See also
+OCIErrorGet(), OCILobCharSetId(), OCILobLocatorIsInit
+
+
+
+OCILobCharSetId()
+
+Name
+OCI Lob get Character Set IDentifier
+
+Purpose
+Gets the LOB locator's character set ID, if any.
+
+Syntax
+sword OCILobCharSetId ( OCIEnv *envhp,
+ OCIError *errhp,
+ const OCILobLocator *locp,
+ ub2 *csid );
+
+Comments
+Returns the character set ID of the input LOB locator in the cid output
+parameter.
+
+Parameters
+envhp (IN/OUT) - OCI environment handle initialized in object mode.
+errhp (IN/OUT) - error handle. The OCI error handle. If there is an error, it
+is recorded in err and this function returns OCI_ERROR. Diagnostic
+information can be obtained by calling OCIErrorGet().
+locp (IN) - LOB locator for which to get the character set ID.
+csid (OUT) - character set ID of the input LOB locator. If the input locator
+is for a BLOB or a BFILE, csid is set to 0 since there is no concept of a
+character set for binary LOBs/FILEs. The caller must allocate space for the
+character set id of type ub2 and not write into the space.
+
+See also
+OCIErrorGet(), OCILobCharSetForm(), OCILobLocatorIsInit()
+
+
+
+OCILobCopy()
+
+Name
+OCI Lob Copy
+
+Purpose
+Copies a portion of a LOB value into another LOB value.
+
+Syntax
+sword OCILobCopy ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *dst_locp,
+ OCILobLocator *src_locp,
+ ub4 amount,
+ ub4 dst_offset,
+ ub4 src_offset );
+
+Comments
+Copies a portion of a LOB value into another LOB as specified. The data
+is copied from the source to the destination. The source (src_locp) and the
+destination (dlopb) LOBs must already exist.
+If the data already exists at the destination's start position, it is
+overwritten with the source data. If the destination's start position is
+beyond the end of the current data, a hole is created from the end of the data
+to the beginning of the newly written data from the source. The destination
+LOB is extended to accommodate the newly written data if it extends
+beyond the current length of the destination LOB.
+It is an error to extend the destination LOB beyond the maximum length
+allowed or to try to copy from a NULL LOB.
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+dst_locp (IN/OUT) - a locator uniquely referencing the destination LOB.
+src_locp (IN/OUT) - a locator uniquely referencing the source LOB.
+amount (IN) - the number of character or bytes, as appropriate, to be copied.
+dst_offset (IN) - this is the absolute offset for the destination LOB.
+For character LOBs it is the number of characters from the beginning of the
+LOB at which to begin writing. For binary LOBs it is the number of bytes from
+the beginning of the lob from which to begin reading. The offset starts at 1.
+src_offset (IN) - this is the absolute offset for the source LOB.
+For character LOBs it is the number of characters from the beginning of the
+LOB, for binary LOBs it is the number of bytes. Starts at 1.
+
+See Also
+OCIErrorGet(), OCILobAppend(), OCILobWrite(), OCILobTrim()
+
+OCILobCreateTemporary()
+
+Name
+OCI Lob Create Temporary
+
+Purpose
+Create a Temporary Lob
+
+Syntax
+sword OCILobCreateTemporary(OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub2 csid,
+ ub1 csfrm,
+ ub1 lobtype,
+ boolean cache,
+ OCIDuration duration);
+
+
+Comments
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a locator which points to the temporary Lob
+csid (IN) - the character set id
+csfrm(IN) - the character set form
+lobtype (IN) - the lob type - one of the three constants OCI_TEMP_BLOB,
+ OCI_TEMP_CLOB and OCI_TEMP_NCLOB
+cache(IN)- TRUE if the temporary LOB goes through the cache; FALSE, if not.
+duration(IN)- duration of the temporary LOB; Can be a valid duration id or one
+ of the values: OCI_DURATION_SESSION, OCI_DURATION_CALL
+ Note: OCI_DURATION_TRANSACTION is NOT supported in 8.1
+Related functions
+OCILobFreeTemporary()
+OCILobIsTemporary()
+
+OCILobDisableBuffering()
+
+Name
+OCI Lob Disable Buffering
+
+Purpose
+Disable lob buffering for the input locator.
+
+
+Syntax
+sword OCILobDisableBuffering ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp);
+
+Comments
+
+Disable lob buffering for the input locator. The next time data is
+read/written from/to the lob through the input locator, the lob
+buffering subsystem is *not* used. Note that this call does *not*
+implicitly flush the changes made in the buffering subsystem. The
+user must explicitly call OCILobFlushBuffer() to do this.
+
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a locator uniquely referencing the LOB.
+
+Related Functions
+OCILobEnableBuffering()
+OCIErrorGet()
+OCILobFlushBuffer()
+
+
+
+
+OCILobEnableBuffering()
+
+Name
+OCI Lob Enable Buffering
+
+Purpose
+Enable lob buffering for the input locator.
+
+
+Syntax
+sword OCILobEnableBuffering ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp);
+
+Comments
+
+Enable lob buffering for the input locator. The next time data is
+read/written from/to the lob through the input locator, the lob
+buffering subsystem is used.
+
+Once lob buffering is enabled for a locator, if that locator is passed to
+one of the following routines, an error is returned:
+ OCILobCopy, OCILobAppend, OCILobErase, OCILobGetLength, OCILobTrim
+
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a locator uniquely referencing the LOB.
+
+Related Functions
+OCILobDisableBuffering()
+OCIErrorGet()
+OCILobWrite()
+OCILobRead()
+OCILobFlushBuffer()
+
+
+
+
+OCILobErase()
+
+Name
+OCI Lob ERase
+
+Purpose
+Erases a specified portion of the LOB data starting at a specified offset.
+
+Syntax
+sword OCILobErase ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub4 *amount,
+ ub4 offset );
+
+Comments
+Erases a specified portion of the LOB data starting at a specified offset.
+The actual number of characters/bytes erased is returned. The actual number
+of characters/bytes and the requested number of characters/bytes will differ
+if the end of the LOB data is reached before erasing the requested number of
+characters/bytes.
+If a section of data from the middle of the LOB data is erased, a hole is
+created. When data from that hole is read, 0's are returned. If the LOB is
+NULL, this routine will indicate that 0 characters/bytes were erased.
+
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - the LOB for which to erase a section of data.
+amount (IN/OUT) - On IN, the number of characters/bytes to erase. On OUT,
+the actual number of characters/bytes erased.
+offset (IN) - absolute offset from the beginning of the LOB data from which
+to start erasing data. Starts at 1.
+
+See Also
+OCIErrorGet(), OCILobRead(), OCILobWrite()
+
+OCILobOpen()
+
+Name
+OCI Lob Open
+
+Purpose
+Opens an internal or external Lob.
+
+Syntax
+sword OCILobOpen( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub1 mode );
+
+Comments
+It is an error if the same lob is opened more than once in
+the same transaction. Lobs are opened implicitly if they are
+not opened before using them. A LOB has to be closed before
+the transaction commits else the transaction is rolled back.
+Open locators are closed if the transaction aborts. Multiple
+users can open the same lob on different locators.
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - locator points to the LOB to be opened
+mode (IN) - mode in which to open the lob. The valid modes are
+read-only - OCI_FILE_READONLY, read-write - OCI_FILE_READWRITE
+
+OCILobClose()
+
+Name
+OCI Lob Close
+
+Purpose
+Closes an open internal or external Lob.
+
+Syntax
+sword OCILobClose( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp );
+
+
+Comments
+It is an error if the lob is not open at this time. All LOBs
+that have been opened in a transaction have to be closed
+before the transaction commits, else the transaction gets
+rolled back.
+
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN) - A locator that was opened using OCILobOpen()
+
+
+OCILobFileClose()
+
+Name
+OCI Lob File CLoSe
+
+Purpose
+Closes a previously opened FILE.
+
+Syntax
+sword OCILobFileClose ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *filep );
+
+Comments
+Closes a previously opened FILE. It is an error if this function is called for
+an internal LOB. No error is returned if the FILE exists but is not opened.
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+filep (IN/OUT) - a pointer to a FILE locator to be closed.
+
+See Also
+OCIErrorGet(), OCILobFileOpen(), OCILobFileCloseAll(), OCILobFileIsOpen(),
+OCILobFileExists(), CREATE DIRECTORY DDL
+
+
+
+
+OCILobFileCloseAll()
+
+Name
+OCI LOB FILE Close All
+
+Purpose
+Closes all open FILEs on a given service context.
+
+Syntax
+sword OCILobFileCLoseAll ( OCISvcCtx *svchp,
+ OCIError *errhp );
+
+Comments
+Closes all open FILEs on a given service context.
+
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+
+See also
+OCILobFileClose(),
+OCIErrorGet(), OCILobFileOpen(), OCILobFileIsOpen(),
+OCILobFileExists(), CREATE DIRECTORY DDL
+
+
+
+
+OCILobFileExists()
+
+Name
+OCI LOB FILE exists
+
+Purpose
+Tests to see if the FILE exists on the server
+
+Syntax
+sword OCILobFileExists ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *filep,
+ boolean *flag );
+
+Comments
+Checks to see if a FILE exists for on the server.
+
+Parameters
+svchp (IN) - the OCI service context handle.
+errhp (IN/OUT) - error handle. The OCI error handle. If there is an error,
+it is recorded in err and this function returns OCI_ERROR. Diagnostic
+information can be obtained by calling OCIErrorGet().
+filep (IN) - pointer to the FILE locator that refers to the file.
+flag (OUT) - returns TRUE if the FILE exists; FALSE if it does not.
+
+See also
+OCIErrorGet, CREATE DIRECTORY (DDL)
+
+
+
+
+OCILobFileGetName()
+
+Name
+OCI LOB FILE Get file Name
+
+Purpose
+Gets the FILE locator's directory alias and file name.
+
+Syntax
+sword OCILobFileGetName ( OCIEnv *envhp,
+ OCIError *errhp,
+ const OCILobLocator *filep,
+ OraText *dir_alias,
+ ub2 *d_length,
+ OraText *filename,
+ ub2 *f_length );
+
+Comments
+Returns the directory alias and file name associated with this file locator.
+
+Parameters
+envhp (IN/OUT) - OCI environment handle initialized in object mode.
+errhp (IN/OUT) -The OCI error handle. If there is an error, it is recorded in
+errhp and this function returns OCI_ERROR. Diagnostic information can be
+obtained by calling OCIErrorGet().
+filep (IN) - FILE locator for which to get the directory alias and file name.
+dir_alias (OUT) - buffer into which the directory alias name is placed. The
+caller must allocate enough space for the directory alias name and must not
+write into the space.
+d_length (IN/OUT)
+ - IN: length of the input dir_alias string;
+ - OUT: length of the returned dir_alias string.
+filename (OUT) - buffer into which the file name is placed. The caller must
+allocate enough space for the file name and must not write into the space.
+f_length (IN/OUT)
+ - IN: length of the input filename string;
+ - OUT: lenght of the returned filename string.
+
+See also
+OCILobFileSetName(), OCIErrorGet()
+
+
+
+
+OCILobFileIsOpen()
+
+Name
+OCI LOB FILE Is Open?
+
+Purpose
+Tests to see if the FILE is open
+
+Syntax
+sword OCILobFileIsOpen ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *filep,
+ boolean *flag );
+
+Comments
+Checks to see if the FILE on the server is open for a given LobLocator.
+
+Parameters
+svchp (IN) - the OCI service context handle.
+errhp (IN/OUT) - error handle. The OCI error handle. If there is an error, it
+is recorded in err and this function returns OCI_ERROR. Diagnostic
+information can be obtained by calling OCIErrorGet().
+filep (IN) - pointer to the FILE locator being examined. If the input file
+locator was never passed to OCILobFileOpen(), the file is considered not to
+be opened by this locator. However, a different locator may have opened the
+file. More than one file opens can be performed on the same file using
+different locators.
+flag (OUT) - returns TRUE if the FILE is opened using this locator; FALSE if
+it is not.
+
+See also
+OCIErrorGet, OCILobFileOpen, OCILobFileClose, OCILobFileCloseAll, CREATE
+DIRECTORY SQL command
+
+
+OCILobFileOpen()
+
+Name
+OCI LOB FILE open
+
+Purpose
+Opens a FILE for read-only access
+
+Syntax
+sword OCILobFileOpen ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *filep,
+ ub1 mode );
+
+Comments
+Opens a FILE. The FILE can be opened for read-only access only. FILEs may not
+be written to throough ORACLE.
+
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+filep (IN/OUT) - the FILE to open. Error if the locator does not refer to a
+FILE.
+mode (IN) - mode in which to open the file. The only valid mode is
+read-only - OCI_FILE_READONLY.
+
+See Also
+OCILobFileClose, OCIErrorGet, OCILobFileCloseAll, OCILobFileIsOpen,
+OCILobFileSetName, CREATE DIRECTORY
+
+
+
+
+OCILobFileSetName()
+
+Name
+OCI Lob File Set NaMe
+
+Purpose
+Sets directory alias and file name in the FILE locator.
+
+Syntax
+sword OCILobFileSetName ( OCIEnv *envhp,
+ OCIError *errhp,
+ OCILobLocator **filepp,
+ OraText *dir_alias,
+ ub2 d_length,
+ OraText *filename,
+ ub2 f_length );
+Comments
+Sets the directory alias and file name in the LOB file locator.
+Parameters
+envhp (IN/OUT) - OCI environment handle initialized in object mode.
+errhp (IN/OUT) - The OCI error handle. If there is an error, it is recorded
+in errhp and this function returns OCI_ERROR. Diagnostic information can be
+obtained by calling OCIErrorGet().
+filepp (IN/OUT) - FILE locator for which to set the directory alias name.
+The caller must have already allocated space for the locator by calling
+OCIDescriptorAlloc().
+dir_alias (IN) - buffer that contains the directory alias name to set in the
+locator.
+d_length (IN) - length of the input dir_alias parameter.
+filename (IN) - buffer that contains the file name is placed.
+f_length (IN) - length of the input filename parameter.
+See also
+OCILobFileGetName, OCIErrorGet, CREATE DIRECTORY
+
+
+
+
+OCILobFlushBuffer()
+
+Name
+OCI Lob Flush all Buffers for this lob.
+
+Purpose
+Flush/write all buffers for this lob to the server.
+
+
+Syntax
+sword OCILobFlushBuffer ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub4 flag);
+
+Comments
+
+Flushes to the server, changes made to the buffering subsystem that
+are associated with the lob referenced by the input locator. This
+routine will actually write the data in the buffer to the lob in
+the database. Lob buffering must have already been enabled for the
+input lob locator.
+
+This routine, by default, does not free the buffer resources for
+reallocation to another buffered LOB operation. However, if you
+want to free the buffer explicitly, you can set the flag parameter
+to OCI_LOB_BUFFER_FREE.
+
+Parameters
+svchp (IN/OUT) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a locator uniquely referencing the LOB.
+flag (IN) - to indicate if the buffer resources need to be freed
+ after a flush. Default value is OCI_LOB_BUFFER_NOFREE.
+ Set it to OCI_LOB_BUFFER_FREE if you want the buffer
+ resources to be freed.
+Related Functions
+OCILobEnableBuffering()
+OCILobDisableBuffering()
+OCIErrorGet()
+OCILobWrite()
+OCILobRead()
+
+
+OCILobFreeTemporary()
+
+Name
+OCI Lob Free Temporary
+
+Purpose
+Free a temporary LOB
+
+Syntax
+sword OCILobFreeTemporary(OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp);
+
+Comments
+ Frees the contents of the temporary Lob this locator is pointing to. Note
+ that the locator itself is not freed until a OCIDescriptorFree is done.
+
+Parameters
+svchp (IN/OUT) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a locator uniquely referencing the LOB
+
+Related functions
+OCILobCreateTemporary()
+OCILobIsTemporary()
+
+
+Name
+OCI Lob/File Get Chunk Size
+
+Purpose
+When creating the table, the user can specify the chunking factor, which can
+be a multiple of Oracle blocks. This corresponds to the chunk size used by the
+LOB data layer when accessing/modifying the LOB value. Part of the chunk is
+used to store system-related information and the rest stores the LOB value.
+This function returns the amount of space used in the LOB chunk to store
+the LOB value.
+
+Syntax
+sword OCILobGetChunkSize ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub4 *chunksizep );
+
+Comments
+ Performance will be improved if the user issues read/write
+requests using a multiple of this chunk size. For writes, there is an added
+benefit since LOB chunks are versioned and, if all writes are done on chunk
+basis, no extra/excess versioning is done nor duplicated. Users could batch
+up the write until they have enough for a chunk instead of issuing several
+write calls for the same chunk.
+
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a LOB locator that uniquely references the LOB. For internal
+LOBs, this locator must be a locator that was obtained from the server
+specified by svchp. For FILEs, this locator can be initialized by a Select or
+OCILobFileSetName.
+chunksizep (OUT) - On output, it is the length of the LOB if not NULL - for
+character LOBs it is the number of characters, for binary LOBs it is the
+number of bytes in the LOB.
+
+Related Functions
+
+OCILobGetLength()
+
+Name
+OCI Lob/File Length
+
+Purpose
+Gets the length of a LOB/FILE.
+
+Syntax
+sword OCILobGetLength ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub4 *lenp );
+
+Comments
+Gets the length of a LOB/FILE. If the LOB/FILE is NULL, the length is
+undefined.
+
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a LOB locator that uniquely references the LOB. For internal
+LOBs, this locator must be a locator that was obtained from the server
+specified by svchp. For FILEs, this locator can be initialized by a Select or
+OCILobFileSetName.
+lenp (OUT) - On output, it is the length of the LOB if not NULL - for
+character LOBs it is the number of characters, for binary LOBs it is the
+number of bytes in the LOB.
+
+Related Functions
+OCIErrorGet, OCIFileSetName
+
+
+
+OCILobIsEqual()
+
+Name
+
+OCI Lob Is Equal
+
+Purpose
+Compares two LOB locators for equality.
+
+Syntax
+sword OCILobIsEqual ( OCIEnv *envhp,
+ const OCILobLocator *x,
+ const OCILobLocator *y,
+ boolean *is_equal );
+
+Comments
+Compares the given LOB locators for equality. Two LOB locators are equal if
+and only if they both refer to the same LOB data.
+Two NULL locators are considered not equal by this function.
+Parameters
+envhp (IN) - the OCI environment handle.
+x (IN) - LOB locator to compare.
+y (IN) - LOB locator to compare.
+is_equal (OUT) - TRUE, if the LOB locators are equal; FALSE if they are not.
+
+See also
+OCILobAssign, OCILobLocatorIsInit
+OCILobLocatorAssign,
+OCILobIsOpen()
+
+Name
+
+OCI Lob Is Open
+sword OCILobIsOpen(svchp, errhp, locp, flag)
+OCISvcCtx *svchp;
+OCIError *errhp;
+OCILobLocator *locp;
+boolean *flag;
+
+Comments
+ Checks if the LOB locator was opened before. flag is set to TRUE
+ if opened; FALSE otherwise
+
+
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN) - the locator to test for temporary LOB
+flag(OUT) - TRUE, if the LOB locator points to is open
+ FALSE, if not.
+
+OCILobIsTemporary()
+
+Name
+
+OCI Lob Is Temporary
+
+Purpose
+ Tests if this locator points to a temporary LOB
+
+Syntax
+sword OCILobIsTemporary(OCIEnv *envhp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ boolean *is_temporary);
+
+Comments
+Tests the locator to determine if it points to a temporary LOB.
+If so, is_temporary is set to TRUE. If not, is_temporary is set
+to FALSE.
+
+Parameters
+envhp (IN) - the environment handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN) - the locator to test for temporary LOB
+is_temporary(OUT) - TRUE, if the LOB locator points to a temporary LOB;
+ FALSE, if not.
+
+See Also
+OCILobCreateTemporary, OCILobFreeTemporary
+
+
+OCILobLoadFromFile()
+
+Name
+OCI Lob Load From File
+
+Purpose
+Load/copy all or a portion of the file into an internal LOB.
+
+Syntax
+sword OCILobLoadFromFile ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *dst_locp,
+ OCILobLocator *src_filep,
+ ub4 amount,
+ ub4 dst_offset,
+ ub4 src_offset );
+
+Comments
+Loads/copies a portion or all of a file value into an internal LOB as
+specified. The data is copied from the source file to the destination
+internal LOB (BLOB/CLOB). No character set conversions are performed
+when copying the bfile data to a clob/nclob. The bfile data must already
+be in the same character set as the clob/nclob in the database. No
+error checking is performed to verify this.
+The source (src_filep) and the destination (dst_locp) LOBs must already exist.
+If the data already exists at the destination's start position, it is
+overwritten with the source data. If the destination's start position is
+beyond the end of the current data, a hole is created from the end of the data
+to the beginning of the newly written data from the source. The destination
+LOB is extended to accommodate the newly written data if it extends
+beyond the current length of the destination LOB.
+It is an error to extend the destination LOB beyond the maximum length
+allowed or to try to copy from a NULL LOB.
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+dst_locp (IN/OUT) - a locator uniquely referencing the destination internal
+LOB which may be of type blob, clob, or nclob.
+src_filep (IN/OUT) - a locator uniquely referencing the source BFILE.
+amount (IN) - the number of bytes to be copied.
+dst_offset (IN) - this is the absolute offset for the destination LOB.
+For character LOBs it is the number of characters from the beginning of the
+LOB at which to begin writing. For binary LOBs it is the number of bytes from
+the beginning of the lob from which to begin reading. The offset starts at 1.
+src_offset (IN) - this is the absolute offset for the source BFILE. It is
+the number of bytes from the beginning of the LOB. The offset starts at 1.
+
+See Also
+OCIErrorGet(), OCILobAppend(), OCILobWrite(), OCILobTrim(), OCILobCopy()
+
+OCILobLocatorAssign()
+
+Name
+OCI Lob LOCATOR ASsiGn
+
+Purpose
+Assigns one LOB/FILE locator to another.
+
+Syntax
+sword OCILobLocatorAssign ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ const OCILobLocator *src_locp,
+ OCILobLocator **dst_locpp );
+
+Comments
+Assign source locator to destination locator. After the assignment, both
+locators refer to the same LOB data. For internal LOBs, the source locator's
+LOB data gets copied to the destination locator's LOB data only when the
+destination locator gets stored in the table. Therefore, issuing a flush of
+the object containing the destination locator will copy the LOB data. For
+FILEs only the locator that refers to the OS file is copied to the table. The
+OS file is not copied.
+Note : the only difference between this and OCILobAssign is that this takes
+a OCI service handle pointer instead of a OCI environment handle pointer
+
+Parameters
+svchp (IN/OUT) - OCI service handle initialized in object mode.
+errhp (IN/OUT) - The OCI error handle. If there is an error, it is recorded
+in errhp and this function returns OCI_ERROR. Diagnostic information can be
+obtained by calling OCIErrorGet().
+src_locp (IN) - LOB locator to copy from.
+dst_locpp (IN/OUT) - LOB locator to copy to. The caller must allocate space
+for the OCILobLocator by calling OCIDescriptorAlloc().
+
+See also
+OCIErrorGet()
+OCILobIsEqual()
+OCILobLocatorIsInit()
+OCILobAssign()
+
+
+
+
+OCILobLocatorIsInit()
+
+Name
+OCI LOB locator is initialized?
+
+Purpose
+Tests to see if a given LOB locator is initialized.
+
+Syntax
+sword OCILobLocatorIsInit ( OCIEnv *envhp,
+ OCIError *errhp,
+ const OCILobLocator *locp,
+ boolean *is_initialized );
+
+Comments
+Tests to see if a given LOB locator is initialized.
+
+Parameters
+envhp (IN/OUT) - OCI environment handle initialized in object mode.
+errhp (IN/OUT) - error handle. The OCI error handle. If there is an error, it
+is recorded in err and this function returns OCI_ERROR. Diagnostic
+information can be obtained by calling OCIErrorGet().
+locp (IN) - the LOB locator being tested
+is_initialized (OUT) - returns TRUE if the given LOB locator is initialized;
+FALSE if it is not.
+
+See also
+OCIErrorGet, OCILobIsEqual
+
+
+
+
+OCILobRead()
+
+Name
+OCI Lob/File ReaD
+
+Purpose
+Reads a portion of a LOB/FILE as specified by the call into a buffer.
+
+Syntax
+sword OCILobRead ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub4 offset,
+ ub4 *amtp,
+ void *bufp,
+ ub4 bufl,
+ void *ctxp,
+ OCICallbackLobRead cbfp,
+ ub2 csid,
+ ub1 csfrm );
+
+Comments
+Reads a portion of a LOB/FILE as specified by the call into a buffer. Data
+read from a hole is returned as 0s. It is an error to try to read from a NULL
+LOB/FILE. The OS FILE must already exist on the server and must have been
+opened using the input locator. Oracle must hav epermission to read the OS
+file and user must have read permission on the directory object.
+
+Parameters
+svchp (IN/OUT) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a LOB locator that uniquely references a LOB.
+offset (IN) - On input, it is the absolute offset, for character LOBs in the
+number of characters from the beginning of the LOB, for binary LOBs it is the
+number of bytes. Starts from 1.
+amtp (IN/OUT) - On input, the number of character or bytes to be read. On
+output, the actual number of bytes or characters read.
+If the amount of bytes to be read is larger than the buffer length it is
+assumed that the LOB is being read in a streamed mode. On input if this value
+is 0, then the data shall be read in streamed mode from the LOB until the end
+of LOB. If the data is read in pieces, *amtp always contains the length of
+the last piece read. If a callback function is defined, then this callback
+function will be invoked each time bufl bytes are read off the pipe. Each
+piece will be written into bufp.
+If the callback function is not defined, then OCI_NEED_DATA error code will
+be returned. The application must invoke the LOB read over and over again to
+read more pieces of the LOB until the OCI_NEED_DATA error code is not
+returned. The buffer pointer and the length can be different in each call
+if the pieces are being read into different sizes and location.
+bufp (IN) - the pointer to a buffer into which the piece will be read. The
+length of the allocated memory is assumed to be bufl.
+bufl (IN) - the length of the buffer in octets.
+ctxp (IN) - the context for the call back function. Can be NULL.
+cbfp (IN) - a callback that may be registered to be called for each piece. If
+this is NULL, then OCI_NEED_DATA will be returned for each piece.
+The callback function must return OCI_CONTINUE for the read to continue.
+If any other error code is returned, the LOB read is aborted.
+ ctxp (IN) - the context for the call back function. Can be NULL.
+ bufp (IN) - a buffer pointer for the piece.
+ len (IN) - the length of length of current piece in bufp.
+ piece (IN) - which piece - OCI_FIRST_PIECE, OCI_NEXT_PIECE or
+ OCI_LAST_PIECE.
+csid - the character set ID of the buffer data
+csfrm - the character set form of the buffer data
+
+Related Functions
+OCIErrorGet, OCILobWrite, OCILobFileOpen, OCILobFileSetName, CREATE DIRECTORY
+
+
+
+
+OCILobTrim()
+
+Name
+
+OCI Lob Trim
+
+Purpose
+Trims the lob value to a shorter length
+
+Syntax
+sword OCILobTrim ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub4 newlen );
+
+Comments
+Truncates LOB data to a specified shorter length.
+
+Parameters
+svchp (IN) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a LOB locator that uniquely references the LOB. This locator
+must be a locator that was obtained from the server specified by svchp.
+newlen (IN) - the new length of the LOB data, which must be less than or equal
+to the current length.
+
+Related Functions
+OCIErrorGet, OCILobWrite, OCiLobErase, OCILobAppend, OCILobCopy
+
+
+
+
+
+OCILobWrite()
+
+Name
+OCI Lob Write
+
+Purpose
+Writes a buffer into a LOB
+
+Syntax
+sword OCILobWrite ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub4 offset,
+ ub4 *amtp,
+ void *bufp,
+ ub4 buflen,
+ ub1 piece,
+ void *ctxp,
+ OCICallbackLobWrite (cbfp)
+ (
+ void *ctxp,
+ void *bufp,
+ ub4 *lenp,
+ ub1 *piecep )
+ ub2 csid
+ ub1 csfrm );
+
+
+Comments
+Writes a buffer into a LOB as specified. If LOB data already exists
+it is overwritten with the data stored in the buffer.
+The buffer can be written to the LOB in a single piece with this call, or
+it can be provided piecewise using callbacks or a standard polling method.
+If this value of the piece parameter is OCI_FIRST_PIECE, data must be
+provided through callbacks or polling.
+If a callback function is defined in the cbfp parameter, then this callback
+function will be invoked to get the next piece after a piece is written to
+the pipe. Each piece will be written from bufp.
+If no callback function is defined, then OCILobWrite() returns the
+OCI_NEED_DATA error code. The application must all OCILobWrite() again
+to write more pieces of the LOB. In this mode, the buffer pointer and the
+length can be different in each call if the pieces are of different sizes and
+from different locations. A piece value of OCI_LAST_PIECE terminates the
+piecewise write.
+
+Parameters
+svchp (IN/OUT) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a LOB locator that uniquely references a LOB.
+offset (IN) - On input, it is the absolute offset, for character LOBs in
+the number of characters from the beginning of the LOB, for binary LOBs it
+is the number of bytes. Starts at 1.
+bufp (IN) - the pointer to a buffer from which the piece will be written. The
+length of the allocated memory is assumed to be the value passed in bufl.
+Even if the data is being written in pieces, bufp must contain the first
+piece of the LOB when this call is invoked.
+bufl (IN) - the length of the buffer in bytes.
+Note: This parameter assumes an 8-bit byte. If your platform uses a
+longer byte, the value of bufl must be adjusted accordingly.
+piece (IN) - which piece of the buffer is being written. The default value for
+this parameter is OCI_ONE_PIECE, indicating the buffer will be written in a
+single piece.
+The following other values are also possible for piecewise or callback mode:
+OCI_FIRST_PIECE, OCI_NEXT_PIECE and OCI_LAST_PIECE.
+amtp (IN/OUT) - On input, takes the number of character or bytes to be
+written. On output, returns the actual number of bytes or characters written.
+If the data is written in pieces, *amtp will contain the total length of the
+pieces written at the end of the call (last piece written) and is undefined in
+between.
+(Note it is different from the piecewise read case)
+ctxp (IN) - the context for the call back function. Can be NULL.
+cbfp (IN) - a callback that may be registered to be called for each piece in
+a piecewise write. If this is NULL, the standard polling method will be used.
+The callback function must return OCI_CONTINUE for the write to continue.
+If any other error code is returned, the LOB write is aborted. The
+callback takes the following parameters:
+ ctxp (IN) - the context for the call back function. Can be NULL.
+ bufp (IN/OUT) - a buffer pointer for the piece.
+ lenp (IN/OUT) - the length of the buffer (in octets) and the length of
+ current piece in bufp (out octets).
+ piecep (OUT) - which piece - OCI_NEXT_PIECE or OCI_LAST_PIECE.
+csid - the character set ID of the buffer data
+csfrm - the character set form of the buffer data
+Related Functions
+
+OCILobWriteAppend()
+
+Name
+OCI Lob Write Append
+
+Purpose
+Writes data to the end of a LOB value. This call provides the ability
+to get the length of the data and append it to the end of the LOB in
+a single round trip to the server.
+
+Syntax
+sword OCILobWriteAppend ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub4 *amtp,
+ void *bufp,
+ ub4 buflen,
+ ub1 piece,
+ void *ctxp,
+ OCICallbackLobWrite (cbfp)
+ (
+ void *ctxp,
+ void *bufp,
+ ub4 *lenp,
+ ub1 *piecep )
+ ub2 csid
+ ub1 csfrm );
+
+
+Comments
+Writes a buffer to the end of a LOB as specified. If LOB data already exists
+it is overwritten with the data stored in the buffer.
+The buffer can be written to the LOB in a single piece with this call, or
+it can be provided piecewise using callbacks or a standard polling method.
+If this value of the piece parameter is OCI_FIRST_PIECE, data must be
+provided through callbacks or polling.
+If a callback function is defined in the cbfp parameter, then this callback
+function will be invoked to get the next piece after a piece is written to the
+pipe. Each piece will be written from bufp.
+If no callback function is defined, then OCILobWriteAppend() returns the
+OCI_NEED_DATA error code. The application must all OCILobWriteAppend() again
+to write more pieces of the LOB. In this mode, the buffer pointer and the
+length can be different in each call if the pieces are of different sizes and
+from different locations. A piece value of OCI_LAST_PIECE terminates the
+piecewise write.
+
+Parameters
+svchp (IN/OUT) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a LOB locator that uniquely references a LOB.
+bufp (IN) - the pointer to a buffer from which the piece will be written. The
+length of the allocated memory is assumed to be the value passed in bufl. Even
+if the data is being written in pieces, bufp must contain the first piece of
+the LOB when this call is invoked.
+bufl (IN) - the length of the buffer in bytes.
+Note: This parameter assumes an 8-bit byte. If your platform uses a
+longer byte, the value of bufl must be adjusted accordingly.
+piece (IN) - which piece of the buffer is being written. The default value for
+this parameter is OCI_ONE_PIECE, indicating the buffer will be written in a
+single piece.
+The following other values are also possible for piecewise or callback mode:
+OCI_FIRST_PIECE, OCI_NEXT_PIECE and OCI_LAST_PIECE.
+amtp (IN/OUT) - On input, takes the number of character or bytes to be
+written. On output, returns the actual number of bytes or characters written.
+If the data is written in pieces, *amtp will contain the total length of the
+pieces written at the end of the call (last piece written) and is undefined in
+between.
+(Note it is different from the piecewise read case)
+ctxp (IN) - the context for the call back function. Can be NULL.
+cbfp (IN) - a callback that may be registered to be called for each piece in a
+piecewise write. If this is NULL, the standard polling method will be used.
+The callback function must return OCI_CONTINUE for the write to continue.
+If any other error code is returned, the LOB write is aborted. The
+callback takes the following parameters:
+ ctxp (IN) - the context for the call back function. Can be NULL.
+ bufp (IN/OUT) - a buffer pointer for the piece.
+ lenp (IN/OUT) - the length of the buffer (in octets) and the length of
+ current piece in bufp (out octets).
+ piecep (OUT) - which piece - OCI_NEXT_PIECE or OCI_LAST_PIECE.
+csid - the character set ID of the buffer data
+csfrm - the character set form of the buffer data
+Related Functions
+
+
+
+
+OCILobGetStorageLimit()
+
+Name
+OCI Lob Get Storage Limit
+
+Purpose
+To get the maximum Length of a LOB in bytes that can be stored in the database.
+
+Syntax
+sword OCILobGetStorageLimit ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ oraub8 *limitp);
+
+
+Comments
+With unlimited size LOB support the limit for a LOB is no longer restricted
+to 4GB.
+This interface should be used to get the actual limit for storing data for
+a specific
+LOB locator. Note that if the compatibality is set to 9.2 or older the limit
+would still be 4GB.
+
+Parameters
+svchp (IN/OUT) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a LOB locator that uniquely references a LOB.
+limitp (OUT) - The storage limit for a LOB in bytes.
+Related Functions
+
+
+
+
+OCILobGetOptions()
+
+Name
+OCI Lob Get Options
+
+Purpose
+To get the current options set for the given SecureFile.
+
+Syntax
+sword OCILobGetOptions ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub4 optypes,
+ void *optionsp,
+ ub4 *optionslenp,
+ ub4 mode);
+
+
+Comments
+This function only works on SecureFiles. All others will get an error.
+
+Parameters
+svchp (IN/OUT) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a LOB locator that uniquely references a LOB.
+optypes (IN) - the types of options flags to be retrieved.
+optionsp (OUT) - the options flags or value for the given types.
+optionslenp (IN/OUT) - the length of option_value buffer
+mode (IN) - for future use (pass 0 for now).
+Related Functions
+OCISetOptions()
+
+OCILobSetOptions()
+
+Name
+OCI Lob Set Options
+
+Purpose
+To set the options for the given SecureFile Lob.
+
+Syntax
+sword OCILobSetOptions ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub4 optypes,
+ void *optionsp,
+ ub4 optionslen,
+ ub4 mode);
+
+
+Comments
+This function only works on SecureFile Lobs. All others will get an error.
+
+Parameters
+svchp (IN/OUT) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a LOB locator that uniquely references a LOB.
+optypes (IN) - the types of options flags to be set.
+optionsp (IN) - the options flags or value to be set for the given types.
+optionslen (IN) - then length of option_value buffer
+mode (IN) - for future use (pass 0 for now).
+Related Functions
+OCILobGetOptions()
+
+OCILobGetContentType()
+
+Name
+OCI Lob Get Content Type
+
+Purpose
+To get the current contenttype set for the given SecureFile.
+
+Syntax
+sword OCILobGetContentType (OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ oratext *contenttypep,
+ ub4 *contenttypelenp,
+ ub4 mode);
+
+
+Comments
+This function only works on SecureFiles. All others will get an error.
+If the securefile does not have a contenttype associated with it,
+the contenttype length (= *contenttypelenp) is returned as 0 without
+modifying the buffer contenttypep.
+Parameters
+svchp (IN/OUT) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+ diagnostic information in the event of an error.
+locp (IN/OUT) - a LOB locator that uniquely references a LOB.
+contenttypep(IN/OUT)- pointer to the buffer where the contenttype is stored
+ after successful execution.
+ The caller needs to allocate the buffer before calling
+ this function. The size of the allocated buffer should
+ be >= OCI_LOB_CONTENTTYPE_MAXSIZE bytes
+contenttypelenp(IN/OUT)- The caller should set this field to the size
+ of contenttypep buffer.
+ After the call successfully executes, it will hold the
+ size of the contenttype returned.
+mode (IN) - for future use (pass 0 for now).
+Related Functions
+OCISetContentType()
+
+OCILobSetContentType()
+
+Name
+OCI Lob Set Content Type
+
+Purpose
+To set the contenttype for the given SecureFile Lob.
+
+Syntax
+sword OCILobSetContentType (OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ const oratext *contenttypep,
+ ub4 contenttypelen,
+ ub4 mode);
+
+
+Comments
+This function only works on SecureFiles. All others will get an error.
+To clear an existing contenttype set on a securefile, the user will
+invoke OCILobSetContentType API with contenttypep set to (oratext *)0,
+and contenttypelen set to 0.
+Parameters
+svchp (IN/OUT) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+locp (IN/OUT) - a LOB locator that uniquely references a LOB.
+contenttypep (IN) - the contenttype to be set for the given LOB.
+contenttypelen(IN) - the size of contenttype in bytes. The size of the
+ contenttype should be <= OCI_LOB_CONTENTTYPE_MAXSIZE
+ bytes.
+mode (IN) - for future use (pass 0 for now).
+Related Functions
+OCILobGetContentType()
+
+
+OCILogoff()
+Name
+OCI simplified Logoff
+Purpose
+This function is used to terminate a session created with OCILogon() or
+OCILogon2().
+Syntax
+sword OCILogoff ( OCISvcCtx *svchp
+ OCIError *errhp );
+Comments
+This call is used to terminate a session which was created with OCILogon() or
+OCILogon2().
+This call implicitly deallocates the server, authentication, and service
+context handles.
+Note: For more information on logging on and off in an application,
+refer to the section "Application Initialization, Connection, and
+Authorization" on page 2-16.
+Parameters
+svchp (IN) - the service context handle which was used in the call to
+OCILogon() or OCILogon2().
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+See Also
+OCILogon(), OCILogon2().
+
+
+
+
+
+
+OCILogon()
+Name
+OCI Service Context Logon
+Purpose
+This function is used to create a simple logon session.
+Syntax
+sword OCILogon ( OCIEnv *envhp,
+ OCIError *errhp,
+ OCISvcCtx *svchp,
+ const OraText *username,
+ ub4 uname_len,
+ const OraText *password,
+ ub4 passwd_len,
+ const OraText *dbname,
+ ub4 dbname_len );
+Comments
+This function is used to create a simple logon session for an application.
+Note: Users requiring more complex session (e.g., TP monitor
+applications) should refer to the section "Application Initialization,
+Connection, and Authorization" on page 2-16.
+This call allocates the error and service context handles which are passed to
+it. This call also implicitly allocates server and authentication handles
+associated with the session. These handles can be retrieved by calling
+OCIAttrGet() on the service context handle.
+Parameters
+envhp (IN) - the OCI environment handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+svchp (OUT) - the service context pointer.
+username (IN) - the username.
+uname_len (IN) - the length of username.
+password (IN) - the user's password.
+passwd_len (IN) - the length of password.
+dbname (IN) - the name of the database to connect to.
+dbname_len (IN) - the length of dbname.
+See Also
+OCILogoff()
+
+
+
+
+
+OCILogon2()
+Name
+OCI Service Context Logon
+Purpose
+This function is used to create a logon session in connection pooling mode.
+Syntax
+sword OCILogon2 ( OCIEnv *envhp,
+ OCIError *errhp,
+ OCISvcCtx **svchp,
+ const OraText *username,
+ ub4 uname_len,
+ const OraText *password,
+ ub4 passwd_len,
+ const OraText *dbname,
+ ub4 dbname_len,
+ ub4 mode);
+Comments
+This function is used to create a simple logon session for an application in
+Connection Pooling mode. The valid values for mode are currently OCI_POOL and
+OCI_DEFAULT. Call to this function with OCI_DEFAULT mode is equivalent to
+OCILogon() call.
+This call allocates the error and service context handles which are passed to
+it. This call also implicitly allocates server and authentication handles
+associated with the session. These handles can be retrieved by calling
+OCIAttrGet() on the service context handle. This call assumes that
+OCIConnectionPoolCreate() has already been called for the same dbname.
+Parameters
+envhp (IN) - the OCI environment handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+svchp (OUT) - the service context pointer.
+username (IN) - the username.
+uname_len (IN) - the length of username.
+password (IN) - the user's password. If this is null, it is assumed that a
+ proxy session has to be created and the required grants on
+ the database are already done.
+passwd_len (IN) - the length of password.
+dbname (IN) - the name of the database to connect to.
+dbname_len (IN) - the length of dbname.
+mode (IN) - the mode for doing the server attach. Should be OCI_POOL for
+ using Connection Pooling.
+
+
+See Also
+OCILogoff()
+
+
+
+
+
+OCIMemoryFree()
+Name
+OCI FREE Memory
+Purpose
+Frees up storage associated with the pointer.
+Syntax
+void OCIMemoryFree ( const OCIStmt *stmhp,
+ void *memptr);
+Comments
+Frees up dynamically allocated data pointers associated with the pointer using
+either the default memory free function or the registered memory free
+function, as the case may be.
+A user-defined memory free function can be registered during the initial call
+to OCIInitialize().
+This call is always successful.
+Parameters
+stmhp (IN) - statement handle which returned this data buffer.
+memptr (IN) - pointer to data allocated by the client library.
+Related Functions
+OCIInitialize()
+
+
+
+
+
+OCIParamGet()
+Name
+OCI Get PARaMeter
+Purpose
+Returns a descriptor of a parameter specified by position in the describe
+handle or statement handle.
+Syntax
+sword OCIParamGet ( const void *hndlp,
+ ub4 htype,
+ OCIError *errhp,
+ void **parmdpp,
+ ub4 pos );
+Comments
+This call returns a descriptor of a parameter specified by position in the
+describe handle or statement handle. Parameter descriptors are always
+allocated internally by the OCI library. They are read-only.
+OCI_NO_DATA may be returned if there are no parameter descriptors for this
+position.
+See Appendix B for more detailed information about parameter descriptor
+attributes.
+Parameters
+hndlp (IN) - a statement handle or describe handle. The OCIParamGet()
+function will return a parameter descriptor for this handle.
+htype (IN) - the type of the handle passed in the handle parameter. Valid
+types are OCI_HTYPE_DESCRIBE, for a describe handle OCI_HTYPE_STMT, for a
+statement handle
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+parmdpp (OUT) - a descriptor of the parameter at the position given in the pos
+parameter.
+pos (IN) - position number in the statement handle or describe handle. A
+parameter descriptor will be returned for this position.
+Note: OCI_NO_DATA may be returned if there are no parameter
+descriptors for this position.
+Related Functions
+OCIAttrGet(), OCIAttrSet()
+
+
+
+
+
+OCIParamSet()
+Name
+OCI Parameter Set in handle
+Purpose
+Used to set a complex object retrieval descriptor into a complex object
+retrieval handle.
+Syntax
+sword OCIParamGet ( void *hndlp,
+ ub4 htyp,
+ OCIError *errhp,
+ const void *dscp,
+ ub4 dtyp,
+ ub4 pos );
+Comments
+This call sets a given complex object retrieval descriptor into a complex
+object retrieval handle.
+The handle must have been previously allocated using OCIHandleAlloc(), and
+the descriptor must have been previously allocated using OCIDescAlloc().
+Attributes of the descriptor are set using OCIAttrSet().
+Parameters
+hndlp (IN/OUT) - handle pointer.
+htype (IN) - handle type.
+errhp (IN/OUT) - error handle.
+dscp (IN) - complex object retrieval descriptor pointer.
+dtyp (IN) -
+pos (IN) - position number.
+See Also
+
+
+
+
+
+OCIPasswordChange()
+Name
+OCI Change PassWord
+Purpose
+This call allows the password of an account to be changed.
+Syntax
+sword OCIPasswordChange ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ const OraText *user_name,
+ ub4 usernm_len,
+ const OraText *opasswd,
+ ub4 opasswd_len,
+ const OraText *npasswd,
+ sb4 npasswd_len,
+ ub4 mode);
+Comments
+This call allows the password of an account to be changed. This call is
+similar to OCISessionBegin() with the following differences:
+If the user authentication is already established, it authenticates
+the account using the old password and then changes the
+password to the new password
+If the user authentication is not established, it establishes a user
+authentication and authenticates the account using the old
+password, then changes the password to the new password.
+This call is useful when the password of an account is expired and
+OCISessionBegin() returns an error or warning which indicates that the
+password has expired.
+Parameters
+svchp (IN/OUT) - a handle to a service context. The service context handle
+must be initialized and have a server context handle associated with it.
+errhp (IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+user_name (IN) - specifies the user name. It points to a character string,
+whose length is specified in usernm_len. This parameter must be NULL if the
+service context has been initialized with an authentication handle.
+usernm_len (IN) - the length of the user name string specified in user_name.
+For a valid user name string, usernm_len must be non-zero.
+opasswd (IN) - specifies the user's old password. It points to a character
+string, whose length is specified in opasswd_len .
+opasswd_len (IN) - the length of the old password string specified in opasswd.
+For a valid password string, opasswd_len must be non-zero.
+npasswd (IN) - specifies the user's new password. It points to a character
+string, whose length is specified in npasswd_len which must be non-zero for a
+valid password string. If the password complexity verification routine is
+specified in the user's profile to verify the new password's complexity, the
+new password must meet the complexity requirements of the verification
+function.
+npasswd_len (IN) - then length of the new password string specified in
+npasswd. For a valid password string, npasswd_len must be non-zero.
+mode - pass as OCI_DEFAULT.
+Related Functions
+OCISessionBegin()
+
+
+----------------------------------OCIReset------------------------------------
+
+
+OCIReset()
+Name
+OCI Reset
+Purpose
+Resets the interrupted asynchronous operation and protocol. Must be called
+if a OCIBreak call had been issued while a non-blocking operation was in
+progress.
+Syntax
+sword OCIReset ( void *hndlp,
+ OCIError *errhp);
+Comments
+This call is called in non-blocking mode ONLY. Resets the interrupted
+asynchronous operation and protocol. Must be called if a OCIBreak call
+had been issued while a non-blocking operation was in progress.
+Parameters
+hndlp (IN) - the service context handle or the server context handle.
+errhp (IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+Related Functions
+
+
+OCIResultSetToStmt()
+Name
+OCI convert Result Set to Statement Handle
+Purpose
+Converts a descriptor to statement handle for fetching rows.
+Syntax
+sword OCIResultSetToStmt ( OCIResult *rsetdp,
+ OCIError *errhp );
+Comments
+Converts a descriptor to statement handle for fetching rows.
+A result set descriptor can be allocated with a call to OCIDescAlloc().
+Parameters
+rsetdp (IN/OUT) - a result set descriptor pointer.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+Related Functions
+OCIDescAlloc()
+
+
+
+
+OCIServerAttach()
+Name
+OCI ATtaCH to server
+Purpose
+Creates an access path to a data source for OCI operations.
+Syntax
+sword OCIServerAttach ( OCIServer *srvhp,
+ OCIError *errhp,
+ const OraText *dblink,
+ sb4 dblink_len,
+ ub4 mode);
+Comments
+This call is used to create an association between an OCI application and a
+particular server.
+This call initializes a server context handle, which must have been previously
+allocated with a call to OCIHandleAlloc().
+The server context handle initialized by this call can be associated with a
+service context through a call to OCIAttrSet(). Once that association has been
+made, OCI operations can be performed against the server.
+If an application is operating against multiple servers, multiple server
+context handles can be maintained. OCI operations are performed against
+whichever server context is currently associated with the service context.
+Parameters
+srvhp (IN/OUT) - an uninitialized server context handle, which gets
+initialized by this call. Passing in an initialized server handle causes an
+error.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+dblink (IN) - specifies the database (server) to use. This parameter points to
+a character string which specifies a connect string or a service point. If the
+connect string is NULL, then this call attaches to the default host. The length
+of connstr is specified in connstr_len. The connstr pointer may be freed by the
+caller on return.
+dblink_len (IN) - the length of the string pointed to by connstr. For a valid
+connect string name or alias, connstr_len must be non-zero.
+mode (IN) - specifies the various modes of operation. For release 8.0, pass as
+OCI_DEFAULT - in this mode, calls made to the server on this server context
+are made in blocking mode.
+Example
+See the description of OCIStmtPrepare() on page 13-96 for an example showing
+the use of OCIServerAttach().
+Related Functions
+OCIServerDetach()
+
+
+
+OCIServerDetach()
+Name
+OCI DeTaCH server
+Purpose
+Deletes an access to a data source for OCI operations.
+Syntax
+sword OCIServerDetach ( OCIServer *svrhp,
+ OCIError *errhp,
+ ub4 mode);
+Comments
+This call deletes an access to data source for OCI operations, which was
+established by a call to OCIServerAttach().
+Parameters
+srvhp (IN) - a handle to an initialized server context, which gets reset to
+uninitialized state. The handle is not de-allocated.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+mode (IN) - specifies the various modes of operation. The only valid mode is
+OCI_DEFAULT for the default mode.
+Related Functions
+OCIServerAttach()
+
+
+
+OCIServerVersion()
+Name
+OCI VERSion
+Purpose
+Returns the version string of the Oracle server.
+Syntax
+sword OCIServerVersion ( void *hndlp,
+ OCIError *errhp,
+ OraText *bufp,
+ ub4 bufsz
+ ub1 hndltype );
+Comments
+This call returns the version string of the Oracle server.
+For example, the following might be returned as the version string if your
+application is running against a 7.3.2 server:
+Oracle7 Server Release 7.3.2.0.0 - Production Release
+PL/SQL Release 2.3.2.0.0 - Production
+CORE Version 3.5.2.0.0 - Production
+TNS for SEQUENT DYNIX/ptx: Version 2.3.2.0.0 - Production
+NLSRTL Version 3.2.2.0.0 - Production
+
+Parameters
+hndlp (IN) - the service context handle or the server context handle.
+errhp (IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+bufp (IN) - the buffer in which the version information is returned.
+bufsz (IN) - the length of the buffer.
+hndltype (IN) - the type of handle passed to the function.
+Related Functions
+
+
+
+
+
+OCISessionBegin()
+Name
+OCI Session Begin and authenticate user
+Purpose
+Creates a user authentication and begins a user session for a given server.
+Syntax
+sword OCISessionBegin ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCISession *usrhp,
+ ub4 credt,
+ ub4 mode);
+
+Comments
+For Oracle8, OCISessionBegin() must be called for any given server handle
+before requests can be made against it. Also, OCISessionBegin() only supports
+authenticating the user for access to the Oracle server specified by the
+server handle in the service context. In other words, after OCIServerAttach()
+is called to initialize a server handle, OCISessionBegin() must be called to
+authenticate the user for that given server.
+When OCISessionBegin() is called for the first time for the given server
+handle, the initialized authentication handle is called a primary
+authentication context. A primary authentication context may not be created
+with the OCI_MIGRATE mode. Also, only one primary authentication context can
+be created for a given server handle and the primary authentication context c
+an only ever be used with that server handle. If the primary authentication
+context is set in a service handle with a different server handle, then an
+error will result.
+After OCISessionBegin() has been called for the server handle, and the primary
+authentication context is set in the service handle, OCISessionBegin() may be
+called again to initialize another authentication handle with different (or
+the same) credentials. When OCISessionBegin() is called with a service handle
+set with a primary authentication context, the returned authentication context
+in authp is called a user authentication context. As many user authentication
+contexts may be initialized as desired.
+User authentication contexts may be created with the OCI_MIGRATE mode.
+If the OCI_MIGRATE mode is not specified, then the user authentication
+context can only ever be used with the same server handle set in svchp. If
+OCI_MIGRATE mode is specified, then the user authentication may be set
+with different server handles. However, the user authentication context is
+restricted to use with only server handles which resolve to the same database
+instance and that have equivalent primary authentication contexts. Equivalent
+authentication contexts are those which were authenticated as the same
+database user.
+OCI_SYSDBA, OCI_SYSOPER, OCI_SYSASM, and OCI_PRELIM_AUTH may only be used
+with a primary authentication context.
+To provide credentials for a call to OCISessionBegin(), one of two methods are
+supported. The first is to provide a valid username and password pair for
+database authentication in the user authentication handle passed to
+OCISessionBegin(). This involves using OCIAttrSet() to set the
+OCI_ATTR_USERNAME and OCI_ATTR_PASSWORD attributes on the
+authentication handle. Then OCISessionBegin() is called with
+OCI_CRED_RDBMS.
+Note: When the authentication handle is terminated using
+OCISessionEnd(), the username and password attributes remain
+unchanged and thus can be re-used in a future call to OCISessionBegin().
+Otherwise, they must be reset to new values before the next
+OCISessionBegin() call.
+The second type of credentials supported are external credentials. No
+attributes need to be set on the authentication handle before calling
+OCISessionBegin(). The credential type is OCI_CRED_EXT. This is equivalent
+to the Oracle7 `connect /' syntax. If values have been set for
+OCI_ATTR_USERNAME and OCI_ATTR_PASSWORD, then these are
+ignored if OCI_CRED_EXT is used.
+Parameters
+svchp (IN) - a handle to a service context. There must be a valid server
+handle set in svchp.
+errhp (IN) - an error handle to the retrieve diagnostic information.
+usrhp (IN/OUT) - a handle to an authentication context, which is initialized
+by this call.
+credt (IN) - specifies the type of credentials to use for authentication.
+Valid values for credt are:
+OCI_CRED_RDBMS - authenticate using a database username and
+password pair as credentials. The attributes OCI_ATTR_USERNAME
+and OCI_ATTR_PASSWORD should be set on the authentication
+context before this call.
+OCI_CRED_EXT - authenticate using external credentials. No username
+or password is provided.
+mode (IN) - specifies the various modes of operation. Valid modes are:
+OCI_DEFAULT - in this mode, the authentication context returned may
+only ever be set with the same server context specified in svchp. This
+establishes the primary authentication context.
+OCI_MIGRATE - in this mode, the new authentication context may be
+set in a service handle with a different server handle. This mode
+establishes the user authentication context.
+OCI_SYSDBA - in this mode, the user is authenticated for SYSDBA
+access.
+OCI_SYSOPER - in this mode, the user is authenticated for SYSOPER
+access.
+OCI_SYSASM - in this mode, the user is authenticated for SYSASM
+access. Note that only an ASM instance can grant SYSASM access.
+OCI_PRELIM_AUTH - this mode may only be used with OCI_SYSDBA, OCI_SYSASM,
+or OCI_SYSOPER to authenticate for certain administration tasks.
+Related Functions
+OCISessionEnd()
+
+
+
+
+
+
+OCISessionEnd()
+Name
+OCI Terminate user Authentication Context
+Purpose
+Terminates a user authentication context created by OCISessionBegin()
+Syntax
+sword OCISessionEnd ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCISession *usrhp,
+ ub4 mode);
+
+Comments
+The user security context associated with the service context is invalidated
+by this call. Storage for the authentication context is not freed. The
+transaction specified by the service context is implicitly committed. The
+transaction handle, if explicitly allocated, may be freed if not being used.
+Resources allocated on the server for this user are freed.
+The authentication handle may be reused in a new call to OCISessionBegin().
+Parameters
+svchp (IN/OUT) - the service context handle. There must be a valid server
+handle and user authentication handle associated with svchp.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+usrhp (IN) - de-authenticate this user. If this parameter is passed as NULL,
+the user in the service context handle is de-authenticated.
+mode (IN) - the only valid mode is OCI_DEFAULT.
+Example
+In this example, an authentication context is destroyed.
+Related Functions
+OCISessionBegin()
+
+
+
+
+OCIStmtExecute()
+Name
+OCI EXECute
+Purpose
+This call associates an application request with a server.
+Syntax
+sword OCIStmtExecute ( OCISvcCtx *svchp,
+ OCIStmt *stmtp,
+ OCIError *errhp,
+ ub4 iters,
+ ub4 rowoff,
+ const OCISnapshot *snap_in,
+ OCISnapshot *snap_out,
+ ub4 mode );
+Comments
+This function is used to execute a prepared SQL statement.
+Using an execute call, the application associates a request with a server. On
+success, OCI_SUCCESS is returned.
+If a SELECT statement is executed, the description of the select list follows
+implicitly as a response. This description is buffered on the client side for
+describes, fetches and define type conversions. Hence it is optimal to
+describe a select list only after an execute.
+Also for SELECT statements, some results are available implicitly. Rows will
+be received and buffered at the end of the execute. For queries with small row
+count, a prefetch causes memory to be released in the server if the end of
+fetch is reached, an optimization that may result in memory usage reduction.
+Set attribute call has been defined to set the number of rows to be prefetched
+per result set.
+For SELECT statements, at the end of the execute, the statement handle
+implicitly maintains a reference to the service context on which it is
+executed. It is the user's responsibility to maintain the integrity of the
+service context. If the attributes of a service context is changed for
+executing some operations on this service context, the service context must
+be restored to have the same attributes, that a statement was executed with,
+prior to a fetch on the statement handle. The implicit reference is maintained
+until the statement handle is freed or the fetch is cancelled or an end of
+fetch condition is reached.
+Note: If output variables are defined for a SELECT statement before a
+call to OCIStmtExecute(), the number of rows specified by iters will be
+fetched directly into the defined output buffers and additional rows
+equivalent to the prefetch count will be prefetched. If there are no
+additional rows, then the fetch is complete without calling
+OCIStmtFetch().
+The execute call will return errors if the statement has bind data types that
+are not supported in an Oracle7 server.
+Parameters
+svchp (IN/OUT) - service context handle.
+stmtp (IN/OUT) - an statement handle - defines the statement and the
+associated data to be executed at the server. It is invalid to pass in a
+statement handle that has bind of data types only supported in release 8.0
+when srvchp points to an Oracle7 server.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error. If the statement is being
+batched and it is successful, then this handle will contain this particular
+statement execution specific errors returned from the server when the batch is
+flushed.
+iters (IN) - the number of times this statement is executed for non-Select
+statements. For Select statements, if iters is non-zero, then defines must
+have been done for the statement handle. The execution fetches iters rows into
+these predefined buffers and prefetches more rows depending upon the prefetch
+row count. This function returns an error if iters=0 for non-SELECT
+statements.
+rowoff (IN) - the index from which the data in an array bind is relevant for
+this multiple row execution.
+snap_in (IN) - this parameter is optional. if supplied, must point to a
+snapshot descriptor of type OCI_DTYPE_SNAP. The contents of this descriptor
+must be obtained from the snap_out parameter of a previous call. The
+descriptor is ignored if the SQL is not a SELECT. This facility allows
+multiple service contexts to ORACLE to see the same consistent snapshot of the
+database's committed data. However, uncommitted data in one context is not
+visible to another context even using the same snapshot.
+snap_out (OUT) - this parameter optional. if supplied, must point to a
+descriptor of type OCI_DTYPE_SNAP. This descriptor is filled in with an
+opaque representation which is the current ORACLE "system change
+number" suitable as a snap_in input to a subsequent call to OCIStmtExecute().
+This descriptor should not be used any longer than necessary in order to avoid
+"snapshot too old" errors.
+mode (IN) - The modes are:
+If OCI_DEFAULT_MODE, the default mode, is selected, the request is
+immediately executed. Error handle contains diagnostics on error if any.
+OCI_EXACT_FETCH - if the statement is a SQL SELECT, this mode is
+only valid if the application has set the prefetch row count prior to this
+call. In this mode, the OCI library will get up to the number of rows
+specified (i.e., prefetch row count plus iters). If the number of rows
+returned by the query is greater than this value, OCI_ERROR will be
+returned with ORA-01422 as the implementation specific error in a
+diagnostic record. If the number of rows returned by the query is
+smaller than the prefetch row count, OCI_SUCCESS_WITH_INFO will
+be returned with ORA-01403 as the implementation specific error. The
+prefetch buffer size is ignored and the OCI library tries to allocate all the
+space required to contain the prefetched rows. The exact fetch semantics
+apply to only the top level rows. No more rows can be fetched for this
+query at the end of the call.
+OCI_KEEP_FETCH_STATE - the result set rows (not yet fetched) of this
+statement executed in this transaction will be maintained when the
+transaction is detached for migration. By default, a query is cancelled
+when a transaction is detached for migration. This mode is the default
+mode when connected to a V7 server.
+Related Functions
+OCIStmtPrepare()
+
+
+
+
+
+OCIStmtFetch()
+Name
+OCI FetCH
+Purpose
+Fetches rows from a query.
+Syntax
+sword OCIStmtFetch ( OCIStmt *stmtp,
+ OCIError *errhp,
+ ub4 nrows,
+ ub2 orientation,
+ ub4 mode);
+Comments
+The fetch call is a local call, if prefetched rows suffice. However, this is
+transparent to the application. If LOB columns are being read, LOB locators
+are fetched for subsequent LOB operations to be performed on these locators.
+Prefetching is turned off if LONG columns are involved.
+A fetch with nrows set to 0 rows effectively cancels the fetch for this
+statement.
+Parameters
+stmtp (IN) - a statement (application request) handle.
+errhp (IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+nrows (IN) - number of rows to be fetched from the current position.
+orientation (IN) - for release 8.0, the only acceptable value is
+OCI_FETCH_NEXT, which is also the default value.
+mode (IN) - for release 8.0, beta-1, the following mode is defined.
+OCI_DEFAULT - default mode
+OCI_EOF_FETCH - indicates that it is the last fetch from the result set.
+If nrows is non-zero, setting this mode effectively cancels fetching after
+retrieving nrows, otherwise it cancels fetching immediately.
+Related Functions
+OCIAttrGet()
+
+OCIStmtFetch2()
+Name
+OCI FetCH2
+Purpose
+Fetches rows from a query.
+Syntax
+sword OCIStmtFetch2 ( OCIStmt *stmtp,
+ OCIError *errhp,
+ ub4 nrows,
+ ub2 orientation,
+ ub4 scrollOffset,
+ ub4 mode);
+Comments
+The fetch call works similar to the OCIStmtFetch call with the
+addition of the fetchOffset parameter. It can be used on any
+statement handle, whether it is scrollable or not. For a
+non-scrollable statement handle, the only acceptable value
+will be OCI_FETCH_NEXT, and the fetchOffset parameter will be
+ignored. Applications are encouraged to use this new call.
+
+A fetchOffset with OCI_FETCH_RELATIVE is equivalent to
+OCI_FETCH_CURRENT with a value of 0, is equivalent to
+OCI_FETCH_NEXT with a value of 1, and equivalent to
+OCI_FETCH_PRIOR with a value of -1. Note that the range of
+accessible rows is [1,OCI_ATTR_ROW_COUNT] beyond which an
+error could be raised if sufficient rows do not exist in
+
+The fetch call is a local call, if prefetched rows suffice. However, this is
+transparent to the application. If LOB columns are being read, LOB locators
+are fetched for subsequent LOB operations to be performed on these locators.
+Prefetching is turned off if LONG columns are involved.
+A fetch with nrows set to 0 rows effectively cancels the fetch for this
+statement.
+Parameters
+stmtp (IN) - a statement (application request) handle.
+errhp (IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+nrows (IN) - number of rows to be fetched from the current position.
+It defaults to 1 for orientation OCI_FETCH_LAST.
+orientation (IN) - The acceptable values are as follows, with
+OCI_FETCH_NEXT being the default value.
+OCI_FETCH_CURRENT gets the current row,
+OCI_FETCH_NEXT gets the next row from the current position,
+OCI_FETCH_FIRST gets the first row in the result set,
+OCI_FETCH_LAST gets the last row in the result set,
+OCI_FETCH_PRIOR gets the previous row from the current row in the result set,
+OCI_FETCH_ABSOLUTE will fetch the row number (specified by fetchOffset
+parameter) in the result set using absolute positioning,
+OCI_FETCH_RELATIVE will fetch the row number (specified by fetchOffset
+parameter) in the result set using relative positioning.
+scrollOffset(IN) - offset used with the OCI_FETCH_ABSOLUTE and
+OCI_FETCH_RELATIVE orientation parameters only. It specify
+the new current position for scrollable result set. It is
+ignored for non-scrollable result sets.
+mode (IN) - for release 8.0, beta-1, the following mode is defined.
+OCI_DEFAULT - default mode
+OCI_EOF_FETCH - indicates that it is the last fetch from the result set.
+If nrows is non-zero, setting this mode effectively cancels fetching after
+retrieving nrows, otherwise it cancels fetching immediately.
+Related Functions
+OCIAttrGet()
+
+
+
+OCIStmtGetPieceInfo()
+Name
+OCI Get Piece Information
+Purpose
+Returns piece information for a piecewise operation.
+Syntax
+sword OCIStmtGetPieceInfo( const OCIStmt *stmtp,
+ OCIError *errhp,
+ void **hndlpp,
+ ub4 *typep,
+ ub1 *in_outp,
+ ub4 *iterp,
+ ub4 *idxp,
+ ub1 *piecep );
+
+Comments
+When an execute/fetch call returns OCI_NEED_DATA to get/return a
+dynamic bind/define value or piece, OCIStmtGetPieceInfo() returns the
+relevant information: bind/define handle, iteration or index number and
+which piece.
+See the section "Runtime Data Allocation and Piecewise Operations" on page
+5-16 for more information about using OCIStmtGetPieceInfo().
+Parameters
+stmtp (IN) - the statement when executed returned OCI_NEED_DATA.
+errhp (OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+hndlpp (OUT) - returns a pointer to the bind or define handle of the bind or
+define whose runtime data is required or is being provided.
+typep (OUT) - the type of the handle pointed to by hndlpp: OCI_HTYPE_BIND
+(for a bind handle) or OCI_HTYPE_DEFINE (for a define handle).
+in_outp (OUT) - returns OCI_PARAM_IN if the data is required for an IN bind
+value. Returns OCI_PARAM_OUT if the data is available as an OUT bind
+variable or a define position value.
+iterp (OUT) - returns the row number of a multiple row operation.
+idxp (OUT) - the index of an array element of a PL/SQL array bind operation.
+piecep (OUT) - returns one of the following defined values -
+OCI_ONE_PIECE, OCI_FIRST_PIECE, OCI_NEXT_PIECE and
+OCI_LAST_PIECE. The default value is always OCI_ONE_PIECE.
+Related Functions
+OCIAttrGet(), OCIAttrGet(), OCIStmtExecute(), OCIStmtFetch(),
+OCIStmtSetPieceInfo()
+
+
+
+
+OCIStmtPrepare()
+Name
+OCI Statement REQuest
+Purpose
+This call defines the SQL/PLSQL statement to be executed.
+Syntax
+sword OCIStmtPrepare ( OCIStmt *stmtp,
+ OCIError *errhp,
+ const OraText *stmt,
+ ub4 stmt_len,
+ ub4 language,
+ ub4 mode);
+Comments
+This call is used to prepare a SQL or PL/SQL statement for execution. The
+OCIStmtPrepare() call defines an application request.
+This is a purely local call. Data values for this statement initialized in
+subsequent bind calls will be stored in a bind handle which will hang off this
+statement handle.
+This call does not create an association between this statement handle and any
+particular server.
+See the section "Preparing Statements" on page 2-21 for more information
+about using this call.
+Parameters
+stmtp (IN) - a statement handle.
+errhp (IN) - an error handle to retrieve diagnostic information.
+stmt (IN) - SQL or PL/SQL statement to be executed. Must be a null-terminated
+string. The pointer to the OraText of the statement must be available as long
+as the statement is executed.
+stmt_len (IN) - length of the statement. Must not be zero.
+language (IN) - V7, V8, or native syntax. Possible values are:
+OCI_V7_SYNTAX - V7 ORACLE parsing syntax
+OCI_V8_SYNTAX - V8 ORACLE parsing syntax
+OCI_NTV_SYNTAX - syntax depending upon the version of the server.
+mode (IN) - the only defined mode is OCI_DEFAULT for default mode.
+Example
+This example demonstrates the use of OCIStmtPrepare(), as well as the OCI
+application initialization calls.
+Related Functions
+OCIAttrGet(), OCIStmtExecute()
+
+
+OCIStmtPrepare2()
+Name
+OCI Statement REQuest with (a) early binding to svchp and/or
+(b) stmt caching
+Purpose
+This call defines the SQL/PLSQL statement to be executed.
+Syntax
+sword OCIStmtPrepare2 ( OCISvcCtx *svchp,
+ OCIStmt **stmtp,
+ OCIError *errhp,
+ const OraText *stmt,
+ ub4 stmt_len,
+ const OraText *key,
+ ub4 key_len,
+ ub4 language,
+ ub4 mode);
+Comments
+This call is used to prepare a SQL or PL/SQL statement for execution. The
+OCIStmtPrepare() call defines an application request.
+This is a purely local call. Data values for this statement initialized in
+subsequent bind calls will be stored in a bind handle which will hang off this
+statement handle.
+This call creates an association between the statement handle and a service
+context. It differs from OCIStmtPrepare in that respect.It also supports
+stmt caching. The stmt will automatically be cached if the authp of the stmt
+has enabled stmt caching.
+Parameters
+svchp (IN) - the service context handle that contains the session that
+ this stmt handle belongs to.
+stmtp (OUT) - an unallocated stmt handle must be pased in. An allocated
+ and prepared statement handle will be returned.
+errhp (IN) - an error handle to retrieve diagnostic information.
+stmt (IN) - SQL or PL/SQL statement to be executed. Must be a null-
+ terminated string. The pointer to the OraText of the statement
+ must be available as long as the statement is executed.
+stmt_len (IN) - length of the statement. Must not be zero.
+key (IN) - This is only Valid for OCI Stmt Caching. It indicates the
+ key to search with. It thus optimizes the search in the cache.
+key_len (IN) - the length of the key. This, too, is onlly valid for stmt
+ caching.
+language (IN) - V7, V8, or native syntax. Possible values are:
+OCI_V7_SYNTAX - V7 ORACLE parsing syntax
+OCI_V8_SYNTAX - V8 ORACLE parsing syntax
+OCI_NTV_SYNTAX - syntax depending upon the version of the server.
+mode (IN) - the defined modes are OCI_DEFAULT and OCI_PREP2_CACHE_SEARCHONLY.
+Example
+Related Functions
+OCIStmtExecute(), OCIStmtRelease()
+
+
+OCIStmtRelease()
+Name
+OCI Statement Release. This call is used to relesae the stmt that
+was retreived using OCIStmtPrepare2(). If the stmt is release
+using this call, OCIHandleFree() must not be called on the stmt
+handle.
+Purpose
+This call releases the statement obtained by OCIStmtPrepare2
+Syntax
+sword OCIStmtRelease ( OCIStmt *stmtp,
+ OCIError *errhp,
+ cONST OraText *key,
+ ub4 key_len,
+ ub4 mode);
+Comments
+This call is used to release a handle obtained via OCIStmtPrepare2().
+It also frees the memory associated with the handle.
+This is a purely local call.
+Parameters
+stmtp (IN/OUT) - The statement handle to be released/freed.
+errhp (IN) - an error handle to retrieve diagnostic information.
+key (IN) - This is only Valid for OCI Stmt Caching. It indicates the
+ key to tag the stmt with.
+key_len (IN) - the length of the key. This, too, is only valid for stmt
+ caching.
+mode (IN) - the defined modes are OCI_DEFAULT for default mode and
+ OCI_STRLS_CACHE_DELETE (only used for Stmt Caching).
+Example
+Related Functions
+OCIStmtExecute(), OCIStmtPrepare2()
+
+
+OCIStmtSetPieceInfo()
+Name
+OCI Set Piece Information
+Purpose
+Sets piece information for a piecewise operation.
+Syntax
+sword OCIStmtSetPieceInfo ( void *hndlp,
+ ub4 type,
+ OCIError *errhp,
+ const void *bufp,
+ ub4 *alenp,
+ ub1 piece,
+ const void *indp,
+ ub2 *rcodep );
+Comments
+When an execute call returns OCI_NEED_DATA to get a dynamic IN/OUT
+bind value or piece, OCIStmtSetPieceInfo() sets the piece information: the
+buffer, the length, the indicator and which piece is currently being processed.
+For more information about using OCIStmtSetPieceInfo() see the section
+"Runtime Data Allocation and Piecewise Operations" on page 5-16.
+Parameters
+hndlp (IN/OUT) - the bind/define handle.
+type (IN) - type of the handle.
+errhp (OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+bufp (IN/OUT) - bufp is a pointer to a storage containing the data value or
+the piece when it is an IN bind variable, otherwise bufp is a pointer to
+storage for getting a piece or a value for OUT binds and define variables. For
+named data types or REFs, a pointer to the object or REF is returned.
+alenp (IN/OUT) - the length of the piece or the value.
+piece (IN) - the piece parameter. The following are valid values:
+OCI_ONE_PIECE, OCI_FIRST_PIECE, OCI_NEXT_PIECE, or
+OCI_LAST_PIECE.
+The default value is OCI_ONE_PIECE. This parameter is used for IN bind
+variables only.
+indp (IN/OUT) - indicator. A pointer to a sb2 value or pointer to an indicator
+structure for named data types (SQLT_NTY) and REFs (SQLT_REF), i.e., *indp
+is either an sb2 or a void * depending upon the data type.
+rcodep (IN/OUT) - return code.
+Related Functions
+OCIAttrGet(), OCIAttrGet(), OCIStmtExecute(), OCIStmtFetch(),
+OCIStmtGetPieceInfo()
+
+
+OCIFormatInit
+Name
+OCIFormat Package Initialize
+Purpose
+Initializes the OCIFormat package.
+Syntax
+sword OCIFormatInit(void *hndl, OCIError *err);
+Comments
+This routine must be called before calling any other OCIFormat routine.
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+Parameters
+hndl (IN/OUT) - OCI environment or session handle
+err (IN/OUT) - OCI error handle
+Related Functions
+OCIFormatTerm()
+
+
+OCIFormatString
+Name
+OCIFormat Package Format String
+Purpose
+Writes a text string into the supplied text buffer using the argument
+list submitted to it and in accordance with the format string given.
+Syntax
+sword OCIFormatString(void *hndl, OCIError *err, OraText *buffer,
+ sbig_ora bufferLength, sbig_ora *returnLength,
+ const OraText *formatString, ...);
+Comments
+The first call to this routine must be preceded by a call to the
+OCIFormatInit routine that initializes the OCIFormat package
+for use. When this routine is no longer needed then terminate
+the OCIFormat package by a call to the OCIFormatTerm routine.
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+Parameters
+hndl (IN/OUT) - OCI environment or session handle
+err (IN/OUT) - OCI error handle
+buffer (OUT) - text buffer for the string
+bufferLength (IN) - length of the text buffer
+returnLength (OUT) - length of the formatted string
+formatString (IN) - format specification string
+... (IN) - variable argument list
+Related Functions
+
+
+OCIFormatTerm
+Name
+OCIFormat Package Terminate
+Purpose
+Terminates the OCIFormat package.
+Syntax
+sword OCIFormatTerm(void *hndl, OCIError *err);
+Comments
+It must be called after the OCIFormat package is no longer being used.
+Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+Parameters
+hndl (IN/OUT) - OCI environment or session handle
+err (IN/OUT) - OCI error handle
+Related Functions
+OCIFormatInit()
+
+
+OCIFormatTUb1
+Name
+OCIFormat Package ub1 Type
+Purpose
+Return the type value for the ub1 type.
+Syntax
+sword OCIFormatTUb1(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTUb2
+Name
+OCIFormat Package ub2 Type
+Purpose
+Return the type value for the ub2 type.
+Syntax
+sword OCIFormatTUb2(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTUb4
+Name
+OCIFormat Package ub4 Type
+Purpose
+Return the type value for the ub4 type.
+Syntax
+sword OCIFormatTUb4(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTUword
+Name
+OCIFormat Package uword Type
+Purpose
+Return the type value for the uword type.
+Syntax
+sword OCIFormatTUword(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTUbig_ora
+Name
+OCIFormat Package ubig_ora Type
+Purpose
+Return the type value for the ubig_ora type.
+Syntax
+sword OCIFormatTUbig_ora(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTSb1
+Name
+OCIFormat Package sb1 Type
+Purpose
+Return the type value for the sb1 type.
+Syntax
+sword OCIFormatTSb1(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTSb2
+Name
+OCIFormat Package sb2 Type
+Purpose
+Return the type value for the sb2 type.
+Syntax
+sword OCIFormatTSb2(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTSb4
+Name
+OCIFormat Package sb4 Type
+Purpose
+Return the type value for the sb4 type.
+Syntax
+sword OCIFormatTSb4(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTSword
+Name
+OCIFormat Package sword Type
+Purpose
+Return the type value for the sword type.
+Syntax
+sword OCIFormatTSword(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTSbig_ora
+Name
+OCIFormat Package sbig_ora Type
+Purpose
+Return the type value for the sbig_ora type.
+Syntax
+sword OCIFormatTSbig_ora(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTEb1
+Name
+OCIFormat Package eb1 Type
+Purpose
+Return the type value for the eb1 type.
+Syntax
+sword OCIFormatTEb1(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTEb2
+Name
+OCIFormat Package eb2 Type
+Purpose
+Return the type value for the eb2 type.
+Syntax
+sword OCIFormatTEb2(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTEb4
+Name
+OCIFormat Package eb4 Type
+Purpose
+Return the type value for the eb4 type.
+Syntax
+sword OCIFormatTEb4(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTEword
+Name
+OCIFormat Package eword Type
+Purpose
+Return the type value for the eword type.
+Syntax
+sword OCIFormatTEword(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTChar
+Name
+OCIFormat Package text Type
+Purpose
+Return the type value for the text type.
+Syntax
+sword OCIFormatTChar(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTText
+Name
+OCIFormat Package *text Type
+Purpose
+Return the type value for the *text type.
+Syntax
+sword OCIFormatTText(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTDouble
+Name
+OCIFormat Package double Type
+Purpose
+Return the type value for the double type.
+Syntax
+sword OCIFormatTDouble(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatDvoid
+Name
+OCIFormat Package void Type
+Purpose
+Return the type value for the void type.
+Syntax
+sword OCIFormatTDvoid(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCIFormatTEnd
+Name
+OCIFormat Package end Type
+Purpose
+Return the list terminator's "type".
+Syntax
+sword OCIFormatTEnd(void);
+Comments
+None
+Parameters
+None
+Related Functions
+None
+
+
+OCISvcCtxToLda()
+Name
+OCI toggle SerVice context handle to Version 7 Lda_Def
+Purpose
+Toggles between a V8 service context handle and a V7 Lda_Def.
+Syntax
+sword OCISvcCtxToLda ( OCISvcCtx *srvhp,
+ OCIError *errhp,
+ Lda_Def *ldap );
+Comments
+Toggles between an Oracle8 service context handle and an Oracle7 Lda_Def.
+This function can only be called after a service context has been properly
+initialized.
+Once the service context has been translated to an Lda_Def, it can be used in
+release 7.x OCI calls (e.g., obindps(), ofen()).
+Note: If there are multiple service contexts which share the same server
+handle, only one can be in V7 mode at any time.
+The action of this call can be reversed by passing the resulting Lda_Def to
+the OCILdaToSvcCtx() function.
+Parameters
+svchp (IN/OUT) - the service context handle.
+errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+ldap (IN/OUT) - a Logon Data Area for V7-style OCI calls which is initialized
+by this call.
+Related Functions
+OCILdaToSvcCtx()
+
+
+
+
+OCITransCommit()
+Name
+OCI TX (transaction) CoMmit
+Purpose
+Commits the transaction associated with a specified service context.
+Syntax
+sword OCITransCommit ( OCISvcCtx *srvcp,
+ OCIError *errhp,
+ ub4 flags );
+Comments
+The transaction currently associated with the service context is committed. If
+it is a distributed transaction that the server cannot commit, this call
+additionally retrieves the state of the transaction from the database to be
+returned to the user in the error handle.
+If the application has defined multiple transactions, this function operates
+on the transaction currently associated with the service context. If the
+application is working with only the implicit local transaction created when
+database changes are made, that implicit transaction is committed.
+If the application is running in the object mode, then the modified or updated
+objects in the object cache for this transaction are also committed.
+The flags parameter is used for one-phase commit optimization in distributed
+transactions. If the transaction is non-distributed, the flags parameter is
+ignored, and OCI_DEFAULT can be passed as its value. OCI applications
+managing global transactions should pass a value of
+OCI_TRANS_TWOPHASE to the flags parameter for a two-phase commit. The
+default is one-phase commit.
+Under normal circumstances, OCITransCommit() returns with a status
+indicating that the transaction has either been committed or rolled back. With
+distributed transactions, it is possible that the transaction is now in-doubt
+(i.e., neither committed nor aborted). In this case, OCITransCommit()
+attempts to retrieve the status of the transaction from the server.
+The status is returned.
+Parameters
+srvcp (IN) - the service context handle.
+errhp (IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+flags -see the "Comments" section above.
+Related Functions
+OCITransRollback()
+
+
+
+
+OCITransDetach()
+Name
+OCI TX (transaction) DeTach
+Purpose
+Detaches a transaction.
+Syntax
+sword OCITransDetach ( OCISvcCtx *srvcp,
+ OCIError *errhp,
+ ub4 flags);
+Comments
+Detaches a global transaction from the service context handle. The transaction
+currently attached to the service context handle becomes inactive at the end
+of this call. The transaction may be resumed later by calling OCITransStart(),
+specifying a flags value of OCI_TRANS_RESUME.
+When a transaction is detached, the value which was specified in the timeout
+parameter of OCITransStart() when the transaction was started is used to
+determine the amount of time the branch can remain inactive before being
+deleted by the server's PMON process.
+Note: The transaction can be resumed by a different process than the one
+that detached it, provided that the transaction has the same
+authorization.
+Parameters
+srvcp (IN) - the service context handle.
+errhp (IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+flags (IN) - you must pass a value of OCI_DEFAULT for this parameter.
+Related Functions
+OCITransStart()
+
+
+
+OCITransForget()
+Name
+OCI TX (transaction) ForGeT
+Purpose
+Causes the server to forget a heuristically completed global transaction.
+Syntax
+sword OCITransForget ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ ub4 flags);
+
+Comments
+
+Forgets a heuristically completed global transaction. The server deletes the
+status of the transaction from the system's pending transaction table.
+The XID of the transaction to be forgotten is set as an attribute of the
+transaction handle (OCI_ATTR_XID).
+Parameters
+srvcp (IN) - the service context handle - the transaction is rolled back.
+errhp (IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+flags (IN) - you must pass OCI_DEFAULT for this parameter.
+Related Functions
+OCITransCommit(), OCITransRollback()
+
+
+OCITransMultiPrepare()
+Name
+OCI Trans(action) Multi-Branch Prepare
+Purpose
+Prepares a transaction with multiple branches in a single call.
+Syntax
+sword OCITransMultiPrepare ( OCISvcCtx *svchp,
+ ub4 numBranches,
+ OCITrans **txns,
+ OCIError **errhp);
+
+Comments
+
+Prepares the specified global transaction for commit.
+This call is valid only for distributed transactions.
+This call is an advanced performance feature intended for use only in
+situations where the caller is responsible for preparing all the branches
+in a transaction.
+Parameters
+srvcp (IN) - the service context handle.
+numBranches (IN) - This is the number of branches expected. It is also the
+array size for the next two parameters.
+txns (IN) - This is the array of transaction handles for the branches to
+prepare. They should all have the OCI_ATTR_XID set. The global transaction
+ID should be the same.
+errhp (IN) - This is the array of error handles. If OCI_SUCCESS is not
+returned, then these will indicate which branches received which errors.
+Related Functions
+OCITransPrepare()
+
+
+OCITransPrepare()
+Name
+OCI TX (transaction) PREpare
+Purpose
+Prepares a transaction for commit.
+Syntax
+sword OCITransPrepare ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ ub4 flags);
+
+Comments
+
+Prepares the specified global transaction for commit.
+This call is valid only for distributed transactions.
+The call returns OCI_SUCCESS_WITH_INFO if the transaction has not made
+any changes. The error handle will indicate that the transaction is read-only.
+The flag parameter is not currently used.
+Parameters
+srvcp (IN) - the service context handle.
+errhp (IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+flags (IN) - you must pass OCI_DEFAULT for this parameter.
+Related Functions
+OCITransCommit(), OCITransForget()
+
+
+
+
+OCITransRollback()
+Name
+OCI TX (transaction) RoLlback
+Purpose
+Rolls back the current transaction.
+Syntax
+sword OCITransRollback ( void *svchp,
+ OCIError *errhp,
+ ub4 flags );
+Comments
+The current transaction- defined as the set of statements executed since the
+last OCITransCommit() or since OCISessionBegin()-is rolled back.
+If the application is running under object mode then the modified or updated
+objects in the object cache for this transaction are also rolled back.
+An error is returned if an attempt is made to roll back a global transaction
+that is not currently active.
+Parameters
+svchp (IN) - a service context handle. The transaction currently set in the
+service context handle is rolled back.
+errhp -(IN) - an error handle which can be passed to OCIErrorGet() for
+diagnostic information in the event of an error.
+flags - you must pass a value of OCI_DEFAULT for this parameter.
+Related Functions
+OCITransCommit()
+
+
+
+
+OCITransStart()
+Name
+OCI TX (transaction) STart
+Purpose
+Sets the beginning of a transaction.
+Syntax
+sword OCITransStart ( OCISvcCtx *svchp,
+ OCIError *errhp,
+ uword timeout,
+ ub4 flags);
+
+Comments
+This function sets the beginning of a global or serializable transaction. The
+transaction context currently associated with the service context handle is
+initialized at the end of the call if the flags parameter specifies that a new
+transaction should be started.
+The XID of the transaction is set as an attribute of the transaction handle
+(OCI_ATTR_XID)
+Parameters
+svchp (IN/OUT) - the service context handle. The transaction context in the
+service context handle is initialized at the end of the call if the flag
+specified a new transaction to be started.
+errhp (IN/OUT) - The OCI error handle. If there is an error, it is recorded in
+err and this function returns OCI_ERROR. Diagnostic information can be
+obtained by calling OCIErrorGet().
+timeout (IN) - the time, in seconds, to wait for a transaction to become
+available for resumption when OCI_TRANS_RESUME is specified. When
+OCI_TRANS_NEW is specified, this value is stored and may be used later by
+OCITransDetach().
+flags (IN) - specifies whether a new transaction is being started or an
+existing transaction is being resumed. Also specifies serializiability or
+read-only status. More than a single value can be specified. By default,
+a read/write transaction is started. The flag values are:
+OCI_TRANS_NEW - starts a new transaction branch. By default starts a
+tightly coupled and migratable branch.
+OCI_TRANS_TIGHT - explicitly specifies a tightly coupled branch
+OCI_TRANS_LOOSE - specifies a loosely coupled branch
+OCI_TRANS_RESUME - resumes an existing transaction branch.
+OCI_TRANS_READONLY - start a readonly transaction
+OCI_TRANS_SERIALIZABLE - start a serializable transaction
+Related Functions
+OCITransDetach()
+
+
+
+
+
+******************************************************************************/
+/*-----------------------Dynamic Callback Function Pointers------------------*/
+
+
+typedef sb4 (*OCICallbackInBind)(void *ictxp, OCIBind *bindp, ub4 iter,
+ ub4 index, void **bufpp, ub4 *alenp,
+ ub1 *piecep, void **indp);
+
+typedef sb4 (*OCICallbackOutBind)(void *octxp, OCIBind *bindp, ub4 iter,
+ ub4 index, void **bufpp, ub4 **alenp,
+ ub1 *piecep, void **indp,
+ ub2 **rcodep);
+
+typedef sb4 (*OCICallbackDefine)(void *octxp, OCIDefine *defnp, ub4 iter,
+ void **bufpp, ub4 **alenp, ub1 *piecep,
+ void **indp, ub2 **rcodep);
+
+typedef sword (*OCIUserCallback)(void *ctxp, void *hndlp, ub4 type,
+ ub4 fcode, ub4 when, sword returnCode,
+ sb4 *errnop, va_list arglist);
+
+typedef sword (*OCIEnvCallbackType)(OCIEnv *env, ub4 mode,
+ size_t xtramem_sz, void *usrmemp,
+ OCIUcb *ucbDesc);
+
+typedef sb4 (*OCICallbackLobRead)(void *ctxp, const void *bufp,
+ ub4 len, ub1 piece);
+
+typedef sb4 (*OCICallbackLobWrite)(void *ctxp, void *bufp,
+ ub4 *lenp, ub1 *piece);
+
+#ifdef ORAXB8_DEFINED
+
+typedef sb4 (*OCICallbackLobRead2)(void *ctxp, const void *bufp, oraub8 len,
+ ub1 piece, void **changed_bufpp,
+ oraub8 *changed_lenp);
+
+typedef sb4 (*OCICallbackLobWrite2)(void *ctxp, void *bufp, oraub8 *lenp,
+ ub1 *piece, void **changed_bufpp,
+ oraub8 *changed_lenp);
+
+typedef sb4 (*OCICallbackLobArrayRead)(void *ctxp, ub4 array_iter,
+ const void *bufp, oraub8 len,
+ ub1 piece, void **changed_bufpp,
+ oraub8 *changed_lenp);
+
+typedef sb4 (*OCICallbackLobArrayWrite)(void *ctxp, ub4 array_iter,
+ void *bufp, oraub8 *lenp,
+ ub1 *piece, void **changed_bufpp,
+ oraub8 *changed_lenp);
+#endif
+
+typedef sb4 (*OCICallbackLobGetDeduplicateRegions)(void *ctxp,
+ OCILobRegion *regions,
+ ub4 count, ub1 piece,
+ OCILobRegion **changed_reg,
+ ub4 *changed_count);
+
+typedef sb4 (*OCICallbackAQEnq)(void *ctxp, void **payload,
+ void **payload_ind);
+
+typedef sb4 (*OCICallbackAQEnqStreaming)(void *ctxp, void **payload,
+ void **payload_ind,
+ OCIAQMsgProperties **msgprop,
+ OCIType **tdo);
+
+typedef sb4 (*OCICallbackAQDeq)(void *ctxp, void **payload,
+ void **payload_ind);
+
+/*--------------------------Failover Callback Structure ---------------------*/
+typedef sb4 (*OCICallbackFailover)(void *svcctx, void *envctx,
+ void *fo_ctx, ub4 fo_type,
+ ub4 fo_event);
+
+typedef struct
+{
+ OCICallbackFailover callback_function;
+ void *fo_ctx;
+}
+OCIFocbkStruct;
+
+/*---------------------Statement Cache callback function ------------------*/
+
+typedef sword (*OCICallbackStmtCache)(void *ctx, OCIStmt *stmt, ub4 mode);
+
+/*--------------------------HA Callback Structure ---------------------*/
+typedef void (*OCIEventCallback)(void *evtctx, OCIEvent *eventhp);
+
+
+/*------------------------- Round Trip Callback Structure --------------------*/
+typedef sword (*OCIRoundTripCallback)(void *rtctx, OCISvcCtx *svch,
+ OCISession *userh);
+
+
+/*****************************************************************************
+ ACTUAL PROTOTYPE DECLARATIONS
+******************************************************************************/
+
+sword OCIInitialize (ub4 mode, void *ctxp,
+ void *(*malocfp)(void *ctxp, size_t size),
+ void *(*ralocfp)(void *ctxp, void *memptr, size_t newsize),
+ void (*mfreefp)(void *ctxp, void *memptr) );
+
+sword OCITerminate( ub4 mode);
+
+sword OCIEnvCreate (OCIEnv **envp, ub4 mode, void *ctxp,
+ void *(*malocfp)(void *ctxp, size_t size),
+ void *(*ralocfp)(void *ctxp, void *memptr, size_t newsize),
+ void (*mfreefp)(void *ctxp, void *memptr),
+ size_t xtramem_sz, void **usrmempp);
+
+sword OCIEnvNlsCreate (OCIEnv **envp, ub4 mode, void *ctxp,
+ void *(*malocfp)(void *ctxp, size_t size),
+ void *(*ralocfp)(void *ctxp, void *memptr, size_t newsize),
+ void (*mfreefp)(void *ctxp, void *memptr),
+ size_t xtramem_sz, void **usrmempp,
+ ub2 charset, ub2 ncharset);
+
+sword OCIFEnvCreate (OCIEnv **envp, ub4 mode, void *ctxp,
+ void *(*malocfp)(void *ctxp, size_t size),
+ void *(*ralocfp)(void *ctxp, void *memptr, size_t newsize),
+ void (*mfreefp)(void *ctxp, void *memptr),
+ size_t xtramem_sz, void **usrmempp, void *fupg);
+
+sword OCIHandleAlloc(const void *parenth, void **hndlpp, const ub4 type,
+ const size_t xtramem_sz, void **usrmempp);
+
+sword OCIHandleFree(void *hndlp, const ub4 type);
+
+
+sword OCIDescriptorAlloc(const void *parenth, void **descpp,
+ const ub4 type, const size_t xtramem_sz,
+ void **usrmempp);
+
+sword OCIArrayDescriptorAlloc(const void *parenth, void **descpp,
+ const ub4 type, ub4 array_size,
+ const size_t xtramem_sz, void **usrmempp);
+
+sword OCIDescriptorFree(void *descp, const ub4 type);
+
+sword OCIArrayDescriptorFree(void **descp, const ub4 type);
+
+sword OCIEnvInit (OCIEnv **envp, ub4 mode,
+ size_t xtramem_sz, void **usrmempp);
+
+sword OCIServerAttach (OCIServer *srvhp, OCIError *errhp,
+ const OraText *dblink, sb4 dblink_len, ub4 mode);
+
+sword OCIServerDetach (OCIServer *srvhp, OCIError *errhp, ub4 mode);
+
+sword OCISessionBegin (OCISvcCtx *svchp, OCIError *errhp, OCISession *usrhp,
+ ub4 credt, ub4 mode);
+
+sword OCISessionEnd (OCISvcCtx *svchp, OCIError *errhp, OCISession *usrhp,
+ ub4 mode);
+
+sword OCILogon (OCIEnv *envhp, OCIError *errhp, OCISvcCtx **svchp,
+ const OraText *username, ub4 uname_len,
+ const OraText *password, ub4 passwd_len,
+ const OraText *dbname, ub4 dbname_len);
+
+sword OCILogon2 (OCIEnv *envhp, OCIError *errhp, OCISvcCtx **svchp,
+ const OraText *username, ub4 uname_len,
+ const OraText *password, ub4 passwd_len,
+ const OraText *dbname, ub4 dbname_len,
+ ub4 mode);
+
+sword OCILogoff (OCISvcCtx *svchp, OCIError *errhp);
+
+
+sword OCIPasswordChange (OCISvcCtx *svchp, OCIError *errhp,
+ const OraText *user_name, ub4 usernm_len,
+ const OraText *opasswd, ub4 opasswd_len,
+ const OraText *npasswd, ub4 npasswd_len,
+ ub4 mode);
+
+sword OCIStmtPrepare (OCIStmt *stmtp, OCIError *errhp, const OraText *stmt,
+ ub4 stmt_len, ub4 language, ub4 mode);
+
+sword OCIStmtPrepare2 ( OCISvcCtx *svchp, OCIStmt **stmtp, OCIError *errhp,
+ const OraText *stmt, ub4 stmt_len, const OraText *key,
+ ub4 key_len, ub4 language, ub4 mode);
+
+sword OCIStmtRelease ( OCIStmt *stmtp, OCIError *errhp, const OraText *key,
+ ub4 key_len, ub4 mode);
+
+sword OCIBindByPos (OCIStmt *stmtp, OCIBind **bindp, OCIError *errhp,
+ ub4 position, void *valuep, sb4 value_sz,
+ ub2 dty, void *indp, ub2 *alenp, ub2 *rcodep,
+ ub4 maxarr_len, ub4 *curelep, ub4 mode);
+
+sword OCIBindByName (OCIStmt *stmtp, OCIBind **bindp, OCIError *errhp,
+ const OraText *placeholder, sb4 placeh_len,
+ void *valuep, sb4 value_sz, ub2 dty,
+ void *indp, ub2 *alenp, ub2 *rcodep,
+ ub4 maxarr_len, ub4 *curelep, ub4 mode);
+
+sword OCIBindObject (OCIBind *bindp, OCIError *errhp, const OCIType *type,
+ void **pgvpp, ub4 *pvszsp, void **indpp,
+ ub4 *indszp);
+
+sword OCIBindDynamic (OCIBind *bindp, OCIError *errhp, void *ictxp,
+ OCICallbackInBind icbfp, void *octxp,
+ OCICallbackOutBind ocbfp);
+
+sword OCIBindArrayOfStruct (OCIBind *bindp, OCIError *errhp,
+ ub4 pvskip, ub4 indskip,
+ ub4 alskip, ub4 rcskip);
+
+sword OCIStmtGetPieceInfo (OCIStmt *stmtp, OCIError *errhp,
+ void **hndlpp, ub4 *typep,
+ ub1 *in_outp, ub4 *iterp, ub4 *idxp,
+ ub1 *piecep);
+
+sword OCIStmtSetPieceInfo (void *hndlp, ub4 type, OCIError *errhp,
+ const void *bufp, ub4 *alenp, ub1 piece,
+ const void *indp, ub2 *rcodep);
+
+sword OCIStmtExecute (OCISvcCtx *svchp, OCIStmt *stmtp, OCIError *errhp,
+ ub4 iters, ub4 rowoff, const OCISnapshot *snap_in,
+ OCISnapshot *snap_out, ub4 mode);
+
+sword OCIDefineByPos (OCIStmt *stmtp, OCIDefine **defnp, OCIError *errhp,
+ ub4 position, void *valuep, sb4 value_sz, ub2 dty,
+ void *indp, ub2 *rlenp, ub2 *rcodep, ub4 mode);
+
+sword OCIDefineObject (OCIDefine *defnp, OCIError *errhp,
+ const OCIType *type, void **pgvpp,
+ ub4 *pvszsp, void **indpp, ub4 *indszp);
+
+sword OCIDefineDynamic (OCIDefine *defnp, OCIError *errhp, void *octxp,
+ OCICallbackDefine ocbfp);
+
+sword OCIRowidToChar (OCIRowid *rowidDesc, OraText *outbfp, ub2 *outbflp,
+ OCIError *errhp);
+
+sword OCIDefineArrayOfStruct (OCIDefine *defnp, OCIError *errhp, ub4 pvskip,
+ ub4 indskip, ub4 rlskip, ub4 rcskip);
+
+sword OCIStmtFetch (OCIStmt *stmtp, OCIError *errhp, ub4 nrows,
+ ub2 orientation, ub4 mode);
+
+sword OCIStmtFetch2 (OCIStmt *stmtp, OCIError *errhp, ub4 nrows,
+ ub2 orientation, sb4 scrollOffset, ub4 mode);
+
+sword OCIStmtGetBindInfo (OCIStmt *stmtp, OCIError *errhp, ub4 size,
+ ub4 startloc,
+ sb4 *found, OraText *bvnp[], ub1 bvnl[],
+ OraText *invp[], ub1 inpl[], ub1 dupl[],
+ OCIBind **hndl);
+
+sword OCIDescribeAny (OCISvcCtx *svchp, OCIError *errhp,
+ void *objptr,
+ ub4 objnm_len, ub1 objptr_typ, ub1 info_level,
+ ub1 objtyp, OCIDescribe *dschp);
+
+sword OCIParamGet (const void *hndlp, ub4 htype, OCIError *errhp,
+ void **parmdpp, ub4 pos);
+
+sword OCIParamSet(void *hdlp, ub4 htyp, OCIError *errhp, const void *dscp,
+ ub4 dtyp, ub4 pos);
+
+sword OCITransStart (OCISvcCtx *svchp, OCIError *errhp,
+ uword timeout, ub4 flags );
+
+sword OCITransDetach (OCISvcCtx *svchp, OCIError *errhp, ub4 flags );
+
+sword OCITransCommit (OCISvcCtx *svchp, OCIError *errhp, ub4 flags);
+
+sword OCITransRollback (OCISvcCtx *svchp, OCIError *errhp, ub4 flags);
+
+sword OCITransPrepare (OCISvcCtx *svchp, OCIError *errhp, ub4 flags);
+
+sword OCITransMultiPrepare (OCISvcCtx *svchp, ub4 numBranches,
+ OCITrans **txns, OCIError **errhp);
+
+sword OCITransForget (OCISvcCtx *svchp, OCIError *errhp, ub4 flags);
+
+sword OCIErrorGet (void *hndlp, ub4 recordno, OraText *sqlstate,
+ sb4 *errcodep, OraText *bufp, ub4 bufsiz, ub4 type);
+
+sword OCILobAppend (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *dst_locp,
+ OCILobLocator *src_locp);
+
+sword OCILobAssign (OCIEnv *envhp, OCIError *errhp,
+ const OCILobLocator *src_locp,
+ OCILobLocator **dst_locpp);
+
+sword OCILobCharSetForm (OCIEnv *envhp, OCIError *errhp,
+ const OCILobLocator *locp, ub1 *csfrm);
+
+sword OCILobCharSetId (OCIEnv *envhp, OCIError *errhp,
+ const OCILobLocator *locp, ub2 *csid);
+
+sword OCILobCopy (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *dst_locp,
+ OCILobLocator *src_locp, ub4 amount, ub4 dst_offset,
+ ub4 src_offset);
+
+sword OCILobCreateTemporary(OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub2 csid,
+ ub1 csfrm,
+ ub1 lobtype,
+ boolean cache,
+ OCIDuration duration);
+
+
+sword OCILobClose( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp );
+
+
+sword OCILobDisableBuffering (OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp);
+
+sword OCILobEnableBuffering (OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp);
+
+sword OCILobErase (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp,
+ ub4 *amount, ub4 offset);
+
+sword OCILobFileClose (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *filep);
+
+sword OCILobFileCloseAll (OCISvcCtx *svchp, OCIError *errhp);
+
+sword OCILobFileExists (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *filep,
+ boolean *flag);
+
+sword OCILobFileGetName (OCIEnv *envhp, OCIError *errhp,
+ const OCILobLocator *filep,
+ OraText *dir_alias, ub2 *d_length,
+ OraText *filename, ub2 *f_length);
+
+sword OCILobFileIsOpen (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *filep,
+ boolean *flag);
+
+sword OCILobFileOpen (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *filep,
+ ub1 mode);
+
+sword OCILobFileSetName (OCIEnv *envhp, OCIError *errhp,
+ OCILobLocator **filepp,
+ const OraText *dir_alias, ub2 d_length,
+ const OraText *filename, ub2 f_length);
+
+sword OCILobFlushBuffer (OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub4 flag);
+
+sword OCILobFreeTemporary(OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp);
+
+sword OCILobGetChunkSize(OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub4 *chunksizep);
+
+sword OCILobGetLength (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *locp,
+ ub4 *lenp);
+
+sword OCILobIsEqual (OCIEnv *envhp, const OCILobLocator *x,
+ const OCILobLocator *y,
+ boolean *is_equal);
+
+sword OCILobIsOpen( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ boolean *flag);
+
+sword OCILobIsTemporary(OCIEnv *envp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ boolean *is_temporary);
+
+sword OCILobLoadFromFile (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *dst_locp,
+ OCILobLocator *src_filep,
+ ub4 amount, ub4 dst_offset,
+ ub4 src_offset);
+
+sword OCILobLocatorAssign (OCISvcCtx *svchp, OCIError *errhp,
+ const OCILobLocator *src_locp,
+ OCILobLocator **dst_locpp);
+
+
+sword OCILobLocatorIsInit (OCIEnv *envhp, OCIError *errhp,
+ const OCILobLocator *locp,
+ boolean *is_initialized);
+
+sword OCILobOpen( OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCILobLocator *locp,
+ ub1 mode );
+
+sword OCILobRead (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp,
+ ub4 *amtp, ub4 offset, void *bufp, ub4 bufl, void *ctxp,
+ OCICallbackLobRead cbfp, ub2 csid, ub1 csfrm);
+
+sword OCILobTrim (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp,
+ ub4 newlen);
+
+sword OCILobWrite (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp,
+ ub4 *amtp, ub4 offset, void *bufp, ub4 buflen,
+ ub1 piece, void *ctxp, OCICallbackLobWrite cbfp,
+ ub2 csid, ub1 csfrm);
+
+sword OCILobGetDeduplicateRegions(OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *locp,
+ OCILobRegion *regp, ub4 *count, ub1 piece,
+ void *ctxp,
+ OCICallbackLobGetDeduplicateRegions cbfp);
+
+sword OCILobWriteAppend(OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *lobp,
+ ub4 *amtp, void *bufp, ub4 bufl, ub1 piece,
+ void *ctxp, OCICallbackLobWrite cbfp, ub2 csid,
+ ub1 csfrm);
+
+sword OCIBreak (void *hndlp, OCIError *errhp);
+
+sword OCIReset (void *hndlp, OCIError *errhp);
+
+sword OCIServerVersion (void *hndlp, OCIError *errhp, OraText *bufp,
+ ub4 bufsz,
+ ub1 hndltype);
+
+sword OCIServerRelease (void *hndlp, OCIError *errhp, OraText *bufp,
+ ub4 bufsz,
+ ub1 hndltype, ub4 *version);
+
+sword OCIAttrGet (const void *trgthndlp, ub4 trghndltyp,
+ void *attributep, ub4 *sizep, ub4 attrtype,
+ OCIError *errhp);
+
+sword OCIAttrSet (void *trgthndlp, ub4 trghndltyp, void *attributep,
+ ub4 size, ub4 attrtype, OCIError *errhp);
+
+sword OCISvcCtxToLda (OCISvcCtx *svchp, OCIError *errhp, Lda_Def *ldap);
+
+sword OCILdaToSvcCtx (OCISvcCtx **svchpp, OCIError *errhp, Lda_Def *ldap);
+
+sword OCIResultSetToStmt (OCIResult *rsetdp, OCIError *errhp);
+
+sword OCIFileClose ( void *hndl, OCIError *err, OCIFileObject *filep );
+
+sword OCIUserCallbackRegister(void *hndlp, ub4 type, void *ehndlp,
+ OCIUserCallback callback, void *ctxp,
+ ub4 fcode, ub4 when, OCIUcb *ucbDesc);
+
+sword OCIUserCallbackGet(void *hndlp, ub4 type, void *ehndlp,
+ ub4 fcode, ub4 when, OCIUserCallback *callbackp,
+ void **ctxpp, OCIUcb *ucbDesc);
+
+sword OCISharedLibInit(void *metaCtx, void *libCtx, ub4 argfmt, sword argc,
+ void **argv, OCIEnvCallbackType envCallback);
+
+sword OCIFileExists ( void *hndl, OCIError *err, OraText *filename,
+ OraText *path, ub1 *flag );
+
+sword OCIFileFlush( void *hndl, OCIError *err, OCIFileObject *filep );
+
+
+sword OCIFileGetLength( void *hndl, OCIError *err, OraText *filename,
+ OraText *path, ubig_ora *lenp );
+
+sword OCIFileInit ( void *hndl, OCIError *err );
+
+sword OCIFileOpen ( void *hndl, OCIError *err, OCIFileObject **filep,
+ OraText *filename, OraText *path, ub4 mode, ub4 create,
+ ub4 type );
+
+sword OCIFileRead ( void *hndl, OCIError *err, OCIFileObject *filep,
+ void *bufp, ub4 bufl, ub4 *bytesread );
+
+sword OCIFileSeek ( void *hndl, OCIError *err, OCIFileObject *filep,
+ uword origin, ubig_ora offset, sb1 dir );
+
+sword OCIFileTerm ( void *hndl, OCIError *err );
+
+
+sword OCIFileWrite ( void *hndl, OCIError *err, OCIFileObject *filep,
+ void *bufp, ub4 buflen, ub4 *byteswritten );
+
+
+#ifdef ORAXB8_DEFINED
+
+sword OCILobCopy2 (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *dst_locp,
+ OCILobLocator *src_locp, oraub8 amount,
+ oraub8 dst_offset,
+ oraub8 src_offset);
+
+sword OCILobErase2 (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp,
+ oraub8 *amount, oraub8 offset);
+
+sword OCILobGetLength2 (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *locp, oraub8 *lenp);
+
+sword OCILobLoadFromFile2 (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *dst_locp,
+ OCILobLocator *src_filep,
+ oraub8 amount, oraub8 dst_offset,
+ oraub8 src_offset);
+
+sword OCILobRead2 (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp,
+ oraub8 *byte_amtp, oraub8 *char_amtp, oraub8 offset,
+ void *bufp, oraub8 bufl, ub1 piece, void *ctxp,
+ OCICallbackLobRead2 cbfp, ub2 csid, ub1 csfrm);
+
+sword OCILobArrayRead (OCISvcCtx *svchp, OCIError *errhp, ub4 *array_iter,
+ OCILobLocator **lobp_arr, oraub8 *byte_amt_arr,
+ oraub8 *char_amt_arr, oraub8 *offset_arr,
+ void **bufp_arr, oraub8 *bufl_arr, ub1 piece,
+ void *ctxp, OCICallbackLobArrayRead cbfp, ub2 csid,
+ ub1 csfrm);
+
+sword OCILobTrim2 (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp,
+ oraub8 newlen);
+
+sword OCILobWrite2 (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp,
+ oraub8 *byte_amtp, oraub8 *char_amtp, oraub8 offset,
+ void *bufp, oraub8 buflen, ub1 piece, void *ctxp,
+ OCICallbackLobWrite2 cbfp, ub2 csid, ub1 csfrm);
+
+sword OCILobArrayWrite (OCISvcCtx *svchp, OCIError *errhp, ub4 *array_iter,
+ OCILobLocator **lobp_arr, oraub8 *byte_amt_arr,
+ oraub8 *char_amt_arr, oraub8 *offset_arr,
+ void **bufp_arr, oraub8 *bufl_arr, ub1 piece,
+ void *ctxp, OCICallbackLobArrayWrite cbfp, ub2 csid,
+ ub1 csfrm);
+
+sword OCILobWriteAppend2 (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *lobp,
+ oraub8 *byte_amtp, oraub8 *char_amtp, void *bufp,
+ oraub8 bufl, ub1 piece, void *ctxp,
+ OCICallbackLobWrite2 cbfp, ub2 csid, ub1 csfrm);
+
+sword OCILobGetStorageLimit (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *lobp, oraub8 *limitp);
+
+sword OCILobGetOptions (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *lobp,
+ ub4 optypes, void *optionsp, ub4 *optionslenp,
+ ub4 mode);
+
+sword OCILobSetOptions (OCISvcCtx *svchp, OCIError *errhp,
+ OCILobLocator *lobp,
+ ub4 optypes, void *optionsp, ub4 optionslen,
+ ub4 mode);
+
+sword OCILobGetContentType (OCISvcCtx *svchp,
+ OCIError *errhp, OCILobLocator *lobp,
+ oratext *contenttypep, ub4 *contenttypelenp,
+ ub4 mode);
+
+sword OCILobSetContentType (OCISvcCtx *svchp,
+ OCIError *errhp, OCILobLocator *lobp,
+ const oratext *contenttypep, ub4 contenttypelen,
+ ub4 mode);
+
+#endif
+
+/*
+ ** Initialize the security package
+ */
+sword OCISecurityInitialize (OCISecurity *sechandle, OCIError *error_handle);
+
+sword OCISecurityTerminate (OCISecurity *sechandle, OCIError *error_handle);
+
+sword OCISecurityOpenWallet(OCISecurity *osshandle,
+ OCIError *error_handle,
+ size_t wrllen,
+ OraText *wallet_resource_locator,
+ size_t pwdlen,
+ OraText *password,
+ nzttWallet *wallet);
+
+sword OCISecurityCloseWallet(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttWallet *wallet);
+
+sword OCISecurityCreateWallet(OCISecurity *osshandle,
+ OCIError *error_handle,
+ size_t wrllen,
+ OraText *wallet_resource_locator,
+ size_t pwdlen,
+ OraText *password,
+ nzttWallet *wallet);
+
+sword OCISecurityDestroyWallet(OCISecurity *osshandle,
+ OCIError *error_handle,
+ size_t wrllen,
+ OraText *wallet_resource_locator,
+ size_t pwdlen,
+ OraText *password);
+
+sword OCISecurityStorePersona(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona **persona,
+ nzttWallet *wallet);
+
+sword OCISecurityOpenPersona(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona);
+
+sword OCISecurityClosePersona(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona);
+
+sword OCISecurityRemovePersona(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona **persona);
+
+sword OCISecurityCreatePersona(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttIdentType identity_type,
+ nzttCipherType cipher_type,
+ nzttPersonaDesc *desc,
+ nzttPersona **persona);
+
+sword OCISecuritySetProtection(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ nzttcef crypto_engine_function,
+ nztttdufmt data_unit_format,
+ nzttProtInfo *protection_info);
+
+sword OCISecurityGetProtection(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ nzttcef crypto_engine_function,
+ nztttdufmt * data_unit_format_ptr,
+ nzttProtInfo *protection_info);
+
+sword OCISecurityRemoveIdentity(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttIdentity **identity_ptr);
+
+sword OCISecurityCreateIdentity(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttIdentType type,
+ nzttIdentityDesc *desc,
+ nzttIdentity **identity_ptr);
+
+sword OCISecurityAbortIdentity(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttIdentity **identity_ptr);
+
+sword OCISecurityFreeIdentity(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttIdentity **identity_ptr);
+
+
+sword OCISecurityStoreTrustedIdentity(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttIdentity **identity_ptr,
+ nzttPersona *persona);
+
+sword OCISecuritySign(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ nzttces signature_state,
+ size_t input_length,
+ ub1 *input,
+ nzttBufferBlock *buffer_block);
+
+sword OCISecuritySignExpansion(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ size_t inputlen,
+ size_t *signature_length);
+
+sword OCISecurityVerify(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ nzttces signature_state,
+ size_t siglen,
+ ub1 *signature,
+ nzttBufferBlock *extracted_message,
+ boolean *verified,
+ boolean *validated,
+ nzttIdentity **signing_party_identity);
+
+sword OCISecurityValidate(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ nzttIdentity *identity,
+ boolean *validated);
+
+sword OCISecuritySignDetached(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ nzttces signature_state,
+ size_t input_length,
+ ub1 * input,
+ nzttBufferBlock *signature);
+
+sword OCISecuritySignDetExpansion(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ size_t input_length,
+ size_t *required_buffer_length);
+
+sword OCISecurityVerifyDetached(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ nzttces signature_state,
+ size_t data_length,
+ ub1 *data,
+ size_t siglen,
+ ub1 *signature,
+ boolean *verified,
+ boolean *validated,
+ nzttIdentity **signing_party_identity);
+
+sword OCISecurity_PKEncrypt(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ size_t number_of_recipients,
+ nzttIdentity *recipient_list,
+ nzttces encryption_state,
+ size_t input_length,
+ ub1 *input,
+ nzttBufferBlock *encrypted_data);
+
+sword OCISecurityPKEncryptExpansion(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ size_t number_recipients,
+ size_t input_length,
+ size_t *buffer_length_required);
+
+sword OCISecurityPKDecrypt(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ nzttces encryption_state,
+ size_t input_length,
+ ub1 *input,
+ nzttBufferBlock *encrypted_data);
+
+sword OCISecurityEncrypt(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ nzttces encryption_state,
+ size_t input_length,
+ ub1 *input,
+ nzttBufferBlock *encrypted_data);
+
+sword OCISecurityEncryptExpansion(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ size_t input_length,
+ size_t *encrypted_data_length);
+
+sword OCISecurityDecrypt(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ nzttces decryption_state,
+ size_t input_length,
+ ub1 *input,
+ nzttBufferBlock *decrypted_data);
+
+sword OCISecurityEnvelope(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ size_t number_of_recipients,
+ nzttIdentity *identity,
+ nzttces encryption_state,
+ size_t input_length,
+ ub1 *input,
+ nzttBufferBlock *enveloped_data);
+
+sword OCISecurityDeEnvelope(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ nzttces decryption_state,
+ size_t input_length,
+ ub1 *input,
+ nzttBufferBlock *output_message,
+ boolean *verified,
+ boolean *validated,
+ nzttIdentity **sender_identity);
+
+sword OCISecurityKeyedHash(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ nzttces hash_state,
+ size_t input_length,
+ ub1 *input,
+ nzttBufferBlock *keyed_hash);
+
+sword OCISecurityKeyedHashExpansion(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ size_t input_length,
+ size_t *required_buffer_length);
+
+sword OCISecurityHash(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ nzttces hash_state,
+ size_t input,
+ ub1 *input_length,
+ nzttBufferBlock *hash);
+
+sword OCISecurityHashExpansion(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ size_t input_length,
+ size_t *required_buffer_length);
+
+sword OCISecuritySeedRandom(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ size_t seed_length,
+ ub1 *seed);
+
+sword OCISecurityRandomBytes(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ size_t number_of_bytes_desired,
+ nzttBufferBlock *random_bytes);
+
+sword OCISecurityRandomNumber(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttPersona *persona,
+ uword *random_number_ptr);
+
+sword OCISecurityInitBlock(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttBufferBlock *buffer_block);
+
+sword OCISecurityReuseBlock(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttBufferBlock *buffer_block);
+
+sword OCISecurityPurgeBlock(OCISecurity *osshandle,
+ OCIError *error_handle,
+ nzttBufferBlock *buffer_block);
+
+sword OCISecuritySetBlock(OCISecurity *osshandle,
+ OCIError *error_handle,
+ uword flags_to_set,
+ size_t buffer_length,
+ size_t used_buffer_length,
+ ub1 *buffer,
+ nzttBufferBlock *buffer_block);
+
+sword OCISecurityGetIdentity(OCISecurity *osshandle,
+ OCIError *error_handle,
+ size_t namelen,
+ OraText *distinguished_name,
+ nzttIdentity **identity);
+
+sword OCIAQEnq(OCISvcCtx *svchp, OCIError *errhp, OraText *queue_name,
+ OCIAQEnqOptions *enqopt, OCIAQMsgProperties *msgprop,
+ OCIType *payload_tdo, void **payload, void **payload_ind,
+ OCIRaw **msgid, ub4 flags);
+
+sword OCIAQDeq(OCISvcCtx *svchp, OCIError *errhp, OraText *queue_name,
+ OCIAQDeqOptions *deqopt, OCIAQMsgProperties *msgprop,
+ OCIType *payload_tdo, void **payload, void **payload_ind,
+ OCIRaw **msgid, ub4 flags);
+
+sword OCIAQEnqArray(OCISvcCtx *svchp, OCIError *errhp, OraText *queue_name,
+ OCIAQEnqOptions *enqopt, ub4 *iters,
+ OCIAQMsgProperties **msgprop, OCIType *payload_tdo,
+ void **payload, void **payload_ind, OCIRaw **msgid,
+ void *ctxp, OCICallbackAQEnq enqcbfp, ub4 flags);
+
+sword OCIAQEnqStreaming(OCISvcCtx *svchp, OCIError *errhp, OraText *queue_name,
+ OCIAQEnqOptions *enqopt, OCIType *payload_tdo,
+ void *ctxp, OCICallbackAQEnqStreaming enqcbfp,
+ ub4 flags);
+
+sword OCIAQDeqArray(OCISvcCtx *svchp, OCIError *errhp, OraText *queue_name,
+ OCIAQDeqOptions *deqopt, ub4 *iters,
+ OCIAQMsgProperties **msgprop, OCIType *payload_tdo,
+ void **payload, void **payload_ind, OCIRaw **msgid,
+ void *ctxp, OCICallbackAQDeq deqcbfp, ub4 flags);
+
+sword OCIAQListen(OCISvcCtx *svchp, OCIError *errhp,
+ OCIAQAgent **agent_list, ub4 num_agents,
+ sb4 wait, OCIAQAgent **agent,
+ ub4 flags);
+
+sword OCIAQListen2(OCISvcCtx *svchp, OCIError *errhp,
+ OCIAQAgent **agent_list, ub4 num_agents,
+ OCIAQListenOpts *lopts, OCIAQAgent **agent,
+ OCIAQLisMsgProps *lmops, ub4 flags);
+
+sword OCIAQGetReplayInfo(OCISvcCtx *svchp, OCIError *errhp,
+ OraText *queue_name, OCIAQAgent *sender,
+ ub4 replay_attribute, OraText *correlation,
+ ub2 *corr_len);
+
+sword OCIAQResetReplayInfo(OCISvcCtx *svchp, OCIError *errhp,
+ OraText *queue_name, OCIAQAgent *sender,
+ ub4 replay_attribute);
+
+sword OCIExtractInit(void *hndl, OCIError *err);
+
+sword OCIExtractTerm(void *hndl, OCIError *err);
+
+sword OCIExtractReset(void *hndl, OCIError *err);
+
+sword OCIExtractSetNumKeys(void *hndl, OCIError *err, uword numkeys);
+
+sword OCIExtractSetKey(void *hndl, OCIError *err, const OraText *name,
+ ub1 type, ub4 flag, const void *defval,
+ const sb4 *intrange, const OraText *const *strlist);
+
+sword OCIExtractFromFile(void *hndl, OCIError *err, ub4 flag,
+ OraText *filename);
+
+sword OCIExtractFromStr(void *hndl, OCIError *err, ub4 flag, OraText *input);
+
+sword OCIExtractToInt(void *hndl, OCIError *err, OraText *keyname,
+ uword valno, sb4 *retval);
+
+sword OCIExtractToBool(void *hndl, OCIError *err, OraText *keyname,
+ uword valno, ub1 *retval);
+
+sword OCIExtractToStr(void *hndl, OCIError *err, OraText *keyname,
+ uword valno, OraText *retval, uword buflen);
+
+sword OCIExtractToOCINum(void *hndl, OCIError *err, OraText *keyname,
+ uword valno, OCINumber *retval);
+
+sword OCIExtractToList(void *hndl, OCIError *err, uword *numkeys);
+
+sword OCIExtractFromList(void *hndl, OCIError *err, uword index,
+ OraText **name,
+ ub1 *type, uword *numvals, void ***values);
+
+/* Memory Related Service Interfaces */
+
+sword OCIMemoryAlloc(void *hdl, OCIError *err, void **mem,
+ OCIDuration dur, ub4 size, ub4 flags);
+
+sword OCIMemoryResize(void *hdl, OCIError *err, void **mem,
+ ub4 newsize, ub4 flags);
+
+sword OCIMemoryFree(void *hdl, OCIError *err, void *mem);
+
+sword OCIContextSetValue(void *hdl, OCIError *err, OCIDuration duration,
+ ub1 *key, ub1 keylen, void *ctx_value);
+
+sword OCIContextGetValue(void *hdl, OCIError *err, ub1 *key,
+ ub1 keylen, void **ctx_value);
+
+sword OCIContextClearValue(void *hdl, OCIError *err, ub1 *key,
+ ub1 keylen);
+
+sword OCIContextGenerateKey(void *hdl, OCIError *err, ub4 *key);
+
+sword OCIMemorySetCurrentIDs(void *hdl, OCIError *err,
+ ub4 curr_session_id, ub4 curr_trans_id,
+ ub4 curr_stmt_id);
+
+sword OCIPicklerTdsCtxInit(OCIEnv *env, OCIError *err,
+ OCIPicklerTdsCtx **tdsc);
+
+sword OCIPicklerTdsCtxFree(OCIEnv *env, OCIError *err, OCIPicklerTdsCtx *tdsc);
+
+sword OCIPicklerTdsInit(OCIEnv *env, OCIError *err, OCIPicklerTdsCtx *tdsc,
+ OCIPicklerTds **tdsh);
+
+sword OCIPicklerTdsFree(OCIEnv *env, OCIError *err, OCIPicklerTds *tdsh);
+
+sword OCIPicklerTdsCreateElementNumber(OCIEnv *env, OCIError *err,
+ OCIPicklerTds *tdsh, ub1 prec,
+ sb1 scale, OCIPicklerTdsElement *elt);
+
+sword OCIPicklerTdsCreateElementChar(OCIEnv *env, OCIError *err,
+ OCIPicklerTds *tdsh, ub2 len,
+ OCIPicklerTdsElement *elt);
+
+sword OCIPicklerTdsCreateElementVarchar(OCIEnv *env, OCIError *err,
+ OCIPicklerTds *tdsh, ub2 len,
+ OCIPicklerTdsElement *elt);
+
+sword OCIPicklerTdsCreateElementRaw(OCIEnv *env, OCIError *err,
+ OCIPicklerTds *tdsh, ub2 len,
+ OCIPicklerTdsElement *elt);
+
+sword OCIPicklerTdsCreateElement(OCIEnv *env, OCIError *err,
+ OCIPicklerTds *tdsh, OCITypeCode dty,
+ OCIPicklerTdsElement *elt);
+
+sword OCIPicklerTdsAddAttr(OCIEnv *env, OCIError *err,
+ OCIPicklerTds *tdsh, OCIPicklerTdsElement elt);
+
+sword OCIPicklerTdsGenerate(OCIEnv *env, OCIError *err,
+ OCIPicklerTds *tdsh);
+
+sword OCIPicklerTdsGetAttr(OCIEnv *env, OCIError *err,
+ const OCIPicklerTds *tdsh, ub1 attrno,
+ OCITypeCode *typ, ub2 *len);
+
+sword OCIPicklerFdoInit(OCIEnv *env, OCIError *err,
+ OCIPicklerFdo **fdoh);
+
+sword OCIPicklerFdoFree(OCIEnv *env, OCIError *err,
+ OCIPicklerFdo *fdoh);
+
+sword OCIPicklerImageInit(OCIEnv *env, OCIError *err,
+ OCIPicklerFdo *fdoh,
+ OCIPicklerTds *tdsh,
+ OCIPicklerImage **imgh);
+
+sword OCIPicklerImageFree(OCIEnv *env, OCIError *err,
+ OCIPicklerImage *imgh);
+
+sword OCIPicklerImageAddScalar(OCIEnv *env, OCIError *err,
+ OCIPicklerImage *imgh,
+ void *scalar, ub4 len);
+
+sword OCIPicklerImageAddNullScalar(OCIEnv *env, OCIError *err,
+ OCIPicklerImage *imgh);
+
+sword OCIPicklerImageGenerate(OCIEnv *env, OCIError *err,
+ OCIPicklerImage *imgh);
+
+sword OCIPicklerImageGetScalarSize(OCIEnv *env, OCIError *err,
+ OCIPicklerImage *imgh,
+ ub4 attrno, ub4 *size);
+
+sword OCIPicklerImageGetScalar(OCIEnv *env, OCIError *err,
+ OCIPicklerImage *imgh, ub4 attrno,
+ void *buf, ub4 *len, OCIInd *ind);
+
+sword OCIPicklerImageCollBegin(OCIEnv *env, OCIError *err,
+ OCIPicklerImage *imgh, const OCIPicklerTds *colltdsh);
+
+sword OCIPicklerImageCollAddScalar( OCIEnv *env, OCIError *err,
+ OCIPicklerImage *imgh, void *scalar,
+ ub4 buflen, OCIInd ind);
+
+sword OCIPicklerImageCollEnd(OCIEnv *env, OCIError *err,
+ OCIPicklerImage *imgh);
+
+/* should take svcctx for locator stuff */
+sword OCIPicklerImageCollBeginScan(OCIEnv *env, OCIError *err,
+ OCIPicklerImage *imgh, const OCIPicklerTds *coll_tdsh,
+ ub4 attrnum, ub4 startidx, OCIInd *ind);
+
+sword OCIPicklerImageCollGetScalarSize(OCIEnv *env, OCIError *err,
+ const OCIPicklerTds *coll_tdsh, ub4 *size);
+
+sword OCIPicklerImageCollGetScalar(OCIEnv *env, OCIError *err,
+ OCIPicklerImage *imgh, void *buf,
+ ub4 *buflen, OCIInd *ind);
+
+sword OCIAnyDataGetType(OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *sdata,
+ OCITypeCode *tc, OCIType **type);
+
+sword OCIAnyDataIsNull(OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *sdata,
+ boolean *isnull);
+
+sword OCIAnyDataConvert(OCISvcCtx *svchp, OCIError *errhp, OCITypeCode tc,
+ OCIType *type, OCIDuration dur, void *ind, void *data_val,
+ ub4 len, OCIAnyData **sdata);
+
+sword OCIAnyDataBeginCreate(OCISvcCtx *svchp, OCIError *errhp, OCITypeCode tc,
+ OCIType *type, OCIDuration dur, OCIAnyData **sdata);
+
+sword OCIAnyDataDestroy(OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *sdata);
+
+sword OCIAnyDataAttrSet(OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *sdata,
+ OCITypeCode tc, OCIType *type, void *ind, void *attr_val,
+ ub4 length, boolean is_any);
+
+sword OCIAnyDataCollAddElem(OCISvcCtx *svchp, OCIError *errhp,
+ OCIAnyData *sdata, OCITypeCode tc, OCIType *type, void *ind,
+ void *attr_val, ub4 length, boolean is_any, boolean last_elem);
+
+sword OCIAnyDataEndCreate(OCISvcCtx *svchp, OCIError *errhp,
+ OCIAnyData *sdata);
+
+sword OCIAnyDataAccess(OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *sdata,
+ OCITypeCode tc, OCIType *type, void *ind, void *attr_val,
+ ub4 *length);
+
+sword OCIAnyDataGetCurrAttrNum(OCISvcCtx *svchp, OCIError *errhp,
+ OCIAnyData *sdata, ub4 *attrnum);
+
+sword OCIAnyDataAttrGet(OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *sdata,
+ OCITypeCode tc, OCIType *type, void *ind, void *attr_val,
+ ub4 *length, boolean is_any);
+
+sword OCIAnyDataCollGetElem(OCISvcCtx *svchp, OCIError *errhp,
+ OCIAnyData *sdata,
+ OCITypeCode tc, OCIType *type, void *ind, void *celem_val,
+ ub4 *length, boolean is_any);
+
+
+/*------------------------ OCIAnyDataSet interfaces -------------------------*/
+
+/*
+ NAME
+ OCIAnyDataSetBeginCreate - OCIAnyDataSet Begin Creation
+ PARAMETERS
+ svchp (IN/OUT) - The OCI service context.
+ errhp (IN/OUT) - The OCI error handle. If there is an error, it is
+ recorded in errhp and this function returns OCI_ERROR.
+ Diagnostic information can be obtained by calling
+ OCIErrorGet().
+ typecode - typecode corresponding to the OCIAnyDataSet.
+ type (IN) - type corresponding to the OCIAnyDataSet. If the typecode
+ corresponds to a built-in type (OCI_TYPECODE_NUMBER etc.)
+ , this parameter can be NULL. It should be non NULL for
+ user defined types (OCI_TYPECODE_OBJECT,
+ OCI_TYPECODE_REF, collection types etc.)
+ dur (IN) - duration for which OCIAnyDataSet is allocated.
+ data_set (OUT) - Initialized OCIAnyDataSet.
+ RETURNS - error code
+ NOTES
+ This call allocates an OCIAnyDataSet for the duration of dur and
+ initializes it with the type information. The OCIAnyDataSet can hold
+ multiple instances of the given type. For performance reasons, the
+ OCIAnyDataSet will end up pointing to the passed in OCIType parameter.
+ It is the responsibility of the caller to ensure that the OCIType is
+ longer lived (has allocation duration >= the duration of the OCIAnyData
+ if the OCIType is a transient one, allocation/pin duration >= duration of
+ the OCIAnyData if the OCIType is a persistent one).
+
+*/
+sword OCIAnyDataSetBeginCreate(OCISvcCtx *svchp, OCIError *errhp,
+ OCITypeCode typecode, const OCIType *type, OCIDuration dur,
+ OCIAnyDataSet ** data_set);
+
+/*
+ NAME
+ OCIAnyDataSetDestroy - OCIAnyDataSet Destroy
+ DESCRIPTION
+ This call frees the OCIAnyDataSet allocated using
+ OCIAnyDataSetBeginCreate().
+ RETURNS
+ error code.
+ PARAMETERS
+ svchp (IN/OUT) - The OCI service context.
+ errhp (IN/OUT) - The OCI Error handle.
+ data_set (IN/OUT) - OCIAnyDataSet to be freed.
+*/
+sword OCIAnyDataSetDestroy(OCISvcCtx *svchp, OCIError *errhp,
+ OCIAnyDataSet *data_set);
+
+
+/*
+ NAME
+ OCIAnyDataSetAddInstance - OCIAnyDataSet Add an instance
+ DESCRIPTION
+ This call adds a new skeleton instance to the OCIAnyDataSet and all the
+ attributes of the instance are set to NULL. It returns this skeleton
+ instance through the OCIAnyData parameter which can be constructed
+ subsequently by invoking the OCIAnyData API.
+ RETURNS
+ error code.
+ PARAMETERS
+ svchp (IN/OUT) - The OCI service context.
+ errhp (IN/OUT) - The OCI Error handle.
+ data_set (IN/OUT) - OCIAnyDataSet to which a new instance is added.
+ data (IN/OUT) - OCIAnyData corresponding to the newly added
+ instance. If (*data) is NULL, a new OCIAnyData will
+ be allocated for same duration as the OCIAnyDataSet.
+ If (*data) is not NULL, it will get reused. This
+ OCIAnyData can be subseqently constructed using the
+ OCIAnyDataConvert() call or it can be constructed
+ piece-wise using the OCIAnyDataAttrSet and
+ OCIAnyDataCollAddElem calls.
+ NOTES
+ No Destruction of the old value is done here. It is the responsibility of
+ the caller to destroy the old value pointed to by (*data) and set (*data)
+ to a null pointer before beginning to make a sequence of this call. No
+ deep copying (of OCIType information nor the data part.) is done in the
+ returned OCIAnyData. This OCIAnyData cannot be used beyond the allocation
+ duration of the OCIAnyDataSet (it is like a reference into the
+ OCIAnyDataSet). The returned OCIAnyData can be reused on subsequent calls
+ to this function, to sequentially add new data instances to the
+ OCIAnyDataSet.
+*/
+sword OCIAnyDataSetAddInstance(OCISvcCtx *svchp, OCIError *errhp,
+ OCIAnyDataSet *data_set, OCIAnyData **data);
+
+/*
+ NAME
+ OCIAnyDataSetEndCreate - OCIAnyDataSet End Creation process.
+ DESCRIPTION
+ This call marks the end of OCIAnyDataSet creation. It should be called
+ after constructing all of its instance(s).
+ RETURNS
+ error code.
+ PARAMETERS
+ svchp (IN/OUT) - The OCI service context.
+ errhp (IN/OUT) - The OCI error handle. If there is an error, it is
+ recorded in errhp and this function returns
+ OCI_ERROR. Diagnostic information can be obtained
+ by calling OCIErrorGet().
+ data_set (IN/OUT) - OCIAnyDataSet that has been fully constructed.
+*/
+sword OCIAnyDataSetEndCreate(OCISvcCtx *svchp, OCIError *errhp,
+ OCIAnyDataSet *data_set);
+
+/*
+ NAME
+ OCIAnyDataSetGetType - OCIAnyDataSet Get Type of an OCIAnyDataSet
+ DESCRIPTION
+ Gets the Type corresponding to an OCIAnyDataSet. It returns the actual
+ pointer to the type maintained inside an OCIAnyDataSet. No copying is
+ done for performance reasons. The client is responsible for not using
+ this type once the OCIAnyDataSet is freed (or its duration ends).
+ RETURNS
+ error code.
+ PARAMETERS
+ svchp (IN/OUT) - The OCI service context.
+ errhp (IN/OUT) - The OCI Error handle.
+ data_set (IN) - Initialized OCIAnyDataSet.
+ tc (OUT) - The typecode of the type.
+ type (OUT) - The type corresponding to the OCIAnyDataSet. This
+ could be null if the OCIAnyData corresponds to a
+ built-in type.
+*/
+sword OCIAnyDataSetGetType (OCISvcCtx *svchp, OCIError *errhp,
+ OCIAnyDataSet *data_set, OCITypeCode *tc, OCIType **type);
+
+/*
+ NAME
+ OCIAnyDataSetGetCount - OCIAnyDataSet Get Count of instances.
+ DESCRIPTION
+ This call gets the number of instances in the OCIAnyDataSet.
+ RETURNS
+ error code.
+ PARAMETERS
+ svchp (IN/OUT) - OCI Service Context
+ errhp (IN/OUT) - OCI Error handle
+ data_set (IN) - Well formed OCIAnyDataSet.
+ count (OUT) - number of instances in OCIAnyDataSet
+*/
+sword OCIAnyDataSetGetCount(OCISvcCtx *svchp, OCIError *errhp,
+ OCIAnyDataSet *data_set, ub4 *count);
+
+/*
+ NAME
+ OCIAnyDataSetGetInstance - OCIAnyDataSet Get next instance.
+ DESCRIPTION
+ Only sequential access to the instances in an OCIAnyDataSet is allowed.
+ This call returns the OCIAnyData corresponding to an instance at the
+ current position and updates the current position. Subsequently, the
+ OCIAnyData access routines may be used to access the instance.
+ RETURNS
+ error code. Returns OCI_NO_DATA if the current position is at the end of
+ the set, OCI_SUCCESS otherwise.
+ PARAMETERS
+ svchp (IN/OUT) - OCI Service Context
+ errhp (IN/OUT) - OCI Error handle
+ data_set (IN) - Well formed OCIAnyDataSet
+ data (IN/OUT) - OCIAnyData corresponding to the instance. If (*data)
+ is NULL, a new OCIAnyData will be allocated for same
+ duration as the OCIAnyDataSet. If (*data) is not NULL
+ , it will get reused. This OCIAnyData can be
+ subsequently accessed using the OCIAnyDataAccess()
+ call or piece-wise by using the OCIAnyDataAttrGet()
+ call.
+ NOTE
+ No Destruction of the old value is done here. It is the responsibility of
+ the caller to destroy the old value pointed to by (*data) and set (*data)
+ to a null pointer before beginning to make a sequence of this call. No deep
+ copying (of OCIType information nor the data part.) is done in the returned
+ OCIAnyData. This OCIAnyData cannot be used beyond the allocation duration
+ of the OCIAnyDataSet (it is like a reference into the OCIAnyDataSet). The
+ returned OCIAnyData can be reused on subsequent calls to this function to
+ sequentially access the OCIAnyDataSet.
+*/
+sword OCIAnyDataSetGetInstance(OCISvcCtx *svchp, OCIError *errhp,
+ OCIAnyDataSet *data_set, OCIAnyData **data);
+
+/*--------------------- End of OCIAnyDataSet interfaces ---------------------*/
+
+sword OCIFormatInit(void *hndl, OCIError *err);
+
+sword OCIFormatString(void *hndl, OCIError *err, OraText *buffer,
+ sbig_ora bufferLength, sbig_ora *returnLength,
+ const OraText *formatString, ...);
+
+sword OCIFormatTerm(void *hndl, OCIError *err);
+
+sword OCIFormatTUb1(void);
+sword OCIFormatTUb2(void);
+sword OCIFormatTUb4(void);
+sword OCIFormatTUword(void);
+sword OCIFormatTUbig_ora(void);
+sword OCIFormatTSb1(void);
+sword OCIFormatTSb2(void);
+sword OCIFormatTSb4(void);
+sword OCIFormatTSword(void);
+sword OCIFormatTSbig_ora(void);
+sword OCIFormatTEb1(void);
+sword OCIFormatTEb2(void);
+sword OCIFormatTEb4(void);
+sword OCIFormatTEword(void);
+sword OCIFormatTChar(void);
+sword OCIFormatTText(void);
+sword OCIFormatTDouble(void);
+sword OCIFormatTDvoid(void);
+sword OCIFormatTEnd(void);
+
+/*-------------------------- Extensions to XA interface ---------------------*/
+/* ------------------------- xaosvch ----------------------------------------*/
+/*
+ NAME
+ xaosvch - XA Oracle get SerViCe Handle
+ DESCRIPTION
+ Given a database name return the service handle that is used by the
+ XA library
+ NOTE
+ This macro has been provided for backward compatibilty with 8.0.2
+*/
+OCISvcCtx *xaosvch(OraText *dbname);
+
+/* ------------------------- xaoSvcCtx --------------------------------------*/
+/*
+ NAME
+ xaoSvcCtx - XA Oracle get SerViCe ConTeXt
+ DESCRIPTION
+ Given a database name return the service handle that is used by the
+ XA library
+ NOTE
+ This routine has been provided for APs to get access to the service
+ handle that XA library uses. Without this routine APs must use SQLLIB
+ routine sqlld2 to get access to the Logon data area registered by the
+ XA library
+*/
+OCISvcCtx *xaoSvcCtx(OraText *dbname);
+
+/* ------------------------- xaoEnv -----------------------------------------*/
+/*
+ NAME
+ xaoEnv - XA Oracle get ENvironment Handle
+ DESCRIPTION
+ Given a database name return the environment handle that is used by the
+ XA library
+ NOTE
+ This routine has been provided for APs to get access to the environment
+ handle that XA library uses. Without this routine APs must use SQLLIB
+ routine sqlld2 to get access to the Logon data area registered by the
+ XA library
+*/
+OCIEnv *xaoEnv(OraText *dbname);
+
+/* ------------------------- xaosterr ---------------------------------------*/
+/*
+ NAME
+ xaosterr - XA Oracle get xa STart ERRor code
+ DESCRIPTION
+ Given an oracle error code return the XA error code
+ */
+int xaosterr(OCISvcCtx *svch, sb4 error);
+/*-------------------------- End Extensions ---------------------------------*/
+/*---------------------- Extensions to NLS cartridge service ----------------*/
+/* ----------------------- OCINlsGetInfo ------------------------------------*/
+/*
+ NAME
+ OCINlsGetInfo - Get NLS info from OCI environment handle
+ REMARKS
+ This function generates language information specified by item from OCI
+ environment handle envhp into an array pointed to by buf within size
+ limitation as buflen.
+ RETURNS
+ OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR on wrong item.
+ envhp(IN/OUT)
+ OCI environment handle.
+ errhp(IN/OUT)
+ The OCI error handle. If there is an error, it is record in errhp and
+ this function returns a NULL pointer. Diagnostic information can be
+ obtained by calling OCIErrorGet().
+ buf(OUT)
+ Pointer to the destination buffer.
+ buflen(IN)
+ The size of destination buffer. The maximum length for each information
+ is 32 bytes.
+ item(IN)
+ It specifies to get which item in OCI environment handle and can be one
+ of following values:
+ OCI_NLS_DAYNAME1 : Native name for Monday.
+ OCI_NLS_DAYNAME2 : Native name for Tuesday.
+ OCI_NLS_DAYNAME3 : Native name for Wednesday.
+ OCI_NLS_DAYNAME4 : Native name for Thursday.
+ OCI_NLS_DAYNAME5 : Native name for Friday.
+ OCI_NLS_DAYNAME6 : Native name for for Saturday.
+ OCI_NLS_DAYNAME7 : Native name for for Sunday.
+ OCI_NLS_ABDAYNAME1 : Native abbreviated name for Monday.
+ OCI_NLS_ABDAYNAME2 : Native abbreviated name for Tuesday.
+ OCI_NLS_ABDAYNAME3 : Native abbreviated name for Wednesday.
+ OCI_NLS_ABDAYNAME4 : Native abbreviated name for Thursday.
+ OCI_NLS_ABDAYNAME5 : Native abbreviated name for Friday.
+ OCI_NLS_ABDAYNAME6 : Native abbreviated name for for Saturday.
+ OCI_NLS_ABDAYNAME7 : Native abbreviated name for for Sunday.
+ OCI_NLS_MONTHNAME1 : Native name for January.
+ OCI_NLS_MONTHNAME2 : Native name for February.
+ OCI_NLS_MONTHNAME3 : Native name for March.
+ OCI_NLS_MONTHNAME4 : Native name for April.
+ OCI_NLS_MONTHNAME5 : Native name for May.
+ OCI_NLS_MONTHNAME6 : Native name for June.
+ OCI_NLS_MONTHNAME7 : Native name for July.
+ OCI_NLS_MONTHNAME8 : Native name for August.
+ OCI_NLS_MONTHNAME9 : Native name for September.
+ OCI_NLS_MONTHNAME10 : Native name for October.
+ OCI_NLS_MONTHNAME11 : Native name for November.
+ OCI_NLS_MONTHNAME12 : Native name for December.
+ OCI_NLS_ABMONTHNAME1 : Native abbreviated name for January.
+ OCI_NLS_ABMONTHNAME2 : Native abbreviated name for February.
+ OCI_NLS_ABMONTHNAME3 : Native abbreviated name for March.
+ OCI_NLS_ABMONTHNAME4 : Native abbreviated name for April.
+ OCI_NLS_ABMONTHNAME5 : Native abbreviated name for May.
+ OCI_NLS_ABMONTHNAME6 : Native abbreviated name for June.
+ OCI_NLS_ABMONTHNAME7 : Native abbreviated name for July.
+ OCI_NLS_ABMONTHNAME8 : Native abbreviated name for August.
+ OCI_NLS_ABMONTHNAME9 : Native abbreviated name for September.
+ OCI_NLS_ABMONTHNAME10 : Native abbreviated name for October.
+ OCI_NLS_ABMONTHNAME11 : Native abbreviated name for November.
+ OCI_NLS_ABMONTHNAME12 : Native abbreviated name for December.
+ OCI_NLS_YES : Native string for affirmative response.
+ OCI_NLS_NO : Native negative response.
+ OCI_NLS_AM : Native equivalent string of AM.
+ OCI_NLS_PM : Native equivalent string of PM.
+ OCI_NLS_AD : Native equivalent string of AD.
+ OCI_NLS_BC : Native equivalent string of BC.
+ OCI_NLS_DECIMAL : decimal character.
+ OCI_NLS_GROUP : group separator.
+ OCI_NLS_DEBIT : Native symbol of debit.
+ OCI_NLS_CREDIT : Native sumbol of credit.
+ OCI_NLS_DATEFORMAT : Oracle date format.
+ OCI_NLS_INT_CURRENCY: International currency symbol.
+ OCI_NLS_LOC_CURRENCY : Locale currency symbol.
+ OCI_NLS_LANGUAGE : Language name.
+ OCI_NLS_ABLANGUAGE : Abbreviation for language name.
+ OCI_NLS_TERRITORY : Territory name.
+ OCI_NLS_CHARACTER_SET : Character set name.
+ OCI_NLS_LINGUISTIC : Linguistic name.
+ OCI_NLS_CALENDAR : Calendar name.
+ OCI_NLS_DUAL_CURRENCY : Dual currency symbol.
+*/
+sword OCINlsGetInfo(void *envhp, OCIError *errhp, OraText *buf,
+ size_t buflen, ub2 item);
+
+/* ----------------------- OCINlsNumericInfoGet -----------------------------*/
+/*
+ NAME
+ OCINlsNumericInfoGet - Get NLS numeric info from OCI environment handle
+ REMARKS
+ This function generates numeric language information specified by item
+ from OCI environment handle envhp into an output number variable.
+ RETURNS
+ OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR on wrong item.
+ envhp(IN/OUT)
+ OCI environment handle. If handle invalid, returns OCI_INVALID_HANDLE.
+ errhp(IN/OUT)
+ The OCI error handle. If there is an error, it is record in errhp and
+ this function returns a NULL pointer. Diagnostic information can be
+ obtained by calling OCIErrorGet().
+ val(OUT)
+ Pointer to the output number variable. On OCI_SUCCESS return, it will
+ contain the requested NLS numeric info.
+ item(IN)
+ It specifies to get which item in OCI environment handle and can be one
+ of following values:
+ OCI_NLS_CHARSET_MAXBYTESZ : Maximum character byte size for OCI
+ environment or session handle charset
+ OCI_NLS_CHARSET_FIXEDWIDTH: Character byte size for fixed-width charset;
+ 0 for variable-width charset
+*/
+sword OCINlsNumericInfoGet(void *envhp, OCIError *errhp, sb4 *val, ub2 item);
+
+/* ----------------------- OCINlsCharSetNameToId ----------------------------*/
+/*
+ NAME
+ OCINlsCharSetNameToId - Get Oracle charset id given Oracle charset name
+ REMARKS
+ This function will get the Oracle character set id corresponding to
+ the given Oracle character set name.
+ RETURNS
+ Oracle character set id for the given Oracle character set name if
+ character set name and OCI handle are valid; otherwise returns 0.
+ envhp(IN/OUT)
+ OCI environment handle.
+ name(IN)
+ Pointer to a null-terminated Oracle character set name whose id
+ will be returned.
+*/
+ub2 OCINlsCharSetNameToId(void *envhp, const oratext *name);
+
+/* ----------------------- OCINlsCharSetIdToName ----------------------------*/
+/*
+ NAME
+ OCINlsCharSetIdToName - Get Oracle charset name given Oracle charset id
+ REMARKS
+ This function will get the Oracle character set name corresponding to
+ the given Oracle character set id.
+ RETURNS
+ OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+ envhp(IN/OUT)
+ OCI environment handle. If handle invalid, returns OCI_INVALID_HANDLE.
+ buf(OUT)
+ Pointer to the destination buffer. On OCI_SUCCESS return, it will contain
+ the null-terminated string for character set name.
+ buflen(IN)
+ Size of destination buffer. Recommended size is OCI_NLS_MAXBUFSZ for
+ guarantee to store an Oracle character set name. If it's smaller than
+ the length of the character set name, the function will return OCI_ERROR.
+ id(IN)
+ Oracle character set id.
+*/
+sword OCINlsCharSetIdToName(void *envhp, oratext *buf, size_t buflen, ub2 id);
+
+/* ----------------------- OCINlsNameMap ------------------------------------*/
+/*
+ NAME
+ OCINlsNameMap - Map NLS naming from Oracle to other standards and vice
+ versa
+ REMARKS
+ This function will map NLS naming from Oracle to other standards (such
+ as ISO, IANA) and vice versa.
+ RETURNS
+ OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
+ envhp(IN/OUT)
+ OCI environment handle. If handle invalid, returns OCI_INVALID_HANDLE.
+ buf(OUT)
+ Pointer to the destination buffer. On OCI_SUCCESS return, it will
+ contain null-terminated string for requested mapped name.
+ buflen(IN)
+ The size of destination buffer. Recommended size is OCI_NLS_MAXBUFSZ
+ for guarantee to store an NLS name. If it is smaller than the length
+ of the name, the function will return OCI_ERROR.
+ srcbuf(IN)
+ Pointer to null-terminated NLS name. If it is not a valid name in its
+ define scope, the function will return OCI_ERROR.
+ flag(IN)
+ It specifies name mapping direction and can take the following values:
+ OCI_NLS_CS_IANA_TO_ORA : Map character set name from IANA to Oracle
+ OCI_NLS_CS_ORA_TO_IANA : Map character set name from Oracle to IANA
+ OCI_NLS_LANG_ISO_TO_ORA : Map language name from ISO to Oracle
+ OCI_NLS_LANG_ORA_TO_ISO : Map language name from Oracle to ISO
+ OCI_NLS_TERR_ISO_TO_ORA : Map territory name from ISO to Oracle
+ OCI_NLS_TERR_ORA_TO_ISO : Map territory name from Oracle to ISO
+ OCI_NLS_TERR_ISO3_TO_ORA : Map territory name from 3-letter ISO
+ abbreviation to Oracle
+ OCI_NLS_TERR_ORA_TO_ISO3 : Map territory name from Oracle to 3-letter
+ ISO abbreviation
+*/
+sword OCINlsNameMap(void *envhp, oratext *buf, size_t buflen,
+ const oratext *srcbuf, ub4 flag);
+
+/* -------------------- OCIMultiByteToWideChar ------------------------------*/
+/*
+ NAME
+ OCIMultiByteToWideChar - Convert a null terminated multibyte string into
+ wchar
+ REMARKS
+ This routine converts an entire null-terminated string into the wchar
+ format. The wchar output buffer will be null-terminated.
+ RETURNS
+ OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set of string.
+ dst (OUT)
+ Destination buffer for wchar.
+ src (IN)
+ Source string to be converted.
+ rsize (OUT)
+ Number of characters converted including null-terminator.
+ If it is a NULL pointer, no number return
+*/
+sword OCIMultiByteToWideChar(void *envhp, OCIWchar *dst, const OraText *src,
+ size_t *rsize);
+
+
+/* --------------------- OCIMultiByteInSizeToWideChar -----------------------*/
+/*
+ NAME
+ OCIMultiByteInSizeToWideChar - Convert a mulitbyte string in length into
+ wchar
+ REMARKS
+ This routine converts part of string into the wchar format. It will
+ convert as many complete characters as it can until it reaches output
+ buffer size or input buffer size or it reaches a null-terminator in
+ source string. The output buffer will be null-terminated if space permits.
+ If dstsz is zero, this function will only return number of characters not
+ including ending null terminator for converted string.
+ RETURNS
+ OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set of string.
+ dst (OUT)
+ Pointer to a destination buffer for wchar. It can be NULL pointer when
+ dstsz is zero.
+ dstsz(IN)
+ Destination buffer size in character. If it is zero, this function just
+ returns number of characters will be need for the conversion.
+ src (IN)
+ Source string to be converted.
+ srcsz(IN)
+ Length of source string in byte.
+ rsize(OUT)
+ Number of characters written into destination buffer, or number of
+ characters for converted string is dstsz is zero.
+ If it is NULL pointer, nothing to return.
+*/
+sword OCIMultiByteInSizeToWideChar(void *envhp, OCIWchar *dst,
+ size_t dstsz, const OraText *src,
+ size_t srcsz, size_t *rsize);
+
+
+/* ---------------------- OCIWideCharToMultiByte ----------------------------*/
+/*
+ NAME
+ OCIWideCharToMultiByte - Convert a null terminated wchar string into
+ multibyte
+ REMARKS
+ This routine converts an entire null-terminated wide character string into
+ multi-byte string. The output buffer will be null-terminated.
+ RETURNS
+ OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set of string.
+ dst (OUT)
+ Destination buffer for multi-byte string.
+ src (IN)
+ Source wchar string to be converted.
+ rsize (OUT)
+ Number of bytes written into the destination buffer.
+ If it is NULL pointer, nothing to return.
+*/
+sword OCIWideCharToMultiByte(void *envhp, OraText *dst, const OCIWchar *src,
+ size_t *rsize);
+
+
+/* ---------------------- OCIWideCharInSizeToMultiByte ----------------------*/
+/*
+ NAME
+ OCIWideCharInSizeToMultiByte - Convert a wchar string in length into
+ mulitbyte
+ REMARKS
+ This routine converts part of wchar string into the multi-byte format.
+ It will convert as many complete characters as it can until it reaches
+ output buffer size or input buffer size or it reaches a null-terminator
+ in source string. The output buffer will be null-terminated if space
+ permits. If dstsz is zero, the function just returns the size of byte not
+ including ending null-terminator need to store the converted string.
+ RETURNS
+ OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set of string.
+ dst (OUT)
+ Destination buffer for multi-byte. It can be NULL pointer if dstsz is
+ zero.
+ dstsz(IN)
+ Destination buffer size in byte. If it is zero, it just returns the size
+ of bytes need for converted string.
+ src (IN)
+ Source wchar string to be converted.
+ srcsz(IN)
+ Length of source string in character.
+ rsize(OUT)
+ Number of bytes written into destination buffer, or number of bytes need
+ to store the converted string if dstsz is zero.
+ If it is NULL pointer, nothing to return.
+*/
+sword OCIWideCharInSizeToMultiByte(void *envhp, OraText *dst,
+ size_t dstsz, const OCIWchar *src,
+ size_t srcsz, size_t *rsize);
+
+
+
+/* ----------------------- OCIWideCharIsAlnum -------------------------------*/
+/*
+ NAME
+ OCIWideCharIsAlnum - test whether wc is a letter or decimal digit
+ REMARKS
+ It tests whether wc is a letter or decimal digit.
+ RETURNS
+ TRUE or FLASE.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for testing.
+*/
+boolean OCIWideCharIsAlnum(void *envhp, OCIWchar wc);
+
+
+/* ----------------------- OCIWideCharIsAlpha -------------------------------*/
+/*
+ NAME
+ OCIWideCharIsAlpha - test whether wc is an alphabetic letter
+ REMARKS
+ It tests whether wc is an alphabetic letter
+ RETURNS
+ TRUE or FLASE.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for testing.
+*/
+boolean OCIWideCharIsAlpha(void *envhp, OCIWchar wc);
+
+
+/* --------------------- OCIWideCharIsCntrl ---------------------------------*/
+/*
+ NAME
+ OCIWideCharIsCntrl - test whether wc is a control character
+ REMARKS
+ It tests whether wc is a control character.
+ RETURNS
+ TRUE or FLASE.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for testing.
+*/
+boolean OCIWideCharIsCntrl(void *envhp, OCIWchar wc);
+
+
+/* ----------------------- OCIWideCharIsDigit -------------------------------*/
+/*
+ NAME
+ OCIWideCharIsDigit - test whether wc is a decimal digit character
+ REMARKS
+ It tests whether wc is a decimal digit character.
+ RETURNS
+ TRUE or FLASE.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for testing.
+*/
+boolean OCIWideCharIsDigit(void *envhp, OCIWchar wc);
+
+
+/* ----------------------- OCIWideCharIsGraph -------------------------------*/
+/*
+ NAME
+ OCIWideCharIsGraph - test whether wc is a graph character
+ REMARKS
+ It tests whether wc is a graph character. A graph character is character
+ with a visible representation and normally includes alphabetic letter,
+ decimal digit, and punctuation.
+ RETURNS
+ TRUE or FLASE.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for testing.
+*/
+boolean OCIWideCharIsGraph(void *envhp, OCIWchar wc);
+
+
+/* ----------------------- OCIWideCharIsLower -------------------------------*/
+/*
+ NAME
+ OCIWideCharIsLower - test whether wc is a lowercase letter
+ REMARKS
+ It tests whether wc is a lowercase letter.
+ RETURNS
+ TRUE or FLASE.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for testing.
+*/
+boolean OCIWideCharIsLower(void *envhp, OCIWchar wc);
+
+
+/* ----------------------- OCIWideCharIsPrint -------------------------------*/
+/*
+ NAME
+ OCIWideCharIsPrint - test whether wc is a printable character
+ REMARKS
+ It tests whether wc is a printable character.
+ RETURNS
+ TRUE or FLASE.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for testing.
+*/
+boolean OCIWideCharIsPrint(void *envhp, OCIWchar wc);
+
+
+/* ----------------------- OCIWideCharIsPunct -------------------------------*/
+/*
+ NAME
+ OCIWideCharIsPunct - test whether wc is a punctuation character
+ REMARKS
+ It tests whether wc is a punctuation character.
+ RETURNS
+ TRUE or FLASE.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for testing.
+*/
+boolean OCIWideCharIsPunct(void *envhp, OCIWchar wc);
+
+
+/* ----------------------- OCIWideCharIsSpace -------------------------------*/
+/*
+ NAME
+ OCIWideCharIsSpace - test whether wc is a space character
+ REMARKS
+ It tests whether wc is a space character. A space character only causes
+ white space in displayed text(for example, space, tab, carriage return,
+ newline, vertical tab or form feed).
+ RETURNS
+ TRUE or FLASE.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for testing.
+*/
+boolean OCIWideCharIsSpace(void *envhp, OCIWchar wc);
+
+
+/* ----------------------- OCIWideCharIsUpper -------------------------------*/
+/*
+ NAME
+ OCIWideCharIsUpper - test whether wc is a uppercase letter
+ REMARKS
+ It tests whether wc is a uppercase letter.
+ RETURNS
+ TRUE or FLASE.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for testing.
+*/
+boolean OCIWideCharIsUpper(void *envhp, OCIWchar wc);
+
+
+/*----------------------- OCIWideCharIsXdigit -------------------------------*/
+/*
+ NAME
+ OCIWideCharIsXdigit - test whether wc is a hexadecimal digit
+ REMARKS
+ It tests whether wc is a hexadecimal digit ( 0-9, A-F, a-f ).
+ RETURNS
+ TRUE or FLASE.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for testing.
+*/
+boolean OCIWideCharIsXdigit(void *envhp, OCIWchar wc);
+
+
+/* --------------------- OCIWideCharIsSingleByte ----------------------------*/
+/*
+ NAME
+ OCIWideCharIsSingleByte - test whether wc is a single-byte character
+ REMARKS
+ It tests whether wc is a single-byte character when converted into
+ multi-byte.
+ RETURNS
+ TRUE or FLASE.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for testing.
+*/
+boolean OCIWideCharIsSingleByte(void *envhp, OCIWchar wc);
+
+
+/* ----------------------- OCIWideCharToLower -------------------------------*/
+/*
+ NAME
+ OCIWideCharToLower - Convert a wchar into the lowercase
+ REMARKS
+ If there is a lower-case character mapping for wc in the specified locale,
+ it will return the lower-case in wchar, else return wc itself.
+ RETURNS
+ A wchar
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for lowercase mapping.
+*/
+OCIWchar OCIWideCharToLower(void *envhp, OCIWchar wc);
+
+
+/* ----------------------- OCIWideCharToUpper -------------------------------*/
+/*
+ NAME
+ OCIWideCharToUpper - Convert a wchar into the uppercase
+ REMARKS
+ If there is a upper-case character mapping for wc in the specified locale,
+ it will return the upper-case in wchar, else return wc itself.
+ RETURNS
+ A wchar
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar for uppercase mapping.
+*/
+OCIWchar OCIWideCharToUpper(void *envhp, OCIWchar wc);
+
+
+/* ----------------------- OCIWideCharStrcmp --------------------------------*/
+/*
+ NAME
+ OCIWideCharStrcmp - compare two null terminated wchar string
+ REMARKS
+ It compares two wchar string in binary ( based on wchar encoding value ),
+ linguistic, or case-insensitive.
+ RETURNS
+ 0, if wstr1 == wstr2.
+ Positive, if wstr1 > wstr2.
+ Negative, if wstr1 < wstr2.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set.
+ wstr1(IN)
+ Pointer to a null-terminated wchar string.
+ wstr2(IN)
+ Pointer to a null-terminated wchar string.
+ flag(IN)
+ It is used to decide the comparison method. It can be taken one of the
+ following values:
+ OCI_NLS_BINARY : for the binary comparison, this is default value.
+ OCI_NLS_LINGUISTIC : for linguistic comparison specified in the locale.
+ This flag can be ORed with OCI_NLS_CASE_INSENSITIVE for case-insensitive
+ comparison.
+*/
+int OCIWideCharStrcmp(void *envhp, const OCIWchar *wstr1,
+ const OCIWchar *wstr2, int flag);
+
+
+/* ----------------------- OCIWideCharStrncmp -------------------------------*/
+/*
+ NAME
+ OCIWideCharStrncmp - compare twe wchar string in length
+ REMARKS
+ This function is similar to OCIWideCharStrcmp(), except that at most len1
+ characters from wstr1 and len2 characters from wstr1 are compared. The
+ null-terminator will be taken into the comparison.
+ RETURNS
+ 0, if wstr1 = wstr2
+ Positive, if wstr1 > wstr2
+ Negative, if wstr1 < wstr2
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wstr1(IN)
+ Pointer to the first wchar string
+ len1(IN)
+ The length for the first string for comparison
+ wstr2(IN)
+ Pointer to the second wchar string
+ len2(IN)
+ The length for the second string for comparison.
+ flag(IN)
+ It is used to decide the comparison method. It can be taken one of the
+ following values:
+ OCI_NLS_BINARY : for the binary comparison, this is default value.
+ OCI_NLS_LINGUISTIC : for linguistic comparison specified in the locale.
+ This flag can be ORed with OCI_NLS_CASE_INSENSITIVE for case-insensitive
+ comparison.
+*/
+int OCIWideCharStrncmp(void *envhp, const OCIWchar *wstr1, size_t len1,
+ const OCIWchar *wstr2, size_t len2, int flag);
+
+
+/* ----------------------- OCIWideCharStrcat --------------------------------*/
+/*
+ NAME
+ OCIWideCharStrcat - concatenate two wchar strings
+ REMARKS
+ This function appends a copy of the wchar string pointed to by wsrcstr,
+ including the null-terminator to the end of wchar string pointed to by
+ wdststr. It returns the number of character in the result string not
+ including the ending null-terminator.
+ RETURNS
+ number of characters in the result string not including the ending
+ null-terminator.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wdststr(IN/OUT)
+ Pointer to the destination wchar string for appending.
+ wsrcstr(IN)
+ Pointer to the source wchar string to append.
+*/
+size_t OCIWideCharStrcat(void *envhp, OCIWchar *wdststr,
+ const OCIWchar *wsrcstr);
+
+
+/* ----------------------- OCIWideCharStrchr --------------------------------*/
+/*
+ NAME
+ OCIWideCharStrchr - Search the first occurrence of wchar in a wchar string
+ REMARKS
+ This function searchs for the first occurrence of wc in the wchar string
+ pointed to by wstr. It returns a pointer to the whcar if successful, or
+ a null pointer.
+ RETURNS
+ wchar pointer if successful, otherwise a null pointer.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wstr(IN)
+ Pointer to the wchar string to search
+ wc(IN)
+ Wchar to search for.
+*/
+OCIWchar *OCIWideCharStrchr(void *envhp, const OCIWchar *wstr,
+ OCIWchar wc);
+
+
+/* ----------------------- OCIWideCharStrcpy --------------------------------*/
+/*
+ NAME
+ OCIWideCharStrcpy - copy a wchar string
+ REMARKS
+ This function copies the wchar string pointed to by wsrcstr, including the
+ null-terminator, into the array pointed to by wdststr. It returns the
+ number of character copied not including the ending null-terminator.
+ RETURNS
+ number of characters copied not including the ending null-terminator.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wdststr(OUT)
+ Pointer to the destination wchar buffer.
+ wsrcstr(IN)
+ Pointer to the source wchar string.
+*/
+size_t OCIWideCharStrcpy(void *envhp, OCIWchar *wdststr,
+ const OCIWchar *wsrcstr);
+
+
+/* ----------------------- OCIWideCharStrlen --------------------------------*/
+/*
+ NAME
+ OCIWideCharStrlen - Return number of character in a wchar string
+ REMARKS
+ This function computes the number of characters in the wchar string
+ pointed to by wstr, not including the null-terminator, and returns
+ this number.
+ RETURNS
+ number of characters not including ending null-terminator.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wstr(IN)
+ Pointer to the source wchar string.
+*/
+size_t OCIWideCharStrlen(void *envhp, const OCIWchar *wstr);
+
+
+/* ----------------------- OCIWideCharStrncat -------------------------------*/
+/*
+ NAME
+ OCIWideCharStrncat - Concatenate wchar string in length
+ REMARKS
+ This function is similar to OCIWideCharStrcat(), except that at most n
+ characters from wsrcstr are appended to wdststr. Note that the
+ null-terminator in wsrcstr will stop appending. wdststr will be
+ null-terminated..
+ RETURNS
+ Number of characters in the result string not including the ending
+ null-terminator.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wdststr(IN/OUT)
+ Pointer to the destination wchar string for appending.
+ wsrcstr(IN)
+ Pointer to the source wchar string to append.
+ n(IN)
+ Number of characters from wsrcstr to append.
+*/
+size_t OCIWideCharStrncat(void *envhp, OCIWchar *wdststr,
+ const OCIWchar *wsrcstr, size_t n);
+
+
+/* ----------------------- OCIWideCharStrncpy -------------------------------*/
+/*
+ NAME
+ OCIWideCharStrncpy - Copy wchar string in length
+ REMARKS
+ This function is similar to OCIWideCharStrcpy(), except that at most n
+ characters are copied from the array pointed to by wsrcstr to the array
+ pointed to by wdststr. Note that the null-terminator in wdststr will
+ stop coping and result string will be null-terminated.
+ RETURNS
+ number of characters copied not including the ending null-terminator.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wdststr(OUT)
+ Pointer to the destination wchar buffer.
+ wsrcstr(IN)
+ Pointer to the source wchar string.
+ n(IN)
+ Number of characters from wsrcstr to copy.
+*/
+size_t OCIWideCharStrncpy(void *envhp, OCIWchar *wdststr,
+ const OCIWchar *wsrcstr, size_t n);
+
+
+/* ----------------------- OCIWideCharStrrchr -------------------------------*/
+/*
+ NAME
+ OCIWideCharStrrchr - search the last occurrence of a wchar in wchar string
+ REMARKS
+ This function searchs for the last occurrence of wc in the wchar string
+ pointed to by wstr. It returns a pointer to the whcar if successful, or
+ a null pointer.
+ RETURNS
+ wchar pointer if successful, otherwise a null pointer.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wstr(IN)
+ Pointer to the wchar string to search
+ wc(IN)
+ Wchar to search for.
+*/
+OCIWchar *OCIWideCharStrrchr(void *envhp, const OCIWchar *wstr,
+ OCIWchar wc);
+
+
+/* --------------------- OCIWideCharStrCaseConversion -----------------------*/
+/*
+ NAME
+ OCIWideCharStrCaseConversion - convert a wchar string into lowercase or
+ uppercase
+ REMARKS
+ This function convert the wide char string pointed to by wsrcstr into the
+ uppercase or lowercase specified by flag and copies the result into the
+ array pointed to by wdststr. The result string will be null-terminated.
+ RETURNS
+ number of characters for result string not including null-terminator.
+ envhp(IN/OUT)
+ OCI environment handle.
+ wdststr(OUT)
+ Pointer to destination array.
+ wsrcstr(IN)
+ Pointer to source string.
+ flag(IN)
+ Specify the case to convert:
+ OCI_NLS_UPPERCASE : convert to uppercase.
+ OCI_NLS_LOWERCASE: convert to lowercase.
+ This flag can be ORed with OCI_NLS_LINGUISTIC to specify that the
+ linguistic setting in the locale will be used for case conversion.
+*/
+size_t OCIWideCharStrCaseConversion(void *envhp, OCIWchar *wdststr,
+ const OCIWchar *wsrcstr, ub4 flag);
+
+
+/*---------------------- OCIWideCharDisplayLength ---------------------------*/
+/*
+ NAME
+ OCIWideCharDisplayLength - Calculate the display length for a wchar
+ REMARKS
+ This function determines the number of column positions required for wc
+ in display. It returns number of column positions, or 0 if wc is
+ null-terminator.
+ RETURNS
+ Number of display positions.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar character.
+*/
+size_t OCIWideCharDisplayLength(void *envhp, OCIWchar wc );
+
+
+/*---------------------- OCIWideCharMultiByteLength -------------------------*/
+/*
+ NAME
+ OCIWideCharMultiByteLength - Determine byte size in multi-byte encoding
+ REMARKS
+ This function determines the number of byte required for wc in multi-byte
+ encoding. It returns number of bytes in multi-byte for wc.
+ RETURNS
+ Number of bytes.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set .
+ wc(IN)
+ Wchar character.
+*/
+size_t OCIWideCharMultiByteLength(void *envhp, OCIWchar wc);
+
+
+/* ----------------------- OCIMultiByteStrcmp -------------------------------*/
+/*
+ NAME
+ OCIMultiByteStrcmp - Compare two multi-byte strings
+ REMARKS
+ It compares two multi-byte strings in binary ( based on encoding value ),
+ linguistic, or case-insensitive.
+ RETURNS
+ 0, if str1 == str2.
+ Positive, if str1 > str2.
+ Negative, if str1 < str2.
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set.
+ str1(IN)
+ Pointer to a null-terminated string.
+ str2(IN)
+ Pointer to a null-terminated string.
+ flag(IN)
+ It is used to decide the comparison method. It can be taken one of the
+ following values:
+ OCI_NLS_BINARY: for the binary comparison, this is default value.
+ OCI_NLS_LINGUISTIC: for linguistic comparison specified in the locale.
+ This flag can be ORed with OCI_NLS_CASE_INSENSITIVE for case-insensitive
+ comparison.
+*/
+int OCIMultiByteStrcmp(void *envhp, const OraText *str1,
+ const OraText *str2, int flag);
+
+
+/*----------------------- OCIMultiByteStrncmp -------------------------------*/
+/*
+ NAME
+ OCIMultiByteStrncmp - compare two strings in length
+ REMARKS
+ This function is similar to OCIMultiBytestrcmp(), except that at most
+ len1 bytes from str1 and len2 bytes from str2 are compared. The
+ null-terminator will be taken into the comparison.
+ RETURNS
+ 0, if str1 = str2
+ Positive, if str1 > str2
+ Negative, if str1 < str2
+ envhp(IN/OUT)
+ OCI environment handle to determine the character set.
+ str1(IN)
+ Pointer to the first string
+ len1(IN)
+ The length for the first string for comparison
+ str2(IN)
+ Pointer to the second string
+ len2(IN)
+ The length for the second string for comparison.
+ flag(IN)
+ It is used to decide the comparison method. It can be taken one of the
+ following values:
+ OCI_NLS_BINARY: for the binary comparison, this is default value.
+ OCI_NLS_LINGUISTIC: for linguistic comparison specified in the locale.
+ This flag can be ORed with OCI_NLS_CASE_INSENSITIVE for case-insensitive
+ comparison.
+*/
+int OCIMultiByteStrncmp(void *envhp, const OraText *str1, size_t len1,
+ OraText *str2, size_t len2, int flag);
+
+
+/*----------------------- OCIMultiByteStrcat --------------------------------*/
+/*
+ NAME
+ OCIMultiByteStrcat - concatenate multibyte strings
+ REMARKS
+ This function appends a copy of the multi-byte string pointed to by
+ srcstr, including the null-terminator to the end of string pointed to by
+ dststr. It returns the number of bytes in the result string not including
+ the ending null-terminator.
+ RETURNS
+ number of bytes in the result string not including the ending
+ null-terminator.
+ envhp(IN/OUT)
+ Pointer to OCI environment handle
+ dststr(IN/OUT)
+ Pointer to the destination multi-byte string for appending.
+ srcstr(IN)
+ Pointer to the source string to append.
+*/
+size_t OCIMultiByteStrcat(void *envhp, OraText *dststr,
+ const OraText *srcstr);
+
+
+/*------------------------- OCIMultiByteStrcpy ------------------------------*/
+/*
+ NAME
+ OCIMultiByteStrcpy - copy multibyte string
+ REMARKS
+ This function copies the multi-byte string pointed to by srcstr,
+ including the null-terminator, into the array pointed to by dststr. It
+ returns the number of bytes copied not including the ending
+ null-terminator.
+ RETURNS
+ number of bytes copied not including the ending null-terminator.
+ envhp(IN/OUT)
+ Pointer to the OCI environment handle.
+ srcstr(OUT)
+ Pointer to the destination buffer.
+ dststr(IN)
+ Pointer to the source multi-byte string.
+*/
+size_t OCIMultiByteStrcpy(void *envhp, OraText *dststr,
+ const OraText *srcstr);
+
+
+/*----------------------- OCIMultiByteStrlen --------------------------------*/
+/*
+ NAME
+ OCIMultiByteStrlen - Calculate multibyte string length
+ REMARKS
+ This function computes the number of bytes in the multi-byte string
+ pointed to by str, not including the null-terminator, and returns this
+ number.
+ RETURNS
+ number of bytes not including ending null-terminator.
+ str(IN)
+ Pointer to the source multi-byte string.
+*/
+size_t OCIMultiByteStrlen(void *envhp, const OraText *str);
+
+
+/*----------------------- OCIMultiByteStrncat -------------------------------*/
+/*
+ NAME
+ OCIMultiByteStrncat - concatenate string in length
+ REMARKS
+ This function is similar to OCIMultiBytestrcat(), except that at most n
+ bytes from srcstr are appended to dststr. Note that the null-terminator in
+ srcstr will stop appending and the function will append as many character
+ as possible within n bytes. dststr will be null-terminated.
+ RETURNS
+ Number of bytes in the result string not including the ending
+ null-terminator.
+ envhp(IN/OUT)
+ Pointer to OCI environment handle.
+ srcstr(IN/OUT)
+ Pointer to the destination multi-byte string for appending.
+ dststr(IN)
+ Pointer to the source multi-byte string to append.
+ n(IN)
+ Number of bytes from srcstr to append.
+*/
+size_t OCIMultiByteStrncat(void *envhp, OraText *dststr,
+ const OraText *srcstr, size_t n);
+
+
+/*----------------------- OCIMultiByteStrncpy -------------------------------*/
+/*
+ NAME
+ OCIMultiByteStrncpy - copy multibyte string in length
+ REMARKS
+ This function is similar to OCIMultiBytestrcpy(), except that at most n
+ bytes are copied from the array pointed to by srcstr to the array pointed
+ to by dststr. Note that the null-terminator in srcstr will stop coping and
+ the function will copy as many character as possible within n bytes. The
+ result string will be null-terminated.
+ RETURNS
+ number of bytes copied not including the ending null-terminator.
+ envhp(IN/OUT)
+ Pointer to a OCI environment handle.
+ dststr(IN)
+ Pointer to the source multi-byte string.
+ srcstr(OUT)
+ Pointer to the destination buffer.
+ n(IN)
+ Number of bytes from srcstr to copy.
+*/
+size_t OCIMultiByteStrncpy(void *envhp, OraText *dststr,
+ const OraText *srcstr, size_t n);
+
+
+/*----------------------- OCIMultiByteStrnDisplayLength ---------------------*/
+/*
+ NAME
+ OCIMultiByteStrnDisplayLength - calculate the display length for a
+ multibyt string
+ REMARKS
+ This function returns the number of display positions occupied by the
+ complete characters within the range of n bytes.
+ RETURNS
+ number of display positions.
+ envhp(IN/OUT)
+ OCI environment handle.
+ str(IN)
+ Pointer to a multi-byte string.
+ n(IN)
+ Number of bytes to examine.
+*/
+size_t OCIMultiByteStrnDisplayLength(void *envhp, const OraText *str1,
+ size_t n);
+
+
+/*---------------------- OCIMultiByteStrCaseConversion ---------------------*/
+/*
+ NAME
+ OCIMultiByteStrCaseConversion
+ REMARKS
+ This function convert the multi-byte string pointed to by srcstr into the
+ uppercase or lowercase specified by flag and copies the result into the
+ array pointed to by dststr. The result string will be null-terminated.
+ RETURNS
+ number of bytes for result string not including null-terminator.
+ envhp(IN/OUT)
+ OCI environment handle.
+ dststr(OUT)
+ Pointer to destination array.
+ srcstr(IN)
+ Pointer to source string.
+ flag(IN)
+ Specify the case to convert:
+ OCI_NLS_UPPERCASE: convert to uppercase.
+ OCI_NLS_LOWERCASE: convert to lowercase.
+ This flag can be ORed with OCI_NLS_LINGUISTIC to specify that the
+ linguistic setting in the locale will be used for case conversion.
+*/
+size_t OCIMultiByteStrCaseConversion(void *envhp, OraText *dststr,
+ const OraText *srcstr, ub4 flag);
+
+
+/*------------------------- OCICharSetToUnicode -----------------------------*/
+/*
+ NAME
+ OCICharSetToUnicode - convert multibyte string into Unicode as UCS2
+ REMARKS
+ This function converts a multi-byte string pointed to by src to Unicode
+ into the array pointed to by dst. The conversion will stop when it reach
+ to the source limitation or destination limitation.
+ The function will return number of characters converted into Unicode.
+ If dstlen is zero, it will just return the number of characters for the
+ result without real conversion.
+ RETURNS
+ OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
+ envhp(IN/OUT)
+ Pointer to an OCI environment handle
+ dst(OUT)
+ Pointer to a destination buffer
+ dstlen(IN)
+ Size of destination buffer in character
+ src(IN)
+ Pointer to multi-byte source string.
+ srclen(IN)
+ Size of source string in bytes.
+ rsize(OUT)
+ Number of characters converted.
+ If it is a NULL pointer, nothing to return.
+*/
+sword OCICharSetToUnicode(void *envhp, ub2 *dst, size_t dstlen,
+ const OraText *src, size_t srclen, size_t *rsize);
+
+
+/*------------------------- OCIUnicodeToCharSet -----------------------------*/
+/*
+ NAME
+ OCIUnicodeToCharSet - convert Unicode into multibyte
+ REMARKS
+ This function converts a Unicode string pointed to by src to multi-byte
+ into the array pointed to by dst. The conversion will stop when it reach
+ to the source limitation or destination limitation. The function will
+ return number of bytes converted into multi-byte. If dstlen is zero, it
+ will just return the number of bytes for the result without real
+ conversion. If a Unicode character is not convertible for the character
+ set specified in OCI environment handle, a replacement character will be
+ used for it. In this case, OCICharSetConversionIsReplacementUsed() will
+ return ture.
+ RETURNS
+ OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
+ envhp(IN/OUT)
+ Pointer to an OCI environment handle.
+ dst(OUT)
+ Pointer to a destination buffer.
+ dstlen(IN)
+ Size of destination buffer in byte.
+ src(IN)
+ Pointer to a Unicode string.
+ srclen(IN)
+ Size of source string in characters.
+ rsize(OUT)
+ Number of bytes converted.
+ If it is a NULL pointer, nothing to return.
+*/
+sword OCIUnicodeToCharSet(void *envhp, OraText *dst, size_t dstlen,
+ const ub2 *src, size_t srclen, size_t *rsize);
+
+/*----------------------- OCINlsCharSetConvert ------------------------------*/
+/*
+ NAME
+ OCINlsCharSetConvert - convert between any two character set.
+ REMARKS
+ This function converts a string pointed to by src in the character set
+ specified with srcid to the array pointed to by dst in the character set
+ specified with dstid. The conversion will stop when it reaches the source
+ limitation or destination limitation. The function will return the number
+ of bytes converted into the destination buffer. Even though either source
+ or destination character set id is OCI_UTF16ID, given and return data
+ length will be represented with the byte length as this function is
+ intended for generic purpose. Note the conversion will not stop at null
+ data.
+ To get character set id from name, OCINlsCharSetNameToId can be used.
+ To check if derived data in the destination buffer contains any
+ replacement character resulting from conversion failure,
+ OCICharSetConversionIsReplacementUsed can be used to get the status.
+ Data alignment should be guaranteed by a caller. For example, UTF-16 data
+ should be aligned to ub2 type.
+
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ errhp(IN/OUT)
+ OCI error handle. If there is an error, it is recorded in errhp and this
+ function returns a NULL pointer. Diagnostic information can be obtained
+ by calling OCIErrorGet().
+ dstid(IN)
+ Character set id for the destination buffer.
+ dstp(OUT)
+ Pointer to the destination buffer.
+ dstlen(IN)
+ The maximum byte size of destination buffer.
+ srcid(IN)
+ Character set id for the source buffer.
+ srcp(IN)
+ Pointer to the source buffer.
+ srclen(IN)
+ The length byte size of source buffer.
+ rsize(OUT)
+ The number of characters converted. If it is a NULL pointer, nothing to
+ return.
+*/
+sword OCINlsCharSetConvert(void *envhp, OCIError *errhp,
+ ub2 dstid, void *dstp, size_t dstlen,
+ ub2 srcid, const void *srcp, size_t srclen,
+ size_t *rsize);
+
+
+/* ------------------- OCICharsetConversionIsReplacementUsed ----------------*/
+/*
+ NAME
+ OCICharsetConversionIsReplacementUsed - chech if replacement is used in
+ conversion
+ REMARKS
+ This function indicates whether or not the replacement character was used
+ for nonconvertible characters in character set conversion in last invoke
+ of OCICharsetUcs2ToMb().
+ RETURNS
+ TRUE is the replacement character was used in last OCICharsetUcs2ToMb()
+ invoking, else FALSE.
+ envhp(IN/OUT)
+ OCI environment handle. This should be the first handle passed to
+ OCICharsetUcs2ToMb().
+*/
+boolean OCICharSetConversionIsReplacementUsed(void *envhp);
+
+/*------------------- OCINlsEnvironmentVariableGet -----------------*/
+/*
+ NAME
+ OCINlsEnvironmentVariableGet - get a value of NLS environment variable.
+
+ DESCRIPTION
+ This function retrieves a value of NLS environment variable to the buffer
+ pointed to by val. Data type is determined by the parameter specified by
+ item. Either numeric data or string data can be retrieved.
+
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+
+ PARAMETERS
+ valp(OUT) -
+ Pointer to the buffer.
+ size(IN) -
+ Size of the buffer. This argument is only applicable to string data type,
+ but not to numerical data, in such case, it is ignored.
+ item(IN) -
+ NLS item value, which can be one of following values:
+ OCI_NLS_CHARSET_ID - NLS_LANG character set id in ub2 data type.
+ OCI_NLS_NCHARSET_ID - NLS_NCHAR character set id in ub2 data type.
+ charset(IN) -
+ Character set id for retrieved string data. If it is 0, NLS_LANG will be
+ used. OCI_UTF16ID is a valid id. In case of numeric data, this argument
+ is ignored.
+ rsize(OUT) -
+ Size of return value.
+
+ NOTE
+ This functions is mainly used for retrieving character set id from either
+ NLS_LANG or NLS_NCHAR environment variables. If NLS_LANG is not set,
+ the default character set id is returned.
+ For future extension, the buffer is capable for storing other data types.
+*/
+sword OCINlsEnvironmentVariableGet(void *valp, size_t size, ub2 item,
+ ub2 charset, size_t *rsize);
+
+
+/*------------------------- OCIMessageOpen ----------------------------------*/
+/*
+ NAME
+ OCIMessageOpen - open a locale message file
+ REMARKS
+ This function opens a message handle for facility of product in a language
+ pointed to by envhp. It first try to open the message file corresponding
+ to envhp for the facility. If it successes, it will use that file to
+ initialize a message handle, else it will use the default message file
+ which is for American language for the facility. The function return a
+ pointer pointed to a message handle into msghp parameter.
+ RETURNS
+ OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
+ envhp(IN/OUT)
+ A pointer to OCI environment handle for message language.
+ errhp(IN/OUT)
+ The OCI error handle. If there is an error, it is record in errhp and this
+ function returns a NULL pointer. Diagnostic information can be obtained by
+ calling OCIErrorGet().
+ msghp(OUT)
+ a message handle for return
+ product(IN)
+ A pointer to a product name. Product name is used to locate the directory
+ for message in a system dependent way. For example, in Solaris, the
+ directory of message files for the product `rdbms' is
+ `${ORACLE_HOME}/rdbms'.
+ facility(IN)
+ A pointer to a facility name in the product. It is used to construct a
+ message file name. A message file name follows the conversion with
+ facility as prefix. For example, the message file name for facility
+ `img' in American language will be `imgus.msb' where `us' is the
+ abbreviation of American language and `msb' as message binary file
+ extension.
+ dur(IN)
+ Duration for memory allocation for the return message handle. It can be
+ the following values:
+ OCI_DURATION_CALL
+ OCI_DURATION_STATEMENT
+ OCI_DURATION_SESSION
+ OCI_DURATION_TRANSACTION
+ For the detail description, please refer to Memory Related Service
+ Interfaces section.
+*/
+sword OCIMessageOpen(void *envhp, OCIError *errhp, OCIMsg **msghp,
+ const OraText *product, const OraText *facility,
+ OCIDuration dur);
+
+
+/*------------------------- OCIMessageGet -----------------------------------*/
+/*
+ NAME
+ OCIMessageGet - get a locale message from a message handle
+ REMARKS
+ This function will get message with message number identified by msgno and
+ if buflen is not zero, the function will copy the message into the buffer
+ pointed to by msgbuf. If buflen is zero, the message will be copied into
+ a message buffer inside the message handle pointed to by msgh. For both
+ cases. it will return the pointer to the null-terminated message string.
+ If it cannot get the message required, it will return a NULL pointer.
+ RETURNS
+ A pointer to a null-terminated message string on success, otherwise a NULL
+ pointer.
+ msgh(IN/OUT)
+ Pointer to a message handle which was previously opened by
+ OCIMessageOpen().
+ msgno(IN)
+ The message number for getting message.
+ msgbuf(OUT)
+ Pointer to a destination buffer to the message retrieved. If buflen is
+ zero, it can be NULL pointer.
+ buflen(IN)
+ The size of the above destination buffer.
+*/
+OraText *OCIMessageGet(OCIMsg *msgh, ub4 msgno, OraText *msgbuf,
+ size_t buflen);
+
+/*------------------------- OCIMessageClose ---------------------------------*/
+/*
+ NAME
+ OCIMessageClose - close a message handle
+ REMARKS
+ This function closes a message handle pointed to by msgh and frees any
+ memory associated with this handle.
+ RETURNS
+ OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
+ envhp(IN/OUT)
+ A pointer to OCI environment handle for message language.
+ errhp(IN/OUT)
+ The OCI error handle. If there is an error, it is record in errhp and this
+ function returns a NULL pointer. Diagnostic information can be obtained by
+ calling OCIErrorGet().
+ msghp(IN/OUT)
+ A pointer to a message handle which was previously opened by
+ OCIMessageOpen().
+*/
+sword OCIMessageClose(void *envhp, OCIError *errhp, OCIMsg *msghp);
+
+/*--------------- End of Extensions to NLS cartridge service ----------------*/
+
+
+/*----------------- Extensions to OCI Thread interface ---------------------*/
+/*****************************************************************************
+ DESCRIPTION
+******************************************************************************
+1 Threads Interface
+
+The OCIThread package provides a number of commonly used threading
+primitives for use by Oracle customers. It offers a portable interface to
+threading capabilities native to various platforms. It does not implement
+threading on platforms which do not have native threading capability.
+
+OCIThread does not provide a portable implementation of multithreaded
+facilities. It only serves as a set of portable covers for native
+multithreaded facilities. Therefore, platforms that do not have native
+support for multi-threading will only be able to support a limited
+implementation of OCIThread. As a result, products that rely on all of
+OCIThread's functionality will not port to all platforms. Products that must
+port to all platforms must use only a subset of OCIThread's functionality.
+This issue is discussed further in later sections of this document.
+
+The OCIThread API is split into four main parts. Each part is described
+briefly here. The following subsections describe each in greater detail.
+
+ 1. Initialization and Termination Calls
+
+ These calls deal with the initialization and termination of OCIThread.
+ Initialization of OCIThread initializes the OCIThread context which is
+ a member of the OCI environment or session handle. This context is
+ required for other OCIThread calls.
+
+ 2. Passive Threading Primitives
+
+ The passive threading primitives include primitives to manipulate mutual
+ exclusion (mutex) locks, thread ID's, and thread-specific data keys.
+
+ The reason that these primitives are described as 'passive' is that while
+ their specifications allow for the existence of multiple threads, they do
+ not require it. This means that it is possible for these primitives to
+ be implemented according to specification in both single-threaded and
+ multi-threaded environments.
+
+ As a result, OCIThread clients that use only these primitives will not
+ require the existence of multiple threads in order to work correctly,
+ i.e., they will be able to work in single-threaded environments without
+ branching code.
+
+ 3. Active Threading Primitives
+
+ Active threading primitives include primitives dealing with the creation,
+ termination, and other manipulation of threads.
+
+ The reason that these primitives are described as 'active' is that they
+ can only be used in true multi-threaded environments. Their
+ specifications explicitly require that it be possible to have multiple
+ threads. If you need to determine at runtime whether or not you are in a
+ multi-threaded environment, call OCIThreadIsMulti() before calling an
+ OCIThread active primitive.
+
+
+1.1 Initialization & Termination
+==================================
+
+The types and functions described in this section are associated with the
+initialization and termination of the OCIThread package. OCIThread must
+be properly initialized before any of its functionality can be used.
+OCIThread's process initialization function, 'OCIThreadProcessInit()',
+must be called with care; see below.
+
+The observed behavior of the initialization and termination functions is the
+same regardless of whether OCIThread is in single-threaded or multi-threaded
+environment. It is OK to call the initialization functions from both generic
+and operating system specific (OSD) code.
+
+1.1.1 Types
+
+ OCIThreadContext - OCIThread Context
+ -------------------------------------
+
+ Most calls to OCIThread functions take the OCI environment or session
+ handle as a parameter. The OCIThread context is part of the OCI
+ environment or session handle and it must be initialized by calling
+ 'OCIThreadInit()'. Termination of the OCIThread context occurs by calling
+ 'OCIThreadTerm()'.
+
+ The OCIThread context is a private data structure. Clients must NEVER
+ attempt to examine the contents of the context.
+
+1.1.2 OCIThreadProcessInit
+
+ OCIThreadProcessInit - OCIThread Process INITialization
+ --------------------------------------------------------
+
+ Description
+
+ This function should be called to perform OCIThread process
+ initialization.
+
+ Prototype
+
+ void OCIThreadProcessInit();
+
+ Returns
+
+ Nothing.
+
+ Notes
+
+ Whether or not this function needs to be called depends on how OCI
+ Thread is going to be used.
+
+ * In a single-threaded application, calling this function is optional.
+ If it is called at all, the first call to it must occur before calls
+ to any other OCIThread functions. Subsequent calls can be made
+ without restriction; they will not have any effect.
+
+ * In a multi-threaded application, this function MUST be called. The
+ first call to it MUST occur 'strictly before' any other OCIThread
+ calls; i.e., no other calls to OCIThread functions (including other
+ calls to this one) can be concurrent with the first call.
+ Subsequent calls to this function can be made without restriction;
+ they will not have any effect.
+
+
+1.1.3 OCIThreadInit
+
+ OCIThreadInit - OCIThread INITialize
+ -------------------------------------
+
+ Description
+
+ This initializes OCIThread context.
+
+ Prototype
+
+ sword OCIThreadInit(void *hndl, OCIError *err);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ It is illegal for OCIThread clients to try an examine the memory
+ pointed to by the returned pointer.
+
+ It is safe to make concurrent calls to 'OCIThreadInit()'. Unlike
+ 'OCIThreadProcessInit()', there is no need to have a first call
+ that occurs before all the others.
+
+ The first time 'OCIThreadInit()' is called, it initilaizes the OCI
+ Thread context. It also saves a pointer to the context in some system
+ dependent manner. Subsequent calls to 'OCIThreadInit()' will return
+ the same context.
+
+ Each call to 'OCIThreadInit()' must eventually be matched by a call to
+ 'OCIThreadTerm()'.
+
+ OCIThreadTerm - OCIThread TERMinate
+ ------------------------------------
+
+ Description
+
+ This should be called to release the OCIThread context. It should be
+ called exactly once for each call made to 'OCIThreadInit()'.
+
+ Prototype
+
+ sword OCIThreadTerm(void *hndl, OCIError *err);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ It is safe to make concurrent calls to 'OCIThreadTerm()'.
+
+ 'OCIThreadTerm()' will not do anything until it has been called as
+ many times as 'OCIThreadInit()' has been called. When that happens,
+ it terminates the OCIThread layer and frees the memory allocated for
+ the context. Once this happens, the context should not be re-used.
+ It will be necessary to obtain a new one by calling 'OCIThreadInit()'.
+
+
+ OCIThreadIsMulti - OCIThread Is Multi-Threaded?
+ ------------------------------------------------
+
+ Description
+
+ This tells the caller whether the application is running in a
+ multi-threaded environment or a single-threaded environment.
+
+ Prototype
+ boolean OCIThreadIsMulti(void);
+
+ Returns
+
+ TRUE if the environment is multi-threaded;
+ FALSE if the environment is single-threaded.
+
+
+1.2 Passive Threading Primitives
+==================================
+
+1.2.1 Types
+
+The passive threading primitives deal with the manipulation of mutex,
+thread ID's, and thread-specific data. Since the specifications of these
+primitives do not require the existence of multiple threads, they can be
+used both on multithreaded and single-threaded platforms.
+
+1.2.1.1 OCIThreadMutex - OCIThread Mutual Exclusion Lock
+-----------------------------------------------------------
+
+ The type 'OCIThreadMutex' is used to represent a mutual exclusion lock
+ (mutex). A mutex is typically used for one of two purposes: (i) to
+ ensure that only one thread accesses a given set of data at a time, or
+ (ii) to ensure that only one thread executes a given critical section of
+ code at a time.
+
+ Mutexes pointer can be declared as parts of client structures or as
+ stand-alone variables. Before they can be used, they must be initialized
+ using 'OCIThreadMutexInit()'. Once they are no longer needed, they must be
+ destroyed using 'OCIThreadMutexDestroy()'. A mutex pointer must NOT be
+ used after it is destroyed.
+
+ A thread can acquire a mutex by using either 'OCIThreadMutexAcquire()' or
+ 'OCIThreadMutexTry()'. They both ensure that only one thread at a time is
+ allowed to hold a given mutex. A thread that holds a mutex can release it
+ by calling 'OCIThreadMutexRelease()'.
+
+
+1.2.1.2 OCIThreadKey - OCIThread Key for Thread-Specific Data
+----------------------------------------------------------------
+
+ A key can be thought of as a process-wide variable that has a
+ thread-specific value. What this means is that all the threads in a
+ process can use any given key. However, each thread can examine or modify
+ that key independently of the other threads. The value that a thread sees
+ when it examines the key will always be the same as the value that it last
+ set for the key. It will not see any values set for the key by the other
+ threads.
+
+ The type of the value held by a key is a 'void *' generic pointer.
+
+ Keys can be created using 'OCIThreadKeyInit()'. When a key is created, its
+ value is initialized to 'NULL' for all threads.
+
+ A thread can set a key's value using 'OCIThreadKeySet()'. A thread can
+ get a key's value using 'OCIThreadKeyGet()'.
+
+ The OCIThread key functions will save and retrieve data SPECIFIC TO THE
+ THREAD. When clients maintain a pool of threads and assign the threads to
+ different tasks, it *may not* be appropriate for a task to use OCIThread
+ key functions to save data associated with it. Here is a scenario of how
+ things can fail: A thread is assigned to execute the initialization of a
+ task. During the initialization, the task stored some data related to it
+ in the thread using OCIThread key functions. After the initialization,
+ the thread is returned back to the threads pool. Later, the threads pool
+ manager assigned another thread to perform some operations on the task,
+ and the task needs to retrieve those data it stored earlier in
+ initialization. Since the task is running in another thread, it will not
+ be able to retrieve the same data back! Applications that use thread
+ pools should be aware of this and be cautious when using OCIThread key
+ functions.
+
+
+1.2.1.3 OCIThreadKeyDestFunc - OCIThread Key Destructor Function Type
+------------------------------------------------------------------------
+
+ This is the type of a pointer to a key's destructor routine. Keys can be
+ associated with a destructor routine when they are created (see
+ 'OCIThreadKeyInit()').
+
+ A key's destructor routine will be called whenever a thread that has a
+ non-NULL value for the key terminates.
+
+ The destructor routine returns nothing and takes one parameter. The
+ parameter will be the value that was set for key when the thread
+ terminated.
+
+ The destructor routine is guaranteed to be called on a thread's value
+ in the key after the termination of the thread and before process
+ termination. No more precise guarantee can be made about the timing
+ of the destructor routine call; thus no code in the process may assume
+ any post-condition of the destructor routine. In particular, the
+ destructor is not guaranteed to execute before a join call on the
+ terminated thread returns.
+
+
+1.2.1.4 OCIThreadId - OCIThread Thread ID
+--------------------------------------------
+
+ Type 'OCIThreadId' is the type that will be used to identify a thread.
+ At any given time, no two threads will ever have the same 'OCIThreadId'.
+ However, 'OCIThreadId' values can be recycled; i.e., once a thread dies,
+ a new thread may be created that has the same 'OCIThreadId' as the one
+ that died. In particular, the thread ID must uniquely identify a thread
+ T within a process, and it must be consistent and valid in all threads U
+ of the process for which it can be guaranteed that T is running
+ concurrently with U. The thread ID for a thread T must be retrievable
+ within thread T. This will be done via OCIThreadIdGet().
+
+ The 'OCIThreadId' type supports the concept of a NULL thread ID: the NULL
+ thread ID will never be the same as the ID of an actual thread.
+
+
+
+1.2.2 Function prototypes for passive primitives
+--------------------------------------------------
+
+1.2.2.1 Mutex functions
+-------------------------
+
+ OCIThreadMutexInit - OCIThread MuteX Initialize
+ -----------------------------------------------
+
+ Description
+
+ This allocate and initializes a mutex. All mutexes must be
+ initialized prior to use.
+
+ Prototype
+
+ sword OCIThreadMutexInit(void *hndl, OCIError *err,
+ OCIThreadMutex **mutex);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ mutex(OUT): The mutex to initialize.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ Multiple threads must not initialize the same mutex simultaneously.
+ Also, a mutex must not be reinitialized until it has been destroyed (see
+ 'OCIThreadMutexDestroy()').
+
+ OCIThreadMutexDestroy - OCIThread MuteX Destroy
+ -----------------------------------------------
+
+ Description
+
+ This destroys and deallocate a mutex. Each mutex must be destroyed
+ once it is no longer needed.
+
+ Prototype
+
+ sword OCIThreadMutexDestroy(void *hndl, OCIError *err,
+ OCIThreadMutex **mutex);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ mutex(IN/OUT): The mutex to destroy.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ It is not legal to destroy a mutex that is uninitialized or is currently
+ held by a thread. The destruction of a mutex must not occur concurrently
+ with any other operations on the mutex. A mutex must not be used after
+ it has been destroyed.
+
+
+ OCIThreadMutexAcquire - OCIThread MuteX Acquire
+ -----------------------------------------------
+
+ Description
+
+ This acquires a mutex for the thread in which it is called. If the mutex
+ is held by another thread, the calling thread is blocked until it can
+ acquire the mutex.
+
+ Prototype
+
+ sword OCIThreadMutexAcquire(void *hndl, OCIError *err,
+ OCIThreadMutex *mutex);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error, it is
+ recorded in err and this function returns OCI_ERROR.
+ Diagnostic information can be obtained by calling
+ OCIErrorGet().
+
+ mutex(IN/OUT): The mutex to acquire.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ It is illegal to attempt to acquire an uninitialized mutex.
+
+ This function's behavior is undefined if it is used by a thread to
+ acquire a mutex that is already held by that thread.
+
+
+
+ OCIThreadMutexRelease - OCIThread MuteX Release
+ -----------------------------------------------
+
+ Description
+
+ This releases a mutex. If there are any threads blocked on the mutex,
+ one of them will acquire it and become unblocked.
+
+ Prototype
+
+ sword OCIThreadMutexRelease(void *hndl, OCIError *err,
+ OCIThreadMutex *mutex);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ mutex(IN/OUT): The mutex to release.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ It is illegal to attempt to release an uninitialized mutex. It is also
+ illegal for a thread to release a mutex that it does not hold.
+
+
+ OCIThreadKeyInit - OCIThread KeY Initialize
+ -------------------------------------------
+
+ Description
+
+ This creates a key. Each call to this routine allocate and generates
+ a new key that is distinct from all other keys.
+
+ Prototype
+
+ sword OCIThreadKeyInit(void *hndl, OCIError *err, OCIThreadKey **key,
+ OCIThreadKeyDestFunc destFn);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ key(OUT): The 'OCIThreadKey' in which to create the new key.
+
+ destFn(IN): The destructor for the key. NULL is permitted.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ Once this function executes successfully, a pointer to an allocated and
+ initialized key is return. That key can be used with 'OCIThreadKeyGet()'
+ and 'OCIThreadKeySet()'. The initial value of the key will be 'NULL' for
+ all threads.
+
+ It is illegal for this function to be called more than once to create the
+ same key (i.e., to be called more than once with the same value for the
+ 'key' parameter).
+
+ If the 'destFn' parameter is not NULL, the routine pointed to by 'destFn'
+ will be called whenever a thread that has a non-NULL value for the key
+ terminates. The routine will be called with one parameter. The
+ parameter will be the key's value for the thread at the time at which the
+ thread terminated.
+ If the key does not need a destructor function, pass NULL for 'destFn'.
+
+
+ OCIThreadKeyDestroy - OCIThread KeY DESTROY
+ -------------------------------------------
+
+ Description
+
+ Destroy and deallocate the key pointed to by 'key'.
+
+ Prototype
+
+ sword OCIThreadKeyDestroy(void *hndl, OCIError *err,
+ OCIThreadKey **key);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ key(IN/OUT): The 'OCIThreadKey' in which to destroy the key.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ This is different from the destructor function callback passed to the
+ key create routine. This new destroy function 'OCIThreadKeyDestroy' is
+ used to terminate any resources OCI THREAD acquired when it created
+ 'key'. [The 'OCIThreadKeyDestFunc' callback type is a key VALUE
+ destructor; it does in no way operate on the key itself.]
+
+ This must be called once the user has finished using the key. Not
+ calling the key destroy function may result in memory leaks.
+
+
+
+
+1.2.2.2 Thread Key operations
+-------------------------------
+
+ OCIThreadKeyGet - OCIThread KeY Get value
+ -----------------------------------------
+
+ Description
+
+ This gets the calling thread's current value for a key.
+
+ Prototype
+
+ sword OCIThreadKeyGet(void *hndl, OCIError *err, OCIThreadKey *key,
+ void **pValue);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ key(IN): The key.
+
+ pValue(IN/OUT): The location in which to place the thread-specific
+ key value.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ It is illegal to use this function on a key that has not been created
+ using 'OCIThreadKeyInit()'.
+
+ If the calling thread has not yet assigned a value to the key, 'NULL' is
+ placed in the location pointed to by 'pValue'.
+
+
+ OCIThreadKeySet - OCIThread KeY Set value
+ -----------------------------------------
+
+ Description
+
+ This sets the calling thread's value for a key.
+
+ Prototype
+
+ sword OCIThreadKeySet(void *hndl, OCIError *err, OCIThreadKey *key,
+ void *value);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ key(IN/OUT): The key.
+
+ value(IN): The thread-specific value to set in the key.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ It is illegal to use this function on a key that has not been created
+ using 'OCIThreadKeyInit()'.
+
+1.2.2.3 Thread Id
+--------------------
+
+ OCIThreadIdInit - OCIThread Thread Id INITialize
+ --------------------------------------------------
+
+ Description
+
+ Allocate and initialize the thread id 'tid'.
+
+ Prototype
+
+ sword OCIThreadIdInit(void *hndl, OCIError *err, OCIThreadId **tid);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ tid (OUT): Pointer to the thread ID to initialize.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+
+ OCIThreadIdDestroy - OCIThread Thread Id DESTROY
+ --------------------------------------------------
+
+ Description
+
+ Destroy and deallocate the thread id 'tid'.
+
+ Prototype
+
+ sword OCIThreadIdDestroy(void *hndl, OCIError *err, OCIThreadId **tid);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ tid(IN/OUT): Pointer to the thread ID to destroy.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Note
+
+ 'tid' should be initialized by OCIThreadIdInit().
+
+
+ OCIThreadIdSet - OCIThread Thread Id Set
+ -----------------------------------------
+
+ Description
+
+ This sets one 'OCIThreadId' to another.
+
+ Prototype
+
+ sword OCIThreadIdSet(void *hndl, OCIError *err,
+ OCIThreadId *tidDest,
+ OCIThreadId *tidSrc);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ tidDest(OUT): This should point to the location of the 'OCIThreadId'
+ to be set to.
+
+ tidSrc(IN): This should point to the 'OCIThreadId' to set from.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ 'tid' should be initialized by OCIThreadIdInit().
+
+
+ OCIThreadIdSetNull - OCIThread Thread Id Set Null
+ ---------------------------------------------------------
+
+ Description
+
+ This sets the NULL thread ID to a given 'OCIThreadId'.
+
+ Prototype
+
+ sword OCIThreadIdSetNull(void *hndl, OCIError *err,
+ OCIThreadId *tid);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error, it is
+ recorded in err and this function returns OCI_ERROR.
+ Diagnostic information can be obtained by calling
+ OCIErrorGet().
+
+ tid(OUT): This should point to the 'OCIThreadId' in which to put
+ the NULL thread ID.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ 'tid' should be initialized by OCIThreadIdInit().
+
+
+ OCIThreadIdGet - OCIThread Thread Id Get
+ ------------------------------------------
+
+ Description
+
+ This retrieves the 'OCIThreadId' of the thread in which it is called.
+
+ Prototype
+
+ sword OCIThreadIdGet(void *hndl, OCIError *err,
+ OCIThreadId *tid);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ tid(OUT): This should point to the location in which to place the
+ ID of the calling thread.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ 'tid' should be initialized by OCIThreadIdInit().
+
+ When OCIThread is used in a single-threaded environment,
+ OCIThreadIdGet() will always place the same value in the location
+ pointed to by 'tid'. The exact value itself is not important. The
+ important thing is that it is not the same as the NULL thread ID and
+ that it is always the same value.
+
+
+ OCIThreadIdSame - OCIThread Thread Ids Same?
+ ----------------------------------------------
+
+ Description
+
+ This determines whether or not two 'OCIThreadId's represent the same
+ thread.
+
+ Prototype
+
+ sword OCIThreadIdSame(void *hndl, OCIError *err,
+ OCIThreadId *tid1, OCIThreadId *tid2,
+ boolean *result);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ tid1(IN): Pointer to the first 'OCIThreadId'.
+
+ tid2(IN): Pointer to the second 'OCIThreadId'.
+
+ result(IN/OUT): Pointer to the result.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ If 'tid1' and 'tid2' represent the same thread, 'result' is set to TRUE.
+ Otherwise, 'result' is set to FALSE.
+
+ 'result' is set to TRUE if both 'tid1' and 'tid2' are the NULL thread ID.
+
+ 'ti1d' and 'tid2' should be initialized by OCIThreadIdInit().
+
+
+ OCIThreadIdNull - OCIThread Thread Id NULL?
+ ---------------------------------------------
+
+ Description
+
+ This determines whether or not a given 'OCIThreadId' is the NULL thread
+ ID.
+
+ Prototype
+
+ sword OCIThreadIdNull(void *hndl, OCIError *err,
+ OCIThreadId *tid,
+ boolean *result);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ tid(IN): Pointer to the 'OCIThreadId' to check.
+
+ result(IN/OUT): Pointer to the result.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ If 'tid' is the NULL thread ID, 'result' is set to TRUE. Otherwise,
+ 'result' is set to FALSE.
+
+ 'tid' should be initialized by OCIThreadIdInit().
+
+
+1.3 Active Threading Primitives
+=================================
+
+The active threading primitives deal with the manipulation of actual
+threads. Because the specifications of most of these primitives require
+that it be possible to have multiple threads, they work correctly only in
+the enabled OCIThread; In the disabled OCIThread, they always return
+failure. The exception is OCIThreadHandleGet(); it may be called in a
+single-threaded environment, in which case it will have no effect.
+
+Active primitives should only be called by code running in a multi-threaded
+environment. You can call OCIThreadIsMulti() to determine whether the
+environment is multi-threaded or single-threaded.
+
+
+1.3.1 Types
+--------------
+
+1.3.1.1 OCIThreadHandle - OCIThread Thread Handle
+------------------------------------------------------
+
+ Type 'OCIThreadHandle' is used to manipulate a thread in the active
+ primitives: OCIThreadJoin()and OCIThreadClose(). A thread handle opened by
+ OCIThreadCreate() must be closed in a matching call to
+ OCIThreadClose(). A thread handle is invalid after the call to
+ OCIThreadClose().
+
+ The distinction between a thread ID and a thread handle in OCIThread usage
+ follows the distinction between the thread ID and the thread handle on
+ Windows NT. On many platforms, the underlying native types are the same.
+
+
+1.3.2 Functions
+------------------
+
+ OCIThreadHndInit - OCIThread HaNDle Initialize
+ ----------------------------------------------
+
+ Description
+
+ Allocate and initialize the thread handle.
+
+ Prototype
+
+ sword OCIThreadHndInit(void *hndl, OCIError *err,
+ OCIThreadHandle **thnd);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ thnd(OUT): The address of pointer to the thread handle to initialize.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+
+ OCIThreadHndDestroy - OCIThread HaNDle Destroy
+ ----------------------------------------------
+
+ Description
+
+ Destroy and deallocate the thread handle.
+
+ Prototype
+
+ sword OCIThreadHndDestroy(void *hndl, OCIError *err,
+ OCIThreadHandle **thnd);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ thnd(IN/OUT): The address of pointer to the thread handle to destroy.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ 'thnd' should be initialized by OCIThreadHndInit().
+
+
+ OCIThreadCreate - OCIThread Thread Create
+ -----------------------------------------
+
+ Description
+
+ This creates a new thread.
+
+ Prototype
+
+ sword OCIThreadCreate(void *hndl, OCIError *err,
+ void (*start)(void *), void *arg,
+ OCIThreadId *tid, OCIThreadHandle *tHnd);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ start(IN): The function in which the new thread should begin
+ execution.
+
+ arg(IN): The argument to give the function pointed to by 'start'.
+
+ tid(IN/OUT): If not NULL, gets the ID for the new thread.
+
+ tHnd(IN/OUT): If not NULL, gets the handle for the new thread.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ The new thread will start by executing a call to the function pointed
+ to by 'start' with the argument given by 'arg'. When that function
+ returns, the new thread will terminate. The function should not
+ return a value and should accept one parameter, a 'void *'.
+
+ The call to OCIThreadCreate() must be matched by a call to
+ OCIThreadClose() if and only if tHnd is non-NULL.
+
+ If tHnd is NULL, a thread ID placed in *tid will not be valid in the
+ calling thread because the timing of the spawned thread's termination
+ is unknown.
+
+ 'tid' should be initialized by OCIThreadIdInit().
+
+ 'thnd' should be initialized by OCIThreadHndInit().
+
+
+
+ OCIThreadJoin - OCIThread Thread Join
+ -------------------------------------
+
+ Description
+
+ This function allows the calling thread to 'join' with another thread.
+ It blocks the caller until the specified thread terminates.
+
+ Prototype
+
+ sword OCIThreadJoin(void *hndl, OCIError *err, OCIThreadHandle *tHnd);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ tHnd(IN): The 'OCIThreadHandle' of the thread to join with.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ 'thnd' should be initialized by OCIThreadHndInit().
+
+ The result of multiple threads all trying to join with the same thread is
+ undefined.
+
+
+ OCIThreadClose - OCIThread Thread Close
+ ---------------------------------------
+
+ Description
+
+ This function should be called to close a thread handle.
+
+ Prototype
+
+ sword OCIThreadClose(void *hndl, OCIError *err, OCIThreadHandle *tHnd);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ tHnd(IN/OUT): The OCIThread thread handle to close.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ 'thnd' should be initialized by OCIThreadHndInit().
+
+ Both thread handle and the thread ID that was returned by the same call
+ to OCIThreadCreate() are invalid after the call to OCIThreadClose().
+
+
+
+ OCIThreadHandleGet - OCIThread Thread Get Handle
+ ------------------------------------------------
+
+ Description
+
+ Retrieve the 'OCIThreadHandle' of the thread in which it is called.
+
+ Prototype
+
+ sword OCIThreadHandleGet(void *hndl, OCIError *err,
+ OCIThreadHandle *tHnd);
+
+ hndl(IN/OUT): The OCI environment or session handle.
+
+ err(IN/OUT): The OCI error handle. If there is an error and OCI_ERROR
+ is returned, the error is recorded in err and diagnostic
+ information can be obtained by calling OCIErrorGet().
+
+ tHnd(IN/OUT): If not NULL, the location to place the thread
+ handle for the thread.
+
+ Returns
+
+ OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
+
+ Notes
+
+ 'thnd' should be initialized by OCIThreadHndInit().
+
+ The thread handle 'tHnd' retrieved by this function must be closed
+ with OCIThreadClose() and destroyed by OCIThreadHndDestroy() after it
+ is used.
+
+
+
+
+1.4 Using OCIThread
+=====================
+
+This section summarizes some of the more important details relating to the use
+of OCIThread.
+
+ * Process initialization
+
+ OCIThread only requires that the process initialization function
+ ('OCIThreadProcessInit()') be called when OCIThread is being used in a
+ multi-threaded application. Failing to call 'OCIThreadProcessInit()' in
+ a single-threaded application is not an error.
+
+ * OCIThread initialization
+
+ Separate calls to 'OCIThreadInit()' will all return the same OCIThread
+ context.
+
+ Also, remember that each call to 'OCIThreadInit()' must eventually be
+ matched by a call to 'OCIThreadTerm()'.
+
+ * Active vs. Passive Threading primitives
+
+ OCIThread client code written without using any active primitives can be
+ compiled and used without change on both single-threaded and
+ multi-threaded platforms.
+
+ OCIThread client code written using active primitives will only work
+ correctly on multi-threaded platforms. In order to write a version of the
+ same application to run on single-threaded platform, it is necessary to
+ branch the your code, whether by branching versions of the source file or
+ by branching at runtime with the OCIThreadIsMulti() call.
+
+******************************************************************************/
+
+/*****************************************************************************
+ ACTUAL PROTOTYPE DECLARATIONS
+******************************************************************************/
+
+void OCIThreadProcessInit();
+
+sword OCIThreadInit(void *hndl, OCIError *err);
+
+sword OCIThreadTerm(void *hndl, OCIError *err);
+
+boolean OCIThreadIsMulti();
+
+sword OCIThreadMutexInit(void *hndl, OCIError *err,
+ OCIThreadMutex **mutex);
+
+sword OCIThreadMutexDestroy(void *hndl, OCIError *err,
+ OCIThreadMutex **mutex);
+
+sword OCIThreadMutexAcquire(void *hndl, OCIError *err,
+ OCIThreadMutex *mutex);
+
+sword OCIThreadMutexRelease(void *hndl, OCIError *err,
+ OCIThreadMutex *mutex);
+
+sword OCIThreadKeyInit(void *hndl, OCIError *err, OCIThreadKey **key,
+ OCIThreadKeyDestFunc destFn);
+
+sword OCIThreadKeyDestroy(void *hndl, OCIError *err,
+ OCIThreadKey **key);
+
+sword OCIThreadKeyGet(void *hndl, OCIError *err, OCIThreadKey *key,
+ void **pValue);
+
+sword OCIThreadKeySet(void *hndl, OCIError *err, OCIThreadKey *key,
+ void *value);
+
+sword OCIThreadIdInit(void *hndl, OCIError *err, OCIThreadId **tid);
+
+sword OCIThreadIdDestroy(void *hndl, OCIError *err, OCIThreadId **tid);
+
+sword OCIThreadIdSet(void *hndl, OCIError *err,
+ OCIThreadId *tidDest, OCIThreadId *tidSrc);
+
+sword OCIThreadIdSetNull(void *hndl, OCIError *err, OCIThreadId *tid);
+
+sword OCIThreadIdGet(void *hndl, OCIError *err, OCIThreadId *tid);
+
+sword OCIThreadIdSame(void *hndl, OCIError *err,
+ OCIThreadId *tid1, OCIThreadId *tid2,
+ boolean *result);
+
+sword OCIThreadIdNull(void *hndl, OCIError *err,
+ OCIThreadId *tid, boolean *result);
+
+sword OCIThreadHndInit(void *hndl, OCIError *err, OCIThreadHandle **thnd);
+
+sword OCIThreadHndDestroy(void *hndl, OCIError *err, OCIThreadHandle **thnd);
+
+sword OCIThreadCreate(void *hndl, OCIError *err,
+ void (*start)(void *), void *arg,
+ OCIThreadId *tid, OCIThreadHandle *tHnd);
+
+sword OCIThreadJoin(void *hndl, OCIError *err, OCIThreadHandle *tHnd);
+
+sword OCIThreadClose(void *hndl, OCIError *err, OCIThreadHandle *tHnd);
+
+sword OCIThreadHandleGet(void *hndl, OCIError *err, OCIThreadHandle *tHnd);
+/*----------------- End OCI Thread interface Extensions ---------------------*/
+
+/*------------------ Begin OCI Row Callback Interfaces ----------------------*/
+
+typedef sword (*OCIBindRowCallback)(void *ctx);
+typedef sword (*OCIFetchRowCallback)(void *ctx);
+
+/*------------------ Begin OCI Row Callback Interfaces ----------------------*/
+
+/*--------------- Begin OCI Client Notification Interfaces ------------------*/
+
+typedef ub4 (*OCISubscriptionNotify)(void *ctx, OCISubscription *subscrhp,
+ void *pay, ub4 payl,
+ void *desc, ub4 mode);
+
+sword OCISubscriptionRegister(OCISvcCtx *svchp, OCISubscription **subscrhpp,
+ ub2 count, OCIError *errhp, ub4 mode);
+
+
+sword OCISubscriptionPost(OCISvcCtx *svchp, OCISubscription **subscrhpp,
+ ub2 count, OCIError *errhp, ub4 mode);
+
+sword OCISubscriptionUnRegister(OCISvcCtx *svchp, OCISubscription *subscrhp,
+ OCIError *errhp, ub4 mode);
+
+sword OCISubscriptionDisable(OCISubscription *subscrhp,
+ OCIError *errhp, ub4 mode);
+
+sword OCISubscriptionEnable(OCISubscription *subscrhp,
+ OCIError *errhp, ub4 mode);
+
+/*------------------- End OCI Publish/Subscribe Interfaces ------------------*/
+
+/*----------------- Extensions to Datetime interfaces -----------------------*/
+/*--------------------- Actual Prototypes -----------------------------------*/
+sword OCIDateTimeGetTime(void *hndl, OCIError *err, OCIDateTime *datetime,
+ ub1 *hr, ub1 *mm, ub1 *ss, ub4 *fsec);
+
+sword OCIDateTimeGetDate(void *hndl, OCIError *err, const OCIDateTime *date,
+ sb2 *yr, ub1 *mnth, ub1 *dy );
+
+sword OCIDateTimeGetTimeZoneOffset(void *hndl,OCIError *err,
+ const OCIDateTime *datetime,
+ sb1 *hr,sb1 *mm);
+
+sword OCIDateTimeConstruct(void *hndl,OCIError *err,OCIDateTime *datetime,
+ sb2 yr,ub1 mnth,ub1 dy,ub1 hr,ub1 mm,ub1 ss,ub4 fsec,
+ OraText *timezone,size_t timezone_length);
+
+sword OCIDateTimeSysTimeStamp(void *hndl, OCIError *err,
+ OCIDateTime *sys_date );
+
+sword OCIDateTimeAssign(void *hndl, OCIError *err, const OCIDateTime *from,
+ OCIDateTime *to);
+
+sword OCIDateTimeToText(void *hndl, OCIError *err, const OCIDateTime *date,
+ const OraText *fmt, ub1 fmt_length, ub1 fsprec,
+ const OraText *lang_name, size_t lang_length,
+ ub4 *buf_size, OraText *buf );
+
+sword OCIDateTimeFromText(void *hndl, OCIError *err, const OraText *date_str,
+ size_t dstr_length, const OraText *fmt, ub1 fmt_length,
+ const OraText *lang_name, size_t lang_length, OCIDateTime *date );
+
+sword OCIDateTimeCompare(void *hndl, OCIError *err, const OCIDateTime *date1,
+ const OCIDateTime *date2, sword *result );
+
+sword OCIDateTimeCheck(void *hndl, OCIError *err, const OCIDateTime *date,
+ ub4 *valid );
+
+sword OCIDateTimeConvert(void *hndl, OCIError *err, OCIDateTime *indate,
+ OCIDateTime *outdate);
+
+sword OCIDateTimeSubtract(void *hndl, OCIError *err, OCIDateTime *indate1,
+ OCIDateTime *indate2, OCIInterval *inter);
+
+sword OCIDateTimeIntervalAdd(void *hndl, OCIError *err, OCIDateTime *datetime,
+ OCIInterval *inter, OCIDateTime *outdatetime);
+
+sword OCIDateTimeIntervalSub(void *hndl, OCIError *err, OCIDateTime *datetime,
+ OCIInterval *inter, OCIDateTime *outdatetime);
+
+sword OCIIntervalSubtract(void *hndl, OCIError *err, OCIInterval *minuend,
+ OCIInterval *subtrahend, OCIInterval *result );
+
+sword OCIIntervalAdd(void *hndl, OCIError *err, OCIInterval *addend1,
+ OCIInterval *addend2, OCIInterval *result );
+
+sword OCIIntervalMultiply(void *hndl, OCIError *err, const OCIInterval *inter,
+ OCINumber *nfactor, OCIInterval *result );
+
+sword OCIIntervalDivide(void *hndl, OCIError *err, OCIInterval *dividend,
+ OCINumber *divisor, OCIInterval *result );
+
+sword OCIIntervalCompare(void *hndl, OCIError *err, OCIInterval *inter1,
+ OCIInterval *inter2, sword *result );
+
+sword OCIIntervalFromNumber(void *hndl, OCIError *err, OCIInterval *inter,
+ OCINumber *number);
+
+sword OCIIntervalFromText( void *hndl, OCIError *err, const OraText *inpstr,
+ size_t str_len, OCIInterval *result );
+
+sword OCIIntervalToText( void *hndl, OCIError *err, const OCIInterval *inter,
+ ub1 lfprec, ub1 fsprec,
+ OraText *buffer, size_t buflen, size_t *resultlen );
+
+sword OCIIntervalToNumber(void *hndl, OCIError *err,const OCIInterval *inter,
+ OCINumber *number);
+
+sword OCIIntervalCheck(void *hndl, OCIError *err, const OCIInterval *interval,
+ ub4 *valid );
+
+sword OCIIntervalAssign(void *hndl, OCIError *err, const OCIInterval *ininter,
+ OCIInterval *outinter );
+
+sword OCIIntervalSetYearMonth(void *hndl, OCIError *err, sb4 yr, sb4 mnth,
+ OCIInterval *result );
+
+sword OCIIntervalGetYearMonth(void *hndl, OCIError *err, sb4 *yr, sb4 *mnth,
+ const OCIInterval *result );
+
+sword OCIIntervalSetDaySecond(void *hndl, OCIError *err, sb4 dy, sb4 hr,
+ sb4 mm, sb4 ss, sb4 fsec, OCIInterval *result );
+
+sword OCIIntervalGetDaySecond(void *hndl, OCIError *err, sb4 *dy, sb4 *hr,
+ sb4 *mm, sb4 *ss, sb4 *fsec, const OCIInterval *result );
+
+sword OCIDateTimeToArray(void *hndl, OCIError *err,
+ const OCIDateTime *datetime, const OCIInterval *reftz,
+ ub1 *outarray, ub4 *len, ub1 fsprec);
+
+sword OCIDateTimeFromArray(void *hndl, OCIError *err, ub1 *inarray, ub4 len,
+ ub1 type, OCIDateTime *datetime,
+ const OCIInterval *reftz, ub1 fsprec);
+
+sword OCIDateTimeGetTimeZoneName(void *hndl, OCIError *err,
+ const OCIDateTime *datetime,
+ ub1 *buf, ub4 *buflen);
+
+sword OCIIntervalFromTZ(void *hndl, OCIError *err, const oratext *inpstring,
+ size_t str_len, OCIInterval *result);
+
+/*----------------- End Datetime interface Extensions -----------------------*/
+
+/*----------------- Connection Pooling prototypes ---------------------------*/
+sword OCIConnectionPoolCreate(OCIEnv *envhp, OCIError *errhp, OCICPool *poolhp,
+ OraText **poolName, sb4 *poolNameLen,
+ const OraText *dblink, sb4 dblinkLen,
+ ub4 connMin, ub4 connMax, ub4 connIncr,
+ const OraText *poolUserName, sb4 poolUserLen,
+ const OraText *poolPassword, sb4 poolPassLen,
+ ub4 mode);
+
+sword OCIConnectionPoolDestroy(OCICPool *poolhp,
+ OCIError *errhp, ub4 mode);
+
+/*----------------- End Connection Pooling prototypes -----------------------*/
+
+/*-------------------- Session Pooling prototypes ---------------------------*/
+
+sword OCISessionPoolCreate (OCIEnv *envhp, OCIError *errhp, OCISPool *spoolhp,
+ OraText **poolName, ub4 *poolNameLen,
+ const OraText *connStr, ub4 connStrLen,
+ ub4 sessMin, ub4 sessMax, ub4 sessIncr,
+ OraText *userid, ub4 useridLen,
+ OraText *password, ub4 passwordLen,
+ ub4 mode);
+
+sword OCISessionPoolDestroy (OCISPool *spoolhp,
+ OCIError *errhp,
+ ub4 mode);
+
+sword OCISessionGet (OCIEnv *envhp, OCIError *errhp, OCISvcCtx **svchp,
+ OCIAuthInfo *authhp,
+ OraText *poolName, ub4 poolName_len,
+ const OraText *tagInfo, ub4 tagInfo_len,
+ OraText **retTagInfo, ub4 *retTagInfo_len,
+ boolean *found, ub4 mode);
+
+sword OCISessionRelease (OCISvcCtx *svchp, OCIError *errhp,
+ OraText *tag, ub4 tag_len,
+ ub4 mode);
+
+/*-------------------- End Session Pooling prototypes -----------------------*/
+
+/* --------------------- OCI Application Context --------------------------*/
+
+
+sword OCIAppCtxSet(void * sesshndl, void *nsptr, ub4 nsptrlen,
+ void *attrptr, ub4 attrptrlen,
+ void *valueptr, ub4 valueptrlen,
+ OCIError *errhp, ub4 mode);
+
+sword OCIAppCtxClearAll(void *sesshndl, void *nsptr, ub4 nsptrlen,
+ OCIError *errhp, ub4 mode);
+
+/*-------------------------------- OCIMemStats ------------------------------*/
+sword OCIMemStats(void *hndlp, OCIError *errhp, OCIEnv **envhp,
+ ub4 mode, ub4 mode1, oratext *tabname);
+
+/*-------------------------------- OCIPing ----------------------------------*/
+sword OCIPing (OCISvcCtx *svchp, OCIError *errhp, ub4 mode);
+
+/*----------------- Kerberos Authentication prototypes ----------------------*/
+
+sword OCIKerbAttrSet(OCISession *trgthndlp, ub4 cred_use, ub1 *ftgt_ticket,
+ ub4 ticket_len, ub1 *session_key, ub4 skey_len,
+ ub2 ftgt_keytype, ub4 ftgt_ticket_flags,
+ sb4 ftgt_auth_time, sb4 ftgt_start_time,
+ sb4 ftgt_end_time, sb4 ftgt_renew_time,
+ oratext *ftgt_client_principal,
+ ub4 ftgt_client_principal_len, oratext *ftgt_client_realm,
+ ub4 ftgt_client_realm_len, OCIError *errhp);
+
+/*------------------- End Kerberos Authentication prototypes ----------------*/
+
+/*------------------- Database Startup/Shutdown prototypes ------------------*/
+
+sword OCIDBStartup (OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCIAdmin *admhp,
+ ub4 mode,
+ ub4 flags);
+
+sword OCIDBShutdown(OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCIAdmin *admhp,
+ ub4 mode);
+
+/*------------------ End Database Startup/Shutdown prototypes ---------------*/
+
+/*----------------------- OCIClientVersion ------------------------------*/
+void OCIClientVersion(sword *major_version,
+ sword *minor_version,
+ sword *update_num,
+ sword *patch_num,
+ sword *port_update_num);
+/*----------------------- End OCIClientVersion --------------------------*/
+
+/*----------------------- HA Event prototypes ------------------------------*/
+
+sword OCIInitEventHandle(OCIError *errhp,
+ OCIEvent *event,
+ text *str,
+ ub4 size);
+
+/*----------------------- End HA Event prototypes --------------------------*/
+
+/*---------------------------------------------------------------------------
+ PRIVATE FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+ /* the following functions are depracated and should not be used */
+#ifdef NEVER
+sword OCIStmtBindByPos (OCIStmt *stmtp, OCIBind *bindp, OCIError *errhp,
+ ub4 position, void *valuep, sb4 value_sz,
+ ub2 dty, void *indp, ub2 *alenp, ub2 *rcodep,
+ ub4 maxarr_len, ub4 *curelep, ub4 mode);
+
+
+sword OCIStmtBindByName (OCIStmt *stmtp, OCIBind *bindp, OCIError *errhp,
+ const OraText *placeholder, sb4 placeh_len, void *valuep,
+ sb4 value_sz, ub2 dty, void *indp, ub2 *alenp,
+ ub2 *rcodep, ub4 maxarr_len, ub4 *curelep, ub4 mode);
+
+sword ocidefn (OCIStmt *stmtp, OCIDefine *defnp, OCIError *errhp,
+ ub4 position, void *valuep, sb4 value_sz, ub2 dty,
+ void *indp, ub2 *rlenp, ub2 *rcodep, ub4 mode);
+#endif /* NEVER */
+
+#endif /* OCIAP_ORACLE */
--- /dev/null
+/* Copyright (c) 1991, 2005, Oracle. All rights reserved. */
+/*
+ NAME
+ ociapr.h
+ MODIFIED (MM/DD/YY)
+ mbastawa 09/16/05 - dbhygiene
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ dsaha 05/19/00 - Fix lint
+ sgollapu 05/19/98 - Change text to OraText
+ dchatter 11/10/95 - add ognfd() - get native fd
+ lchidamb 04/06/95 - drop maxdsz from obindps/odefinps
+ slari 04/07/95 - add opinit
+ dchatter 03/08/95 - osetpi and ogetpi
+ lchidamb 12/09/94 - add obindps() and odefinps()
+ dchatter 03/06/95 - merge changes from branch 1.1.720.2
+ dchatter 11/14/94 - merge changes from branch 1.1.720.1
+ dchatter 02/08/95 - olog call; drop onblon
+ dchatter 10/31/94 - new functions for non-blocking oci
+ rkooi2 11/27/92 - Changing datatypes to agree with ocidef.h
+ rkooi2 10/26/92 - More portability mods
+ rkooi2 10/18/92 - Changed to agree with oci.c
+ sjain 03/16/92 - Creation
+*/
+/*
+ * Declare the OCI functions.
+ * Prototype information is included.
+ * Use this header for ANSI C compilers.
+ */
+
+#ifndef OCIAPR
+#define OCIAPR
+
+#ifndef ORATYPES
+#include <oratypes.h>
+#endif
+
+#ifndef OCIDFN
+#include <ocidfn.h>
+#endif
+
+/*
+ * Oci BIND (Piecewise or with Skips)
+ */
+sword obindps(struct cda_def *cursor, ub1 opcode, OraText *sqlvar,
+ sb4 sqlvl, ub1 *pvctx, sb4 progvl,
+ sword ftype, sword scale,
+ sb2 *indp, ub2 *alen, ub2 *arcode,
+ sb4 pv_skip, sb4 ind_skip, sb4 alen_skip, sb4 rc_skip,
+ ub4 maxsiz, ub4 *cursiz,
+ OraText *fmt, sb4 fmtl, sword fmtt);
+sword obreak(struct cda_def *lda);
+sword ocan (struct cda_def *cursor);
+sword oclose(struct cda_def *cursor);
+sword ocof (struct cda_def *lda);
+sword ocom (struct cda_def *lda);
+sword ocon (struct cda_def *lda);
+
+
+/*
+ * Oci DEFINe (Piecewise or with Skips)
+ */
+sword odefinps(struct cda_def *cursor, ub1 opcode, sword pos,ub1 *bufctx,
+ sb4 bufl, sword ftype, sword scale,
+ sb2 *indp, OraText *fmt, sb4 fmtl, sword fmtt,
+ ub2 *rlen, ub2 *rcode,
+ sb4 pv_skip, sb4 ind_skip, sb4 alen_skip, sb4 rc_skip);
+sword odessp(struct cda_def *cursor, OraText *objnam, size_t onlen,
+ ub1 *rsv1, size_t rsv1ln, ub1 *rsv2, size_t rsv2ln,
+ ub2 *ovrld, ub2 *pos, ub2 *level, OraText **argnam,
+ ub2 *arnlen, ub2 *dtype, ub1 *defsup, ub1* mode,
+ ub4 *dtsiz, sb2 *prec, sb2 *scale, ub1 *radix,
+ ub4 *spare, ub4 *arrsiz);
+sword odescr(struct cda_def *cursor, sword pos, sb4 *dbsize,
+ sb2 *dbtype, sb1 *cbuf, sb4 *cbufl, sb4 *dsize,
+ sb2 *prec, sb2 *scale, sb2 *nullok);
+sword oerhms (struct cda_def *lda, sb2 rcode, OraText *buf,
+ sword bufsiz);
+sword oermsg (sb2 rcode, OraText *buf);
+sword oexec (struct cda_def *cursor);
+sword oexfet (struct cda_def *cursor, ub4 nrows,
+ sword cancel, sword exact);
+sword oexn (struct cda_def *cursor, sword iters, sword rowoff);
+sword ofen (struct cda_def *cursor, sword nrows);
+sword ofetch (struct cda_def *cursor);
+sword oflng (struct cda_def *cursor, sword pos, ub1 *buf,
+ sb4 bufl, sword dtype, ub4 *retl, sb4 offset);
+sword ogetpi (struct cda_def *cursor, ub1 *piecep, void **ctxpp,
+ ub4 *iterp, ub4 *indexp);
+sword oopt (struct cda_def *cursor, sword rbopt, sword waitopt);
+sword opinit (ub4 mode);
+sword olog (struct cda_def *lda, ub1* hda,
+ OraText *uid, sword uidl,
+ OraText *pswd, sword pswdl,
+ OraText *conn, sword connl,
+ ub4 mode);
+sword ologof (struct cda_def *lda);
+sword oopen (struct cda_def *cursor, struct cda_def *lda,
+ OraText *dbn, sword dbnl, sword arsize,
+ OraText *uid, sword uidl);
+sword oparse (struct cda_def *cursor, OraText *sqlstm, sb4 sqllen,
+ sword defflg, ub4 lngflg);
+sword orol (struct cda_def *lda);
+sword osetpi (struct cda_def *cursor, ub1 piece, void *bufp, ub4 *lenp);
+
+void sqlld2 (struct cda_def *lda, OraText *cname, sb4 *cnlen);
+void sqllda (struct cda_def *lda);
+
+/* non-blocking functions */
+sword onbset (struct cda_def *lda );
+sword onbtst (struct cda_def *lda );
+sword onbclr (struct cda_def *lda );
+sword ognfd (struct cda_def *lda, void *fdp);
+
+
+/*
+ * OBSOLETE CALLS
+ */
+
+/*
+ * OBSOLETE BIND CALLS
+ */
+sword obndra(struct cda_def *cursor, OraText *sqlvar, sword sqlvl,
+ ub1 *progv, sword progvl, sword ftype, sword scale,
+ sb2 *indp, ub2 *alen, ub2 *arcode, ub4 maxsiz,
+ ub4 *cursiz, OraText *fmt, sword fmtl, sword fmtt);
+sword obndrn(struct cda_def *cursor, sword sqlvn, ub1 *progv,
+ sword progvl, sword ftype, sword scale, sb2 *indp,
+ OraText *fmt, sword fmtl, sword fmtt);
+sword obndrv(struct cda_def *cursor, OraText *sqlvar, sword sqlvl,
+ ub1 *progv, sword progvl, sword ftype, sword scale,
+ sb2 *indp, OraText *fmt, sword fmtl, sword fmtt);
+
+/*
+ * OBSOLETE DEFINE CALLS
+ */
+sword odefin(struct cda_def *cursor, sword pos, ub1 *buf,
+ sword bufl, sword ftype, sword scale, sb2 *indp,
+ OraText *fmt, sword fmtl, sword fmtt, ub2 *rlen, ub2 *rcode);
+
+/* older calls ; preferred equivalent calls above */
+
+sword oname (struct cda_def *cursor, sword pos, sb1 *tbuf,
+ sb2 *tbufl, sb1 *buf, sb2 *bufl);
+sword orlon (struct cda_def *lda, ub1 *hda,
+ OraText *uid, sword uidl,
+ OraText *pswd, sword pswdl,
+ sword audit);
+sword olon (struct cda_def *lda, OraText *uid, sword uidl,
+ OraText *pswd, sword pswdl, sword audit);
+sword osql3 (struct cda_def *cda, OraText *sqlstm, sword sqllen);
+sword odsc (struct cda_def *cursor, sword pos, sb2 *dbsize,
+ sb2 *fsize, sb2 *rcode, sb2 *dtype, sb1 *buf,
+ sb2 *bufl, sb2 *dsize);
+
+#endif /* OCIAPR */
--- /dev/null
+/* Copyright (c) 1981, 2005, Oracle. All rights reserved. */
+/* Copyright (c) 1984, 2005, Oracle. All rights reserved. */
+
+/*
+NAME
+ ocidef
+CONTENTS
+ Oracle Call Interface cursor area and LDA definitions
+NOTES
+ none
+OWNER
+ Oates
+DATE
+ 09/07/82
+MODIFIED
+ mbastawa 09/16/05 - dbhygiene
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ srseshad 03/25/03 - convert oci public api to ansi
+ csteinba 11/05/02 - bug 2521931: redefine OTYACL
+ aahluwal 06/03/02 - bug 2360115
+ bpalaval 02/08/01 - Change text to oratext.
+ chliang 02/01/01 - fix olint error.
+ bpalaval 11/16/00 - Bug 1244685 : Fix ALTER CLUSTER issue..
+ slari 11/08/00 - remove functions duplicated in ociapr.h
+ whe 09/01/99 - 976457:check __cplusplus for C++ code
+ skmishra 04/23/97 - Provide C++ compatibility
+ lchidamb 06/26/96 - put upidef.h, riddef.h within #ifndef
+ slari 06/12/96 - add ocigft_getFcnType
+ dchatter 11/10/95 - ocignfd - oci get native file descriptor
+ slari 05/11/95 - change OCIEVDEF/OCIEVTSF to UPIEVDEF/UPIEVTSF
+ dchatter 04/06/95 - add ifdef flags around OCI_flags
+ lchidamb 04/06/95 - drop maxdsz from ocibndps/ocidfnps
+ slari 04/07/95 - rename opinit to ocipin
+ slari 03/13/95 - thread safety changes
+ dchatter 03/08/95 - piece definitions OCI_*_PIECE
+ lchidamb 12/06/94 - add support for binding/defining with skips
+ dchatter 03/06/95 - merge changes from branch 1.12.720.1
+ dchatter 02/06/95 - add defines for login mode parameters
+ dchatter 07/06/94 - Deleting CRSCHK, with refcursor, no way to set this
+ dchatter 06/13/94 - add a new LDA flag LDANBL
+ rkooi 11/18/92 - update ocidpr interface
+ mmoore 10/31/92 - add ocidpr
+ gpongrac 11/17/92 - fix oexfet prototype
+ sjain 01/03/92 - Add ocibra
+ rjenkins 11/04/91 - adding prototypes for oparse and oexfet
+ sjain 04/15/91 - Change ocistf proto
+ sjain 04/01/91 - Rearrange oty codes. Add new ones
+ Jain 12/03/90 - Add #define for new describe call
+ Jain 11/29/90 - Add new function code for the new oci calls
+ Mendels 01/20/89 - fix 19170: make ocitbl CONST_DATA
+ Kabcene 01/27/88 - change interfaces to match V5
+ Navab 12/09/87 - add a parameter to ocierr call
+ Navab 11/30/87 - add ocierr, rename ocioer
+ Navab 10/08/87 - add prototypes for procedure declarations
+ Howard 09/07/87 - endif blah
+ Howard 05/11/87 - Add OTY types
+ Howard 04/27/87 - move ocldef defines here
+ Oates 10/15/85 - Add OCANCEL
+ Oates 09/30/85 - Implement ORA*Net
+ Oates 06/27/85 - Make datatype compatible with upidef.h
+ Andy 05/07/85 - delete CSRFBPIC
+*/
+
+#ifndef UPIDEF
+#include <upidef.h>
+#endif
+
+#ifndef RIDDEF
+#include <riddef.h>
+#endif
+
+#include <ociapr.h>
+
+#ifndef OCIDEF
+#define OCIDEF
+
+
+#define CSRCHECK 172 /* csrdef is a cursor */
+#define LDACHECK 202 /* csrdef is a login data area */
+struct csrdef
+{
+ sb2 csrrc; /* return code: v2 codes, v4 codes negative */
+ ub2 csrft; /* function type */
+ ub4 csrrpc; /* rows processed count */
+ ub2 csrpeo; /* parse error offset */
+ ub1 csrfc; /* function code */
+ ub1 csrlfl; /* lda flag to indicate type of login */
+ ub2 csrarc; /* actual untranslated return code */
+ ub1 csrwrn; /* warning flags */
+ ub1 csrflg; /* error action */
+ sword csrcn; /* cursor number */
+ riddef csrrid; /* rowid structure */
+ sword csrose; /* os dependent error code */
+ ub1 csrchk; /* check byte = CSRCHECK - in cursor */
+ /* check byte = LDACHECK - in LDA */
+ struct hstdef *csrhst; /* pointer to the hst */
+};
+typedef struct csrdef csrdef;
+typedef struct csrdef ldadef; /* lda is the same as a csr */
+
+
+/* values for csrlfl */
+#define LDAFLG 1 /* ...via ologon */
+#define LDAFLO 2 /* ...via olon or orlon */
+#define LDANBL 3 /* ...nb logon in progress */
+
+/* valuses for crsfc */
+#define csrfpa 2 /* ...OSQL */
+#define csrfex 4 /* ...OEXEC */
+#define csrfbi 6 /* ...OBIND */
+#define csrfdb 8 /* ...ODFINN */
+#define csrfdi 10 /* ...ODSRBN */
+#define csrffe 12 /* ...OFETCH */
+#define csrfop 14 /* ...OOPEN */
+#define csrfcl 16 /* ...OCLOSE */
+#define csrfds 22 /* ...ODSC */
+#define csrfnm 24 /* ...ONAME */
+#define csrfp3 26 /* ...OSQL3 */
+#define csrfbr 28 /* ...OBNDRV */
+#define csrfbx 30 /* ...OBNDRN */
+/*#defe csrfdf 32*/ /* ???? */
+#define csrfso 34 /* ...OOPT */
+#define csrfre 36 /* ...ORESUM */
+#define csrfbn 50 /* ...OBINDN */
+#define csrfca 52 /* ..OCANCEL */
+#define csrfsd 54 /* ..OSQLD */
+#define csrfef 56 /* ..OEXFEN */
+#define csrfln 58 /* ..OFLNG */
+#define csrfdp 60 /* ..ODSCSP */
+#define csrfba 62 /* ..OBNDRA */
+#define csrfbps 63 /*..OBINDPS */
+#define csrfdps 64 /*..ODEFINPS */
+#define csrfgpi 65 /* ...OGETPI */
+#define csrfspi 66 /* ...OSETPI */
+
+/* values for csrwrn */
+#define CSRWANY 0x01 /* there is a warning flag set */
+#define CSRWTRUN 0x02 /* a data item was truncated */
+#define CSRWNVIC 0x04 /* NULL values were used in an aggregate function */
+#define CSRWITCE 0x08 /* column count not equal to into list count */
+#define CSRWUDNW 0x10 /* update or delete without where clause */
+#define CSRWRSV0 0x20
+#define CSRWROLL 0x40 /* rollback required */
+#define CSRWRCHG 0x80 /* change after query start on select for update */
+
+/* values fro csrflg */
+#define CSRFSPND 0x01 /* current operation suspended */
+#define CSRFATAL 0x02 /* fatal operation: transaction rolled back */
+#define CSRFBROW 0x04 /* current row backed out */
+#define CSRFREFC 0x08 /* ref cursor type CRSCHK disabled for this cursor */
+#define CSRFNOAR 0x10 /* ref cursor type binds, so no array bind/execute */
+
+/* define function codes; in order of octdef.h */
+#define OTYCTB 1 /* CREATE TABLE */
+#define OTYSER 2 /* set role */
+#define OTYINS 3 /* INSERT */
+#define OTYSEL 4 /* SELECT */
+#define OTYUPD 5 /* UPDATE */
+#define OTYDRO 6 /* drop role */
+#define OTYDVW 7 /* DROP VIEW */
+ /* once was validate index */
+ /* once was create partition */
+ /* once was alter partition */
+#define OTYDTB 8 /* DROP TABLE */
+ /* once was alter space */
+ /* once was drop space */
+#define OTYDEL 9 /* DELETE */
+#define OTYCVW 10 /* create view */
+#define OTYDUS 11 /* drop user */
+#define OTYCRO 12 /* create role */
+#define OTYCSQ 13 /* create sequence */
+#define OTYASQ 14 /* alter sequence */
+#define OTYACL 15 /* alter cluster */
+#define OTYDSQ 16 /* drop sequence */
+#define OTYCSC 17 /* create schema */
+#define OTYCCL 18 /* CREATE CLUSTER */
+ /* once was alter cluster */
+#define OTYCUS 19 /* create user */
+#define OTYCIX 20 /* CREATE INDEX */
+#define OTYDIX 21 /* DROP INDEX */
+#define OTYDCL 22 /* DROP CLUSTER */
+#define OTYVIX 23 /* validate index */
+#define OTYCPR 24 /* create procedure */
+#define OTYAPR 25 /* alter procedure */
+#define OTYATB 26 /* alter table */
+ /* once was evaluate */
+#define OTYXPL 27 /* explain */
+#define OTYGRA 28 /* grant */
+#define OTYREV 29 /* revoke */
+#define OTYCSY 30 /* create synonym */
+#define OTYDSY 31 /* drop synonym */
+#define OTYASY 32 /* alter system switch log */
+#define OTYSET 33 /* set transaction */
+#define OTYPLS 34 /* pl/sql execute */
+#define OTYLTB 35 /* lock */
+#define OTYNOP 36 /* noop */
+#define OTYRNM 37 /* rename */
+#define OTYCMT 38 /* comment */
+#define OTYAUD 39 /* audit */
+#define OTYNOA 40 /* no audit */
+#define OTYAIX 41 /* ALTER INDEX */
+#define OTYCED 42 /* create external database */
+#define OTYDED 43 /* drop external database */
+#define OTYCDB 44 /* create database */
+#define OTYADB 45 /* alter database */
+#define OTYCRS 46 /* create rollback segment */
+#define OTYARS 47 /* alter rollback segment */
+#define OTYDRS 48 /* drop rollback segment */
+#define OTYCTS 49 /* create tablespace */
+#define OTYATS 50 /* alter tablespace */
+#define OTYDTS 51 /* drop tablespace */
+#define OTYASE 52 /* alter session */
+#define OTYAUR 53 /* alter user */
+#define OTYCWK 54 /* commit (work) */
+#define OTYROL 55 /* rollback */
+#define OTYSPT 56 /* savepoint */
+
+/* For number greater than 56 the the type is the same as defined in
+** octdef.h for that number. So for completion look at octdef.h
+*/
+
+#define OTYDEV OTYCVW /* old DEFINE VIEW = create view */
+
+/* FUNCTION CODES */
+#define OCLFPA 2 /* parse - OSQL */
+#define OCLFEX 4 /* execute - OEXEC */
+#define OCLFBI 6 /* BIND by name - OBIND */
+#define OCLFDB 8 /* define buffer - ODEFIN */
+#define OCLFDI 10 /* describe item - ODSC */
+#define OCLFFE 12 /* fetch - OFETCH */
+#define OCLFOC 14 /* open cursor - OOPEN */
+# define OCLFLI OCLFOC /* old name for open cursor - OOPEN */
+#define OCLFCC 16 /* close cursor - OCLOSE */
+# define OCLFLO OCLFCC /* old name for close cursor - OCLOSE */
+#define OCLFDS 22 /* describe - ODSC */
+#define OCLFON 24 /* get table and column names - ONAME */
+#define OCLFP3 26 /* parse - OSQL3 */
+#define OCLFBR 28 /* bind reference by name - OBNDRV */
+#define OCLFBX 30 /* bind referecne numeric - OBNDRN */
+#define OCLFSO 34 /* special function - OOPT */
+#define OCLFRE 36 /* resume - ORESUM */
+#define OCLFBN 50 /* bindn */
+#define OCLFMX 52 /* maximum function number */
+
+#ifdef NEVER /* unused codes */
+# define OCLFLK 18 /* open for kernel operations */
+# define OCLFEK 20 /* execute kernel operations */
+# define OCLFOK 22 /* kernel close */
+# define OCLFIN 28 /* logon to oracle */
+# define OCLFOF 30 /* logoff from oracle */
+# define OCLFAX 32 /* allocate a context area */
+# define OCLFPI 34 /* page in context area */
+# define OCLFIS 36 /* special system logon */
+# define OCLFCO 38 /* cancel the current operation */
+# define OCLFGI 40 /* get database id */
+# define OCLFJN 42 /* journal operation */
+# define OCLFCL 44 /* cleanup prior execute operation */
+# define OCLFMC 46 /* map a cursor area */
+# define OCLFUC 48 /* unmap cursor and restore user maping */
+#endif /*NEVER *//* obsolete codes */
+
+
+/* values for ocimode in ocipin call */
+
+#define OCIEVDEF UPIEVDEF /* default : non-thread safe enivronment */
+#define OCIEVTSF UPIEVTSF /* thread-safe environment */
+
+
+/* OCIL* flags used to determine the mode of login, using ocilog().
+** Currently defined only for non-blocking and thread-safe logins.
+*/
+
+#define OCILMDEF UPILMDEF /* default, regular login */
+#define OCILMNBL UPILMNBL /* non-blocking logon */
+#define OCILMESY UPILMESY /* thread safe but external sync */
+#define OCILMISY UPILMISY /* internal sync, we do it */
+#define OCILMTRY UPILMTRY /* try to, but do not block on mutex */
+
+
+/*
+ * since sqllib uses both ocidef and ocidfn the following defines
+ * need to be guarded
+ */
+#ifndef OCI_FLAGS
+#define OCI_FLAGS
+
+/* OCI_*_PIECE defines the piece types that are returned or set
+*/
+
+#define OCI_ONE_PIECE UPI_ONE_PIECE /* there or this is the only piece */
+#define OCI_FIRST_PIECE UPI_FIRST_PIECE /* the first of many pieces */
+#define OCI_NEXT_PIECE UPI_NEXT_PIECE /* the next of many pieces */
+#define OCI_LAST_PIECE UPI_LAST_PIECE /* the last piece of this column */
+#endif
+
+/*
+** OCITAB: define return code pairs for version 2 to 3 conversions
+*/
+struct ocitab
+{
+ sb2 ocitv3; /* Version 3/4 return code */
+ sb2 ocitv2; /* Version 2 equivalent return code */
+};
+typedef struct ocitab ocitab;
+
+externref const ocitab ocitbl[];
+
+/* macros to check cursors and LDA's. */
+/* macros to set error codes */
+
+# define CRSCHK(c) if ((c->csrchk != CSRCHECK)\
+ && !bit(c->csrflg, CSRFREFC))\
+ return(ocir32(c, OER(1001)))
+# define ldaerr(l, e) ( l->csrrc = (sb2)(-( l->csrarc = (ub2)(e)) ) )
+# define LDACHK(l) if (l->csrchk != LDACHECK) \
+ return(ldaerr(l, OER(1001)))
+
+
+/************************************************/
+/* OCI PROCEDURE DECLARATIONS */
+/************************************************/
+
+
+
+
+/*****************************/
+/* Database logon/logout */
+/*****************************/
+sword ocilog( ldadef *lda, struct hstdef *hst, oratext *uid, sword uidl,
+ oratext *psw, sword pswl, oratext* conn, sword connl,
+ ub4 mode );
+sword ocilon( ldadef *lda, oratext *uid, sword uidl, oratext *psw,
+ sword pswl, sword audit );
+sword ocilgi( ldadef *lda, sb2 areacount );
+sword ocirlo( ldadef *lda, struct hstdef *hst, oratext *uid, sword uidl,
+ oratext *psw, sword pswl, sword audit );
+ /* ocilon - logon to oracle
+ ** ocilgi - version 2 compatible ORACLE logon call.
+ ** no login to ORACLE is performed: the LDA is initialized
+ ** ocirlo - version 5 compatible ORACLE Remote Login call,
+ ** oracle login is executed.
+ ** lda - pointer to ldadef
+ ** uid - user id [USER[/PASSWORD]]
+ ** uidl - length of uid, if -1 strlen(uid) is used
+ ** psw - password string; ignored if specified in uid
+ ** pswl - length of psw, if -1 strlen(psw) is used
+ ** audit - is not supported; the only permissible value is 0
+ ** areacount - unused
+ */
+
+sword ocilof( ldadef *lda );
+ /*
+ ** ocilof - disconnect from ORACLE
+ ** lda - pointer to ldadef
+ */
+
+
+/*********************/
+/* Error Messages */
+/*********************/
+sword ocierr( ldadef *lda, sb2 rcode, oratext *buffer, sword bufl );
+sword ocidhe( sb2 rcode, oratext *buffer );
+ /*
+ ** Move the text explanation for an ORACLE error to a user defined buffer
+ ** ocierr - will return the message associated with the hstdef stored
+ ** in the lda.
+ ** ocidhe - will return the message associated with the default host.
+ ** lda - lda associated with the login session
+ ** rcode - error code as returned by V3 call interface
+ ** buffer - address of a user buffer of at least 132 characters
+ */
+
+
+/***********************/
+/* Cursor Open/Close */
+/***********************/
+sword ociope( struct csrdef *cursor, ldadef *lda, oratext *dbn, sword dbnl,
+ sword areasize, oratext *uid, sword uidl );
+
+sword ociclo( struct csrdef *cursor );
+ /*
+ ** open or close a cursor.
+ ** cursor - pointer to csrdef
+ ** ldadef - pointer to ldadef
+ ** dbn - unused
+ ** dbnl - unused
+ ** areasize - if (areasize == -1) areasize <- system default initial size
+ ** else if (areasize IN [1..256]) areasize <- areasize * 1024;
+ ** most applications should use the default size since context
+ ** areas are extended as needed until memory is exhausted.
+ ** uid - user id
+ ** uidl - userid length
+ */
+
+/***********************************/
+/* CONTROL AND OPTIONS */
+/***********************************/
+sword ocibre( ldadef *lda );
+ /*
+ ** ocibrk - Oracle Call Interface send BReaK Sends a break to
+ ** oracle. If oracle is active, the current operation is
+ ** cancelled. May be called asynchronously. DOES NOT SET
+ ** OERRCD in the hst. This is because ocibrk may be called
+ ** asynchronously. Callers must test the return code.
+ ** lda - pointer to a ldadef
+ */
+
+sword ocican( struct csrdef *cursor );
+ /*
+ ** cancel the operation on the cursor, no additional OFETCH calls
+ ** will be issued for the existing cursor without an intervening
+ ** OEXEC call.
+ ** cursor - pointer to csrdef
+ */
+
+sword ocisfe( struct csrdef *cursor, sword erropt, sword waitopt );
+ /*
+ ** ocisfe - user interface set error options
+ ** set the error and cursor options.
+ ** allows user to set the options for dealing with fatal dml errors
+ ** and other cursor related options
+ ** see oerdef for valid settings
+ ** cursor - pointer to csrdef
+ ** erropt - error optionsn
+ ** waitopr - wait options
+ */
+
+
+/***************************************/
+/* COMMIT/ROLLBACK/AUTOCOMMIT */
+/***************************************/
+sword ocicom( ldadef *lda );
+sword ocirol( ldadef *lda );
+ /*
+ ** ocicom - commit the current transaction
+ ** ocirol - roll back the current transaction
+ */
+
+sword ocicon( ldadef *lda );
+sword ocicof( ldadef *lda );
+ /*
+ ** ocicon - auto Commit ON
+ ** ocicof - auto Commit OFf
+ */
+
+
+
+/************************/
+/* parsing */
+/************************/
+sword ocisq3(struct csrdef *cursor, oratext * /* sqlstm */, sword sqllen);
+ /*
+ ** ocisq3 - user interface parse sql statement
+ ** cursor - pointer to csrdef
+ ** sqlstm - pointer to SQL statement
+ ** sqllen - length of SQL statement. if -1, strlen(sqlstm) is used
+ */
+
+
+
+/***************************/
+/* BINDING */
+/***************************/
+/* these are for the opcode in ocibndps, ocidfnps */
+#define OCI_PCWS 0
+#define OCI_SKIP 1
+
+sword ocibin( struct csrdef *cursor, oratext *sqlvar, sword sqlvl,
+ ub1 *progv, sword progvl, sword ftype, sword scale,
+ oratext *fmt, sword fmtl, sword fmtt );
+sword ocibrv( struct csrdef *cursor, oratext *sqlvar, sword sqlvl,
+ ub1 *progv, sword progvl, sword ftype, sword scale, sb2 *indp,
+ oratext *fmt, sword fmtl, sword fmtt );
+sword ocibra( struct csrdef *cursor, oratext *sqlvar, sword sqlvl,
+ ub1 *progv, sword progvl, sword ftype, sword scale,
+ sb2 *indp, ub2 *aln, ub2 *rcp, ub4 mal, ub4 *cal,
+ oratext *fmt, sword fmtl, sword fmtt );
+sword ocibndps( struct csrdef *cursor, ub1 opcode, oratext *sqlvar,
+ sb4 sqlvl, ub1 *progv, sb4 progvl, sword ftype,
+ sword scale, sb2 *indp, ub2 *aln, ub2 *rcp, sb4 pv_skip,
+ sb4 ind_skip, sb4 len_skip, sb4 rc_skip, ub4 mal,
+ ub4 *cal, oratext *fmt, sb4 fmtl, sword fmtt );
+sword ocibnn ( struct csrdef *cursor, ub2 sqlvn, ub1 *progv, sword progvl,
+ sword ftype, sword scale, oratext *fmt, sword fmtl,
+ sword fmtt );
+sword ocibrn( struct csrdef *cursor, sword sqlvn, ub1 *progv, sword progvl,
+ sword ftype, sword scale, sb2 *indp, oratext *fmt, sword fmtl,
+ sword fmtt );
+ /*
+ ** ocibin - bind by value by name
+ ** ocibrv - bind by reference by name
+ ** ocibra - bind by reference by name (array)
+ ** ocibndps - bind by reference by name (array) piecewise or with skips
+ ** ocibnn - bind by value numeric
+ ** ocibrn - bind by reference numeric
+ **
+ ** the contents of storage specified in bind-by-value calls are
+ ** evaluated immediately.
+ ** the addresses of storage specified in bind-by-reference calls are
+ ** remembered, and the contents are examined at every execute.
+ **
+ ** cursor - pointer to csrdef
+ ** sqlvn - the number represented by the name of the bind variables
+ ** for variables of the form :n or &n for n in [1..256)
+ ** (i.e. &1, :234). unnecessarily using larger numbers
+ ** in the range wastes space.
+ ** sqlvar - the name of the bind variable (:name or &name)
+ ** sqlval - the length of the name;
+ ** in bindif -1, strlen(bvname) is used
+ ** progv - pointer to the object to bind.
+ ** progvl - length of object to bind.
+ ** in bind-by-value if specified as -1 then strlen(bfa) is
+ ** used (really only makes sends with character types)
+ ** in bind-by-value, if specified as -1 then UB2MAXVAL
+ ** is used. Again this really makes sense only with
+ ** SQLT_STR.
+ ** ftype - datatype of object
+ ** indp - pointer to indicator variable.
+ ** -1 means to ignore bfa/bfl and bind NULL;
+ ** not -1 means to bind the contents of bfa/bfl
+ ** bind the contents pointed to by bfa
+ ** aln - Alternate length pointer
+ ** rcp - Return code pointer
+ ** mal - Maximum array length
+ ** cal - Current array length pointer
+ ** fmt - format string
+ ** fmtl - length of format string; if -1, strlen(fmt) is used
+ ** fmtt - desired output type after applying forat mask. Not
+ ** really yet implemented
+ ** scale - number of decimal digits in a cobol packed decimal (type 7)
+ **
+ ** Note that the length of bfa when bound as SQLT_STR is reduced
+ ** to strlen(bfa).
+ ** Note that trailing blanks are stripped of storage of SQLT_STR.
+ */
+
+/***************************/
+/* DESCRIBING */
+/***************************/
+sword ocidsc ( struct csrdef *cursor, sword pos, sb2 *dbsize, sb2 *fsize,
+ sb2 *rcode, sb2 *dtype, sb1 *buf, sb2 *bufl, sb2 *dsize );
+sword ocidsr( struct csrdef *cursor, sword pos, sb2 *dbsize, sb2 *dtype,
+ sb2 *fsize );
+sword ocinam( struct csrdef *cursor, sword pos, sb1 *tbuf, sb2 *tbufl,
+ sb1 *buf, sb2 *bufl );
+ /*
+ ** ocidsc, ocidsr: Obtain information about a column
+ ** ocinam : get the name of a column
+ ** cursor - pointer to csrdef
+ ** pos - position in select list from [1..N]
+ ** dbsize - place to store the database size
+ ** fsize - place to store the fetched size
+ ** rcode - place to store the fetched column returned code
+ ** dtype - place to store the data type
+ ** buf - array to store the column name
+ ** bufl - place to store the column name length
+ ** dsize - maximum display size
+ ** tbuf - place to store the table name
+ ** tbufl - place to store the table name length
+ */
+
+sword ocidsp ( struct csrdef *cursor, sword pos, sb4 *dbsize, sb2 *dbtype,
+ sb1 *cbuf, sb4 *cbufl, sb4 *dsize, sb2 *pre, sb2 *scl,
+ sb2 *nul );
+
+sword ocidpr( ldadef *lda, oratext *object_name, size_t object_length,
+ void * reserved1, size_t reserved1_length, void * reserved2,
+ size_t reserved2_length, ub2 *overload, ub2 *position,
+ ub2 *level, oratext **argument_name, ub2 *argument_length,
+ ub2 *datatype, ub1 *default_supplied, ub1 *in_out,
+ ub4 *length, sb2 *precision, sb2 *scale, ub1 *radix,
+ ub4 *spare, ub4 *total_elements );
+ /*
+ ** OCIDPR - User Program Interface: Describe Stored Procedure
+ **
+ ** This routine is used to obtain information about the calling
+ ** arguments of a stored procedure. The client provides the
+ ** name of the procedure using "object_name" and "database_name"
+ ** (database name is optional). The client also supplies the
+ ** arrays for OCIDPR to return the values and indicates the
+ ** length of array via the "total_elements" parameter. Upon return
+ ** the number of elements used in the arrays is returned in the
+ ** "total_elements" parameter. If the array is too small then
+ ** an error will be returned and the contents of the return arrays
+ ** are invalid.
+ **
+ **
+ ** EXAMPLE :
+ **
+ ** Client provides -
+ **
+ ** object_name - SCOTT.ACCOUNT_UPDATE@BOSTON
+ ** total_elements - 100
+ **
+ **
+ ** ACCOUNT_UPDATE is an overloaded function with specification :
+ **
+ ** type number_table is table of number index by binary_integer;
+ ** table account (account_no number, person_id number,
+ ** balance number(7,2))
+ ** table person (person_id number(4), person_nm varchar2(10))
+ **
+ ** function ACCOUNT_UPDATE (account number,
+ ** person person%rowtype, amounts number_table,
+ ** trans_date date) return accounts.balance%type;
+ **
+ ** function ACCOUNT_UPDATE (account number,
+ ** person person%rowtype, amounts number_table,
+ ** trans_no number) return accounts.balance%type;
+ **
+ **
+ ** Values returned -
+ **
+ ** overload position argument level datatype length prec scale rad
+ ** -------------------------------------------------------------------
+ ** 0 0 0 NUMBER 22 7 2 10
+ ** 0 1 ACCOUNT 0 NUMBER 22 0 0 0
+ ** 0 2 PERSON 0 RECORD 0 0 0 0
+ ** 0 2 PERSON_ID 1 NUMBER 22 4 0 10
+ ** 0 2 PERSON_NM 1 VARCHAR2 10 0 0 0
+ ** 0 3 AMOUNTS 0 TABLE 0 0 0 0
+ ** 0 3 1 NUMBER 22 0 0 0
+ ** 0 4 TRANS_NO 0 NUMBER 22 0 0 0
+ **
+ ** 1 0 0 NUMBER 22 7 2 10
+ ** 1 1 ACCOUNT 0 NUMBER 22 0 0 0
+ ** 1 2 PERSON 0 RECORD 0 0 0 0
+ ** 1 2 PERSON_ID 1 NUMBER 22 4 0 10
+ ** 1 2 PERSON_NM 1 VARCHAR2 10 0 0 0
+ ** 1 3 AMOUNTS 0 TABLE 0 0 0 0
+ ** 1 3 1 NUMBER 22 0 0 0
+ ** 1 4 TRANS_DATE 0 NUMBER 22 0 0 0
+ **
+ **
+ ** OCIDPR Argument Descriptions -
+ **
+ ** ldadef - pointer to ldadef
+ ** object_name - object name, synonyms are also accepted and will
+ ** be translate, currently only procedure and function
+ ** names are accepted, also NLS names are accepted.
+ ** Currently, the accepted format of a name is
+ ** [[part1.]part2.]part3[@dblink] (required)
+ ** object_length - object name length (required)
+ ** reserved1 - reserved for future use
+ ** reserved1_length - reserved for future use
+ ** reserved2 - reserved for future use
+ ** reserved2_length - reserved for future use
+ ** overload - array indicating overloaded procedure # (returned)
+ ** position - array of argument positions, position 0 is a
+ ** function return argument (returned)
+ ** level - array of argument type levels, used to describe
+ ** sub-datatypes of data structures like records
+ ** and arrays (returned)
+ ** argument_name - array of argument names, only returns first
+ ** 30 characters of argument names, note storage
+ ** for 30 characters is allocated by client (returned)
+ ** argument_length - array of argument name lengths (returned)
+ ** datatype - array of oracle datatypes (returned)
+ ** default_supplied - array indicating parameter has default (returned)
+ ** 0 = no default, 1 = default supplied
+ ** in_out - array indicating if argument is IN or OUT (returned
+ ** 0 = IN param, 1 = OUT param, 2 = IN/OUT param
+ ** length - array of argument lengths (returned)
+ ** precision - array of precisions (if number type)(returned)
+ ** scale - array of scales (if number type)(returned)
+ ** radix - array of radix (if number type)(returned)
+ ** spare - array of spares.
+ ** total_elements - size of arrays supplied by client (required),
+ ** total number of elements filled (returned)
+ */
+
+/*************************************/
+/* DEFINING */
+/*************************************/
+sword ocidfi( struct csrdef *cursor, sword pos, ub1 *buf, sword bufl,
+ sword ftype, sb2 *rc, sword scale );
+sword ocidfn( struct csrdef *cursor, sword pos, ub1 *buf, sword bufl,
+ sword ftype, sword scale, sb2 *indp, oratext *fmt, sword fmtl,
+ sword fmtt, ub2 *rl, ub2 *rc );
+sword ocidfnps( struct csrdef *cursor, ub1 opcode, sword pos, ub1 *buf,
+ sb4 bufl, sword ftype, sword scale,
+ sb2 *indp, oratext *fmt, sb4 fmtl,
+ sword fmtt, ub2 *rl, ub2 *rc,
+ sb4 pv_skip, sb4 ind_skip, sb4 len_skip,
+ sb4 rc_skip );
+
+
+ /* Define a user data buffer using upidfn
+ ** cursor - pointer to csrdef
+ ** pos - position of a field or exp in the select list of a query
+ ** bfa/bfl - address and length of client-supplied storage
+ to receive data
+ ** ftype - user datatype
+ ** scale - number of fractional digits for cobol packed decimals
+ ** indp - place to store the length of the returned value. If returned
+ ** value is:
+ ** negative, the field fetched was NULL
+ ** zero , the field fetched was same length or shorter than
+ ** the buffer provided
+ ** positive, the field fetched was truncated
+ ** fmt - format string
+ ** fmtl - length of format string, if -1 strlent(fmt) used
+ ** rl - place to store column length after each fetch
+ ** rc - place to store column error code after each fetch
+ ** fmtt - fomat type
+ */
+
+/********************************/
+/* PIECE INFORMATION GET/SET */
+/********************************/
+sword ocigetpi( struct csrdef *cursor, ub1 *piecep,
+ void **ctxpp, ub4 *iterp, ub4 *indexp );
+sword ocisetpi( struct csrdef *cursor, ub1 piece,
+ void *bufp, ub4 *lenp );
+
+
+/********************************/
+/* EXECUTE */
+/********************************/
+sword ociexe( struct csrdef *cursor );
+sword ociexn( struct csrdef *cursor, sword iters, sword roff );
+sword ociefn( struct csrdef *cursor, ub4 nrows, sword can, sword exact );
+ /*
+ ** ociexe - execute a cursor
+ ** ociexn - execute a cursosr N times
+ ** cursor - pointer to a csrdef
+ ** iters - number of times to execute cursor
+ ** roff - offset within the bind variable array at which to begin
+ ** operations.
+ */
+
+
+/*********************************/
+/* FETCHING */
+/*********************************/
+sword ocifet( struct csrdef *cursor );
+sword ocifen( struct csrdef *cursor, sword nrows );
+ /* ocifet - fetch the next row
+ ** ocifen - fetch n rows
+ ** cursor - pointer to csrdef
+ ** nrows - number of rows to be fetched
+ */
+
+sword ocilng( struct csrdef *cursor, sword posit, ub1 *bfa, sb4 bfl,
+ sword dty, ub4 *rln, sb4 off );
+
+/*********************************/
+/* CONVERSION */
+/*********************************/
+sword ocic32( struct csrdef *cursor );
+ /*
+ ** Convert selected version 3 return codes to the equivalent
+ ** version 2 code.
+ ** csrdef->csrrc is set to the converted code
+ ** csrdef->csrft is set to v2 oracle statment type
+ ** csrdef->csrrpc is set to the rows processed count
+ ** csrdef->csrpeo is set to error postion
+ **
+ ** cursor - pointer to csrdef
+ */
+
+
+sword ocir32( struct csrdef *cursor, sword retcode );
+ /*
+ ** Convert selected version 3 return codes to the equivalent version 2
+ ** code.
+ **
+ ** cursor - pointer to csrdef
+ ** retcode - place to store the return code
+ */
+
+
+void ociscn( sword **arglst, char *mask_addr, sword **newlst );
+ /*
+ ** Convert call-by-ref to call-by-value:
+ ** takes an arg list and a mask address, determines which args need
+ ** conversion to a value, and creates a new list begging at the address
+ ** of newlst.
+ **
+ ** arglst - list of arguments
+ ** mast_addr _ mask address determines args needing conversion
+ ** newlst - new list of args
+ */
+
+sword ocistf ( sword typ, sword bufl, sword rdig, oratext *fmt,
+ struct csrdef *cursor, sword *err );
+/* Convert a packed decimal buffer length (bytes) and scale to a format
+** string of the form mm.+/-nn, where mm is the number of packed
+** decimal digits, and nn is the scaling factor. A positive scale name
+** nn digits to the rights of the decimal; a negative scale means nn zeros
+** should be supplied to the left of the decimal.
+** bufl - length of the packed decimal buffer
+** rdig - number of fractional digits
+** fmt - pointer to a string holding the conversion format
+** cursor - pointer to csrdef
+** err - pointer to word storing error code
+*/
+
+
+/******************************************/
+/* Non-blocking operations */
+/******************************************/
+sword ocinbs( ldadef *lda ); /* set a connection to non-blocking */
+sword ocinbt( ldadef *lda ); /* test if connection is non-blocking */
+sword ocinbc( ldadef *lda ); /* clear a connection to blocking */
+sword ocinlo( ldadef *lda, struct hstdef *hst, oratext *conn,
+ sword connl, oratext *uid, sword uidl,
+ oratext *psw, sword pswl, sword audit );
+ /* logon in non-blocking fashion */
+/* ocinlo allows an application to logon in non-blocking fashion.
+** lda - pointer to ldadef
+** hst - pointer to a 256 byte area, must be cleared to zero before call
+** conn - the database link (if specified @LINK in uid will be ignored)
+** connl - length of conn; if -1 strlen(conn) is used
+** uid - user id [USER[/PASSWORD][@LINK]]
+** uidl - length of uid, if -1 strlen(uid) is used
+** psw - password string; ignored if specified in uid
+** pswl - length of psw, if -1 strlen(psw) is used
+** audit - is not supported; the only permissible value is 0
+*/
+
+/***************************************************/
+/* Procedure Declaration for Pro*C */
+/***************************************************/
+/* Note: The following routines are used in Pro*C and have the
+ same interface as their couterpart in OCI.
+ Althought the interface follows for more details please refer
+ to the above routines */
+
+/******************************************/
+/* initialization/logon/logof */
+/******************************************/
+sword ocipin( ub4 mode );
+
+sword ologin( ldadef *lda, sb2 areacount );
+sword ologon( ldadef *lda, sb2 areacount );
+
+/*****************************************/
+/* Open/Close/Parse Cursor */
+/*****************************************/
+
+/*
+** ocisqd - oci delayed parse (Should be used only with deferred upi/oci)
+** FUNCTION: Call upidpr to delay the parse of the sql statement till the
+** time that a call needs to be made to the kernel (execution or
+** describe time )
+** RETURNS: Oracle return code.
+*/
+sword ocisq7( struct csrdef *cursor, oratext * /* sqlstm */, sb4 sqllen,
+ sword defflg, ub4 sqlt );
+
+/*****************************************/
+/* Bind */
+/*****************************************/
+sword obind( struct csrdef *cursor, oratext *sqlvar, sword sqlvl,
+ ub1 *progv, sword progvl, sword ftype, sword scale,
+ oratext *fmt, sword fmtl, sword fmtt );
+sword obindn( struct csrdef *cursor, ub2 sqlvn, ub1 *progv, sword progvl,
+ sword ftype, sword scale, oratext *fmt, sword fmtl,
+ sword fmtt );
+
+/**********************************************/
+/* Define */
+/**********************************************/
+sword odfinn( struct csrdef *cursor, sword pos, ub1 *buf, sword bufl,
+ sword ftype, sb2 *rc, sword scale );
+
+/**********************************************/
+/* Describe */
+/**********************************************/
+sword odsrbn( struct csrdef *cursor, sword pos, sb2 *dbsize, sb2 *dtype,
+ sb2 *fsize );
+
+
+/******************************************/
+/* Non-blocking operations */
+/******************************************/
+sword onblon( ldadef *lda, struct hstdef *hst, oratext *conn,
+ sword connl, oratext *uid, sword uidl,
+ oratext *psw, sword pswl, sword audit );
+ /* logon in non-blocking fashion */
+sword ocignfd( ldadef *lda, void *nfdp ); /* get native fd */
+
+ub2 ocigft_getFcnType( ub2 oertyp ); /* get sql function code */
+
+#endif
--- /dev/null
+/*
+ *
+ */
+
+/* Copyright (c) 1991, 2005, Oracle. All rights reserved. */
+/* Copyright (c) 1991, 2005, Oracle. All rights reserved. */
+/*
+ NAME
+ ocidem.h - OCI demo header
+ MODIFIED (MM/DD/YY)
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ whe 04/07/99 - bug#810071
+ whe 03/19/99 - lrg 32079 etc.: putting static back for oci_func_tab
+ nmacnaug 02/02/99 - static declarations should not be in header files
+ mygopala 09/22/97 - Fix for bug 550351
+ surman 03/14/97 - Merge 413362 to 8.0.3
+ surman 11/08/96 - 413362: Add SS_64BIT_SERVER macro
+ emendez 04/07/94 - merge changes from branch 1.6.710.1
+ emendez 02/02/94 - Fix for bug 157576
+ jnlee 01/05/93 - include oratypes.h once, make oci_func_tab static
+ rkooi2 10/26/92 - More portability mods
+ rkooi2 10/22/92 - Change text back to char to avoid casts
+ rkooi2 10/20/92 - Changes to make it portable
+ sjain 03/16/92 - Creation
+*/
+
+/*
+ * ocidem.h
+ *
+ * Declares additional functions and data structures
+ * used in the OCI C sample programs.
+ */
+
+
+#ifndef ORATYPES
+#include <oratypes.h>
+#endif /* ORATYPES */
+
+#ifndef OCIDFN
+#include <ocidfn.h>
+#endif /* OCIDFN */
+
+#ifndef OCIDEM
+#define OCIDEM
+
+
+/* internal/external datatype codes */
+#define VARCHAR2_TYPE 1
+#define NUMBER_TYPE 2
+#define INT_TYPE 3
+#define FLOAT_TYPE 4
+#define STRING_TYPE 5
+#define ROWID_TYPE 11
+#define DATE_TYPE 12
+
+/* ORACLE error codes used in demonstration programs */
+#define VAR_NOT_IN_LIST 1007
+#ifndef NO_DATA_FOUND
+# define NO_DATA_FOUND 1403
+#endif
+#define NULL_VALUE_RETURNED 1405
+
+/* some SQL and OCI function codes */
+#define FT_INSERT 3
+#define FT_SELECT 4
+#define FT_UPDATE 5
+#define FT_DELETE 9
+
+#define FC_OOPEN 14
+
+/*
+ * OCI function code labels,
+ * corresponding to the fc numbers
+ * in the cursor data area.
+ */
+static const text *oci_func_tab[] = {(text *) "not used",
+/* 1-2 */ (text *) "not used", (text *) "OSQL",
+/* 3-4 */ (text *) "not used", (text *) "OEXEC, OEXN",
+/* 5-6 */ (text *) "not used", (text *) "OBIND",
+/* 7-8 */ (text *) "not used", (text *) "ODEFIN",
+/* 9-10 */ (text *) "not used", (text *) "ODSRBN",
+/* 11-12 */ (text *) "not used", (text *) "OFETCH, OFEN",
+/* 13-14 */ (text *) "not used", (text *) "OOPEN",
+/* 15-16 */ (text *) "not used", (text *) "OCLOSE",
+/* 17-18 */ (text *) "not used", (text *) "not used",
+/* 19-20 */ (text *) "not used", (text *) "not used",
+/* 21-22 */ (text *) "not used", (text *) "ODSC",
+/* 23-24 */ (text *) "not used", (text *) "ONAME",
+/* 25-26 */ (text *) "not used", (text *) "OSQL3",
+/* 27-28 */ (text *) "not used", (text *) "OBNDRV",
+/* 29-30 */ (text *) "not used", (text *) "OBNDRN",
+/* 31-32 */ (text *) "not used", (text *) "not used",
+/* 33-34 */ (text *) "not used", (text *) "OOPT",
+/* 35-36 */ (text *) "not used", (text *) "not used",
+/* 37-38 */ (text *) "not used", (text *) "not used",
+/* 39-40 */ (text *) "not used", (text *) "not used",
+/* 41-42 */ (text *) "not used", (text *) "not used",
+/* 43-44 */ (text *) "not used", (text *) "not used",
+/* 45-46 */ (text *) "not used", (text *) "not used",
+/* 47-48 */ (text *) "not used", (text *) "not used",
+/* 49-50 */ (text *) "not used", (text *) "not used",
+/* 51-52 */ (text *) "not used", (text *) "OCAN",
+/* 53-54 */ (text *) "not used", (text *) "OPARSE",
+/* 55-56 */ (text *) "not used", (text *) "OEXFET",
+/* 57-58 */ (text *) "not used", (text *) "OFLNG",
+/* 59-60 */ (text *) "not used", (text *) "ODESCR",
+/* 61-62 */ (text *) "not used", (text *) "OBNDRA",
+/* 63-64 */ (text *) "OBINDPS", (text *) "ODEFINPS",
+/* 65-66 */ (text *) "OGETPI", (text *) "OSETPI"
+};
+
+#endif /* OCIDEM */
+
--- /dev/null
+/* Copyright (c) 1991, 2005, Oracle. All rights reserved. */
+/* Copyright (c) 1991, 2005, Oracle. All rights reserved. */
+/*
+ NAME
+ ocidfn.h - OCI Definations
+ NOTES
+ Shipped to users.
+ MODIFIED (MM/DD/YY)
+ mbastawa 09/16/05 - dbhygiene
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ srseshad 11/25/02 - change binary float/double codes
+ srseshad 11/14/02 - Add SQLT_IBFLOAT, SQLT_IBDOUBLE
+ mxyang 09/17/02 - grabtrans 'mmorsi_obj_float'
+ srseshad 09/06/02 - Add binary float/double
+ aahluwal 06/04/02 - bug 2360115
+ kmuthukk 05/02/00 - add SQLT_PNTY
+ amangal 07/30/99 - Merge into 8.1.6 : Bug 879031
+ tnbui 07/28/99 - Remove SQLT_TIMESTAMP_ITZ
+ tnbui 07/21/99 - SQLT_TIMESTAMP_LTZ
+ tnbui 06/16/99 - TIMESTAMP WITH IMPLICIT TIME ZONE
+ whe 04/07/99 - bug#810075
+ whe 03/19/99 - lrg 32079 etc.: move HDA def from ocidem.h to ocidfn.
+ skmishra 05/10/98 -
+ vyanaman 04/16/98 - update sql92 datatypes
+ khnguyen 01/16/98 -
+ khnguyen 12/23/97 - SQLT* for datetimes and intervals
+ tanguyen 08/19/97 -
+ dchatter 03/18/97 - porting exception 390897
+ dchatter 05/02/97 - merge porting exception
+ dalpern 12/04/96 - SQLCS_LIT_NULL added
+ cxcheng 11/14/96 - add SQLT_BFILE/SQLT_CFILE to fix compile prob
+ cxcheng 11/12/96 - add SQLT_NCO for named collection
+ lchidamb 10/17/96 - add SQLT_VST and SQLT_ODT
+ sgollapu 10/14/96 - Mutual exclusion of ocidfn and sqldef
+ sgollapu 10/07/96 - OCI Simplification
+ aroy 09/09/96 - add SQLCS* definitions
+ slari 08/07/96 - add SQLT_RDD, rowid descriptor
+ slari 06/12/96 - remove SQLT_TTBL
+ dchatter 04/21/96 - prepare for merge into main
+ slari 08/24/95 - b299432, define CDA_SIZE
+ zwalcott 02/28/96 - add SQLT_BFILEE and SQLT_CFILEE.
+ lchidamb 02/22/96 - make dtys consistent with dtydef.h
+ lchidamb 02/16/96 - add SQLT_BFILEE and SQLT_CFILEE
+ lchidamb 01/30/96 - rename new datatypes for v8
+ lchidamb 09/06/95 - add new datatypes
+ slari 05/11/95 - add OCI_EV_DEF and OCI_EV_TSF
+ dchatter 04/06/95 - add ifdef flags around OCI_flags
+ dchatter 03/08/95 - piece values
+ dchatter 03/06/95 - merge changes from branch 1.2.720.3
+ jfbrown 02/17/95 - merge changes from branch 1.2.720.2
+ dchatter 02/08/95 - olog call modes
+ jfbrown 02/03/95 - remove non-printable characters
+ lchidamb 12/06/94 - merge changes from branch 1.2.720.1
+ lchidamb 10/04/94 - added field chk to cda_head, cda_def
+ dchatter 07/05/94 - SQLT_CUR added
+ rkooi2 11/27/92 - Changing e* datatypes to s*
+ rkooi2 10/26/92 - More portability mods
+ rkooi2 10/22/92 - Added #ifndef ORATYPES ...
+ rkooi2 10/18/92 - Changes to make it portable.
+ sjain 03/16/92 - Creation
+*/
+
+/*
+ * ocidfn.h
+ *
+ * Common header file for OCI C sample programs.
+ * This header declares the cursor and logon data area structure.
+ * The types used are defined in <oratypes.h>.
+ *
+ */
+
+#ifndef OCIDFN
+#define OCIDFN
+
+#include <oratypes.h>
+
+/* The cda_head struct is strictly PRIVATE. It is used
+ internally only. Do not use this struct in OCI programs. */
+
+struct cda_head {
+ sb2 v2_rc;
+ ub2 ft;
+ ub4 rpc;
+ ub2 peo;
+ ub1 fc;
+ ub1 rcs1;
+ ub2 rc;
+ ub1 wrn;
+ ub1 rcs2;
+ sword rcs3;
+ struct {
+ struct {
+ ub4 rcs4;
+ ub2 rcs5;
+ ub1 rcs6;
+ } rd;
+ ub4 rcs7;
+ ub2 rcs8;
+ } rid;
+ sword ose;
+ ub1 chk;
+ void *rcsp;
+};
+
+/*
+** Size of HDA area:
+** 512 for 64 bit arquitectures
+** 256 for 32 bit arquitectures
+*/
+
+#if defined(SS_64BIT_SERVER) || defined(__64BIT__)
+# define HDA_SIZE 512
+#else
+# define HDA_SIZE 256
+#endif
+
+#if defined(SS_64BIT_SERVER) || defined(__64BIT__)
+#define CDA_SIZE 88
+#else
+# define CDA_SIZE 64
+#endif
+
+/* the real CDA, padded to CDA_SIZE bytes in size */
+struct cda_def {
+ sb2 v2_rc; /* V2 return code */
+ ub2 ft; /* SQL function type */
+ ub4 rpc; /* rows processed count */
+ ub2 peo; /* parse error offset */
+ ub1 fc; /* OCI function code */
+ ub1 rcs1; /* filler area */
+ ub2 rc; /* V7 return code */
+ ub1 wrn; /* warning flags */
+ ub1 rcs2; /* reserved */
+ sword rcs3; /* reserved */
+ struct { /* rowid structure */
+ struct {
+ ub4 rcs4;
+ ub2 rcs5;
+ ub1 rcs6;
+ } rd;
+ ub4 rcs7;
+ ub2 rcs8;
+ } rid;
+ sword ose; /* OSD dependent error */
+ ub1 chk;
+ void *rcsp; /* pointer to reserved area */
+ ub1 rcs9[CDA_SIZE - sizeof (struct cda_head)]; /* filler */
+};
+
+typedef struct cda_def Cda_Def;
+
+/* the logon data area (LDA)
+ is the same shape as the CDA */
+typedef struct cda_def Lda_Def;
+
+/* OCI Environment Modes for opinit call */
+#define OCI_EV_DEF 0 /* default single-threaded environment */
+#define OCI_EV_TSF 1 /* thread-safe environment */
+
+/* OCI Logon Modes for olog call */
+#define OCI_LM_DEF 0 /* default login */
+#define OCI_LM_NBL 1 /* non-blocking logon */
+
+/*
+ * since sqllib uses both ocidef and ocidfn the following defines
+ * need to be guarded
+ */
+#ifndef OCI_FLAGS
+#define OCI_FLAGS
+
+/* OCI_*_PIECE defines the piece types that are returned or set
+*/
+#define OCI_ONE_PIECE 0 /* there or this is the only piece */
+#define OCI_FIRST_PIECE 1 /* the first of many pieces */
+#define OCI_NEXT_PIECE 2 /* the next of many pieces */
+#define OCI_LAST_PIECE 3 /* the last piece of this column */
+#endif
+
+#ifndef SQLDEF
+
+/* input data types */
+#define SQLT_CHR 1 /* (ORANET TYPE) character string */
+#define SQLT_NUM 2 /* (ORANET TYPE) oracle numeric */
+#define SQLT_INT 3 /* (ORANET TYPE) integer */
+#define SQLT_FLT 4 /* (ORANET TYPE) Floating point number */
+#define SQLT_STR 5 /* zero terminated string */
+#define SQLT_VNU 6 /* NUM with preceding length byte */
+#define SQLT_PDN 7 /* (ORANET TYPE) Packed Decimal Numeric */
+#define SQLT_LNG 8 /* long */
+#define SQLT_VCS 9 /* Variable character string */
+#define SQLT_NON 10 /* Null/empty PCC Descriptor entry */
+#define SQLT_RID 11 /* rowid */
+#define SQLT_DAT 12 /* date in oracle format */
+#define SQLT_VBI 15 /* binary in VCS format */
+#define SQLT_BFLOAT 21 /* Native Binary float*/
+#define SQLT_BDOUBLE 22 /* NAtive binary double */
+#define SQLT_BIN 23 /* binary data(DTYBIN) */
+#define SQLT_LBI 24 /* long binary */
+#define SQLT_UIN 68 /* unsigned integer */
+#define SQLT_SLS 91 /* Display sign leading separate */
+#define SQLT_LVC 94 /* Longer longs (char) */
+#define SQLT_LVB 95 /* Longer long binary */
+#define SQLT_AFC 96 /* Ansi fixed char */
+#define SQLT_AVC 97 /* Ansi Var char */
+#define SQLT_IBFLOAT 100 /* binary float canonical */
+#define SQLT_IBDOUBLE 101 /* binary double canonical */
+#define SQLT_CUR 102 /* cursor type */
+#define SQLT_RDD 104 /* rowid descriptor */
+#define SQLT_LAB 105 /* label type */
+#define SQLT_OSL 106 /* oslabel type */
+
+#define SQLT_NTY 108 /* named object type */
+#define SQLT_REF 110 /* ref type */
+#define SQLT_CLOB 112 /* character lob */
+#define SQLT_BLOB 113 /* binary lob */
+#define SQLT_BFILEE 114 /* binary file lob */
+#define SQLT_CFILEE 115 /* character file lob */
+#define SQLT_RSET 116 /* result set type */
+#define SQLT_NCO 122 /* named collection type (varray or nested table) */
+#define SQLT_VST 155 /* OCIString type */
+#define SQLT_ODT 156 /* OCIDate type */
+
+/* datetimes and intervals */
+#define SQLT_DATE 184 /* ANSI Date */
+#define SQLT_TIME 185 /* TIME */
+#define SQLT_TIME_TZ 186 /* TIME WITH TIME ZONE */
+#define SQLT_TIMESTAMP 187 /* TIMESTAMP */
+#define SQLT_TIMESTAMP_TZ 188 /* TIMESTAMP WITH TIME ZONE */
+#define SQLT_INTERVAL_YM 189 /* INTERVAL YEAR TO MONTH */
+#define SQLT_INTERVAL_DS 190 /* INTERVAL DAY TO SECOND */
+#define SQLT_TIMESTAMP_LTZ 232 /* TIMESTAMP WITH LOCAL TZ */
+
+#define SQLT_PNTY 241 /* pl/sql representation of named types */
+
+/* cxcheng: this has been added for backward compatibility -
+ it needs to be here because ocidfn.h can get included ahead of sqldef.h */
+#define SQLT_FILE SQLT_BFILEE /* binary file lob */
+#define SQLT_CFILE SQLT_CFILEE
+#define SQLT_BFILE SQLT_BFILEE
+
+/* CHAR/NCHAR/VARCHAR2/NVARCHAR2/CLOB/NCLOB char set "form" information */
+#define SQLCS_IMPLICIT 1 /* for CHAR, VARCHAR2, CLOB w/o a specified set */
+#define SQLCS_NCHAR 2 /* for NCHAR, NCHAR VARYING, NCLOB */
+#define SQLCS_EXPLICIT 3 /* for CHAR, etc, with "CHARACTER SET ..." syntax */
+#define SQLCS_FLEXIBLE 4 /* for PL/SQL "flexible" parameters */
+#define SQLCS_LIT_NULL 5 /* for typecheck of NULL and empty_clob() lits */
+
+#endif /* SQLDEF */
+#endif /* OCIDFN */
--- /dev/null
+/*
+ *
+ */
+
+/* Copyright (c) 1996, 2005, Oracle. All rights reserved. */
+
+/*
+ NAME
+ ociextp.h - Interface Definitions for PL/SQL External Procedures
+
+ DESCRIPTION
+ This header file contains C language callable interface from
+ PL/SQL External Procedures.
+
+ PUBLIC FUNCTION(S)
+ OCIExtProcAllocCallMemory - Allocate Call memory
+ OCIExtProcRaiseExcp - Raise Exception
+ OCIExtProcRaiseExcpWithMsg - Raise Exception with message
+ OCIExtProcGetEnv - Get OCI Environment
+
+ PRIVATE FUNCTION(S)
+ <list of static functions defined in .c file - with one-line descriptions>
+
+ EXAMPLES
+
+ NOTES
+ <other useful comments, qualifications, etc.>
+
+ MODIFIED (MM/DD/YY)
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ srseshad 03/12/03 - convert oci public api to ansi
+ rdecker 01/10/02 - change 32k to MAX_OEN for error numbers
+ sagrawal 07/20/01 - Statement Handle to safe cal outs
+ abrumm 04/19/01 - move include of oci.h after defines/typedef
+ rdecker 02/22/01 - lint fix
+ bpalaval 02/08/01 - Change text to oratext.
+ sagrawal 06/16/00 - ref cursor in callouts
+ whe 09/01/99 - 976457:check __cplusplus for C++ code
+ asethi 04/15/99 - Created (by moving ociextp.h from /vobs/plsql/public)
+ rhari 03/25/97 - Use ifndef
+ rhari 12/18/96 - Include oratypes.h
+ rhari 12/11/96 - #416977, Flip values of return codes
+ rhari 12/02/96 - Define Return Code Macros
+ rhari 11/18/96 - Error number is int
+ rhari 10/30/96 - Fix OCIExtProcRaiseExcpWithMsg
+ rhari 10/30/96 - Get rid of warnings
+ rhari 10/04/96 - Fix OCIExtProcRaiseExcpWithMsg
+ rhari 09/23/96 - Creation
+
+*/
+
+
+#ifndef OCIEXTP_ORACLE
+# define OCIEXTP_ORACLE
+
+# ifndef ORATYPES
+# include <oratypes.h>
+# endif
+
+
+/*---------------------------------------------------------------------------
+ PUBLIC TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+
+/* ----------------------------- Return Codes ----------------------------- */
+/* Success and Error return codes for certain external procedure interface
+ * functions. If a particular interface function returns OCIEXTPROC_SUCCESS
+ * or OCIEXTPROC_ERROR, then applications must use these macros to check
+ * for return values.
+ *
+ * OCIEXTPROC_SUCCESS -- External Procedure Success Return Code
+ * OCIEXTPROC_ERROR -- External Procedure Failure Return Code
+ */
+#define OCIEXTPROC_SUCCESS 0
+#define OCIEXTPROC_ERROR 1
+
+
+/* --------------------------- With-Context Type --------------------------- */
+/*
+ * The C callable interface to PL/SQL External Procedures require the
+ * With-Context parameter to be passed. The type of this structure is
+ * OCIExtProcContext is is opaque to the user.
+ *
+ * The user can declare the With-Context parameter in the application as
+ *
+ * OCIExtProcContext *with_context;
+ */
+typedef struct OCIExtProcContext OCIExtProcContext;
+
+/* NOTE: OCIExtProcContext must be visible prior to including <oci.h> */
+
+# ifndef OCI_ORACLE
+# include <oci.h>
+# endif
+
+
+/* ----------------------- OCIExtProcAllocCallMemory ----------------------- */
+/* OCIExtProcAllocCallMemory
+ * Allocate N bytes of memory for the duration of the External Procedure.
+ *
+ * Memory thus allocated will be freed by PL/SQL upon return from the
+ * External Procedure. You must not use any kind of 'free' function on
+ * memory allocated by OCIExtProcAllocCallMemory.
+ * Use this function to allocate memory for function returns.
+ *
+ * PARAMETERS
+ * Input :
+ * with_context - The with_context pointer that is passed to the C
+ * External Procedure.
+ * Type of with_context : OCIExtProcContext *
+ * amount - The number of bytes to allocate.
+ * Type of amount : size_t
+ *
+ * Output :
+ * Nothing
+ *
+ * Return :
+ * An untyped (opaque) Pointer to the allocated memory.
+ *
+ * Errors :
+ * A 0 return value should be treated as an error
+ *
+ * EXAMPLE
+ * text *ptr = (text *)OCIExtProcAllocCallMemory(wctx, 1024)
+ *
+ */
+#define OCIExtProcAllocCallMemory(with_context, amount) \
+ociepacm(with_context, (size_t)amount)
+
+
+
+
+/* -------------------------- OCIExtProcRaiseExcp -------------------------- */
+/* OCIExtProcRaiseExcp
+ * Raise an Exception to PL/SQL.
+ *
+ * Calling this function signalls an exception back to PL/SQL. After a
+ * successful return from this function, the External Procedure must start
+ * its exit handling and return back to PL/SQL. Once an exception is
+ * signalled to PL/SQL, INOUT and OUT arguments, if any, are not processed
+ * at all.
+ *
+ * PARAMETERS
+ * Input :
+ * with_context - The with_context pointer that is passed to the C
+ * External Procedure.
+ * Type of with_context : OCIExtProcContext *
+ * errnum - Oracle Error number to signal to PL/SQL. errnum
+ * must be a positive number and in the range 1 to MAX_OEN
+ * Type of errnum : int
+ * Output :
+ * Nothing
+ *
+ * Return :
+ * OCIEXTPROC_SUCCESS - If the call was successful.
+ * OCIEXTPROC_ERROR - If the call failed.
+ *
+ */
+#define OCIExtProcRaiseExcp(with_context, errnum) \
+ocieperr(with_context, (int)errnum)
+
+
+
+
+
+/* ---------------------- OCIExtProcRaiseExcpWithMsg ---------------------- */
+/* OCIExtProcRaiseExcpWithMsg
+ * Raise an exception to PL/SQL. In addition, substitute the
+ * following error message string within the standard Oracle error
+ * message string. See note for OCIExtProcRaiseExcp
+ *
+ * PARAMETERS
+ * Input :
+ * with_context - The with_context pointer that is passed to the C
+ * External Procedure.
+ * Type of with_context : OCIExtProcContext *
+ * errnum - Oracle Error number to signal to PL/SQL. errnum
+ * must be a positive number and in the range 1 to MAX_OEN
+ * Type of errnum : int
+ * errmsg - The error message associated with the errnum.
+ * Type of errmsg : char *
+ * len - The length of the error message. 0 if errmsg is
+ * null terminated string.
+ * Type of len : size_t
+ * Output :
+ * Nothing
+ *
+ * Return :
+ * OCIEXTPROC_SUCCESS - If the call was successful.
+ * OCIEXTPROC_ERROR - If the call failed.
+ *
+ */
+#define OCIExtProcRaiseExcpWithMsg(with_context, errnum, errmsg, msglen) \
+ociepmsg(with_context, (int)errnum, errmsg, (size_t)msglen)
+
+
+
+/* --------------------------- OCIExtProcGetEnv --------------------------- */
+/* OCIExtProcGetEnv
+ * Get OCI Environment
+ *
+ * PARAMETERS
+ * Input :
+ * with_context - The with_context pointer that is passed to the C
+ * External Procedure.
+ *
+ * Output :
+ * envh - The OCI Environment handle.
+ * svch - The OCI Service handle.
+ * errh - The OCI Error handle.
+ *
+ * Return :
+ * OCI_SUCCESS - Successful completion of the function.
+ * OCI_ERROR - Error.
+ *
+ */
+#define OCIExtProcGetEnv(with_context, envh, svch, errh) \
+ociepgoe(with_context, envh, svch, errh)
+
+
+
+/* ------------------------ OCIInitializeStatementHandle ------------------- */
+/* OCIreateStatementHandle
+ * Initialize Statement Handle
+ *
+ * PARAMETERS
+ * Input :
+ * wctx - The
+ * cursorno - The cursor number for which we need to initialize
+ * the statement handle
+ * svch - The OCI Service handle.
+ *
+ * Output :
+ * stmthp - The OCI Statement handle.
+ * errh - The OCI Error handle.
+ *
+ * Return :
+ * OCI_SUCCESS - Successful completion of the function.
+ * OCI_ERROR - Error.
+ *
+ */
+#define OCIInitializeStatementHandle(wctx, cursorno, svch, stmthp, errh) \
+ociepish(wctx, cursor, svch, stmthp, errh)
+
+
+
+
+/*---------------------------------------------------------------------------
+ PRIVATE TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ PUBLIC FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ PRIVATE FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+
+void *ociepacm(OCIExtProcContext *with_context, size_t amount);
+
+
+
+size_t ocieperr(OCIExtProcContext *with_context, int error_number);
+
+
+
+size_t ociepmsg(OCIExtProcContext *with_context, int error_number,
+ oratext *error_message, size_t len );
+
+
+
+sword ociepgoe(OCIExtProcContext *with_context, OCIEnv **envh,
+ OCISvcCtx **svch, OCIError **errh);
+
+
+#endif /* OCIEXTP_ORACLE */
--- /dev/null
+/* Copyright (c) 1991, 2005, Oracle. All rights reserved. */
+/*
+ NAME
+ ocikpr.h - header of K & R compilers
+ MODIFIED (MM/DD/YY)
+ mbastawa 09/16/05 - dbhygiene
+ porangas 12/04/00 - Forward merge bug#974710 to 9i
+ sgollapu 05/19/98 - Change text to OraText
+ dchatter 04/21/96 -
+ dchatter 11/10/95 - add ognfd() - get native fd
+ lchidamb 04/06/95 - drop maxdsz from obindps/odefinps
+ slari 04/07/95 - add opinit
+ dchatter 03/08/95 - osetpi and ogetpi
+ lchidamb 12/09/94 - add obindps() and odefinps()
+ dchatter 03/06/95 - merge changes from branch 1.1.720.2
+ dchatter 11/14/94 - merge changes from branch 1.1.720.1
+ dchatter 02/08/95 - olog call; drop onblon
+ dchatter 10/31/94 - new functions for non-blocking oci
+ rkooi2 11/27/92 - Changing datatypes (in comments) and return types
+ rkooi2 10/26/92 - More portability mods
+ rkooi2 10/18/92 - Changed to agree with oci.c
+ sjain 03/16/92 - Creation
+*/
+
+/*
+ * Declare the OCI functions.
+ * Prototype information is commented out.
+ * Use this header for non-ANSI C compilers.
+ * Note that you will need to include ocidfn.h in the .c files
+ * to get the definition for cda_def.
+ */
+
+#ifndef OCIKPR
+#define OCIKPR
+
+#include <oratypes.h>
+
+/*
+ * Oci BIND (Piecewise or with Skips)
+ */
+sword obindps( struct cda_def *cursor, ub1 opcode, OraText *sqlvar,
+ sb4 sqlvl, ub1 *pvctx, sb4 progvl,
+ sword ftype, sword scale,
+ sb2 *indp, ub2 *alen, ub2 *arcode,
+ sb4 pv_skip, sb4 ind_skip, sb4 alen_skip, sb4 rc_skip,
+ ub4 maxsiz, ub4 *cursiz,
+ OraText *fmt, sb4 fmtl, sword fmtt );
+sword obreak( struct cda_def *lda );
+sword ocan ( struct cda_def *cursor );
+sword oclose( struct cda_def *cursor );
+sword ocof ( struct cda_def *lda );
+sword ocom ( struct cda_def *lda );
+sword ocon ( struct cda_def *lda );
+
+
+/*
+ * Oci DEFINe (Piecewise or with Skips)
+ */
+sword odefinps( struct cda_def *cursor, ub1 opcode, sword pos,ub1 *bufctx,
+ sb4 bufl, sword ftype, sword scale,
+ sb2 *indp, OraText *fmt, sb4 fmtl, sword fmtt,
+ ub2 *rlen, ub2 *rcode,
+ sb4 pv_skip, sb4 ind_skip, sb4 alen_skip, sb4 rc_skip );
+sword odescr( struct cda_def *cursor, sword pos, sb4 *dbsize,
+ sb2 *dbtype, sb1 *cbuf, sb4 *cbufl, sb4 *dsize,
+ sb2 *prec, sb2 *scale, sb2 *nullok );
+sword odessp( struct cda_def *cursor, OraText *objnam, size_t onlen,
+ ub1 *rsv1, size_t rsv1ln, ub1 *rsv2, size_t rsv2ln,
+ ub2 *ovrld, ub2 *pos, ub2 *level, OraText **argnam,
+ ub2 *arnlen, ub2 *dtype, ub1 *defsup, ub1* mode,
+ ub4 *dtsiz, sb2 *prec, sb2 *scale, ub1 *radix,
+ ub4 *spare, ub4 *arrsiz );
+sword oerhms( struct cda_def *lda, sb2 rcode, OraText *buf,
+ sword bufsiz );
+sword oermsg( sb2 rcode, OraText *buf );
+sword oexec ( struct cda_def *cursor );
+sword oexfet( struct cda_def *cursor, ub4 nrows,
+ sword cancel, sword exact );
+sword oexn ( struct cda_def *cursor, sword iters, sword rowoff );
+sword ofen ( struct cda_def *cursor, sword nrows );
+sword ofetch( struct cda_def *cursor );
+sword oflng ( struct cda_def *cursor, sword pos, ub1 *buf,
+ sb4 bufl, sword dtype, ub4 *retl, sb4 offset );
+sword ogetpi( struct cda_def *cursor, ub1 *piecep, void **ctxpp,
+ ub4 *iterp, ub4 *indexp );
+sword opinit( ub4 mode );
+sword olog ( struct cda_def *lda, ub1 *hst,
+ OraText *uid, sword uidl,
+ OraText *psw, sword pswl,
+ OraText *conn, sword connl,
+ ub4 mode );
+sword ologof( struct cda_def *lda );
+sword oopen ( struct cda_def *cursor, struct cda_def *lda,
+ OraText *dbn, sword dbnl, sword arsize,
+ OraText *uid, sword uidl );
+sword oopt ( struct cda_def *cursor, sword rbopt, sword waitopt );
+sword oparse( struct cda_def *cursor, OraText *sqlstm, sb4 sqllen,
+ sword defflg, ub4 lngflg );
+sword orol ( struct cda_def *lda );
+sword osetpi( struct cda_def *cursor, ub1 piece, void *bufp,
+ ub4 *lenp );
+void sqlld2 ( struct cda_def *lda, OraText *cname, sb4 *cnlen );
+void sqllda ( struct cda_def *lda );
+
+/* non-blocking functions */
+sword onbset( struct cda_def *lda );
+sword onbtst( struct cda_def *lda );
+sword onbclr( struct cda_def *lda );
+sword ognfd ( struct cda_def *lda, void *fdp );
+
+
+
+/*
+ * OBSOLETE FUNCTIONS
+ */
+
+/*
+ * OBSOLETE BIND CALLS-- use obindps()
+ */
+sword obndra( struct cda_def *cursor, OraText *sqlvar, sword sqlvl,
+ ub1 *progv, sword progvl, sword ftype, sword scale,
+ sb2 *indp, ub2 *alen, ub2 *arcode, ub4 maxsiz,
+ ub4 *cursiz, OraText *fmt, sword fmtl, sword fmtt );
+sword obndrn( struct cda_def *cursor, sword sqlvn, ub1 *progv,
+ sword progvl, sword ftype, sword scale, sb2 *indp,
+ OraText *fmt, sword fmtl, sword fmtt );
+sword obndrv( struct cda_def *cursor, OraText *sqlvar, sword sqlvl,
+ ub1 *progv, sword progvl, sword ftype, sword scale,
+ sb2 *indp, OraText *fmt, sword fmtl, sword fmtt );
+
+/*
+ * OBSOLETE DEFINE CALLS-- use odefinps()
+ */
+sword odefin( struct cda_def *cursor, sword pos, ub1 *buf,
+ sword bufl, sword ftype, sword scale, sb2 *indp,
+ OraText *fmt, sword fmtl, sword fmtt, ub2 *rlen,
+ ub2 *rcode );
+
+
+/* older calls ; preferred equivalent calls above */
+sword odsc ( struct cda_def *cursor, sword pos, sb2 *dbsize,
+ sb2 *fsize, sb2 *rcode, sb2 *dtype, sb1 *buf,
+ sb2 *bufl, sb2 *dsize );
+sword oname ( struct cda_def *cursor, sword pos, sb1 *tbuf,
+ sb2 *tbufl, sb1 *buf, sb2 *bufl );
+sword olon ( struct cda_def *lda, OraText *uid, sword uidl,
+ OraText *pswd, sword pswdl, sword audit );
+sword orlon ( struct cda_def *lda, ub1 *hda, OraText *uid,
+ sword uidl, OraText *pswd, sword pswdl, sword audit );
+sword osql3 ( struct cda_def *cda, OraText *sqlstm, sword sqllen );
+
+
+
+
+
+
+
+#endif /* OCIKPR */
+
+
+
+
+
+
+
--- /dev/null
+/* Copyright (c) 2003, 2011, Oracle and/or its affiliates.
+All rights reserved. */
+
+/*
+ NAME
+ ocixmldb.h - XDB public functions
+
+ DESCRIPTION
+ This file contains XDB specific public functions required for DOM C-API.
+
+ RELATED DOCUMENTS
+
+
+ EXPORT FUNCTION(S)
+ struct xmlctx *OCIXmlDbInitXmlCtx(OCIEnv *, OCISvcCtx *, OCIError *,
+ ocixmldbparam *params, int num_params);
+
+ void OCIXmlDbFreeXmlCtx(struct xmlctx *xctx);
+
+
+ ------------------------------------------------------------------------
+ EXAMPLES
+
+ NOTES
+
+ MODIFIED (MM/DD/YY)
+ srirkris 06/15/11 - Add OCIXmlDr_DEF
+ srirkris 06/07/11 - Backport srirkris_bug-12613945 from main
+ srirkris 04/26/11 - Backport srirkris_xmlop_bnd from main
+ srirkris 04/14/11 - Backport srirkris_xqupd_repl from main
+ yifeng 02/15/11 - Backport yifeng_bug-10236275 from main
+ srirkris 03/01/11 - OCIXmlDbRewriteXMLDiff definition change
+ vmedi 01/14/11 - OCIXmlDbGetFullyQualifiedSchemaUrl
+ sipatel 03/08/10 - add lob arg to OCIXmlDbRewriteXMLDiff
+ samane 01/20/10 - Bug 9302227
+ yifeng 11/05/09 - add OCIXmlDbRewriteXMLDiff
+ samane 08/05/09 - Bug 8661204
+ ataracha 12/11/03 - remove redundant definitions
+ ataracha 05/28/03 - change names
+ ataracha 02/18/03 - add oratypes, remove XMLERR_*
+ imacky 02/01/03 - remove xml.h; xdbs fix
+ ataracha 01/24/03 - use "struct xmlctx" instead of xmlctx
+ imacky 01/28/03 - fix XMLERR defs
+ ataracha 01/21/03 - ataracha_uni_capi_cleanup
+ ataracha 01/09/03 - Creation
+
+*/
+
+#ifndef ORATYPES
+#include <oratypes.h>
+#endif
+
+#ifndef OCI_ORACLE
+# include <oci.h>
+#endif
+
+#ifndef OCIXMLDB_ORACLE
+# define OCIXMLDB_ORACLE
+
+/*---------------------------------------------------------------------------
+ PUBLIC TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+#ifndef XMLCTX_DEFINED
+# define XMLCTX_DEFINED
+/* DATATYPE xmlctx - XML top-level context
+*/
+struct xmlctx; typedef struct xmlctx xmlctx;
+#endif
+
+
+typedef struct OCIXmlDiffBnd {
+ oratext *bndnmp;
+ ub1 bndnml;
+ ub2 bndpos;
+ ub2 bndnum;
+ ub2 bnddty;
+ void *bndvalp;
+ ub4 bndvallen;
+} OCIXmlDiffBnd;
+
+struct xmldrctx; typedef struct xmldrctx xmldrctx;
+
+typedef enum
+{
+ XCTXINIT_OCIDUR = 1,
+ XCTXINIT_ERRHDL = 2
+} ocixmldbpname;
+
+typedef struct ocixmldbparam
+{
+ ocixmldbpname name_ocixmldbparam;
+ void *value_ocixmldbparam;
+} ocixmldbparam;
+
+#define NUM_OCIXMLDBPARAMS 2
+
+#define OCIXMLDB_BINDBYNAME 1
+#define OCIXMLDB_BINDBYNUM 2
+
+#define OCIMAXXQUBNDLMT 1000
+
+#define OCIXmlDr_DEF 1
+
+
+/*---------------------------------------------------------------------------
+ PRIVATE TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ EXPORT FUNCTIONS
+ ---------------------------------------------------------------------------*/
+/*****************************************************************************
+ DESCRIPTION
+
+-----------------------------OCIXmlDbInitXmlCtx---------------------------------
+Name
+OCIXmlDbInitXmlCtx
+Purpose
+To get a xmlctx structure initialized with error-handler and XDB callbacks.
+Syntax
+struct xmlctx *OCIXmlDbInitXmlCtx (OCIEnv *envhp,
+ OCISvcCtx *svchp,
+ OCIError *err,
+ params_ocixmldb *params,
+ int num_params);
+Parameters
+envhp (IN) - The OCI environment handle
+svchp (IN) - The OCI service handle
+errhp (IN) - The OCI error handle
+params (IN)- This contains the following optional parameters :
+ (a) OCIDuration dur (IN - The OCI Duration (Default: OCI_DURATION_SESSION)
+ (b) void (*err_handler) (sword, (const oratext *) (IN) -
+ Pointer to the error handling function (Default: null)
+num_params (IN) - Number of parameters to be read from parameter params.
+ If the value of num_params exceeds the size of array
+ "params", unexpected behavior will result.
+
+Returns
+A pointer to xmlctx structure, with xdb context, error handler and callbacks
+populated with appropriate values. This is later used for all API calls. NULL
+if no database connection available.
+
+-----------------------------OCIXmlDbFreeXmlCtx----------------------------
+Name
+OCIXmlDbFreeXmlCtx
+Pupose
+To free any allocations done during OCIXmlDbInitXmlCtx.
+Syntax
+void OCIXmlDbFreeXmlCtx (struct xmlctx *xctx)
+Parameters
+xctx (IN) - The xmlctx to terminate
+Returns
+-
+------------------------OCIXmlDbOrastreamFromLob---------------------------
+Name
+OCIXmlDbOrastreamFromLob
+Pupose
+To create an orastream from a lob. This orastream can be used by functions like XMLLoadDom().
+Syntax
+sword OCIXmlDbOrastreamFromLob(OCIError *errhp, xmlctx *xctx,
+ void **stream, OCILobLocator *lobloc)
+Parameters
+envhp (IN) - The OCI environment handle
+xctx (IN) - XML context
+stream (IN/OUT) - A pointer to orastream
+lobloc (IN) - The OCI lob locator
+Returns
+The orastream created on top of the lob is returned in the parameter 'stream'.
+******************************************************************************/
+
+struct xmlctx *OCIXmlDbInitXmlCtx(OCIEnv *, OCISvcCtx *, OCIError *,
+ ocixmldbparam *, int);
+
+void OCIXmlDbFreeXmlCtx(struct xmlctx *xctx);
+sword OCIXmlDbStreamFromXMLType(OCIError *errhp, void **stream,
+ OCIXMLType *doc, ub4 mode);
+sword OCIXmlDbOrastreamFromLob(OCIError *errhp, xmlctx *xctx,
+ void **stream, OCILobLocator *lobloc);
+sword OCIXmlDbStreamRead(OCIError *errhp, void *stream,
+ void *bufp, sb8 *len, ub4 mode);
+sword OCIXmlDbStreamClose(OCIError *errhp, void *stream);
+
+/*---------------------------------------------------------------------------
+ INTERNAL FUNCTIONS
+ ---------------------------------------------------------------------------*/
+/* This function is for internal usage only */
+sword OCIXmlDbRewriteXMLDiff(OCIEnv *envhp, OCIError *errhp, OCISvcCtx *svchp,
+ xmldrctx *xctx , oratext* colname, ub4 colnamelen,
+ const void* xmldiff, ub4 xmldifflen,
+ OCILobLocator *xdiff_locator, oratext** updstmt,
+ ub2 binditerator, ub2 *colvalbndcount,
+ OCIXmlDiffBnd **bindlist);
+
+struct xmldrctx *OCIXmlInitDRCtx(OCIEnv *env, OCISvcCtx *svc, OCIError *err,
+ ub1 bindtyp);
+
+void OCIXmlFreeDRCtx(xmldrctx *xctx);
+
+sword OCIXmlDbGetFullyQualifiedSchemaUrl(OCIError *errhp,
+ oratext *schema_url,
+ ub2 schema_url_len,
+ oratext *schema_owner,
+ ub2 schema_owner_len,
+ oratext **fq_schema_url,
+ ub4 *fs_schema_url_len);
+
+void *OCIXmlDbMemCallback(void *ctx, size_t size);
+
+#endif /* OCIXMLDB_ORACLE */
--- /dev/null
+/* Copyright (c) 2006, 2013, Oracle and/or its affiliates.
+All rights reserved. */
+
+/*
+ NAME
+ ocixstream.h - OCI XStream APIs
+
+ DESCRIPTION
+ OCI APIs for XStream
+
+ RELATED DOCUMENTS
+
+ EXPORT FUNCTION(S)
+
+ INTERNAL FUNCTION(S)
+
+ EXAMPLES
+
+ NOTES
+
+ MODIFIED (MM/DD/YY)
+ fergutie 01/30/13 - Backport fergutie_bug-14496414 from main
+ thoang 02/15/12 - Backport thoang_bug-13444033 from main
+ huntran 09/02/12 - Backport huntran_bug-13471035 from
+ huntran 05/09/12 - Backport huntran_bug-13042334 from main
+ apfwkr 02/13/12 - Backport vchandar_bug-13058458 from main
+ elu 06/06/11 - Backport elu_bug-12592488 from main
+ bpwang 04/14/11 - Backport bpwang_bug-11815316 from main
+ elu 04/12/11 - xmlschema
+ elu 03/28/11 - xmlschema
+ tianli 03/21/11 - Backport tianli_bug-11875662 from main
+ thoang 12/04/11 - Add OCI_ROWLCR_IS_INFLIGHT_TXN
+ elu 05/25/11 - remove xml schema
+ thoang 03/10/10 - Add OCIXSTREAM_IN_ATTACH_RESTART_INBOUND mode
+ thoang 12/28/09 - Update comments
+ elu 01/07/10 - stmt lcr
+ thoang 12/15/09 - Remove non-oracle src mode
+ thoang 12/09/09 - Add note to OCIXStreamInErrorGet
+ thoang 12/04/09 - Remove ProcessedLWMGet2/Set2
+ rmao 11/20/09 - add OCI_ROWLCR_SEQ_LCR
+ thoang 10/20/09 - Add rollback and start_tx cmd.
+ bpwang 10/09/09 - Add OCI_ROWLCR_HAS_ID_KEY_ONLY
+ elu 10/05/09 - add stmt LCR
+ rihuang 10/06/09 - Add OCIXSTREAM_IN_FLUSH_WAIT_FOR_COMPLETE
+ thoang 05/08/09 - Add OCILCR_NEW_ONLY_MODE
+ praghuna 05/11/09 - removed 'TODO' comments
+ thoang 02/15/09 - Change lob_column_* to chunk_column_*
+ thoang 01/27/09 - 8216105 - add OLD/NEW column parms to OCILCRHeaderGet
+ rihuang 01/05/09 - Add OCI_LCR_ATTR_TRACKING_LABEL
+ tianli 11/28/08 - add DDL flags
+ tianli 11/20/08 - add OCILCRAttribute methods
+ thoang 11/20/08 - Define OCI_LCR_MAX_TXID_LEN
+ tianli 11/07/08 - add edition
+ thoang 11/10/08 - change return type to sword for consistency
+ thoang 10/16/08 - remove commit position arg
+ tianli 08/26/08 - rename client_name in XStreamIn attach call
+ thoang 06/30/08 - Support XStream APIs using two callbacks.
+ praghuna 05/14/08 - charset id is ub2, OCILcrGetRowStmtWithBindVar
+ thoang 06/02/08 - Define reserved attach mode for internal clients
+ elu 05/08/08 - add pos functions
+ thoang 04/29/08 - API changes
+ jinwu 04/28/08 - add OCILcrGetExtraAttributes
+ elu 04/14/08 - add OCI_LCR_MAX_POSITION_LEN
+ juyuan 03/27/08 - add flag for Set/GetHeader and Set/GetColumnInfo
+ thoang 02/25/08 - Add GetNextChunk and SetNextChunk
+ rihuang 03/24/08 - Signature change for OCILcrNew
+ elu 03/05/08 - add lcr id
+ praghuna 02/26/08 - Added OCILcrGetRowStmt
+ thoang 01/25/08 - Add wm_time parameter to XApply APIs
+ thoang 12/28/07 - Add mode parameter to XApplyDetach
+ thoang 11/07/07 - Change extapp apis to return ub1[] watermark
+ juyuan 05/23/07 - XStream In
+ thoang 11/13/06 - Add XStream Out methods
+ thoang 11/13/06 - Add LCR getter methods
+ nshodhan 05/12/06 - xstream OCI APIs
+ nshodhan 05/12/06 - Creation
+
+*/
+
+#ifndef OCIXSTREAM_ORACLE
+# define OCIXSTREAM_ORACLE
+
+#ifndef ORATYPES
+# include <oratypes.h>
+#endif
+
+#ifndef OCI_ORACLE
+# include <oci.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*---------------------------------------------------------------------------
+ PUBLIC TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+/* LCR Types -- must match with values defined in kngo.h */
+#define OCI_LCR_XROW (3) /* External Row LCR */
+#define OCI_LCR_XDDL (4) /* External DDL LCR */
+
+/* DML Command Types -- must match with values defined in kngl.h */
+#define OCI_LCR_ROW_CMD_INSERT "INSERT"
+#define OCI_LCR_ROW_CMD_DELETE "DELETE"
+#define OCI_LCR_ROW_CMD_UPDATE "UPDATE"
+#define OCI_LCR_ROW_CMD_COMMIT "COMMIT"
+#define OCI_LCR_ROW_CMD_LOB_WRITE "LOB WRITE"
+#define OCI_LCR_ROW_CMD_LOB_TRIM "LOB TRIM"
+#define OCI_LCR_ROW_CMD_LOB_ERASE "LOB ERASE"
+#define OCI_LCR_ROW_CMD_ROLLBACK "ROLLBACK"
+#define OCI_LCR_ROW_CMD_START_TX "START_TX" /* start transaction */
+#define OCI_LCR_ROW_CMD_CTRL_INFO "CONTROL INFO" /* contorl lcr */
+
+/* LCR Extra Attribute Name -- must match with values defined in knll.h */
+#define OCI_LCR_ATTR_THREAD_NO "THREAD#"
+#define OCI_LCR_ATTR_ROW_ID "ROW_ID"
+#define OCI_LCR_ATTR_SESSION_NO "SESSION#"
+#define OCI_LCR_ATTR_SERIAL_NO "SERIAL#"
+#define OCI_LCR_ATTR_USERNAME "USERNAME"
+#define OCI_LCR_ATTR_TX_NAME "TX_NAME"
+
+/* below are non first class LCR field specific */
+#define OCI_LCR_ATTR_EDITION_NAME "EDITION_NAME"
+#define OCI_LCR_ATTR_MESSAGE_TRACKING_LABEL "MESSAGE_TRACKING_LABEL"
+#define OCI_LCR_ATTR_CURRENT_USER "CURRENT_USER"
+#define OCI_LCR_ATTR_OLD_OWNER "OLD_OWNER"
+#define OCI_LCR_ATTR_OLD_ONAME "OLD_ONAME"
+
+/* Row LCR column value types used in OCILCRRowColumnInfoGet/Set functions. */
+#define OCI_LCR_ROW_COLVAL_OLD 0 /* OLD columns */
+#define OCI_LCR_ROW_COLVAL_NEW 1 /* NEW columns */
+
+/* maximum length for position
+ * NOTE: This MUST be consistent with DefaultRowLCRCache.MaxLowWaterMarkLength
+ * in DefaultRowLCRCache.java
+ */
+#define OCI_LCR_MAX_POSITION_LEN 64
+
+/* maximum length for txid */
+#define OCI_LCR_MAX_TXID_LEN 128
+
+/* Valid column flags used in OCILCRRowColumnInfoSet, OCILCRRowColumnInfoGet,
+ * OCILCRLobInfoSet, OCILCRLobInfoGet, OCIXStreamOutChunkReceive,
+ * OCIXStreamInChunkSend calls.
+ * NOTE: last byte reserved for private OCIP_LCR flags.
+ */
+#define OCI_LCR_COLUMN_LOB_DATA (0x00000001) /* col contains lob data */
+#define OCI_LCR_COLUMN_LONG_DATA (0x00000002) /* col contains long data*/
+#define OCI_LCR_COLUMN_EMPTY_LOB (0x00000004) /* col has an empty lob */
+#define OCI_LCR_COLUMN_LAST_CHUNK (0x00000008) /* last chunk of current col*/
+#define OCI_LCR_COLUMN_AL16UTF16 (0x00000010) /* col is in AL16UTF16 fmt */
+#define OCI_LCR_COLUMN_NCLOB (0x00000020) /* col has NCLOB data */
+#define OCI_LCR_COLUMN_XML_DATA (0x00000040) /* col contains xml data */
+#define OCI_LCR_COLUMN_XML_DIFF (0x00000080)/* col contains xmldiff data */
+#define OCI_LCR_COLUMN_ENCRYPTED (0x00000100) /* col is encrypted */
+
+/* OCI_LCR_COLUMN_UPDATED is set only for the modified columns in the NEW
+ * column list of an update LCR.
+ */
+#define OCI_LCR_COLUMN_UPDATED (0x00000200) /* col is updated */
+
+/* Valid bit values for the flag parameter in the following APIS:
+ * - OCILCRHeaderGet
+ * - OCILCRHeaderSet
+ */
+#define OCI_ROWLCR_HAS_ID_KEY_ONLY (0x00000001) /* only has ID key cols */
+ /* (0x00000002) is RESERVED */
+ /* (0x00000004) is RESERVED */
+ /* (0x00000008) is RESERVED */
+#define OCI_ROWLCR_SEQ_LCR (0x00000010) /* sequence lcr */
+
+/* LCR belongs to an inflight transaction, i.e., transaction was started
+ * before the outbound server's starting position.
+ */
+#define OCI_ROWLCR_IS_INFLIGHT_TXN (0x00000020)
+
+/* Valid bit values for flag parameter in the following APIs:
+ * - OCIXStreamOutChunkReceive & OCIXStreamOutLCRReceive
+ * - OCIXStreamInChunkSend & OCIXStreamInLCRSend
+ */
+#define OCI_XSTREAM_MORE_ROW_DATA (0x00000001) /* LCR contains more data */
+
+/* Valid mode flag for OCILCRHeaderGet and OCILCRRowColumnInfoGet functions */
+#define OCILCR_NEW_ONLY_MODE (0x0001) /* NEW columns only -- dont */
+ /* include OLD columns */
+
+/* Valid mode flag for OCIXStreamInFlush */
+ /* Synchronous mode for OCIXStreamInFlush */
+#define OCIXSTREAM_IN_FLUSH_WAIT_FOR_COMPLETE (0x00000001)
+
+/* SessionSet attributes */
+#define OCIXSTREAM_SESSION_SET_MAX_PARAM_LEN 128
+#define OCIXSTREAM_ATTR_ATTACH_TIMEOUT "ATTACH_TIMEOUT_SECS"
+#define OCIXSTREAM_ATTR_MAX_ATTACH_RETRIES "MAX_ATTACH_RETRIES"
+
+/*---------------------------------------------------------------------------
+ PRIVATE TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ EXPORT FUNCTIONS
+ ---------------------------------------------------------------------------*/
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCILCRNew - OCI LCR NEW
+DESCRIPTION
+ Create a new XStream LCR for the user specified duration and type
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ duration (IN) - allocation duration for LCR memory
+ lcrtype (IN) - LCR type (OCI_LCR_XROW / OCI_LCR_XDDL)
+ lcrp (IN/OUT) - XStream LCR. (*lcrp must be initialized to null.)
+ mode (IN) - mode
+NOTES
+ - memory will be based on the duration specified by the user
+ - For now, specify OCI_DEFAULT for mode
+------------------------------------------------------------------------------=
+*/
+sword OCILCRNew(OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCIDuration duration,
+ ub1 lcrtype,
+ void **lcrp,
+ ub4 mode);
+
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCILCRFree - OCI LCR FREE
+DESCRIPTION
+ Free XStream LCR specified by the user
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ lcrp (IN/OUT) - XStream LCR
+ mode (IN) - mode
+NOTES
+ - For now, specify OCI_DEFAULT for mode
+------------------------------------------------------------------------------=
+*/
+sword OCILCRFree(OCISvcCtx *svchp,
+ OCIError *errhp,
+ void *lcrp,
+ ub4 mode);
+
+
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCILCRHeaderSet - OCI LCR Set Header
+DESCRIPTION
+ Initialize elements of XStream LCR's header
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ src_db_name (IN) - Pointer to Canonicalized source database name.
+ Must be non-NULL.
+ src_db_name_len (IN) - Length of source database name in bytes
+ excluding NULL terminator. Should follow Oracle
+ naming conventions and size limitations.
+ cmd_type (IN) - For ROW LCRs: OCI_LCR_ROW_CMD_XXXXXXX
+ For DDL LCRs: One of the command types
+ corresponding to OCI Reference manual
+ cmd_type_len (IN) - Length of cmd_type.
+ owner (IN) - Canonicalized table owner name. Not required
+ for COMMIT LCR.
+ owner_len (IN) - Length of owner name in bytes excluding the
+ NULL terminator. Should follow Oracle naming
+ conventions and size limitations.
+ oname (IN) - Canonicalized table name. Not required for
+ COMIT LCR.
+ oname_len (IN) - Length of table name in bytes excluding the
+ NULL terminator. Should follow Oracle naming
+ conventions and size limitations.
+ tag (IN) - A binary tag that enables tracking of the LCR.
+ For example, this tag can be used to determine
+ the original source database of the DML
+ statement if apply forwarding is used.
+ tag_len (IN) - Number of bytes in the tag. Cannot exceed 2000
+ bytes
+ txid (IN) - Transaction ID.
+ txid_len (IN) - Length of transaction id in bytes excluding the
+ NULL terminator. Should not exceeed
+ OCI_LCR_MAX_TXID_LEN bytes.
+ src_time (IN) - The time when the change was generated at the
+ source database.
+ position (IN) - position for LCR. Must be byte-comparable.
+ position_len (IN) - Length of position. Must be non-zero.
+ flag (IN) - LCR flag.
+ lcrp (IN/OUT) - XStream LCR
+ mode (IN) - mode
+NOTES
+ - For now, specify OCI_DEFAULT for mode
+ - This function clears the current contents of the input LCR before
+ setting the header to the new values.
+------------------------------------------------------------------------------=
+*/
+sword OCILCRHeaderSet(OCISvcCtx *svchp,
+ OCIError *errhp,
+ oratext *src_db_name,
+ ub2 src_db_name_len,
+ oratext *cmd_type,
+ ub2 cmd_type_len,
+ oratext *owner,
+ ub2 owner_len,
+ oratext *oname,
+ ub2 oname_len,
+ ub1 *tag,
+ ub2 tag_len,
+ oratext *txid,
+ ub2 txid_len,
+ OCIDate *src_time,
+ ub1 *position,
+ ub2 position_len,
+ oraub8 flag,
+ void *lcrp,
+ ub4 mode);
+
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCILCRHeaderGet - OCI LCR Get Header
+DESCRIPTION
+ Get header information from XStream LCR
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ src_db_name (OUT) - Pointer to Canonicalized source database name.
+ Optional, if src_db_name is specified then
+ must specify src_db_name_len as well.
+ src_db_name_len (OUT) - Length of source database name in bytes
+ excluding NULL terminator.
+ Optional, if specified src_db_name_len then
+ must specify src_db_name as well.
+ cmd_type (OUT) - Command type. Must be non-null if
+ cmd_type_len is non-null. Must be null if
+ cmd_type_len is NULL.
+ cmd_type_len (OUT) - Length of cmd_type. Optional.
+ owner (OUT) - Canonicalized table owner name.
+ Optional, if owner is specified then
+ must specify owner_len as well.
+ owner_len (OUT) - Length of owner name in bytes excluding the
+ NULL terminator.
+ Optional, if owner_len is specified then
+ must specify owner as well.
+ oname (OUT) - Canonicalized table name.
+ Optional, if oname is specified then
+ must specify oname_len as well.
+ oname_len (OUT) - Length of table name in bytes excluding the
+ NULL terminator.
+ Optional, if oname_len is specified then
+ must specify oname as well.
+ tag (OUT) - A binary tag that enables tracking of the LCR.
+ For example, this tag can be used to determine
+ the original source database of the
+ DML statement if apply forwarding is used.
+ Optional, if tag is specified then
+ must specify tag_len as well.
+ tag_len (OUT) - Number of bytes in the tag.
+ Optional, if tag_len is specified then
+ must specify tag as well.
+ txid (OUT) - Transaction ID.
+ Optional, if txid is specified then
+ must specify txid_len as well.
+ txid_len (OUT) - Length of transaction id in bytes excluding
+ the NULL terminator.
+ Optional, if txid_len is specified then
+ must specify txid as well.
+ src_time (OUT) - The time when the change was generated at the
+ source database. Optional.
+ old_columns (OUT) - Number of columns in the OLD column list.
+ Return 0 if input lcr is DDL LCR. Optional.
+ new_columns (OUT) - Number of columns present in either
+ the OLD or NEW column list.
+ Return 0 if input lcr is DDL LCR. Optional.
+ See NOTES below for the special mode supported
+ by this function.
+ position (OUT) - LCR position. Optional.
+ position_len (OUT) - Length of position. Must be non-null if
+ position is non-null. Must be null if
+ position is null.
+ flag (OUT) - LCR flag. Optional.
+ lcrp (IN) - XStream LCR
+ mode (IN) - mode (see NOTES)
+NOTES
+ - Parameter src_time is optional. If specified the appropriate return
+ structure must be pre-allocated before calling OCILCRHeaderGet.
+ - The return values for src_db_name, cmd_type, owner, oname, tag, txid and
+ position are shallow-copied (i.e., they point directly into the LCR
+ structure).
+ - Valid mode flags:
+ - OCILCR_NEW_ONLY_MODE: if this mode is specified then the new_columns
+ returned is the count of the columns in the NEW column list only.
+ Otherwise, the new_columns returned is the number of distinct
+ columns present in either the NEW or the OLD column list of the given
+ ROW LCR.
+------------------------------------------------------------------------------=
+*/
+
+sword OCILCRHeaderGet(OCISvcCtx *svchp,
+ OCIError *errhp,
+ oratext **src_db_name,
+ ub2 *src_db_name_len,
+ oratext **cmd_type,
+ ub2 *cmd_type_len,
+ oratext **owner,
+ ub2 *owner_len,
+ oratext **oname,
+ ub2 *oname_len,
+ ub1 **tag,
+ ub2 *tag_len,
+ oratext **txid,
+ ub2 *txid_len,
+ OCIDate *src_time,
+ ub2 *old_columns,
+ ub2 *new_columns,
+ ub1 **position,
+ ub2 *position_len,
+ oraub8 *flag,
+ void *lcrp,
+ ub4 mode);
+
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCILCRRowColumnInfoSet - OCI LCR ROW SET COLUMN INFO
+DESCRIPTION
+ Populates column information as specified by the user.
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ column_value_type (IN) - ROW LCR column value type:
+ - OCI_LCR_ROW_COLVAL_OLD
+ - OCI_LCR_ROW_COLVAL_NEW
+ num_columns (IN) - Number of columns to be populated
+ column_names (IN) - Pointer to an array of column names. Column
+ names must be canonicalized. Column names should
+ follow Oracle naming conventions
+ column_name_lens (IN) - Pointer to an array of column name lengths
+ in bytes, excluding the NULL terminator.
+ column_dtyp (IN) - Pointer to an array of column datatypes.
+ column_valuesp (IN) - Pointer to an array of column data values.
+ column_indp (IN) - Pointer to an indicator array. For all datatypes,
+ this is a pointer to an array of OCIInd values
+ (OCI_IND_NULL/OCI_IND_NOTNULL).
+ column_alensp (IN) - Pointer to an array of actual column lengths in
+ bytes.
+ column_csetfp (IN) - Pointer to an array of character set forms for
+ the columns. The default form is SQLCS_IMPLICIT.
+ Setting this attribute will cause the database or
+ national character set to be used on the client
+ side. Set this attribute to SQLCS_NCHAR for the
+ national character set or SQLCS_IMPLICIT for the
+ database character set.
+ Pass 0 for non-character columns.
+ column_flags (IN) - Pointer to an array of column flags.
+ Possible bit values are OCI_LCR_COLUMN_* flags
+ listed above.
+ column_csid (IN) - Pointer to an array of column character set id.
+ The character set id is only required for
+ XMLType column; otherwise, the csid is ignored.
+ row_lcrp (IN/OUT)- XStream Row LCR pointer
+ mode (IN) - mode
+NOTES
+ - For now, specify OCI_DEFAULT for mode
+------------------------------------------------------------------------------=
+*/
+sword OCILCRRowColumnInfoSet(OCISvcCtx *svchp,
+ OCIError *errhp,
+ ub2 column_value_type,
+ ub2 num_columns,
+ oratext **column_names,
+ ub2 *column_name_lens,
+ ub2 *column_dtyp,
+ void **column_valuesp,
+ OCIInd *column_indp,
+ ub2 *column_alensp,
+ ub1 *column_csetfp,
+ oraub8 *column_flags,
+ ub2 *column_csid,
+ void *row_lcrp,
+ ub4 mode);
+
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCILCRRowColumnInfoGet - OCI LCR ROW GET COLUMN INFO
+DESCRIPTION
+ Returns column information as requested by the user.
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ column_value_type (IN) - ROW LCR column value type:
+ - OCI_LCR_ROW_COLVAL_OLD
+ - OCI_LCR_ROW_COLVAL_NEW
+ (See NOTES for special mode supported by this
+ function.)
+ num_columns (OUT) - Number of columns in requested column list
+ column_names (IN/OUT)- Pointer to an array of column names.
+ Optional. If specified then column_namesl must
+ be specified as well, and both arrays must be the
+ size specified by array_size parameter.
+ column_name_lens (IN/OUT)- Pointer to an array of column name lengths
+ in bytes, excluding the NULL terminator.
+ Optional. If specified then column_names must
+ be specified as well, and both arrays must be the
+ size specified by array_size parameter.
+ column_dtyp (IN/OUT)- Pointer to an array of column datatypes.
+ Optional. If specified then this array must be
+ the size specified by array_size parameter.
+ column_valuesp (IN/OUT)- Pointer to an array of column data values.
+ Optional. If specified then this array must be
+ the size specified by array_size parameter.
+ column_indp (IN/OUT)- Pointer to an indicator array. For all datatypes,
+ this is a pointer to an array of OCIInd values
+ (OCI_IND_NULL/OCI_IND_NOTNULL).
+ Optional. If specified then this array must be
+ the size specified by array_size parameter.
+ column_alensp (IN/OUT)- Pointer to an array of actual column lengths in
+ bytes.
+ Optional. If specified then this array must be
+ the size specified by array_size parameter.
+ column_csetfp (IN/OUT)- Pointer to an array of character set forms for
+ the columns.
+ Optional. If specified then this array must be
+ the size specified by array_size parameter.
+ column_flags (IN/OUT)- Pointer to an array of column flags for
+ the columns.
+ Optional. If specified then this array must be
+ the size specified by array_size parameter.
+ Possible bit values are OCI_LCR_COLUMN_* flags
+ listed above.
+ column_csid (IN/OUT)- Pointer to an array of column character set id for
+ the columns.
+ Optional. If specified then this array must be
+ the size specified by array_size parameter.
+ The column csid is returned only for XMLType
+ column.
+ row_lcrp (IN) - XStream Row LCR pointer
+ array_size (IN) - Size of each of above arrays
+ mode (IN) - mode (see NOTES)
+NOTES
+ - For now, specify OCI_DEFAULT for mode
+ - If array_size is not large enough to accommodate the number of columns
+ in the requested column list then OCI_ERROR is returned. Parameter
+ num_columns will have the number of columns in the requested column list.
+ - The return values for column_names and column_valuesp will be shallow
+ copied (i.e., they reference directly into the LCR structure).
+ Client should not modify those pointers directly.
+ - Valid mode flags:
+ - OCILCR_NEW_ONLY_MODE: this mode is valid only for OCI_LCR_ROW_COLVAL_NEW
+ column_value_type; otherwise, an error is raised.
+ If this mode is specified then the columns returned include only the
+ columns in the NEW column list.
+ If this mode is not specified then the columns returned is the union
+ of the NEW columns plus the OLD columns that are not present in the
+ NEW column list.
+------------------------------------------------------------------------------=
+*/
+sword OCILCRRowColumnInfoGet(OCISvcCtx *svchp,
+ OCIError *errhp,
+ ub2 column_value_type,
+ ub2 *num_columns,
+ oratext **column_names,
+ ub2 *column_name_lens,
+ ub2 *column_dtyp,
+ void **column_valuesp,
+ OCIInd *column_indp,
+ ub2 *column_alensp,
+ ub1 *column_csetfp,
+ oraub8 *column_flags,
+ ub2 *column_csid,
+ void *row_lcrp,
+ ub2 array_size,
+ ub4 mode);
+
+
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCILCRDDLInfoSet - OCI LCR SET DDL INFO
+DESCRIPTION
+ populates DDL information as sepcified by the user.
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ object_type (IN) - The type of object on which the DDL statement was
+ executed. The following are valid object types:
+ CLUSTER, FUNCTION, INDEX, LINK, OUTLINE,
+ PACKAGE, PACKAGE BODY, PROCEDURE, SEQUENCE,
+ SYNONYM, TABLE, TRIGGER, TYPE, USER, VIEW
+ LINK represents a database link.
+ NULL is also a valid object type. Specify NULL
+ for all object types not listed.
+ object_type_len (IN) - Length of object_type without the NULL terminator.
+ ddl_text (IN) - The text of the DDL statement. This parameter
+ should be set to a non-NULL value.
+ DDL text must be in Oracle DDL format.
+ ddl_text_len (IN) - DDL text length in bytes without NULL terminator.
+ logon_user (IN) - Canonicalized name of the user whose session
+ executed the DDL statement. Should follow Oracle
+ naming conventions and size limitations.
+ logon_user_len (IN) - logon user name length in bytes without NULL
+ terminator.
+ current_schema (IN) - The canonicalized schema name that is used if no
+ schema is specified explicitly for the modified
+ database objects in ddl_text. If a schema is
+ specified in ddl_text that differs from the one
+ specified for current_schema, then the schema
+ specified in ddl_text will be used.
+ This parameter should be set to a non-NULL value.
+ Should follow Oracle naming conventions and size
+ limitations.
+ current_schema_len (IN) - schema name length in bytes without NULL terminator
+ base_table_owner (IN) - If the DDL statement is a table related DDL
+ (such as CREATE TABLE and ALTER TABLE), or if the
+ DDL statement involves a table (such as creating
+ a trigger on a table), then base_table_owner
+ specifies the canonicalized owner of the table
+ involved. Otherwise, base_table_owner is NULL.
+ Should follow Oracle naming conventions and size
+ limitations.
+ base_table_owner_len (IN)- base table owner name length in bytes without NULL
+ terminator.
+ base_table_name (IN) - If the DDL statement is a table related DDL (such
+ as CREATE TABLE and ALTER TABLE), or if the DDL
+ statement involves a table (such as creating a
+ trigger on a table), then base_table_name
+ specifies the canonicalized name of the table
+ involved. Otherwise, base_table_name is NULL.
+ Length of the above string without the NULL
+ terminator. Should follow Oracle naming
+ conventions and size limitations.
+ Should follow Oracle naming conventions and size
+ limitations.
+ base_table_name_len (IN)- base table name length in bytes without NULL
+ terminator.
+ flag (IN) - DDL LCR flag.
+ ddl_lcrp (IN/OUT) - XStream Ddl LCR pointer
+ mode (IN) - mode
+NOTES
+ - For now, specify OCI_DEFAULT for mode
+------------------------------------------------------------------------------=
+*/
+sword OCILCRDDLInfoSet(OCISvcCtx *svchp,
+ OCIError *errhp,
+ oratext *object_type,
+ ub2 object_type_len,
+ oratext *ddl_text,
+ ub4 ddl_text_len,
+ oratext *logon_user,
+ ub2 logon_user_len,
+ oratext *current_schema,
+ ub2 current_schema_len,
+ oratext *base_table_owner,
+ ub2 base_table_owner_len,
+ oratext *base_table_name,
+ ub2 base_table_name_len,
+ oraub8 flag,
+ void *ddl_lcrp,
+ ub4 mode);
+
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCILCRDDLInfoGet - OCI LCR GET DDL INFO
+DESCRIPTION
+ Returns DDL information from specified lcr.
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ object_type (OUT) - The type of object on which the DDL statement
+ was executed.
+ Optional, if object_type is specified then
+ must specify object_type_len as well.
+ object_type_len (OUT) - Length of object_type without the NULL
+ terminator.
+ ddl_text (OUT) - The text of the DDL statement.
+ Optional, if ddl_text is specified then
+ must specify ddl_text_len as well.
+ ddl_text_len (OUT) - DDL text length in bytes without NULL
+ terminator.
+ logon_user (OUT) - Canonicalized name of the user whose session
+ executed the DDL statement.
+ Optional, if logon_user is specified then
+ must specify logon_user_len as well.
+ logon_user_len (OUT) - logon user name length in bytes without NULL
+ terminator.
+ current_schema (OUT) - The canonicalized schema name that is used if
+ no schema is specified explicitly for the
+ modified database objects in ddl_text.
+ Optional, if current_schema is specified then
+ must specify current_schema_len as well.
+ current_schema_len (OUT)- schema name length in bytes without NULL
+ terminator
+ base_table_owner (OUT) - If the DDL statement is a table related DDL
+ (such as CREATE TABLE and ALTER TABLE), or if
+ the DDL statement involves a table (such as
+ creating a trigger on a table), then
+ base_table_owner specifies the canonicalized
+ owner of the table involved. Otherwise,
+ base_table_owner is NULL. Optional, if
+ base_table_owner is specified then must specify
+ base_table_owner_len as well.
+ base_table_owner_len (OUT) - base table owner name length in bytes without
+ NULL terminator.
+ base_table_name (OUT) - If the DDL statement is a table related DDL
+ (such as CREATE TABLE and ALTER TABLE), or if
+ the DDL statement involves a table (such as
+ creating a trigger on a table), then
+ base_table_name specifies the canonicalized name
+ of the table involved. Otherwise,
+ base_table_name is NULL. Optional, if
+ base_table_name is specified then must specify
+ base_table_name_len as well.
+ base_table_name_len (OUT) - base table name length in bytes without NULL
+ terminator.
+ flag (OUT) - DDL LCR flag. Optional, data not returned if
+ NULL.
+ ddl_lcrp (IN) - XStream DDL LCR pointer
+ mode (IN) - mode (for future extention - not used currently)
+RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+NOTES
+ - For now, specify OCI_DEFAULT for mode
+------------------------------------------------------------------------------=
+*/
+sword OCILCRDDLInfoGet(OCISvcCtx *svchp,
+ OCIError *errhp,
+ oratext **object_type,
+ ub2 *object_type_len,
+ oratext **ddl_text,
+ ub4 *ddl_text_len,
+ oratext **logon_user,
+ ub2 *logon_user_len,
+ oratext **current_schema,
+ ub2 *current_schema_len,
+ oratext **base_table_owner,
+ ub2 *base_table_owner_len,
+ oratext **base_table_name,
+ ub2 *base_table_name_len,
+ oraub8 *flag,
+ void *ddl_lcrp,
+ ub4 mode);
+
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCILCRAttributesSet - OCI LCR SET ATTRIBUTES
+DESCRIPTION
+ populates extra attribute information in ROW/DDL LCR, as well as any
+ non first class attributes that can not be set through
+ OCILCRHeaderSet, OCILCRDDLInfoSet, or OCILCRRowColumnInfoSet.
+ e.g. edition name
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ num_attrs (IN) - Number of extra attributes to be populated
+ attr_names (IN) - Pointer to an array of attribute names. Attribute
+ names must be canonicalized and should follow
+ Oracle naming conventions
+ attr_names_lens (IN) - Pointer to an array of attribute name lengths
+ in bytes, excluding the NULL terminator.
+ attr_dtyp (IN) - Pointer to an array of attribute datatypes.
+ attr_valuesp (IN) - Pointer to an array of attribute data values.
+ attr_indp (IN) - Pointer to an indicator array. For all datatypes,
+ this is a pointer to an array of OCIInd values
+ (OCI_IND_NULL/OCI_IND_NOTNULL).
+ attr_alensp (IN) - Pointer to an array of actual attribute lengths in
+ bytes.
+ lcrp (IN/OUT)- XStream (Row/DDL) LCR pointer
+ mode (IN) - mode
+NOTES
+ - For now, specify OCI_DEFAULT for mode
+------------------------------------------------------------------------------=
+*/
+sword OCILCRAttributesSet(OCISvcCtx *svchp,
+ OCIError *errhp,
+ ub2 num_attrs,
+ oratext **attr_names,
+ ub2 *attr_name_lens,
+ ub2 *attr_dtyp,
+ void **attr_valuesp,
+ OCIInd *attr_indp,
+ ub2 *attr_alensp,
+ void *lcrp,
+ ub4 mode);
+
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCILCRAttributesGet - OCI LCR GET EXTRA ATTRIBUTES
+DESCRIPTION
+ Gets extra attribute information in (ROW/DDL) LCR, as well as any
+ non first class attributes that are not populated through
+ OCILCRHeaderGet, OCILCRDDLInfoGet, or OCILCRRowColumnInfoGet
+ e.g. edition name
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ num_attrs (OUT) - Number of extra attributes to be populated
+ attr_names (IN/OUT)- Pointer to an array of attribute names. Attribute
+ names must be canonicalized and should follow
+ Oracle naming conventions
+ attr_namesl (IN/OUT)- Pointer to an array of attribute name lengths
+ in bytes, excluding the NULL terminator.
+ attr_dtyp (IN/OUT)- Pointer to an array of attribute datatypes.
+ attr_valuesp (IN/OUT)- Pointer to an array of attribute data values.
+ attr_indp (IN/OUT)- Pointer to an indicator array. For all datatypes,
+ this is a pointer to an array of OCIInd values
+ (OCI_IND_NULL/OCI_IND_NOTNULL).
+ attr_alensp (IN/OUT)- Pointer to an array of actual attribute lengths in
+ bytes.
+ lcrp (IN) - XStream (Row/DDL) LCR pointer
+ array_size (IN) - Size of each of above arrays, use at least the size
+ defined by OCI_LCR_MAX_ATTRIBUTES
+ mode (IN) - mode
+NOTES
+ - For now, specify OCI_DEFAULT for mode
+ - If array_size is not large enough to accommodate the number of attributes
+ in the requested attribute list then OCI_ERROR is returned. Parameter
+ num_attrs will return the suggested size.
+------------------------------------------------------------------------------=
+*/
+sword OCILCRAttributesGet(OCISvcCtx *svchp,
+ OCIError *errhp,
+ ub2 *num_attrs,
+ oratext **attr_names,
+ ub2 *attr_namesl,
+ ub2 *attr_dtyp,
+ void **attr_valuesp,
+ OCIInd *attr_indp,
+ ub2 *attr_alensp,
+ void *lcrp,
+ ub2 array_size,
+ ub4 mode);
+
+/*--------------------- OCILCRWhereClauseGet ----------------------------*/
+/*
+ NAME
+ OCILCRWhereClauseGet - OCI Get Where Clause
+ DESCRIPTION
+ Gets the Where clause statement for the given ROW LCR.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors
+ should be reported
+ wc_stmt (OUT) - Sql Statement equivalent to the
+ LCR has applied
+ wc_stmt_len (IN/OUT) - length of wc_stmt buffer
+ row_lcrp (IN) - row LCR to be converted to SQL
+ mode (IN) - Mode flags (For future extension.
+ Not used currently)
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ - For now, specify OCI_DEFAULT for mode
+ - WHERE clause generated for INSERT lcr will have all the columns that
+ are being inserted. This WHERE clause could be used to identify the
+ inserted row after inserting. (like "returning ROWID").
+ INSERT INTO TAB(COL1) VALUES (10) -> WHERE COL1=10
+ - WHERE clause generated for UPDATE will have all the columns in the
+ old column list. However the values of the columns will be that of
+ new value if it exist in the new column list
+ of the UPDATE. If the column doesnt have new value then the old column
+ value will be used.
+ UPDATE TAB SET COL1 = 10 WHERE COL1 = 20 -> WHERE COL1 = 10
+ UPDATE TAB SET COL2 = 20 WHERE COL1 = 20 -> WHERE COL1 = 20
+ - WHERE clause for DELETE will use the columns and values from
+ old column lst
+ - LOB piecewise operations would use the new columns and values for
+ generating the WHERE clause.
+*/
+
+sword OCILCRWhereClauseGet(
+ OCISvcCtx *svchp,
+ OCIError *errhp,
+ oratext *wc_stmt,
+ ub4 *wc_stmt_len,
+ void *row_lcrp,
+ ub4 mode);
+
+/*--------------------- OCILCRRowStmtGet ----------------------------*/
+/*
+ NAME
+ OCILCRRowStmtGet - OCI Get Row Statement
+ DESCRIPTION
+ Gets the SQL statement for the given ROW LCR.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors
+ should be reported
+ row_stmt (OUT) - Sql Statement equivalent to the
+ LCR has applied
+ row_stmt_len (IN/OUT) - length of row_stmt buffer
+ row_lcrp (IN) - row LCR to be converted to SQL
+ mode (IN) - Mode flags (For future extension.
+ Not used currently)
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ None
+*/
+sword OCILCRRowStmtGet(
+ OCISvcCtx *svchp,
+ OCIError *errhp,
+ oratext *row_stmt,
+ ub4 *row_stmt_len,
+ void *row_lcrp,
+ ub4 mode);
+
+/*--------------------- OCILCRWhereClauseWithBindVarGet ----------------------*/
+/*
+ NAME
+ OCILCRWhereClauseWithBindVarGet - OCI Get Where clause with binds
+ DESCRIPTION
+ Gets the where clause statement with bind variables for the given ROW LCR.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors
+ should be reported
+ wc_stmt (OUT) - Sql Stmt equivalent to the LCR
+ wc_stmt_len (IN/OUT) - length of wc_stmt buffer
+ num_bind_var (OUT) - Number of bind variables
+ bind_var_dtyp (OUT) - Array of Data types of bind
+ variables
+ bind_var_valuesp (OUT) - Array of Values of bind variables
+ bind_var_indp (OUT) - Array of null indicators of
+ bind variables
+ bind_var_alensp (OUT) - Array of lengths of bind values
+ bind_var_csetidp (OUT) - Array of char set id of binds
+ bind_var_csetfp (OUT) - Array of char set form of binds
+ row_lcrp (IN) - row LCR to be converted to SQL
+ array_size (IN) - Size of the array of bind values
+ bind_var_syntax (IN) - Native syntax to be used for binds
+ mode (IN) - Mode flags (For future extension.
+ Not used currently)
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ - For now, specify OCI_DEFAULT for mode
+ - If array_size is not large enough to accommodate the number of columns
+ in the requested column list then OCI_ERROR is returned. Expected
+ array_size is returned through num_bind_var parameter.
+ - bind_var_syntax for oracle should contain ":". This will generate
+ positional binds such as :1, :2, :3 etc. For other non-oracle databases
+ they can give the string that needs to be used for binds.
+ - WHERE clause generated for INSERT lcr will have all the columns that
+ are being inserted. This WHERE clause could be used to identify the
+ inserted row after inserting. (like "returning ROWID").
+ INSERT INTO TAB(COL1) VALUES (10) -> WHERE COL1=10
+ - WHERE clause generated for UPDATE will have all the columns in the
+ old column list. However the values of the columns will be that of
+ new column value of the column if it exist in the new values
+ of the UPDATE. If the column appears only in the old column then
+ old column value will be used.
+ UPDATE TAB SET COL1 = 10 WHERE COL1 = 20 -> WHERE COL1 = 10
+ UPDATE TAB SET COL2 = 20 WHERE COL1 = 20 -> WHERE COL1 = 20
+ - WHERE clause for DELETE will use the columns and values from
+ old column lst
+ - LOB piecewise operations would use the new columns and values for
+ generating the WHERE clause.
+*/
+sword OCILCRWhereClauseWithBindVarGet(
+ OCISvcCtx *svchp,
+ OCIError *errhp,
+ oratext *wc_stmt,
+ ub4 *wc_stmt_len,
+ ub2 *num_bind_var,
+ ub2 *bind_var_dtyp,
+ void **bind_var_valuesp,
+ OCIInd *bind_var_indp,
+ ub2 *bind_var_alensp,
+ ub2 *bind_var_csetidp,
+ ub1 *bind_var_csetfp,
+ void *row_lcrp,
+ ub2 array_size,
+ oratext *bind_var_syntax,
+ ub4 mode);
+
+/*--------------------- OCILCRRowStmtWithBindVarGet ----------------------*/
+/*
+ NAME
+ OCILCRRowStmtWithBindVarGet - OCI Get Row Statement
+ DESCRIPTION
+ Gets the SQL statement with bind variables for the given ROW LCR.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors
+ should be reported
+ row_stmt (OUT) - Sql Stmt equivalent to the LCR
+ row_stmt_len (IN/OUT) - length of row_stmt buffer
+ num_bind_var (OUT) - Number of bind variables
+ bind_var_dtyp (OUT) - Array of Data types of bind
+ variables
+ bind_var_valuesp (OUT) - Array of Values of bind variables
+ bind_var_indp (OUT) - Array of null indicators of
+ bind variables
+ bind_var_alensp (OUT) - Array of lengths od bind values
+ bind_var_csetidp (OUT) - Array of char set id of binds
+ bind_var_csetfp (OUT) - Array of char set form of binds
+ row_lcrp (IN) - row LCR to be converted to SQL
+ chunk_column_names (OUT) - Array of chunked column names in
+ lcr
+ chunk_column_namesl (OUT) - Length of chunk_column_names
+ chunk_column_flags (OUT) - flags of chunked columns in lcr
+ Possible bit values are
+ OCI_LCR_COLUMN_* flags listed
+ above.
+ array_size (IN) - Size of the array of bind values
+ bind_var_syntax (IN) - Native syntax to be used for binds
+ mode (IN) - Mode flags (For future extension.
+ Not used currently)
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ - For now, specify OCI_DEFAULT for mode
+ - If array_size is not large enough to accommodate the number of columns
+ in the requested column list then OCI_ERROR is returned. Expected
+ array_size is returned through num_bind_var parameter.
+ - bind_var_syntax for oracle should contain ":". This will generate
+ positional binds such as :1, :2, :3 etc. For other non-oracle databases
+ they can give the string that needs to be used for binds.
+*/
+sword OCILCRRowStmtWithBindVarGet(
+ OCISvcCtx *svchp,
+ OCIError *errhp,
+ oratext *row_stmt,
+ ub4 *row_stmt_len,
+ ub2 *num_bind_var,
+ ub2 *bind_var_dtyp,
+ void **bind_var_valuesp,
+ OCIInd *bind_var_indp,
+ ub2 *bind_var_alensp,
+ ub2 *bind_var_csetidp,
+ ub1 *bind_var_csetfp,
+ void *row_lcrp,
+ oratext **chunk_column_names,
+ ub2 *chunk_column_namesl,
+ oraub8 *chunk_column_flags,
+ ub2 array_size,
+ oratext *bind_var_syntax,
+ ub4 mode);
+
+/*
+-------------------------------------------------------------------------------
+ NAME
+ OCILCRSCNsFromPosition - Get SCNs From Position
+
+ DESCRIPTION
+ Returns the SCN and commit SCN from the given position.
+ PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ position (IN) - LCR position
+ position_len (IN) - length of position
+ scn (OUT) - the SCN stored in position
+ commit_scn (OUT) - the commit SCN stored in position
+ mode (IN) - Mode flags (For future extension. Not used
+ currently)
+ RETURN
+ OCI_SUCCESS if the conversion succeeds, OCI_ERROR otherwise.
+ NOTE
+ The user must allocate memory for the return numbers.
+ The input position must conform to the format generated by an XStream
+ server.
+-------------------------------------------------------------------------------
+*/
+sword OCILCRSCNsFromPosition(OCISvcCtx *svchp,
+ OCIError *errhp,
+ ub1 *position,
+ ub2 position_len,
+ OCINumber *scn,
+ OCINumber *commit_scn,
+ ub4 mode);
+
+/*
+-------------------------------------------------------------------------------
+ NAME
+ OCILCRSCNToPosition - Converts SCN To Position
+
+ DESCRIPTION
+ Converts an SCN to a position. The generated position can be passed as the
+ last_position to OCIXStreamOutAttach function to filter the LCRs
+ with commit SCN less than the given SCN and the LCR's SCN less than the
+ given SCN. This means the first LCR sent by the Outbound server is either
+ - a commit LCR at the given SCN, or
+ - the first LCR of the subsequent transaction with commit SCN greater
+ than or equal to the given SCN.
+ PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ position (OUT) - Result position. Must pre-allocate
+ OCI_LCR_MAX_POSITION_LEN bytes.
+ position_len (OUT) - Length of position
+ scn (IN) - The SCN to be stored in position
+ mode (IN) - Mode flags (for future extension)
+ RETURN
+ OCI_SUCCESS if the conversion succeeds, OCI_ERROR otherwise.
+-------------------------------------------------------------------------------
+*/
+sword OCILCRSCNToPosition(OCISvcCtx *svchp,
+ OCIError *errhp,
+ ub1 *position,
+ ub2 *position_len,
+ OCINumber *scn,
+ ub4 mode);
+
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCILCRLobInfoGet - OCI LCR GET LOB INFO
+DESCRIPTION
+ Returns the LOB information for a given piece-wise LOB LCR.
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ column_name (OUT) - Pointer to the LOB column name.
+ Optional. If specified then column_name_len must
+ be specified as well.
+ column_name_len(OUT) - Length of LOB column name without the NULL
+ terminator.
+ column_dty (OUT) - LOB column dty - either SQLT_CHR (for CLOB) or
+ SQLT_BIN (for BLOB).
+ column_flag (OUT) - LOB column flag.
+ Possible bit values are OCI_LCR_COLUMN_* flags
+ listed above.
+ offset (OUT) - LOB operation offset in code points. Returned only
+ for LOB_TRIM and LOB_WRITE operations; otherwise,
+ a zero is returned.
+ This is the same as the 'soffset' parameter for
+ OCILobErase or the 'offset' parameter in
+ OCILobWrite functions.
+ size (OUT) - LOB operation size in code points. Returned only
+ for LOB_TRIM and LOB_ERASE operations; otherwise,
+ a zero is returned.
+ This is the same as the 'new_length' parameter in
+ OCILobTrim or the 'amtp' parameter in OCILobErase
+ functions.
+ row_lcrp (IN) - XStream Row LCR pointer
+ mode (IN) - mode
+NOTES
+ - For now, specify OCI_DEFAULT for mode
+------------------------------------------------------------------------------=
+*/
+sword OCILCRLobInfoGet(OCISvcCtx *svchp,
+ OCIError *errhp,
+ oratext **column_name,
+ ub2 *column_name_len,
+ ub2 *column_dty,
+ oraub8 *column_flag,
+ ub4 *offset,
+ ub4 *size,
+ void *row_lcrp,
+ ub4 mode);
+
+
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCILCRLobInfoSet - OCI LCR SET LOB INFO
+DESCRIPTION
+ Sets the LOB information for a given piece-wise LOB LCR.
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ column_name (IN) - Pointer to the LOB column name.
+ column_name_len(IN) - Length of LOB column name without the NULL
+ terminator.
+ column_dty (IN) - LOB column dty - either SQLT_CHR (for CLOB) or
+ SQLT_BIN (for BLOB).
+ column_flag (IN) - LOB column flag.
+ Possible bit values are OCI_LCR_COLUMN_* flags
+ listed above.
+ offset (IN) - LOB operation offset in code points. Returned only
+ for LOB_TRIM and LOB_WRITE operations; otherwise,
+ a zero is returned.
+ This is the same as the 'soffset' parameter for
+ OCILobErase or the 'offset' parameter in
+ OCILobWrite functions.
+ size (IN) - LOB operation size in code points. Returned only
+ for LOB_TRIM and LOB_ERASE operations; otherwise,
+ a zero is returned.
+ This is the same as the 'new_length' parameter in
+ OCILobTrim or the 'amtp' parameter in OCILobErase
+ functions.
+ row_lcrp (IN/OUT)- XStream Row LCR pointer
+ mode (IN) - mode
+NOTES
+ - For now, specify OCI_DEFAULT for mode
+------------------------------------------------------------------------------=
+*/
+sword OCILCRLobInfoSet(OCISvcCtx *svchp,
+ OCIError *errhp,
+ oratext *column_name,
+ ub2 column_name_len,
+ ub2 column_dty,
+ oraub8 column_flag,
+ ub4 offset,
+ ub4 size,
+ void *row_lcrp,
+ ub4 mode);
+
+/*---------------------------------------------------------------------------
+ XSTREAM OUT FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+/*------------------------- OCIXStreamOutAttach -----------------------------*/
+/*
+ NAME
+ OCIXStreamOutAttach - OCI Attach to XStream Out
+ DESCRIPTION
+ Given the name of the server process, attach to the outbound server.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle for error reporting
+ server_name (IN) - Server name.
+ server_name_len (IN) - Length of server name.
+ last_position (IN) - last rcv position. (Optional)
+ last_position_len (IN) - Length of last_position.
+ mode (IN) - Mode flags (see below)
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ Specify OCI_DEFAULT for the mode parameter.
+
+ The name of the outbound server must be provided because multiple
+ outbound servers can be configured in one Oracle instance. This call
+ returns OCI_ERROR if it encounters any error while attaching to the
+ outbound server.
+
+ The last_position parameter is used to establish the starting point
+ of the stream. This call returns OCI_ERROR if the specified position
+ is non-null and less than the server's processed low-watermark;
+ otherwise, LCRs with position greater than last_position will be
+ sent to the user.
+
+ If last_position is null then the stream will start from the processed
+ low-watermark maintained in the server.
+*/
+
+sword OCIXStreamOutAttach (OCISvcCtx *svchp, OCIError *errhp,
+ oratext *server_name, ub2 server_name_len,
+ ub1 *last_position,
+ ub2 last_position_len,
+ ub4 mode);
+
+/* Valid modes for OCIXStreamOutAttach call */
+#define OCIXSTREAM_OUT_ATTACH_RESERVED_1 (0x00000001)
+/* Application is in charge of freeing the LCRs from the outbound server */
+#define OCIXSTREAM_OUT_ATTACH_APP_FREE_LCR (0x00000002)
+
+/*---------------------- OCIXStreamOutProcessedLWMSet ----------------------*/
+/*
+ NAME
+ OCIXStreamOutProcessedLWMSet - Set Processed Low-Watermark
+ DESCRIPTION
+ Sets the processed low-watermark maintained at the client.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle for error reporting
+ processed_low_position (IN) - processed low position.
+ processed_low_position_len (IN) - processed low position length.
+ mode (IN) - mode for future extension. (Not used
+ currently).
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+
+ NOTES
+ The processed low-watermark denotes all LCRs at or below this position
+ have been processed. After successfully attaching to an XStream
+ outbound server, a local copy of the processed low-watermark is
+ maintained at the client. Periodically, this watermark is sent to the
+ server so that archived logs containing already processed transactions
+ can be purged.
+
+ The following API is used to update the local copy of the processed
+ low-watermark. It can be called anytime between OCIXStreamOutAttach
+ and OCIXStreamOutDetach calls. Clients, using the callback mechanism
+ to stream LCRs from the server, can invoke this API while
+ in the callback functions.
+*/
+
+sword OCIXStreamOutProcessedLWMSet (OCISvcCtx *svchp, OCIError *errhp,
+ ub1 *processed_low_position,
+ ub2 processed_low_position_len,
+ ub4 mode);
+
+
+/*-------------------- OCICallbackXStreamOutLCRProcess ----------------------*/
+/*
+ NAME
+ OCICallbackXStreamOutLCRProcess - Callback to process each LCR received
+ DESCRIPTION
+ This callback is invoked during OCIXStreamOutLCRCallbackReceive
+ to process each LCR received from the outbound server.
+ PARAMETERS
+ usrctxp (IN/OUT) - Ptr to the user context.
+ lcrp (IN) - Pointer to the LCR just received.
+ lcrtyp (IN) - LCR type (OCI_LCR_XROW / OCI_LCR_XDDL)
+ flag (IN) - If OCI_XSTREAM_MORE_ROW_DATA is set,
+ this means the current LCR has more
+ chunk data.
+ RETURNS
+ This callback function must return OCI_CONTINUE to continue processing
+ OCIXStreamOutLCRCallbackReceive call. Any return code other than
+ OCI_CONTINUE signals that the client wants to terminate
+ OCIXStreamOutLCRCallbackReceive immediately.
+*/
+typedef sb4 (*OCICallbackXStreamOutLCRProcess) (void *usrctxp, void *lcrp,
+ ub1 lcrtyp, oraub8 flag);
+
+
+/*-------------------- OCICallbackXStreamOutChunkProcess --------------------*/
+/*
+ NAME
+ OCICallbackXStreamOutChunkProcess - Callback to process each chunk
+ DESCRIPTION
+ This callback is invoked during OCIXStreamOutLCRCallbackReceive
+ to process each chunk in an LCR.
+ PARAMETERS
+ usrctxp (IN/OUT) - Ptr to the user context.
+ column_name (IN) - Column name for the current chunk.
+ column_name_len (IN) - Length of column name.
+ column_dty (IN) - Chunk data type (SQLT_CHR or SQLT_BIN).
+ column_flag (IN) - LCR column flags. Possible bit values are
+ OCI_LCR_COLUMN_* flags listed above.
+ column_csid (IN) - Column character set id. Relevant only if
+ the column is an XMLType column (i.e.,
+ column_flag has OCI_LCR_COLUMN_XML_DATA bit set).
+ chunk_bytes (IN) - Chunk data length in bytes.
+ chunk_data (IN) - Chunk data buffer.
+ flag (IN) - If OCI_XSTREAM_MORE_ROW_DATA is set, this means
+ the current LCR has more chunks.
+ RETURNS
+ This callback function must return OCI_CONTINUE to continue processing
+ OCIXStreamOutLCRCallbackReceive call. Any return code other than
+ OCI_CONTINUE signals that the client wants to terminate
+ OCIXStreamOutLCRCallbackReceive immediately.
+*/
+typedef sb4 (*OCICallbackXStreamOutChunkProcess)
+ (void *usrctxp, oratext *column_name, ub2 column_name_len,
+ ub2 column_dty, oraub8 column_flag, ub2 column_csid,
+ ub4 chunk_bytes, ub1 *chunk_data, oraub8 flag);
+
+/*-------------------- OCIXStreamOutLCRCallbackReceive ----------------------*/
+/*
+ NAME
+ OCIXStreamOutLCRCallbackReceive - OCI Receive LCR stream using Callbacks
+ DESCRIPTION
+ This API is used to get the LCR stream from the outbound server using
+ callbacks to gain better performance. The user must supply a callback
+ function to be invoked for each LCR received. If some row changes
+ in the stream may contain LOB/LONG/XMLType columns then the data for
+ those columns are returned to the user in chunks. To receive those row
+ changes, the user must provide a second callback to be invoked to
+ process each chunk data.
+
+ If there is an LCR available in the stream, the processlcr_cb function
+ is invoked immediately. After the processlcr_cb function exits, if the
+ current LCR contains additional chunks then the processchunk_cb function
+ is invoked for each chunk belonging to that LCR.
+
+ If there is no LCR in the stream when the idle timeout expires (see
+ OCI_ATTR_XSTREAM_IDLE_TIMEOUT), this call returns a null LCR with
+ OCI_SUCCESS code.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle for error reporting
+ processlcr_cb (IN) - Client callback function for each LCR.
+ processchunk_cb (IN) - Client callback function for each
+ chunk.
+ usrctxp (IN) - Client context. (Optional)
+ fetch_low_position (OUT)- Fetch low watermark. (Optional)
+ fetch_low_position_len (OUT)- Fetch low watermark length.
+ mode (IN) - mode for future extension. (Not used
+ currently).
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ - The fetch low watermark is used to indicate all transactions
+ with commit position below this have been received by the XStream
+ outbound server.
+
+ - If the LCR contains non-chunked column(s), the duration of that LCR is
+ limited to the processlcr_cb function. If the LCR contains some
+ chunk data then the duration of the LCR is extended until all the
+ chunks have been processed (that is, when the flag passing to
+ processchunk_cb function does not have OCI_XSTREAM_MORE_ROW_DATA flag
+ set). If the user wants to access the LCR data at a later time, a
+ copy of the LCR must be made. The client callback should not modify
+ or free the LCR passing to the callback.
+
+ If the OCIXSTREAM_OUT_ATTACH_APP_FREE_LCR mode is passed to
+ OCIXStreamOutAttach call then the application is in charge of calling
+ OCILCRFree to free each LCR. Note, this mode does not apply to the
+ chunk data associated with each LCR. Each chunk data is freed
+ immediately after each OCIXStreamOutChunkReceive call.
+
+ - The given usrctxp is passed to both callbacks.
+
+ - An ACK interval is the interval in seconds which the outbound
+ server receives the processed LWM or the inbound server sends
+ the processed LWM. The default ACK interval is 30 seconds. This
+ value can be changed by setting the OCI_ATTR_XSTREAM_ACK_INTERVAL
+ attribute using OCIAttrSet API. This attribute is checked only
+ during the Attach call; thus, it must be set before invoking this API.
+
+ - The idle timeout is the interval in seconds after which the current
+ call will terminate if there is no LCR in the stream. The default
+ idle timeout is one second. This value can be changed by setting the
+ OCI_ATTR_XSTREAM_IDLE_TIMEOUT attribute using OCIAttrSet API. This
+ attribute is checked only during the Attach call; thus, it must be
+ set before invoking this API.
+
+ - The outbound server ends each call at the transaction boundary
+ after an ACK interval has elapsed since the start of the call
+ or when the idle timeout expires. This API returns the fetch
+ low watermark at the end of each call.
+*/
+sword OCIXStreamOutLCRCallbackReceive(
+ OCISvcCtx *svchp, OCIError *errhp,
+ OCICallbackXStreamOutLCRProcess processlcr_cb,
+ OCICallbackXStreamOutChunkProcess processchunk_cb, void *usrctxp,
+ ub1 *fetch_low_position, ub2 *fetch_low_position_len, ub4 mode);
+
+/*---------------------- OCIXStreamOutLCRReceive -------------------------*/
+/*
+ NAME
+ OCIXStreamOutLCRReceive - Receive LCR without using callback
+ DESCRIPTION
+ This API is used to receive an LCR from an outbound stream. If there
+ is an LCR available, this API immediately returns that LCR.
+ When there is no LCR available in the stream, this call returns a
+ null LCR after the idle timeout (see OCI_ATTR_XSTREAM_IDLE_TIMEOUT)
+ has expired.
+
+ The client must not modify the LCR received from the outbound server.
+ The duration of each LCR is until the next OCIXStreamOutLCRReceive call.
+ If the OCIXSTREAM_OUT_ATTACH_APP_FREE_LCR mode is passed to
+ OCIXStreamOutAttach call then the application is in charge of calling
+ OCILCRFree to free each LCR. Note, this mode does not apply to the
+ chunk data associated with each LCR. Each chunk data is freed
+ immediately after each OCIXStreamOutChunkReceive call.
+
+ To avoid network round trip for every OCIXStreamOutLCRReceive call,
+ the connection is tied to this call to let the server fill up
+ the network buffer with LCRs so subsequent calls can quickly receive
+ the LCRs from the network. The server ends each call at the
+ transaction boundary after an ACK interval has elapsed since the start
+ of the call or when the idle timeout expires. See
+ OCI_ATTR_XSTREAM_ACK_INTERVAL & OCI_ATTR_XSTREAM_IDLE_TIMEOUT
+ attributes.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle for error reporting
+ lcrp (OUT) - Pointer to the LCR received from the
+ stream.
+ lcrtype (OUT) - LCR type (OCI_LCR_XROW / OCI_LCR_XDDL)
+ flag (OUT) - If OCI_XSTREAM_MORE_ROW_DATA is set,
+ it means the current LCR has more
+ chunk data.
+ fetch_low_position (OUT)- Fetch low watermark. (Optional)
+ fetch_low_position_len (OUT)- Fetch low watermark length.
+ mode (IN) - mode for future extension. (Not used
+ currently).
+ RETURNS
+ - OCI_STILL_EXECUTING means the current call is still in progress. The
+ connection associated with the specified service context handle is
+ still tied to this call for streaming the LCRs from the server. An
+ error is returned if the user attempts to use the same connection to
+ execute any OCI calls that require database round trip, for example,
+ OCIStmtExecute, OCIStmtFetch, OCILobRead, etc. OCILcr* calls are
+ local calls; thus, they are valid while the stream is in progress.
+ - OCI_SUCCESS means the current call is completed. User is free to
+ execute OCIStmt*, OCILob*, etc. from the same service context.
+ - OCI_ERROR means the current call encounters some errors. Use
+ OCIErrorGet to obtain information about the error.
+
+ NOTES
+ This call always returns a null LCR when the return code is OCI_SUCCESS.
+ In addition, it returns the fetch low position to denote the outbound
+ server has received all transactions with commit position lower than or
+ equal to this value.
+
+ The fetch low watermark is used to indicate all transactions
+ with commit position below this have been received by the XStream
+ outbound server.
+*/
+
+sword OCIXStreamOutLCRReceive(
+ OCISvcCtx *svchp, OCIError *errhp,
+ void **lcrp,
+ ub1 *lcrtype,
+ oraub8 *flag,
+ ub1 *fetch_low_position,
+ ub2 *fetch_low_position_len,
+ ub4 mode);
+
+/*-------------------------- OCIXStreamOutChunkReceive ---------------------*/
+/*
+ NAME
+ OCIXStreamOutChunkReceive - Receive Chunk data
+ DESCRIPTION
+ Receives next chunk of LCR data from XStream Outbound server.
+ This API can only be called while OCIXStreamOutLCRReceive call is
+ in progress.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors should be reported
+ column_name (OUT) - Name of column for which data is retrieved.
+ column_name_len (OUT) - Length of column name.
+ column_dty (OUT) - LCR column data type.
+ column_flag (OUT) - LCR column flag. Possible bit values are
+ OCI_LCR_COLUMN_LOB_DATA
+ OCI_LCR_COLUMN_LONG_DATA
+ OCI_LCR_COLUMN_EMPTY_LOB
+ OCI_LCR_COLUMN_LAST_CHUNK
+ OCI_LCR_COLUMN_AL16UTF16
+ OCI_LCR_COLUMN_ENCRYPTED
+ OCI_LCR_COLUMN_NCLOB
+ OCI_LCR_COLUMN_XML_DATA
+ OCI_LCR_COLUMN_XML_DIFF
+ column_csid (OUT) - Column character set id. This is returned only
+ if the column is an XMLType column (i.e.,
+ column_flag has OCI_LCR_COLUMN_XML_DATA bit
+ set).
+ chunk_bytes (OUT) - Number of bytes in output buffer.
+ chunk_data (OUT) - Pointer to the chunk data in the LCR.
+ Client must not de-allocate this pointer.
+ flag (OUT) - If OCI_XSTREAM_MORE_ROW_DATA is set, it means
+ the current LCR has more data coming.
+ mode (IN) - mode for future extension. (Not used currently).
+ RETURNS
+ OCI_SUCCESS - Check colname_len and chunk_bytes to determine the
+ data just read.
+ OCI_ERROR - Error encountered. Execute OCIErrorGet to get information
+ about the error.
+ NOTES
+ - If the return code is OCI_SUCCESS, client should check chunk_bytes to
+ determine the # of bytes read and check column_name to determine
+ which LCR column the data associated with.
+
+ - All the chunks from one LOB/LONG/XMLType column are returned entirely
+ before the chunk value for the next LOB/LONG/XMLType column is
+ returned.
+
+ - The is no fixed ordering on how the LOB/LONG/XMLType columns is
+ returned. Users must check the column name to determine which column.
+ The column_flag will have OCI_LCR_COLUMN_LAST_CHUNK bit set when this
+ function returns the last chunk of each column.
+
+ - This call returns a null column name and null chunk data if it's
+ invoked when the current LCR contains only non-chunked columns.
+
+ - If OCIXStreamOutLCRReceive call returns OCI_XSTREAM_MORE_ROW_DATA flag
+ then the user must iteratively call OCIXStreamOutChunkReceive to
+ retrieve all the chunks belonging to the current row change before
+ calling the next OCIXStreamOutLCRReceive.
+
+*/
+sword OCIXStreamOutChunkReceive(OCISvcCtx *svchp, OCIError *errhp,
+ oratext **column_name, ub2 *column_name_len,
+ ub2 *column_dty, oraub8 *column_flag,
+ ub2 *column_csid, ub4 *chunk_bytes,
+ ub1 **chunk_data, oraub8 *flag, ub4 mode);
+
+/*------------------------- OCIXStreamOutDetach -----------------------------*/
+/*
+ NAME
+ OCIXStreamOutDetach - OCI Detach from XStream Out
+ DESCRIPTION
+ Detaches from the attached XStream outbound server. This call sends the
+ current local processed low-watermark to the server before detaching
+ from the outbound server. The outbound server automatically restarts
+ after this call. This API returns OCI_ERROR if it is invoked while a
+ ReceiveLCR call is in progress.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors should be reported
+ mode (IN) - mode for future extension. (Not used currently).
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ - The processed_low_position is passed to the server so it can update its
+ copy. This value if provided must be greater than or equal to the
+ value maintained in the server; otherwise, an error is returned.
+*/
+sword OCIXStreamOutDetach (OCISvcCtx *svchp, OCIError *errhp, ub4 mode);
+
+/*---------------------------------------------------------------------------
+ XSTREAM IN FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+/*------------------------ OCIXStreamInAttach -------------------------------*/
+/*
+ NAME
+ OCIXStreamInAttach - OCI XStream In Attach
+ DESCRIPTION
+ Attaches to the specified XStream inbound server.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors
+ should be reported
+ server_name (IN) - XStream inbound server name.
+ server_name_len (IN) - Length of server name.
+ source_name (IN) - source name to identify the data src.
+ source_name_len (IN) - Length of source name.
+ last_position (OUT) - Last position received by inbound
+ server. Optional. If specified must
+ pre-allocate OCI_LCR_MAX_POSITION_LEN
+ bytes for return value.
+ last_position_len (OUT) - Length of last_position. Must be
+ non-NULL if last_position is non-NULL.
+ mode (IN) - Mode flags (For future extension.
+ (Not used currently)
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ The last_position parameter is returned to establish the starting point
+ to resume the inbound stream. The client should start sending LCRs with
+ positions greater than the last_position since the inbound server will
+ ignore all LCRs with positions less than or equal to this value.
+*/
+
+sword OCIXStreamInAttach(
+ OCISvcCtx *svchp,
+ OCIError *errhp,
+ oratext *server_name,
+ ub2 server_name_len,
+ oratext *source_name,
+ ub2 source_name_len,
+ ub1 *last_position,
+ ub2 *last_position_len,
+ ub4 mode);
+
+/*--------- Valid modes for OCIXStreamInAttach -------------*/
+/* Restart inbound server regardless if it's in DISABLED or ABORTED state. */
+#define OCIXSTREAM_IN_ATTACH_RESTART_INBOUND (0x00000001)
+
+/*-------------------- OCICallbackXStreamInLCRCreate ------------------------*/
+/*
+ NAME
+ OCICallbackXStreamInLCRCreate - Callback to create an LCR
+ DESCRIPTION
+ This callback is invoked during OCIXStreamInLCRCallbackSend
+ to create each LCR to be sent to the inbound server.
+ PARAMETERS
+ usrctxp (IN/OUT) - Ptr to the user context
+ lcrp (OUT) - Pointer to the LCR to be sent
+ lcrtyp (OUT) - LCR type (OCI_LCR_XROW / OCI_LCR_XDDL)
+ flag (OUT) - If OCI_XSTREAM_MORE_ROW_DATA is set,
+ this means the current LCR has more
+ chunk data.
+ RETURNS
+ This callback function must return OCI_CONTINUE to continue processing
+ OCIXStreamInLCRCallbackSend call. Any return code other than
+ OCI_CONTINUE signals that the client wants to terminate
+ OCIXStreamInLCRCallbackSend immediately.
+*/
+typedef sb4 (*OCICallbackXStreamInLCRCreate)(
+ void *usrctxp,
+ void **lcrp,
+ ub1 *lcrtyp,
+ oraub8 *flag);
+
+/*-------------------- OCICallbackXStreamInChunkCreate --------------------*/
+/*
+ NAME
+ OCICallbackXStreamInChunkCreate - Callback to create each chunk
+ DESCRIPTION
+ This callback is invoked during OCIXStreamInLCRCallbackSend
+ to create each chunk to be sent to the inbound server.
+ PARAMETERS
+ usrctxp (IN/OUT) - Ptr to the user context.
+ column_name (OUT) - Column name for the current chunk.
+ column_name_len (OUT) - Length of column name.
+ column_dty (OUT) - Chunk data type (SQLT_CHR or SQLT_BIN).
+ column_flag (OUT) - LCR column flags. Possible bit values are
+ OCI_LCR_COLUMN_* flags listed above.
+ column_csid (OUT) - Column character set id. Relevant only if
+ the column is an XMLType column (i.e.,
+ column_flag has OCI_LCR_COLUMN_XML_DATA bit
+ set).
+ chunk_bytes (OUT) - Chunk data length in bytes.
+ chunk_data (OUT) - Chunk data buffer.
+ flag (OUT) - If OCI_XSTREAM_MORE_ROW_DATA is set, this means
+ the current LCR has more chunks.
+ RETURNS
+ This callback function must return OCI_CONTINUE to continue processing
+ OCIXStreamInLCRCallbackSend call. Any return code other than
+ OCI_CONTINUE signals that the client wants to terminate
+ OCIXStreamInLCRCallbackSend immediately.
+*/
+typedef sb4 (*OCICallbackXStreamInChunkCreate)(
+ void *usrctxp,
+ oratext **column_name,
+ ub2 *column_name_len,
+ ub2 *column_dty,
+ oraub8 *column_flag,
+ ub2 *column_csid,
+ ub4 *chunk_bytes,
+ ub1 **chunk_data,
+ oraub8 *flag);
+
+/*--------------------- OCIXStreamInLCRCallbackSend ------------------------*/
+/*
+ NAME
+ OCIXStreamInLCRCallbackSend - OCI XStream In Send LCR to Inbound Server
+ DESCRIPTION
+ Sends LCR stream to XStream inbound server using callbacks.
+ The API invokes createlcr_cb function to obtain each LCR to send to the
+ server. If the return flag from the createlcr_cb function has
+ OCI_XSTREAM_MORE_ROW_DATA bit set, then it invokes createchunk_cb
+ procedure to obtain each chunk. It repeatedly calls createchunk_cb
+ function while the flag returned from this callback has
+ OCI_XSTREAM_MORE_ROW_DATA bit set. When this bit is not set, this API
+ cycles back to invoke createlcr_cb function to get the next LCR.
+ This cycle is repeated until the createlcr_cb function returns a null
+ LCR or when an ACK interval has elapsed since the start of the call.
+ See OCI_ATTR_XSTREAM_ACK_INTERVAL attribute.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors
+ should be reported
+ createlcr_cb (IN) - Callback function to be invoked
+ to generate an LCR for streaming.
+ Cannot be null.
+ createchunk_cb (IN) - Callback function to be invoked to
+ create each chunk. Can be null if the
+ user does not need to send any LCR with
+ LOB/LONG/XMLType columns. OCI_ERROR
+ will be returned if this argument is
+ null and the user attempts to send an
+ LCR with additional chunk data.
+ usrctxp (IN) - Client context to pass to both
+ callback functions.
+ mode (IN) - Mode flags (For future extension.
+ Not used currently)
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ None
+*/
+
+sword OCIXStreamInLCRCallbackSend(
+ OCISvcCtx *svchp,
+ OCIError *errhp,
+ OCICallbackXStreamInLCRCreate createlcr_cb,
+ OCICallbackXStreamInChunkCreate createchunk_cb,
+ void *userctxp,
+ ub4 mode);
+
+/*---------------------------- OCIXStreamInLCRSend --------------------------*/
+/*
+ NAME
+ OCIXStreamInLCRSend - OCI XStream In Send LCR to Inbound Server
+ DESCRIPTION
+ Sends LCR stream to XStream inbound server without using callbacks.
+ To avoid a network round trip for every OCIXStreamInLCRSend call,
+ the connection is tied to this call for at least the duration
+ specified by the OCI_ATTR_XSTREAM_ACK_INTERVAL attribute.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors
+ should be reported
+ lcrp (IN) - Pointer to the LCR to send. Cannot
+ be null.
+ lcrtype (IN) - LCR type (OCI_LCR_XROW / OCI_LCR_XDDL)
+ flag (IN) - If OCI_XSTREAM_MORE_ROW_DATA is set,
+ it means the current LCR has more
+ chunk data.
+ mode (IN) - Mode flags (For future extension.
+ Not used currently)
+ RETURNS
+ - OCI_STILL_EXECUTING means the current call is still in progress. The
+ connection associated with the specified service context handle is
+ still tied to this call for streaming the LCRs to the server. An error
+ is returned if the user attempts to use the same connection to
+ execute any OCI calls that require database round trip, for example,
+ OCIStmtExecute, OCIStmtFetch, OCILobRead, etc. OCILcr* calls are
+ local calls; thus, they are valid while this call is in progress.
+ - OCI_SUCCESS means the current call is completed. User is free to
+ execute OCIStmt*, OCILob*, etc. from the same service context.
+ - OCI_ERROR means this call encounters some errors. Use OCIErrorGet to
+ obtain information about the error.
+*/
+sword OCIXStreamInLCRSend(
+ OCISvcCtx *svchp,
+ OCIError *errhp,
+ void *lcrp,
+ ub1 lcrtype,
+ oraub8 flag,
+ ub4 mode);
+
+/*----------------------------- OCIXStreamInChunkSend -----------------------*/
+/*
+ NAME
+ OCIXStreamInChunkSend - Send Chunk
+ DESCRIPTION
+ Sends the given chunk of column data to XStream Inbound server.
+ This chunk is associated with the LCR that is sent by the
+ most recent OCIXStreamInLCRSend call prior to this call.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors should be reported
+ column_name (IN) - Name of column for which data is sent.
+ Column names must be canonicalized and must
+ follow Oracle naming conventions.
+ column_name_len (IN) - Length of column name.
+ column_dty (IN) - LCR column data type (must be SQLT_CHR or
+ SQLT_BIN).
+ column_flag (IN) - LCR column flags. Possible bit values are
+ OCI_LCR_COLUMN_LOB_DATA
+ OCI_LCR_COLUMN_LONG_DATA
+ OCI_LCR_COLUMN_EMPTY_LOB
+ OCI_LCR_COLUMN_LAST_CHUNK
+ OCI_LCR_COLUMN_AL16UTF16
+ OCI_LCR_COLUMN_ENCRYPTED
+ OCI_LCR_COLUMN_NCLOB
+ OCI_LCR_COLUMN_XML_DATA
+ OCI_LCR_COLUMN_XML_DIFF
+ column_csid (IN) - Column character set id. This is required only
+ if the column is an XMLType column (i.e.,
+ column_flag has OCI_LCR_COLUMN_XML_DATA bit set).
+ chunk_bytes (IN) - Chunk data length in bytes.
+ chunk_data (IN) - Chunk data buffer.
+ flag (IN) - If OCI_XSTREAM_MORE_ROW_DATA is set, it means
+ the current LCR has more data coming.
+ mode (IN) - mode for future extension. (Not used currently).
+RETURNS
+ OCI_SUCCESS - Successful call.
+ OCI_ERROR - Error encountered. Execute OCIErrorGet to get information
+ about the error.
+NOTES
+ - This function must be called while OCIXStreamInLCRSend is in progress.
+
+ - This function is valid only if the associated LCR's cmd type is
+ INSERT, UPDATE or LOB_WRITE. It can be invoked multiple times for the
+ same LCR.
+
+ - This API is not valid for LOB_ERASE and LOB_TRIM LCRs.
+
+ - The chunk values for different columns can not be interleaved. If a
+ column contains multiple chunks, this procedure must be called
+ consecutively using the same column name before proceeding to a new column.
+ The ordering in which the LOB/LONG/XMLType column values are set is
+ irrelevant.
+
+ - The OCI_LCR_COLUMN_LAST_CHUNK must be specified for the last chunk of
+ each column.
+
+ - Only one column can be specified for LOB_WRITE operation.
+
+ - For NCLOB or varying width CLOB, the input buffer must be in
+ AL16UTF16 format.
+
+ - For INSERT operation, each LOB/LONG/XMLType column, with value set using
+ OCIXStreamInChunkSend, must be included in the current LCR's NEW
+ column list. The value of that LOB/LONG/XMLType column must be set to
+ null and must have OCI_LCR_COLUMN_EMPTY_LOB flag defined.
+
+*/
+sword OCIXStreamInChunkSend (OCISvcCtx *svchp, OCIError *errhp,
+ oratext *column_name, ub2 column_name_len,
+ ub2 column_dty, oraub8 column_flag,
+ ub2 column_csid, ub4 chunk_bytes,
+ ub1 *chunk_data, oraub8 flag, ub4 mode);
+
+/*--------------------- OCIXStreamInDetach ----------------------------*/
+/*
+ NAME
+ OCIXStreamInDetach - OCI XStream In Detach from Inbound Server
+ DESCRIPTION
+ Detaches from XStream inbound server and returns the inbound server's
+ processed low-watermark.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors
+ should be reported
+ processed_low_position (OUT) - Inbound server's processed low
+ position. Must pre-allocate
+ OCI_LCR_MAX_POSITION_LEN bytes for
+ output buffer.
+ processed_low_position_len(OUT)- Processed_low_position length.
+ mode (IN) - Mode flags (For future extension.
+ Not used currently)
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ None
+*/
+sword OCIXStreamInDetach(
+ OCISvcCtx *svchp,
+ OCIError *errhp,
+ ub1 *processed_low_position,
+ ub2 *processed_low_position_len,
+ ub4 mode);
+
+/*--------- Valid modes for OCIXStreamInDetach -------------*/
+/* Restart inbound server when calling detach. */
+#define OCIXSTREAM_IN_DETACH_RESTART_INBOUND (0x00000001)
+
+/*--------------------- OCIXStreamInProcessedLWMGet -------------------------*/
+/*
+ NAME
+ OCIXStreamInProcessedLWMGet - OCI XStream In Get LowWatermark
+ DESCRIPTION
+ Returns XStream inbound server's processed low watermark
+ cached at the client.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors
+ should be reported
+ processed_low_position (OUT) - Inbound server's cached processed
+ low position. Must pre-
+ allocate OCI_LCR_MAX_POSITION_LEN
+ bytes for output buffer.
+ processed_low_position_len (OUT) - Processed_low_position length.
+ mode (IN) - Mode flags (For future extension.
+ Not used currently)
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ None
+*/
+sword OCIXStreamInProcessedLWMGet(
+ OCISvcCtx *svchp,
+ OCIError *errhp,
+ ub1 *processed_low_position,
+ ub2 *processed_low_position_len,
+ ub4 mode);
+
+/*-------------------------- OCIXStreamInFlush ------------------------------*/
+/*
+ NAME
+ OCIXStreamInFlush - OCI XStream In Flush network
+ DESCRIPTION
+ Flushes network and terminates any in-progress OCIXStreamInLCRSend or
+ OCIXStreamInLCRCallbackSend call associated with the given service handle.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors
+ should be reported
+ mode (IN) - Mode flags (see below)
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ Each call will incur a database round trip to get the server's processed
+ low-watermark, which the user can retrieve afterward using
+ OCIXStreamInProcessedLWMGet API. This API should be called only when
+ there is no LCR to send to the server and the client wants to know the
+ progress of the attached inbound server.
+
+ This call returns OCI_ERROR if it is invoked from the callback functions
+ of OCIXStreamInLCRCallbackSend API.
+
+ Client must have attached to an XStream inbound server prior to calling
+ this API.
+
+ Valid Mode flags:
+ - OCIXSTREAM_IN_FLUSH_WAIT_FOR_COMPLETE : flush network and wait for all
+ complete and rollback transactions sent to the inbound server to complete
+ before returning control to the client.
+
+*/
+sword OCIXStreamInFlush(
+ OCISvcCtx *svchp,
+ OCIError *errhp,
+ ub4 mode);
+
+
+/*-------------------------- OCIXStreamInCommit -----------------------------*/
+/*
+ NAME
+ OCIXStreamInCommit - OCI XStream In Commit
+ DESCRIPTION
+ Commits current transaction
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle to which errors
+ should be reported
+ lcrp (IN) - Pointer to the LCR to send. Must
+ be a commit LCR.
+ mode (IN) - Mode flags (For future extension.
+ Not used currently)
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ The position of the input LCR must be higher than
+ DBA_XSTREAM_INBOUND_PROGRESS.APPLIED_HIGH_POSITION and the LCR's source
+ database must match DBA_APPLY_PROGRESS.SOURCE_DATABASE of the attached
+ inbound server.
+
+ Upon receiving this LCR, the inbound server will check if there is any
+ unapplied complete or rollback transaction remaining. If none is found
+ it inserts a row to the apply progress table based on the input LCR and
+ commit the current transaction; otherwise, it returns an error.
+
+ If there is any pre-commit handler defined, it will be executed when
+ this commit LCR is executed.
+*/
+sword OCIXStreamInCommit(
+ OCISvcCtx *svchp,
+ OCIError *errhp,
+ void *lcrp,
+ ub4 mode);
+
+/*-------------------------- OCIXStreamInErrorGet ---------------------------*/
+/*
+ NAME
+ OCIXStreamInErrorGet - OCI XStream In Get Error Info
+ DESCRIPTION
+ Returns the first error encountered by the inbound server since the
+ Attach call.
+ PARAMETERS
+ svchp (IN/OUT) - OCI service handle
+ errhp (IN/OUT) - Error Handle
+ errcodep (OUT) - Error code
+ msgbuf (IN/OUT) - Pre-allocated message buffer
+ msg_bufsize (IN) - Message buffer size
+ msg_len (OUT) - Length of returned error message
+ txn_id (IN/OUT) - Pre-allocated txn id buffer
+ txn_id_bufsize (IN) - Txn_id buffer size
+ txn_id_len (OUT) - Length of returned txn id
+ RETURNS
+ OCI_SUCCESS or OCI_ERROR.
+ NOTES
+ The maximum size for the returned txn id is OCI_LCR_MAX_TXID_LEN. If the
+ allocated buffer for txn_id is too small, this routine returns ORA-29258.
+ The maximum size for the returned error msg is OCI_ERROR_MAXMSG_SIZE. If
+ the allocated size for msgbuf is too small, the returned message will be
+ truncated.
+*/
+sword OCIXStreamInErrorGet(
+ OCISvcCtx *svchp,
+ OCIError *errhp,
+ sb4 *errcodep,
+ oratext *msgbuf,
+ ub2 msg_bufsize,
+ ub2 *msg_len,
+ oratext *txn_id,
+ ub2 txn_id_bufsize,
+ ub2 *txn_id_len);
+
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCIXStreamOutSessionSet - OCI XStream Out Session Set attribute
+DESCRIPTION
+ Sets session attributes for XStream Out
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ attribute_name (IN) - Attribute name
+ attribute_name_len (IN) - Attribute name length
+ attribute_value (IN) - Attribute value
+ attribute_value_len (IN) - Attribute value length
+ attribute_dty (IN) - Attribute dty
+ mode (IN) - mode
+RETURNS
+ OCI_SUCCESS if successful, OCI_ERROR otherwise
+NOTES
+------------------------------------------------------------------------------=
+*/
+sword OCIXStreamOutSessionSet(OCISvcCtx *svchp,
+ OCIError *errhp,
+ oratext *attribute_name,
+ ub2 attribute_name_len,
+ void *attribute_value,
+ ub2 attribute_value_len,
+ ub2 attribute_dty,
+ ub4 mode);
+
+/*
+------------------------------------------------------------------------------=
+NAME
+ OCIXStreamInSessionSet - OCI XStream In Session Set attribute
+DESCRIPTION
+ Sets session attributes for XStream In
+PARAMETERS
+ svchp (IN) - OCI service context
+ errhp (IN) - OCI Error Handle
+ attribute_name (IN) - Attribute name
+ attribute_name_len (IN) - Attribute name length
+ attribute_value (IN) - Attribute value
+ attribute_value_len (IN) - Attribute value length
+ attribute_dty (IN) - Attribute dty
+ mode (IN) - mode
+RETURNS
+ OCI_SUCCESS if successful, OCI_ERROR otherwise
+NOTES
+------------------------------------------------------------------------------=
+*/
+sword OCIXStreamInSessionSet(OCISvcCtx *svchp,
+ OCIError *errhp,
+ oratext *attribute_name,
+ ub2 attribute_name_len,
+ void *attribute_value,
+ ub2 attribute_value_len,
+ ub2 attribute_dty,
+ ub4 mode);
+
+/*---------------------------------------------------------------------------
+ INTERNAL FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* OCIXSTREAM_ORACLE */
--- /dev/null
+/*
+ *
+ */
+
+/* Copyright (c) 1998, 2010, Oracle and/or its affiliates.
+All rights reserved. */
+
+/*
+ NAME
+ odci.h - Oracle Data Cartridge Interface definitions
+
+ DESCRIPTION
+ This file contains Oracle Data Cartridge Interface definitions. These
+ include the ODCI Types and Constants.
+
+ RELATED DOCUMENTS
+
+ INSPECTION STATUS
+ Inspection date:
+ Inspection status:
+ Estimated increasing cost defects per page:
+ Rule sets:
+
+ ACCEPTANCE REVIEW STATUS
+ Review date:
+ Review status:
+ Reviewers:
+
+ PUBLIC FUNCTION(S)
+ None.
+
+ PRIVATE FUNCTION(S)
+ None.
+
+ EXAMPLES
+
+ NOTES
+ - The constants defined here are replica of the constants defined
+ in ODCIConst Package defined as part of catodci.sql. If you change
+ these do make the similar change in catodci.sql.
+
+ MODIFIED (MM/DD/YY)
+ yhu 02/03/10 - add a new flag ODCI_INDEX_UGI
+ spsundar 09/13/07 -
+ yhu 06/02/06 - add callproperty for statistics
+ yhu 05/22/06 - add ODCI_NODATA to speed rebuild empty index or ind.
+ part.
+ srirkris 05/09/06 - change ODCIOrderByInfo_ind
+ srirkris 02/06/06 - add definitions for CDI query.
+ spsundar 02/17/06 - add fields/types for system managed domain idx
+ yhu 02/08/06 - add RenameCol Na d RenameTopADT
+ yhu 03/11/05 - add flags for rename column and rename table
+ spsundar 11/28/05 - add fields/types for composite domain idx
+ yhu 12/06/05 - mapping table for local text indexes
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ ayoaz 04/21/03 - add CursorNum to ODCIEnv
+ abrumm 12/30/02 - Bug #2223225: add define for
+ ODCI_ARG_DESC_LIST_MAXSIZE
+ ayoaz 10/14/02 - Add Cardinality to ODCIArgDesc
+ ayoaz 09/11/02 - add ODCIQueryInfo to ODCIIndexCtx
+ yhu 09/19/02 - add ODCI_DEBUGGING_ON for ODCIEnv.EnvFlags
+ hsbedi 10/10/02 - add object number into ODCIExtTableInfo
+ ayoaz 08/30/02 - add ODCITable2 types
+ tchorma 07/29/02 - Add ODCIFuncCallInfo type for WITH COLUMN CONTEXT
+ hsbedi 06/29/02 - External table populate
+ yhu 07/20/01 - add parallel degree in ODCIIndexInfo.
+ abrumm 02/20/01 - ODCIExtTableInfo: add AccessParmBlob attribute
+ abrumm 01/18/01 - ODCIExtTableInfo: add default directory
+ spsundar 08/24/00 - Update attrbiute positions
+ abrumm 08/04/00 - external tables changes: ODCIExtTableInfo, constants
+ tchorma 09/11/00 - Add return code ODCI_FATAL
+ tchorma 08/08/00 - Add Update Block References Option for Alter Index
+ ayoaz 08/01/00 - Add ODCI_AGGREGATE_REUSE_CTX
+ spsundar 06/19/00 - add ODCIEnv type
+ abrumm 06/27/00 - add defines for ODCIExtTable flags
+ abrumm 06/04/00 - external tables: ODCIExtTableInfo change; add ODCIEnv
+ ddas 04/28/00 - extensible optimizer enhancements for 8.2
+ yhu 06/05/00 - add a bit in IndexInfoFlags for trans. tblspc
+ yhu 04/10/00 - add ODCIPartInfo & remove ODCIIndexPartList
+ abrumm 03/29/00 - external table support
+ spsundar 02/14/00 - update odci definitions for 8.2
+ nagarwal 03/07/99 - bug# 838308 - set estimate_stats=1
+ rmurthy 11/09/98 - add blocking flag
+ ddas 10/31/98 - add ODCI_QUERY_SORT_ASC and ODCI_QUERY_SORT_DESC
+ ddas 05/26/98 - fix ODCIPredInfo flag bits
+ rmurthy 06/03/98 - add macro for RegularCall
+ spsundar 05/08/98 - add constants related to ODCIIndexAlter options
+ rmurthy 04/30/98 - remove include s.h
+ rmurthy 04/20/98 - name fixes
+ rmurthy 04/13/98 - add C mappings for odci types
+ alsrivas 04/10/98 - adding defines for ODCI_INDEX1
+ jsriniva 04/04/98 - Creation
+
+*/
+
+#ifndef OCI_ORACLE
+# include <oci.h>
+#endif
+#ifndef ODCI_ORACLE
+# define ODCI_ORACLE
+
+/*---------------------------------------------------------------------------*/
+/* SHORT NAMES SUPPORT SECTION */
+/*---------------------------------------------------------------------------*/
+
+#ifdef SLSHORTNAME
+
+/* The following are short names that are only supported on IBM mainframes
+ * with the SLSHORTNAME defined.
+ * With this all subsequent long names will actually be substituted with
+ * the short names here
+ */
+
+#define ODCIColInfo_ref odcicir
+#define ODCIColInfoList odcicil
+#define ODCIColInfoList2 odcicil2
+#define ODCIIndexInfo_ref odciiir
+#define ODCIPredInfo_ref odcipir
+#define ODCIRidList odcirl
+#define ODCIIndexCtx_ref odciicr
+#define ODCIObject_ref odcior
+#define ODCIObjectList odciol
+#define ODCIQueryInfo_ref odciqir
+#define ODCIFuncInfo_ref odcifir
+#define ODCICost_ref odcicr
+#define ODCIArgDesc_ref odciadr
+#define ODCIArgDescList odciadl
+#define ODCIStatsOptions_ref odcisor
+#define ODCIColInfo odcici
+#define ODCIColInfo_ind odcicii
+#define ODCIIndexInfo odciii
+#define ODCIIndexInfo_ind odciiii
+#define ODCIPredInfo odcipi
+#define ODCIPredInfo_ind odcipii
+#define ODCIIndexCtx odciic
+#define ODCIIndexCtx_ind odciici
+#define ODCIObject odcio
+#define ODCIObject_ind odcioi
+#define ODCIQueryInfo odciqi
+#define ODCIQueryInfo_ind odciqii
+#define ODCIFuncInfo odcifi
+#define ODCIFuncInfo_infd odcifii
+#define ODCICost odcic
+#define ODCICost_ind odcici
+#define ODCIArgDesc odciad
+#define ODCIArgDesc_ind odciadi
+#define ODCIStatsOptions odciso
+#define ODCIStatsOptions_ind odcisoi
+#define ODCIPartInfo odcipti
+#define ODCIPartInfo_ind odciptii
+#define ODCIPartInfo_ref odciptir
+#define ODCIExtTableInfo odcixt
+#define ODCIExtTableInfo_ind odcixti
+#define ODCIExtTableInfo_ref odcixtr
+#define ODCIExtTableQCInfo odcixq
+#define ODCIExtTableQCInfo_ind odcixqi
+#define ODCIExtTableQCInfo_ref odcixqr
+#define ODCIFuncCallInfo odcifc
+#define ODCIFuncCall_ind odcifci
+#define ODCIFuncCall_ref odcifcr
+#define ODCIColValList odcicvl
+#define ODCIColArrayList odcical
+#define ODCIFilterInfoList odciflil
+#define ODCIOrderByInfoList odciobil
+#define ODCIFilterInfo_ref odciflir
+#define ODCIOrderByInfo_ref odciobir
+#define ODCICompQueryInfo_ref odcicqir
+#define ODCIFilterInfo odcifli
+#define ODCIOrderByInfo odciobi
+#define ODCICompQueryInfo odcicqi
+#define ODCIFilterInfo_ind odciflii
+#define ODCIOrderByInfo_ind odciobii
+#define ODCICompQueryInfo_ind odcicqii
+
+#endif /* SLSHORTNAME */
+
+/*---------------------------------------------------------------------------
+ PUBLIC TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+/* Constants for Return Status */
+#define ODCI_SUCCESS 0
+#define ODCI_ERROR 1
+#define ODCI_WARNING 2
+#define ODCI_ERROR_CONTINUE 3
+#define ODCI_FATAL 4
+
+/* Constants for ODCIPredInfo.Flags */
+#define ODCI_PRED_EXACT_MATCH 0x0001
+#define ODCI_PRED_PREFIX_MATCH 0x0002
+#define ODCI_PRED_INCLUDE_START 0x0004
+#define ODCI_PRED_INCLUDE_STOP 0x0008
+#define ODCI_PRED_OBJECT_FUNC 0x0010
+#define ODCI_PRED_OBJECT_PKG 0x0020
+#define ODCI_PRED_OBJECT_TYPE 0x0040
+#define ODCI_PRED_MULTI_TABLE 0x0080
+#define ODCI_PRED_NOT_EQUAL 0x0100
+
+/* Constants for QueryInfo.Flags */
+#define ODCI_QUERY_FIRST_ROWS 0x01
+#define ODCI_QUERY_ALL_ROWS 0x02
+#define ODCI_QUERY_SORT_ASC 0x04
+#define ODCI_QUERY_SORT_DESC 0x08
+#define ODCI_QUERY_BLOCKING 0x10
+
+/* Constants for ScnFlg(Func /w Index Context) */
+#define ODCI_CLEANUP_CALL 1
+#define ODCI_REGULAR_CALL 2
+
+/* Constants for ODCIFuncInfo.Flags */
+#define ODCI_OBJECT_FUNC 0x01
+#define ODCI_OBJECT_PKG 0x02
+#define ODCI_OBJECT_TYPE 0x04
+
+/* Constants for ODCIArgDesc.ArgType */
+#define ODCI_ARG_OTHER 1
+#define ODCI_ARG_COL 2 /* column */
+#define ODCI_ARG_LIT 3 /* literal */
+#define ODCI_ARG_ATTR 4 /* object attribute */
+#define ODCI_ARG_NULL 5
+#define ODCI_ARG_CURSOR 6
+
+/* Maximum size of ODCIArgDescList array */
+#define ODCI_ARG_DESC_LIST_MAXSIZE 32767
+
+/* Constants for ODCIStatsOptions.Options */
+#define ODCI_PERCENT_OPTION 1
+#define ODCI_ROW_OPTION 2
+
+/* Constants for ODCIStatsOptions.Flags */
+#define ODCI_ESTIMATE_STATS 0x01
+#define ODCI_COMPUTE_STATS 0x02
+#define ODCI_VALIDATE 0x04
+
+/* Constants for ODCIIndexAlter parameter alter_option */
+#define ODCI_ALTIDX_NONE 0
+#define ODCI_ALTIDX_RENAME 1
+#define ODCI_ALTIDX_REBUILD 2
+#define ODCI_ALTIDX_REBUILD_ONL 3
+#define ODCI_ALTIDX_MODIFY_COL 4
+#define ODCI_ALTIDX_UPDATE_BLOCK_REFS 5
+#define ODCI_ALTIDX_RENAME_COL 6
+#define ODCI_ALTIDX_RENAME_TAB 7
+#define ODCI_ALTIDX_MIGRATE 8
+
+/* Constants for ODCIIndexInfo.IndexInfoFlags */
+#define ODCI_INDEX_LOCAL 0x0001
+#define ODCI_INDEX_RANGE_PARTN 0x0002
+#define ODCI_INDEX_HASH_PARTN 0x0004
+#define ODCI_INDEX_ONLINE 0x0008
+#define ODCI_INDEX_PARALLEL 0x0010
+#define ODCI_INDEX_UNUSABLE 0x0020
+#define ODCI_INDEX_ONIOT 0x0040
+#define ODCI_INDEX_TRANS_TBLSPC 0x0080
+#define ODCI_INDEX_FUNCTION_IDX 0x0100
+#define ODCI_INDEX_LIST_PARTN 0x0200
+#define ODCI_INDEX_UGI 0x0400
+
+/* Constants for ODCIIndexInfo.IndexParaDegree */
+#define ODCI_INDEX_DEFAULT_DEGREE 32767
+
+/* Constants for ODCIEnv.EnvFlags */
+#define ODCI_DEBUGGING_ON 0x01
+#define ODCI_NODATA 0x02
+
+/* Constants for ODCIEnv.CallProperty */
+#define ODCI_CALL_NONE 0
+#define ODCI_CALL_FIRST 1
+#define ODCI_CALL_INTERMEDIATE 2
+#define ODCI_CALL_FINAL 3
+#define ODCI_CALL_REBUILD_INDEX 4
+#define ODCI_CALL_REBUILD_PMO 5
+#define ODCI_CALL_STATSGLOBAL 6
+#define ODCI_CALL_STATSGLOBALANDPARTITION 7
+#define ODCI_CALL_STATSPARTITION 8
+
+/* Constants for ODCIExtTableInfo.OpCode */
+#define ODCI_EXTTABLE_INFO_OPCODE_FETCH 1
+#define ODCI_EXTTABLE_INFO_OPCODE_POPULATE 2
+
+/* Constants (bit definitions) for ODCIExtTableInfo.Flag */
+ /* sampling type: row or block */
+#define ODCI_EXTTABLE_INFO_FLAG_SAMPLE 0x00000001
+#define ODCI_EXTTABLE_INFO_FLAG_SAMPLE_BLOCK 0x00000002
+ /* AccessParmClob, AccessParmBlob discriminator */
+#define ODCI_EXTTABLE_INFO_FLAG_ACCESS_PARM_CLOB 0x00000004
+#define ODCI_EXTTABLE_INFO_FLAG_ACCESS_PARM_BLOB 0x00000008
+
+/* Constants for ODCIExtTableInfo.IntraSourceConcurrency */
+#define ODCI_TRUE 1
+#define ODCI_FALSE 0
+
+/* Constants (bit definitions) for ODCIExtTable{Open,Fetch,Populate,Close}
+ * Flag argument.
+ */
+#define ODCI_EXTTABLE_OPEN_FLAGS_QC 0x00000001 /* caller is Query Coord */
+#define ODCI_EXTTABLE_OPEN_FLAGS_SHADOW 0x00000002 /* caller is shadow proc */
+#define ODCI_EXTTABLE_OPEN_FLAGS_SLAVE 0x00000004 /* caller is slave proc */
+
+#define ODCI_EXTTABLE_FETCH_FLAGS_EOS 0x00000001 /* end-of-stream on fetch */
+
+/* Constants for Flags argument to ODCIAggregateTerminate */
+#define ODCI_AGGREGATE_REUSE_CTX 1
+
+/* Constants for ODCIColInfo.Flags */
+#define ODCI_COMP_FILTERBY_COL 0x0001
+#define ODCI_COMP_ORDERBY_COL 0x0002
+#define ODCI_COMP_ORDERDSC_COL 0x0004
+#define ODCI_COMP_UPDATED_COL 0x0008
+#define ODCI_COMP_RENAMED_COL 0x0010
+#define ODCI_COMP_RENAMED_TOPADT 0x0020
+
+/* Constants for ODCIOrderByInfo.ExprType */
+#define ODCI_COLUMN_EXPR 1
+#define ODCI_ANCOP_EXPR 2
+
+/* Constants for ODCIOrderByInfo.SortOrder */
+#define ODCI_SORT_ASC 1
+#define ODCI_SORT_DESC 2
+#define ODCI_NULLS_FIRST 4
+
+/* Constants for ODCIPartInfo.PartOp */
+#define ODCI_ADD_PARTITION 1
+#define ODCI_DROP_PARTITION 2
+
+/*---------------------------------------------------------------------------
+ ODCI TYPES
+ ---------------------------------------------------------------------------*/
+/*
+ * These are C mappings for the OTS types defined in catodci.sql
+ */
+
+typedef OCIRef ODCIColInfo_ref;
+typedef OCIArray ODCIColInfoList;
+typedef OCIArray ODCIColInfoList2;
+typedef OCIRef ODCIIndexInfo_ref;
+typedef OCIRef ODCIPredInfo_ref;
+typedef OCIArray ODCIRidList;
+typedef OCIRef ODCIIndexCtx_ref;
+typedef OCIRef ODCIObject_ref;
+typedef OCIArray ODCIObjectList;
+typedef OCIRef ODCIQueryInfo_ref;
+typedef OCIRef ODCIFuncInfo_ref;
+typedef OCIRef ODCICost_ref;
+typedef OCIRef ODCIArgDesc_ref;
+typedef OCIArray ODCIArgDescList;
+typedef OCIRef ODCIStatsOptions_ref;
+typedef OCIRef ODCIPartInfo_ref;
+typedef OCIRef ODCIEnv_ref;
+typedef OCIRef ODCIExtTableInfo_ref; /* external table support */
+typedef OCIArray ODCIGranuleList; /* external table support */
+typedef OCIRef ODCIExtTableQCInfo_ref; /* external table support */
+typedef OCIRef ODCIFuncCallInfo_ref;
+typedef OCIArray ODCINumberList;
+typedef OCIArray ODCIPartInfoList;
+typedef OCIArray ODCIColValList;
+typedef OCIArray ODCIColArrayList;
+typedef OCIArray ODCIFilterInfoList;
+typedef OCIArray ODCIOrderByInfoList;
+typedef OCIRef ODCIFilterInfo_ref;
+typedef OCIRef ODCIOrderByInfo_ref;
+typedef OCIRef ODCICompQueryInfo_ref;
+
+struct ODCIColInfo
+{
+ OCIString* TableSchema;
+ OCIString* TableName;
+ OCIString* ColName;
+ OCIString* ColTypName;
+ OCIString* ColTypSchema;
+ OCIString* TablePartition;
+ OCINumber ColFlags;
+ OCINumber ColOrderPos;
+ OCINumber TablePartitionIden;
+ OCINumber TablePartitionTotal;
+};
+typedef struct ODCIColInfo ODCIColInfo;
+
+struct ODCIColInfo_ind
+{
+ OCIInd atomic;
+ OCIInd TableSchema;
+ OCIInd TableName;
+ OCIInd ColName;
+ OCIInd ColTypName;
+ OCIInd ColTypSchema;
+ OCIInd TablePartition;
+ OCIInd ColFlags;
+ OCIInd ColOrderPos;
+ OCIInd TablePartitionIden;
+ OCIInd TablePartitionTotal;
+};
+typedef struct ODCIColInfo_ind ODCIColInfo_ind;
+
+struct ODCIFuncCallInfo
+{
+ struct ODCIColInfo ColInfo;
+};
+
+struct ODCIFuncCallInfo_ind
+{
+ struct ODCIColInfo_ind ColInfo;
+};
+
+struct ODCIIndexInfo
+{
+ OCIString* IndexSchema;
+ OCIString* IndexName;
+ ODCIColInfoList* IndexCols;
+ OCIString* IndexPartition;
+ OCINumber IndexInfoFlags;
+ OCINumber IndexParaDegree;
+ OCINumber IndexPartitionIden;
+ OCINumber IndexPartitionTotal;
+};
+typedef struct ODCIIndexInfo ODCIIndexInfo;
+
+struct ODCIIndexInfo_ind
+{
+ OCIInd atomic;
+ OCIInd IndexSchema;
+ OCIInd IndexName;
+ OCIInd IndexCols;
+ OCIInd IndexPartition;
+ OCIInd IndexInfoFlags;
+ OCIInd IndexParaDegree;
+ OCIInd IndexPartitionIden;
+ OCIInd IndexPartitionTotal;
+};
+typedef struct ODCIIndexInfo_ind ODCIIndexInfo_ind;
+
+struct ODCIPredInfo
+{
+ OCIString* ObjectSchema;
+ OCIString* ObjectName;
+ OCIString* MethodName;
+ OCINumber Flags;
+};
+typedef struct ODCIPredInfo ODCIPredInfo;
+
+struct ODCIPredInfo_ind
+{
+ OCIInd atomic;
+ OCIInd ObjectSchema;
+ OCIInd ObjectName;
+ OCIInd MethodName;
+ OCIInd Flags;
+};
+typedef struct ODCIPredInfo_ind ODCIPredInfo_ind;
+
+struct ODCIFilterInfo
+{
+ ODCIColInfo ColInfo;
+ OCINumber Flags;
+ OCIAnyData *strt;
+ OCIAnyData *stop;
+};
+typedef struct ODCIFilterInfo ODCIFilterInfo;
+
+struct ODCIFilterInfo_ind
+{
+ OCIInd atomic;
+ ODCIColInfo_ind ColInfo;
+ OCIInd Flags;
+ OCIInd strt;
+ OCIInd stop;
+};
+typedef struct ODCIFilterInfo_ind ODCIFilterInfo_ind;
+
+
+struct ODCIOrderByInfo
+{
+ OCINumber ExprType;
+ OCIString *ObjectSchema;
+ OCIString *TableName;
+ OCIString *ExprName;
+ OCINumber SortOrder;
+};
+typedef struct ODCIOrderByInfo ODCIOrderByInfo;
+
+struct ODCIOrderByInfo_ind
+{
+ OCIInd atomic;
+ OCIInd ExprType;
+ OCIInd ObjectSchema;
+ OCIInd TableName;
+ OCIInd ExprName;
+ OCIInd SortOrder;
+};
+typedef struct ODCIOrderByInfo_ind ODCIOrderByInfo_ind;
+
+
+struct ODCICompQueryInfo
+{
+ ODCIFilterInfoList *PredInfo;
+ ODCIOrderByInfoList *ObyInfo;
+};
+typedef struct ODCICompQueryInfo ODCICompQueryInfo;
+
+struct ODCICompQueryInfo_ind
+{
+ OCIInd atomic;
+ OCIInd PredInfo;
+ OCIInd ObyInfo;
+};
+typedef struct ODCICompQueryInfo_ind ODCICompQueryInfo_ind;
+
+
+struct ODCIObject
+{
+ OCIString* ObjectSchema;
+ OCIString* ObjectName;
+};
+typedef struct ODCIObject ODCIObject;
+
+struct ODCIObject_ind
+{
+ OCIInd atomic;
+ OCIInd ObjectSchema;
+ OCIInd ObjectName;
+};
+typedef struct ODCIObject_ind ODCIObject_ind;
+
+struct ODCIQueryInfo
+{
+ OCINumber Flags;
+ ODCIObjectList* AncOps;
+ ODCICompQueryInfo CompInfo;
+};
+typedef struct ODCIQueryInfo ODCIQueryInfo;
+
+
+struct ODCIQueryInfo_ind
+{
+ OCIInd atomic;
+ OCIInd Flags;
+ OCIInd AncOps;
+ ODCICompQueryInfo_ind CompInfo;
+};
+typedef struct ODCIQueryInfo_ind ODCIQueryInfo_ind;
+
+struct ODCIIndexCtx
+{
+ struct ODCIIndexInfo IndexInfo;
+ OCIString* Rid;
+ struct ODCIQueryInfo QueryInfo;
+};
+typedef struct ODCIIndexCtx ODCIIndexCtx;
+
+struct ODCIIndexCtx_ind
+{
+ OCIInd atomic;
+ struct ODCIIndexInfo_ind IndexInfo;
+ OCIInd Rid;
+ struct ODCIQueryInfo_ind QueryInfo;
+};
+typedef struct ODCIIndexCtx_ind ODCIIndexCtx_ind;
+
+struct ODCIFuncInfo
+{
+ OCIString* ObjectSchema;
+ OCIString* ObjectName;
+ OCIString* MethodName;
+ OCINumber Flags;
+};
+typedef struct ODCIFuncInfo ODCIFuncInfo;
+
+struct ODCIFuncInfo_ind
+{
+ OCIInd atomic;
+ OCIInd ObjectSchema;
+ OCIInd ObjectName;
+ OCIInd MethodName;
+ OCIInd Flags;
+};
+typedef struct ODCIFuncInfo_ind ODCIFuncInfo_ind;
+
+struct ODCICost
+{
+ OCINumber CPUcost;
+ OCINumber IOcost;
+ OCINumber NetworkCost;
+ OCIString* IndexCostInfo;
+};
+typedef struct ODCICost ODCICost;
+
+struct ODCICost_ind
+{
+ OCIInd atomic;
+ OCIInd CPUcost;
+ OCIInd IOcost;
+ OCIInd NetworkCost;
+ OCIInd IndexCostInfo;
+};
+typedef struct ODCICost_ind ODCICost_ind;
+
+struct ODCIArgDesc
+{
+ OCINumber ArgType;
+ OCIString* TableName;
+ OCIString* TableSchema;
+ OCIString* ColName;
+ OCIString* TablePartitionLower;
+ OCIString* TablePartitionUpper;
+ OCINumber Cardinality;
+};
+typedef struct ODCIArgDesc ODCIArgDesc;
+
+struct ODCIArgDesc_ind
+{
+ OCIInd atomic;
+ OCIInd ArgType;
+ OCIInd TableName;
+ OCIInd TableSchema;
+ OCIInd ColName;
+ OCIInd TablePartitionLower;
+ OCIInd TablePartitionUpper;
+ OCIInd Cardinality;
+};
+typedef struct ODCIArgDesc_ind ODCIArgDesc_ind;
+
+struct ODCIStatsOptions
+{
+ OCINumber Sample;
+ OCINumber Options;
+ OCINumber Flags;
+};
+typedef struct ODCIStatsOptions ODCIStatsOptions;
+
+struct ODCIStatsOptions_ind
+{
+ OCIInd atomic;
+ OCIInd Sample;
+ OCIInd Options;
+ OCIInd Flags;
+};
+typedef struct ODCIStatsOptions_ind ODCIStatsOptions_ind;
+
+struct ODCIEnv
+{
+ OCINumber EnvFlags;
+ OCINumber CallProperty;
+ OCINumber DebugLevel;
+ OCINumber CursorNum;
+};
+typedef struct ODCIEnv ODCIEnv;
+
+struct ODCIEnv_ind
+{
+ OCIInd _atomic;
+ OCIInd EnvFlags;
+ OCIInd CallProperty;
+ OCIInd DebugLevel;
+ OCIInd CursorNum;
+};
+typedef struct ODCIEnv_ind ODCIEnv_ind;
+
+struct ODCIPartInfo
+{
+ OCIString* TablePartition;
+ OCIString* IndexPartition;
+ OCINumber IndexPartitionIden;
+ OCINumber PartOp;
+};
+typedef struct ODCIPartInfo ODCIPartInfo;
+
+struct ODCIPartInfo_ind
+{
+ OCIInd atomic;
+ OCIInd TablePartition;
+ OCIInd IndexPartition;
+ OCIInd IndexPartitionIden;
+ OCIInd PartOp;
+};
+typedef struct ODCIPartInfo_ind ODCIPartInfo_ind;
+
+/*---------- External Tables ----------*/
+struct ODCIExtTableInfo
+{
+ OCIString* TableSchema;
+ OCIString* TableName;
+ ODCIColInfoList* RefCols;
+ OCIClobLocator* AccessParmClob;
+ OCIBlobLocator* AccessParmBlob;
+ ODCIArgDescList* Locations;
+ ODCIArgDescList* Directories;
+ OCIString* DefaultDirectory;
+ OCIString* DriverType;
+ OCINumber OpCode;
+ OCINumber AgentNum;
+ OCINumber GranuleSize;
+ OCINumber Flag;
+ OCINumber SamplePercent;
+ OCINumber MaxDoP;
+ OCIRaw* SharedBuf;
+ OCIString* MTableName;
+ OCIString* MTableSchema;
+ OCINumber TableObjNo;
+};
+typedef struct ODCIExtTableInfo ODCIExtTableInfo;
+
+struct ODCIExtTableInfo_ind
+{
+ OCIInd _atomic;
+ OCIInd TableSchema;
+ OCIInd TableName;
+ OCIInd RefCols;
+ OCIInd AccessParmClob;
+ OCIInd AccessParmBlob;
+ OCIInd Locations;
+ OCIInd Directories;
+ OCIInd DefaultDirectory;
+ OCIInd DriverType;
+ OCIInd OpCode;
+ OCIInd AgentNum;
+ OCIInd GranuleSize;
+ OCIInd Flag;
+ OCIInd SamplePercent;
+ OCIInd MaxDoP;
+ OCIInd SharedBuf;
+ OCIInd MTableName;
+ OCIInd MTableSchema;
+ OCIInd TableObjNo;
+};
+typedef struct ODCIExtTableInfo_ind ODCIExtTableInfo_ind;
+
+struct ODCIExtTableQCInfo
+{
+ OCINumber NumGranules;
+ OCINumber NumLocations;
+ ODCIGranuleList* GranuleInfo;
+ OCINumber IntraSourceConcurrency;
+ OCINumber MaxDoP;
+ OCIRaw* SharedBuf;
+};
+typedef struct ODCIExtTableQCInfo ODCIExtTableQCInfo;
+
+struct ODCIExtTableQCInfo_ind
+{
+ OCIInd _atomic;
+ OCIInd NumGranules;
+ OCIInd NumLocations;
+ OCIInd GranuleInfo;
+ OCIInd IntraSourceConcurrency;
+ OCIInd MaxDoP;
+ OCIInd SharedBuf;
+};
+typedef struct ODCIExtTableQCInfo_ind ODCIExtTableQCInfo_ind;
+
+/*********************************************************/
+/* Table Function Info types (used by ODCITablePrepare) */
+/*********************************************************/
+
+struct ODCITabFuncInfo
+{
+ ODCINumberList* Attrs;
+ OCIType* RetType;
+};
+typedef struct ODCITabFuncInfo ODCITabFuncInfo;
+
+struct ODCITabFuncInfo_ind
+{
+ OCIInd _atomic;
+ OCIInd Attrs;
+ OCIInd RetType;
+};
+typedef struct ODCITabFuncInfo_ind ODCITabFuncInfo_ind;
+
+/*********************************************************************/
+/* Table Function Statistics types (used by ODCIStatsTableFunction) */
+/*********************************************************************/
+
+struct ODCITabFuncStats
+{
+ OCINumber num_rows;
+};
+typedef struct ODCITabFuncStats ODCITabFuncStats;
+
+struct ODCITabFuncStats_ind
+{
+ OCIInd _atomic;
+ OCIInd num_rows;
+};
+typedef struct ODCITabFuncStats_ind ODCITabFuncStats_ind;
+
+/*---------------------------------------------------------------------------
+ PRIVATE TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ PUBLIC FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------
+ PRIVATE FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+#endif /* ODCI_ORACLE */
--- /dev/null
+/*
+ * $Header: oraca.h 24-apr-2003.12:50:59 mkandarp Exp $ oraca.h
+ */
+
+/* Copyright (c) 1985, 2003, Oracle Corporation. All rights reserved. */
+
+/*
+NAME
+ ORACA : Oracle Communications Area.
+FUNCTION
+ Contains no code. Provides supplementary communications to/from
+ Oracle (in addition to standard SQLCA).
+NOTES
+ **************************************************************
+ *** ***
+ *** This file is SOSD. Porters must change the data types ***
+ *** appropriately on their platform. See notes/pcport.doc ***
+ *** for more information. ***
+ *** ***
+ **************************************************************
+
+ oracchf : Check cursor cache consistency flag. If set AND oradbgf
+ is set, then directs SQLLIB to perform cursor cache
+ consistency checks before every cursor operation
+ (OPEN, FETCH, SELECT, INSERT, etc.).
+ oradbgf : Master DEBUG flag. Used to turn all DEBUG options
+ on or off.
+ orahchf : Check Heap consistency flag. If set AND oradbgf is set,
+ then directs SQLLIB to perform heap consistency checks
+ everytime memory is dynamically allocated/free'd via
+ sqlalc/sqlfre/sqlrlc. MUST BE SET BEFORE 1ST CONNECT
+ and once set cannot be cleared (subsequent requests
+ to change it are ignored).
+ orastxtf: Save SQL stmt text flag. If set, then directs SQLLIB
+ to save the text of the current SQL stmt in orastxt
+ (in VARCHAR format).
+ orastxt : Saved len and text of current SQL stmt (in VARCHAR
+ format).
+ orasfnm : Saved len and text of filename containing current SQL
+ stmt (in VARCHAR format).
+ oraslnr : Saved line nr within orasfnm of current SQL stmt.
+
+ Cursor cache statistics. Set after COMMIT or ROLLBACK. Each
+ CONNECT'd DATABASE has its own set of statistics.
+
+ orahoc : Highest Max Open OraCursors requested. Highest value
+ for MAXOPENCURSORS by any CONNECT to this DATABASE.
+ oramoc : Max Open OraCursors required. Specifies the max nr
+ of OraCursors required to run this pgm. Can be higher
+ than orahoc if working set (MAXOPENCURSORS) was set
+ too low, thus forcing the PCC to expand the cache.
+ oracoc : Current nr of OraCursors used.
+ oranor : Nr of OraCursor cache reassignments. Can show the
+ degree of "thrashing" in the cache. Optimally, this
+ nr should be kept as low as possible (time vs space
+ optimization).
+ oranpr : Nr of SQL stmt "parses".
+ oranex : Nr of SQL stmt "executes". Optimally, the relation-
+ ship of oranex to oranpr should be kept as high as
+ possible.
+
+
+ If the symbol ORACA_NONE is defined, then there will be no ORACA
+ *variable*, although there will still be a struct defined. This
+ macro should not normally be defined in application code.
+
+ If the symbol ORACA_INIT is defined, then the ORACA will be
+ statically initialized. Although this is not necessary in order
+ to use the ORACA, it is a good pgming practice not to have
+ unitialized variables. However, some C compilers/OS's don't
+ allow automatic variables to be init'd in this manner. Therefore,
+ if you are INCLUDE'ing the ORACA in a place where it would be
+ an automatic AND your C compiler/OS doesn't allow this style
+ of initialization, then ORACA_INIT should be left undefined --
+ all others can define ORACA_INIT if they wish.
+
+OWNER
+ Clare
+DATE
+ 10/19/85
+MODIFIED
+ apopat 05/08/02 - [2362423] MVS PE to make lines shorter than 79
+ apopat 07/31/99 - [707588] TAB to blanks for OCCS
+ lvbcheng 10/27/98 - change long to int for oraca
+ pccint 10/03/96 - Add IS_OSD for linting
+ jbasu 12/12/94 - Bug 217878: note this is an SOSD file
+ losborne 09/04/92 - Make oraca variable optional
+ Osborne 05/24/90 - Add ORACA_STORAGE_CLASS construct
+ Clare 02/20/86 - PCC [10101l] Feature: Heap consistency check.
+ Clare 03/04/86 - PCC [10101r] Port: ORACA init ifdef.
+ Clare 03/12/86 - PCC [10101ab] Feature: ORACA cuc statistics.
+*/
+/* IS_OSD */
+#ifndef ORACA
+#define ORACA 1
+
+struct oraca
+ {
+ /* text */ char oracaid[8]; /* Reserved */
+ /* ub4 */ int oracabc; /* Reserved */
+
+ /* Flags which are setable by User. */
+
+ /* ub4 */ int oracchf; /* <> 0 if "check cur cache consistncy"*/
+ /* ub4 */ int oradbgf; /* <> 0 if "do DEBUG mode checking" */
+ /* ub4 */ int orahchf; /* <> 0 if "do Heap consistency check" */
+ /* ub4 */ int orastxtf; /* SQL stmt text flag */
+#define ORASTFNON 0 /* = don't save text of SQL stmt */
+#define ORASTFERR 1 /* = only save on SQLERROR */
+#define ORASTFWRN 2 /* = only save on SQLWARNING/SQLERROR */
+#define ORASTFANY 3 /* = always save */
+ struct
+ {
+ /* ub2 */ unsigned short orastxtl;
+ /* text */ char orastxtc[70];
+ } orastxt; /* text of last SQL stmt */
+ struct
+ {
+ /* ub2 */ unsigned short orasfnml;
+ /* text */ char orasfnmc[70];
+ } orasfnm; /* name of file containing SQL stmt */
+ /* ub4 */ int oraslnr; /* line nr-within-file of SQL stmt */
+
+ /* ub4 */ int orahoc; /* highest max open OraCurs requested */
+ /* ub4 */ int oramoc; /* max open OraCursors required */
+ /* ub4 */ int oracoc; /* current OraCursors open */
+ /* ub4 */ int oranor; /* nr of OraCursor re-assignments */
+ /* ub4 */ int oranpr; /* nr of parses */
+ /* ub4 */ int oranex; /* nr of executes */
+ };
+
+#ifndef ORACA_NONE
+
+#ifdef ORACA_STORAGE_CLASS
+ORACA_STORAGE_CLASS struct oraca oraca
+#else
+struct oraca oraca
+#endif
+#ifdef ORACA_INIT
+ =
+ {
+ {'O','R','A','C','A',' ',' ',' '},
+ sizeof(struct oraca),
+ 0,0,0,0,
+ {0,{0}},
+ {0,{0}},
+ 0,
+ 0,0,0,0,0,0
+ }
+#endif
+ ;
+
+#endif
+
+#endif
+/* end oraca.h */
--- /dev/null
+/* $RCSfile: oratypes.h $ $Date: 20-jul-00.13:44:19
+ ----------------------------------------------------------------------
+ Copyright (c) 1982, 2008, Oracle and/or its affiliates. All rights reserved.
+ ---------------------------------------------------------------------- */
+
+#ifndef ORATYPES
+# define ORATYPES
+# define SX_ORACLE
+# define SX3_ORACLE
+
+#ifndef ORASTDDEF
+# include <stddef.h>
+# define ORASTDDEF
+#endif
+
+#ifndef ORALIMITS
+# include <limits.h>
+# define ORALIMITS
+#endif
+
+#ifndef TRUE
+# define TRUE 1
+# define FALSE 0
+#endif
+
+/* --- Signed/Unsigned one-byte scalar (sb1/ub1) --- */
+
+#ifndef lint
+ typedef unsigned char ub1;
+ typedef signed char sb1;
+ typedef char eb1;
+#else
+# define ub1 unsigned char
+# define sb1 signed char
+# define eb1 char
+#endif
+
+#define UB1MAXVAL ((ub1)UCHAR_MAX)
+#define UB1MINVAL ((ub1) 0)
+#define SB1MAXVAL ((sb1)SCHAR_MAX)
+#define SB1MINVAL ((sb1)SCHAR_MIN)
+
+#define MINUB1MAXVAL ((ub1) 255)
+#define MAXUB1MINVAL ((ub1) 0)
+#define MINSB1MAXVAL ((sb1) 127)
+#define MAXSB1MINVAL ((sb1) -127)
+
+#define EB1MAXVAL ((eb1)SCHAR_MAX)
+#define EB1MINVAL ((eb1) 0)
+
+#define MINEB1MAXVAL ((eb1) 127)
+#define MAXEB1MINVAL ((eb1) 0)
+
+#define UB1BITS CHAR_BIT
+#define UB1MASK ((1 << ((uword)CHAR_BIT)) - 1)
+
+/* backwards compatibility */
+
+#ifndef lint
+ typedef sb1 b1;
+#else
+# define b1 sb1
+#endif
+
+#define B1MAXVAL SB1MAXVAL
+#define B1MINVAL SB1MINVAL
+
+/* --- Signed/Unsigned two-byte scalar (sb2/ub2) --- */
+
+#ifndef lint
+ typedef unsigned short ub2;
+ typedef signed short sb2;
+ typedef short eb2;
+#else
+# define ub2 unsigned short
+# define sb2 signed short
+# define eb2 short
+#endif
+
+#define UB2MAXVAL ((ub2)USHRT_MAX)
+#define UB2MINVAL ((ub2) 0)
+#define SB2MAXVAL ((sb2) SHRT_MAX)
+#define SB2MINVAL ((sb2) SHRT_MIN)
+
+#define MINUB2MAXVAL ((ub2) 65535)
+#define MAXUB2MINVAL ((ub2) 0)
+#define MINSB2MAXVAL ((sb2) 32767)
+#define MAXSB2MINVAL ((sb2)-32767)
+
+#define EB2MAXVAL ((eb2) SHRT_MAX)
+#define EB2MINVAL ((eb2) 0)
+
+#define MINEB2MAXVAL ((eb2) 32767)
+#define MAXEB2MINVAL ((eb2) 0)
+
+/* backwards compatibility */
+
+#ifndef lint
+ typedef sb2 b2;
+#else
+# define b2 sb2
+#endif
+
+#define B2MAXVAL SB2MAXVAL
+#define B2MINVAL SB2MINVAL
+
+/* --- Signed/Unsigned four-byte scalar (sb4/ub4) --- */
+
+#ifndef lint
+ typedef unsigned int ub4;
+ typedef signed int sb4;
+ typedef int eb4;
+#else
+# define ub4 unsigned int
+# define sb4 signed int
+# define eb4 int
+#endif
+
+#define UB4MAXVAL ((ub4)UINT_MAX)
+#define UB4MINVAL ((ub4) 0)
+#define SB4MAXVAL ((sb4) INT_MAX)
+#define SB4MINVAL ((sb4) INT_MIN)
+
+#define MINUB4MAXVAL ((ub4) 4294967295)
+#define MAXUB4MINVAL ((ub4) 0)
+#define MINSB4MAXVAL ((sb4) 2147483647)
+#define MAXSB4MINVAL ((sb4)-2147483647)
+
+#define EB4MAXVAL ((eb4) INT_MAX)
+#define EB4MINVAL ((eb4) 0)
+
+#define MINEB4MAXVAL ((eb4) 2147483647)
+#define MAXEB4MINVAL ((eb4) 0)
+
+/* --- Signed/Unsigned eight-byte scalar (orasb8/oraub8) --- */
+
+# define ORAXB8_DEFINED
+# ifndef lint
+# ifdef __LP64__
+ typedef unsigned long oraub8;
+ typedef signed long orasb8;
+# else
+ typedef unsigned long long oraub8;
+ typedef signed long long orasb8;
+# endif /* __LP64__ */
+ typedef oraub8 ub8;
+ typedef orasb8 sb8;
+# else
+# define ub8 oraub8
+# define sb8 orasb8
+# ifdef __LP64__
+# define oraub8 unsigned long
+# define orasb8 signed long
+# else
+# define oraub8 unsigned long long
+# define orasb8 signed long long
+# endif /* __LP64__ */
+# endif /* !lint */
+
+# define ORAUB8MINVAL ((oraub8)0)
+# define ORAUB8MAXVAL ((oraub8)18446744073709551615)
+# define ORASB8MINVAL ((orasb8)-9223372036854775808)
+# define ORASB8MAXVAL ((orasb8) 9223372036854775807)
+
+# define MAXORAUB8MINVAL ((oraub8)0)
+# define MINORAUB8MAXVAL ((oraub8)18446744073709551615)
+# define MAXORASB8MINVAL ((orasb8)-9223372036854775807)
+# define MINORASB8MAXVAL ((orasb8) 9223372036854775807)
+
+/* backwards compatibility */
+
+#ifndef lint
+ typedef sb4 b4;
+#else
+# define b4 sb4
+#endif
+
+#define B4MAXVAL SB4MAXVAL
+#define B4MINVAL SB4MINVAL
+
+/* --- Character pointer --- */
+
+#ifdef lint
+# define oratext unsigned char
+#else
+ typedef unsigned char oratext;
+#endif
+
+#if !defined(LUSEMFC)
+# ifdef lint
+# define text unsigned char
+# define OraText oratext
+# else
+ typedef oratext text;
+ typedef oratext OraText;
+# endif
+#endif
+
+#if !defined(MOTIF) && !defined(LISPL) && !defined(__cplusplus) && \
+ !defined(LUSEMFC)
+ typedef OraText *string;
+#endif
+
+#ifndef lint
+ typedef unsigned short utext;
+#else
+# define utext unsigned short
+#endif
+
+/* --- Boolean --- */
+
+#ifndef boolean
+# ifndef lint
+ typedef int boolean;
+# else
+# define boolean int
+# endif
+#endif
+
+/* --- Other data types --- */
+
+#ifndef lint
+ typedef int eword;
+ typedef unsigned int uword;
+ typedef signed int sword;
+#else
+# define eword int
+# define uword unsigned int
+# define sword signed int
+#endif
+
+#define EWORDMAXVAL ((eword) INT_MAX)
+#define EWORDMINVAL ((eword) 0)
+
+#define UWORDMAXVAL ((uword)UINT_MAX)
+#define UWORDMINVAL ((uword) 0)
+
+#define SWORDMAXVAL ((sword) INT_MAX)
+#define SWORDMINVAL ((sword) INT_MIN)
+
+#define MINEWORDMAXVAL ((eword) 2147483647)
+#define MAXEWORDMINVAL ((eword) 0)
+
+#define MINUWORDMAXVAL ((uword) 4294967295)
+#define MAXUWORDMINVAL ((uword) 0)
+
+#define MINSWORDMAXVAL ((sword) 2147483647)
+#define MAXSWORDMINVAL ((sword) -2147483647)
+
+#ifndef lint
+ typedef unsigned long ubig_ora;
+ typedef signed long sbig_ora;
+#else
+# define ubig_ora unsigned long
+# define sbig_ora signed long
+#endif
+
+#define UBIG_ORAMAXVAL ((ubig_ora)ULONG_MAX)
+#define UBIG_ORAMINVAL ((ubig_ora) 0)
+
+#define SBIG_ORAMAXVAL ((sbig_ora) LONG_MAX)
+#define SBIG_ORAMINVAL ((sbig_ora) LONG_MIN)
+
+#define MINUBIG_ORAMAXVAL ((ubig_ora) 4294967295)
+#define MAXUBIG_ORAMINVAL ((ubig_ora) 0)
+
+#define MINSBIG_ORAMAXVAL ((sbig_ora) 2147483647)
+#define MAXSBIG_ORAMINVAL ((sbig_ora)-2147483647)
+
+#define UBIGORABITS (UB1BITS * sizeof(ubig_ora))
+
+/* --- Const --- */
+
+#undef CONST
+#define CONST const
+
+/* --- Misc --- */
+
+#define dvoid void
+
+typedef void (*lgenfp_t)( void );
+
+#ifndef ORASYS_TYPES
+# include <sys/types.h>
+# define ORASYS_TYPES
+#endif
+
+#ifndef SIZE_TMAXVAL
+# define SIZE_TMAXVAL UBIG_ORAMAXVAL
+#endif
+
+#ifndef MINSIZE_TMAXVAL
+# define MINSIZE_TMAXVAL (size_t)4294967295
+#endif
+
+#endif /* ORATYPES */
--- /dev/null
+/* Copyright (c) 1994, 2006, Oracle. All rights reserved. */
+
+/*
+ NAME
+ ORI - OCI navigational interface
+
+ DESCRIPTION
+
+ This section is intended to give a brief introduction to the navigational
+ interfaces. Readers can refer to the documents listed in the section
+ 'RELATED DOCUMENTS' for more information.
+
+ PURPOSE
+ The Oracle Call Interface (OCI) supports navigational access of objects.
+ In the navigational paradigm, data is represented as a graph of objects
+ connected by references. Objects in the graph are reached by following
+ the references.
+
+ OBJECT ENVIRONMENT
+
+ The object environment is initialized when the OCI environment handle is
+ initialized with the object option. An object environment contains a
+ heap which buffers type instances in memory. The object environment also
+ contains an object cache which keeps track of the objects in the object
+ environment. Readers can refer to the "Functional Specification for
+ Programmatic Interface" for more information about the object
+ environment.
+
+ INSTANCE, OBJECT AND VALUE
+
+ An OTS instance is an occurence of a type specified by the Oracle Type
+ System (OTS). This section describes how an OTS instance can be
+ represented in OCI. In OCI, an OTS instance can be classified based on
+ the type, the lifetime and referencability (see the figure below):
+
+ 1) A persistent object is an instance of an object type. A persistent
+ object resides in a row of a table in the server and can exist longer
+ than the duration of a session (connection). Persistent objects can be
+ identified by object references which contain the object identifiers.
+ A persistent object is obtained by pinning its object reference.
+
+ 2) A transient object is an instance of an object type. A transient
+ object cannot exist longer than the duration of a session, and it is
+ used to contain temporary computing results. Transient objects can
+ also be identified by references which contain transient object
+ identifiers.
+
+ 3) A value is an instance of an user-defined type (object type or
+ collection type) or any built-in OTS type. Unlike objects, values of
+ object types are identified by memory pointers, rather than by
+ references.
+
+ A value can be standalone or embbeded. A standalone value is usually
+ obtained by issuing a select statement. OCI also allows the client
+ program to select a row of object table into a value by issuing a SQL
+ statement. Thus, a referenceable object (in the database) can be
+ represented as a value (which cannot be identified by a reference).
+ A standalone value can also be an out-of-line attribute in an object
+ (e.g varchar, raw) or an out-of-line element in a collection (e.g.
+ varchar, raw, object).
+
+ An embedded value is phyiscally included in a containing instance.
+ An embedded value can be an in-line attribute in an object (e.g.
+ number, nested object) or an in-line element in a collection.
+
+ All values are considered to be transient by OCI, e.g. OCI does not
+ support automatic flushing a value to the database, and the client has
+ to explicitly execute a SQL statement to store a value into the
+ database. For embedded values, they are flushed when their containing
+ instance are flushed.
+
+
+ OTS instance
+ | |
+ v v
+ object value (type)
+ | |
+ v v
+ persistent transient (lifetime)
+
+
+ persistent obj transient obj value
+ ---------------------------------------------------------------
+ | | | | object type, |
+ | type | object type | object type | built-in, |
+ | | | | collection |
+ ---------------------------------------------------------------
+ | maximum | until object | session | session |
+ | lifetime | is deleted | | |
+ ---------------------------------------------------------------
+ | referencable | yes | yes | no |
+ ---------------------------------------------------------------
+ | embeddable | no | no | yes |
+ ---------------------------------------------------------------
+
+ REFERENCEABLE OBJECT, STANDALONE OBJECT, EMBEDDED OBJECT
+
+ In the reminding of this include file, the following term will be used:
+ 1) The term 'object' can be generally referred to a persistent object,
+ a transient object, a standalone value of object type, or an embedded
+ value of object type.
+ 2) The term 'referenceable object' refers to a persistent object or a
+ transient object.
+ 3) The term 'standalone object' refers to a persistent object, a
+ transient object or a standalone value of object type.
+ 4) The term 'embedded object' referes to a embbeded value of object
+ type.
+
+ META ATTRIBUTES
+
+ There is a set of meta-attributes that are defined for standalone
+ objects. A meta-attribute can be transient or persistent. A
+ transient meta-attribute is applicable to an instance only when it is
+ in memory. A persistent meta-attribute can be applicable to an instance
+ that is in the disk.
+
+ The set of user visible meta-attributes for persistent objects are:
+ 1) existent (persistent) : Does the object exist?
+ 2) nullness (persistent) : Null information of the instance
+ 3) locked (persistent) : Is the object locked?
+ 4) pinned (transient) : Is the object being accessed by the client?
+ 5) dirty (transient) : Has the object been modified?
+ 6) allocation duration (transient) : see below
+ 7) pin duration (transient) : see below
+
+ The set of user visible meta-attributes for transient objects are:
+ 1) existent (transient) : Does the object exist?
+ 2) nullness (transient) : Null information of the instance
+ 3) pinned (transient) : Is the object being accessed by the client?
+ 4) dirty (transient) : Has the object been modified?
+ 4) allocation duration (transient) : see below
+ 5) pin duration (transient) : see below
+
+ The set of user visible meta-attributes for standalone values of object
+ type or collections are:
+ 1) allocation duration (transient) : see below
+ 2) nullness (transient) : Null information of the instance
+ (of an object type)
+
+ NULLNESS OF AN INSTANCE
+
+ Each standalone object is associated with a null structure which keeps
+ the null information about the object. A null indicates the absence of
+ data. The null structure itself contains null indicators that represent:
+ 1) atomic nullness : a null value that pertains to the whole object
+ 2) null status of the individual attribute in the object
+
+ The layout of a null structure in memory resembles that of the object,
+ except that the null structure has additional indicators to represent
+ the atomic nullness for each object.
+
+ An non-existent object is different than an object that is atomically
+ null. A atomically null object is an existing object that has no data.
+
+ MEMORY LAYOUT OF AN OBJECT
+
+ A standalone object in memory is composed of a top level memory chunk,
+ a null structure and optionally, a number of secondary memory chunks.
+ For a DEPARTMENT object type,
+
+ OBJECT TYPE department
+ {
+ dep_name varchar2(20),
+ budget number,
+ manager person, /o person is an object type o/
+ employees collection of person
+ }
+
+ Each instance of DEPARTMENT will has a top level memory chunk which
+ contains the top level attributes such as dep_name, budget, manager and
+ employees. The attributes dep_name and employees are themselves pointers
+ to the additional memory (the secondary memory chunks). The secondary
+ memory is for the out-of-line attribute (e.g. varray).
+
+ CONSISTENCY MODEL
+
+ Each pin operation behaves like a distinct SQL select. Thus, the object
+ cache does not guarantee consistency for a graph of objects. In order to
+ retrieve a consistent graph of objects, the user has to explicitly start
+ a serializable transaction or a read-only transaction.
+
+ DURATION
+ In OCI, a duration is used to specify
+
+ 1) the length of memory allocation of an instance
+ When each instance is allocated, it is associate with an allocation
+ duration. The memory occupied by the object is freed automatically
+ at the end of its allocation duration. The allocation duration of an
+ instance cannot be changed.
+
+ 2) the length of pinning of an object
+ When each object is pinned, the client has to give a pin duration
+ which specify the length of time that the object is intended to be
+ used. It is an user error to specify a pin duration longer than an
+ allocation duration of the object. An object is completely unpinned
+ at the end of its pin duration (see OCIObjectUnpin()).
+
+ An OCI program can use the allocation duration and the pin duration to
+ automatically free the memory of the instances:
+ 1) Transient objects and values are freed at the end of the allocation
+ duration.
+ 2) Persistent objects ARE freed at the end of the allocation duration.
+ Persistent objects CAN be freed at the end of the pin duration when
+ the objects are completely unpinned. The persistent objects are said
+ to be aged out. See OCIObjectUnpin() for more details.
+
+ There are 3 predefined duration: session, transaction, call. The time
+ spans of these durations are defined based on the programming model
+ presented by OCI. The call duration is mapped to the transaction
+ duration in the client-side environment. See oro.h for the macros defined
+ for these 3 durations.
+
+ A pin duration can be promoted. For example, if an object is pinned with
+ duration 1, and the object is later pinned with duration 2, the pin
+ routine will try to find a duration that is longer or equal to the
+ length of both duration 1 and duration 2. The pin duration of the object
+ is set to the that duration. The object is automatically unpinned only
+ after both duration 1 and duration 2 are terminated.
+
+ RELATED DOCUMENTS
+ "Functional Specification for Oracle Object RDBMS"
+ "Functional Specification for Programmatic Interfaces"
+ "Functional Specification for the Oracle Type System (OTS)"
+
+ INSPECTION STATUS
+ Inspection date:
+ Inspection status:
+ Estimated increasing cost defects per page:
+ Rule sets:
+
+ ACCEPTANCE REVIEW STATUS
+ Review date:
+ Review status:
+ Reviewers:
+
+ PUBLIC FUNCTIONS
+ OCIObjectNew - OCI new a standalone instance
+ OCIObjectPin - OCI pin an object by reference
+ OCIObjectUnpin - OCI unpin a referenceable object
+ OCIObjectPinCountReset - OCI reset the pin count of a referenceable object
+ OCIObjectLock - OCI lock a persistent object
+ OCIObjectLockNoWait - OCI lock a persistent object
+ OCIObjectMarkUpdate - OCI mark a referenceable object as updated
+ OCIObjectUnmark - OCI unmark a dirtied referenceable object
+ OCIObjectUnmarkByRef - OCI unmark a dirtied object by reference
+ OCIObjectFree - OCI free a standalone instance
+ OCIObjectMarkDelete - OCI mark a referenceable object as deleted
+ OCIObjectMarkDeleteByRef - OCI mark a referenceable object as deleted by
+ giving a reference
+ OCIObjectFlush - OCI flush a persistent object
+ OCIObjectRefresh - OCI refresh a persistent object
+ OCIObjectCopy - OCI CoPy one object to another
+ OCIObjectGetTypeRef - OCI get the Type Reference of a standalone object
+ OCIObjectGetObjectRef - OCI get the Object's Reference
+ OCIObjectGetInd - OCI get Null Structure of an standalone object
+ OCIObjectExists - OCI get the existence of a referenceable object
+ OCIObjectGetProperty - get object property
+ OCIObjectIsLocked - OCI get the lock status of a referenceable object
+ OCIObjectIsDirty - OCI get the dirty status of a referenceable object
+ OCIObjectPinTable - OCI get Table object
+ OCIObjectArrayPin - OCI pin array of objects
+ OCIObjectGetPrimayKeyTypeRef - OCI get the Ref for the primary key OID's
+ type
+ OCIObjectMakeObjectRef - OCI Create a pk or sys generated REF
+
+ OCIObjectGetNewOID - OCI Create a new Object ID
+
+ OCICacheFlush - OCI flsuh the modified persistent objects in the cache
+ OCICacheRefresh - OCI refresh persistent objects in the cache
+ OCICacheUnpin - OCI unpin referenceable objects in the cache
+ OCICacheFree - OCI free all instances in the environment
+ OCICacheUnmark - OCI unmark all dirty referenceable objects in the cache
+
+ PRIVATE FUNCTIONS
+ None
+
+ EXAMPLES
+
+ The following types will be used in the examples in this section:
+
+ OBJECT TYPE professor
+ (
+ varchar2 name;
+ number department;
+ number num_of_students;
+ );
+
+ OBJECT TYPE course
+ (
+ varchar2 name;
+ number grade;
+ );
+
+ OBJECT TYPE student
+ (
+ vstring name;
+ number department;
+ ref advisor; /o advisor is a professor o/
+ collection courses;
+ );
+
+ EXAMPLE 1
+
+ Here is a set of examples to illustrate the usages of some of the
+ orio and oric functions.
+
+ OCIenv *env; /o OCI environment handle o/
+ OCIError *err; /o OCI error handle o/
+ OCISvcCtx *svc; /o OCI service handle o/
+
+ void *stu_tbl; /o pointer to the student table o/
+ OCIType *stu_tdo; /o student type tdo o/
+
+ OCIRef *stu2_ref; /o object reference to student object o/
+ student *stu1; /o pointer to the student object o/
+ student *stu2; /o pointer to the student object o/
+ professor *pro; /o pointer to the professor object o/
+
+ /o Initialize the OCI environment handle, error handle and service
+ handle and login to the database o/
+ ...
+
+ /o CREATE A PERSISTENT OBJECT o/
+
+ /o get the table object of student o/
+ if (OCIObjectPinTable(env, err, svc, "ORACLEU", sizeof("ORACLEU"),
+ "STUDENT_TABLE", sizeof("STUDENT_TABLE"), (OCIRef *)0,
+ OCI_DURATION_NULL, &stu_tbl) != OCI_SUCCESS)
+ /o error handling code o/
+
+ /o get type object of student o/
+ if (OCITypeByName(env, err, svc, "ORACLEU", sizeof("ORACLEU"),
+ "STUDENT", sizeof("STUDENT"), OCI_DURATION_NULL, OCI_TYPEGET_HEADER,
+ &stu_tdo) != OCI_SUCCESS)
+ /o error handling code o/
+
+ /o create a persistent object 'mark' (of type student) o/
+ if (OCIObjectNew(env, err, svc, OCI_TYPECODE_ADT, stu_tdo, stu_tbl,
+ OCI_DURATION_TRANS, (ub1)FALSE, (void **)&stu1) != OCI_SUCCESS)
+ /o error handling code o/
+
+ /o RETRIEVE OBJECTS IN PERSISTENT STORES o/
+
+ /o Use OCI to retrieve a reference to student object 'joe'.
+ o The retrieved reference is bound to the variable stu2_ref.
+ o/
+
+ /o pin/retrieve the student "joe" by reference o/
+ if (OCIObjectPin(env, err, &stu2_ref, (OCIComplexObject *)0, OCI_PIN_ANY,
+ OCI_DURATION_TRANS, OCI_LOCK_X, &stu2) != OCI_SUCCESS)
+ /o error handling code o/
+
+ /o pin/retrieve the advisor of student "joe" by reference o/
+ if (OCIObjectPin(env, err, &stu2->advisor, (OCIComplexObject *)0,
+ OCI_PIN_ANY, OCI_DURATION_TRANS, OCI_LOCK_X, &pro) != OCI_SUCCESS)
+ /o error handling code o/
+
+ /o MODIFY OBJECTS o/
+
+ /o initialize the newly created object "mark" o/
+ DISCARD OCIStringAssignText(env, err, "mark", sizeof("mark"),
+ &stu1->name);
+ department = 522;
+ DISCARD OCINumberFromInt(err, &department, sizeof(department),
+ OCI_NUMBER_UNSIGNED, &stu1->department);
+
+ /o assign advisor to student "mark" o/
+ DISCARD OCIRefAssign(env, err, &stu2->advisor, &stu1->advisor);
+
+ /o update student "joe". o/
+ department = 533;
+ DISCARD OCINumberFromInt(err, &department, sizeof(department),
+ OCI_NUMBER_UNSIGNED, &stu2->department);
+ DISCARD OCIObjectMarkUpdate(env, err, stu2);
+
+ /o UNPIN OBJECTS AFTER FINSIHED PROCESSING THEM o/
+
+ /o unpin the student object "mark" o/
+ if (OCIObjectUnpin(env, err, stu1) != OCI_SUCCESS)
+ /o error handling code o/
+
+ /o unpin the student object "joe" o/
+ if (OCIObjectUnpin(env, err, stu2) != OCI_SUCCESS)
+ /o error handling code o/
+
+ /o unpin the professor object o/
+ if (OCIObjectUnpin(env, err, pro) != OCI_SUCCESS)
+ /o error handling code o/
+
+ /o unpin the type object o/
+ if (OCIObjectUnpin(env, err, stu_tdo) != OCI_SUCCESS)
+ /o error handling code o/
+
+ /o unpin the table object o/
+ if (OCIObjectUnpin(env, err, stu_tbl) != OCI_SUCCESS)
+ /o error handling code o/
+
+ /o FLUSH MODIFIED OBJECTS BACK TO PERSISTENT STORE o/
+
+ if (OCICacheFlush(env, err, svc, (void *)0, ((OCIRef*)(*)())0,
+ (OCIRef *)0) != OCI_SUCCESS)
+ /o error handling code o/
+
+ /o commit transaction o/
+
+ END OF EXAMPLE 1
+
+ NOTES
+ This file has been subsetted to contain only the routines that will
+ be in the first release.
+
+ MODIFIED
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ srseshad 03/12/03 - convert oci public api to ansi
+ aahluwal 06/03/02 - bug 2360115
+ bpalaval 02/09/01 - Change text to oratext.
+ rkasamse 06/21/00 - add ociobjectgetnewoid
+ rkasamse 05/24/00 - add OCIObjectSetData
+ whe 09/01/99 - 976457:check __cplusplus for C++ code
+ smuralid 10/29/98 - add comments for OCIObjectMakeObjectRef
+ mkrishna 08/19/98 - change OCIGetPkTypeRef to OCIObjectGetPrimaryKeyTypeR
+ mkrishna 08/10/98 - add OCIObjectMakeObjectRef & OCIObjectGetPkTypeRef
+ rkasamse 06/22/98 - add comments for OCIDurationBegin(End)
+ pmitra 04/01/98 - OCIObjectLockNoWait added
+ pmitra 11/05/97 - [573769] OCIObjectArrayPin pos parameter cannot be NU
+ cxcheng 07/29/97 - fix compile for short names
+ skrishna 07/14/97 - add OCIObjectGetProperty
+ skrishna 04/30/97 - OCIObjectFlushRefresh: remove duplicate declaration
+ skrishna 04/24/97 - flag unsupported functions
+ sthakur 03/20/97 - modify flag argument to OCIObjectFree
+ skrishna 03/18/97 - fix ifdef for supporting ansi and k&r proto-types
+ cxcheng 02/19/97 - remove short names support
+ cxcheng 02/06/97 - take out short name support except with SLSHORTNAME
+ sthakur 12/20/96 - fix a typepo in OCIOBjectArrayPin
+ jboonleu 11/07/96 - modify comments
+ cxcheng 10/28/96 - more beautification changes
+ jboonleu 10/24/96 - add flag to OCIObjectFree
+ jboonleu 10/22/96 - change interface of OCICacheFlush
+ cxcheng 10/18/96 - rename OCIObjectPinArray to OCIObjectArrayPin
+ cxcheng 10/14/96 - more renaming of types
+ jboonleu 10/09/96 - add new interfaces
+ cxcheng 10/09/96 - more lint fixes
+ cxcheng 10/08/96 - more lint fixes
+ jboonleu 09/27/96 - fix lint errors
+ jboonleu 10/07/96 - beautify ori.h after conversion to long names
+ cxcheng 10/04/96 - replace short names with long names
+ sthakur 08/20/96 - add COR context to OCIObjectPin
+ mluong 07/17/96 - add back orioglk, oriogdr, oriogiv, and oriocur.
+ jboonleu 07/17/96 - rename refresh option to conherency option
+ jboonleu 07/16/96 - change comment for cache consistency
+ jwijaya 07/03/96 - add ANSI prototypes
+ jboonleu 06/12/96 - update comment
+ jboonleu 05/08/96 - change description of OCIDurationGetParent
+ jboonleu 05/01/96 - add OROOCOSFN
+ skrishna 04/08/96 - change ori*() to take OCIEnv* and OCIError* instead
+ of oroenv*
+ jboonleu 01/04/96 - interface change
+ jboonleu 10/24/95 - support of variable ref
+ jboonleu 02/15/95 - new interface
+ sthakur 01/05/95 - pass username to origrgc
+ skotsovo 12/07/94 - update example
+ jwijaya 11/15/94 - rename ORONSPTAB to ORONSPEXT
+ jwijaya 10/06/94 - add namespace to oriopnm()
+ jwijaya 10/02/94 - connection handle -> connection number
+ jboonleu 08/16/94 - fix lint errors
+ jboonleu 07/20/94 - change interface of OCICacheFlush
+ tanguyen 07/18/94 - add oriocpe, change OCIObjectCopy to oriocps
+ tcheng 07/15/94 - add init param maximum_sga_heap_size
+ tcheng 07/13/94 - change origini to get param string
+ jboonleu 07/05/94 - change sccs string from sccid to a comment
+ jboonleu 07/01/94 - Add examples to ORIO* and ORIC* functions
+ tanguyen 06/30/94 - Fix the ORI_ORACLE ifdef
+ skotsovo 06/27/94 - include all public functions in public functions
+ list at top of header file
+ tcheng 06/27/94 - modify comments according to new template
+ tanguyen 06/24/94 - fix comments for OCIObjectCopy
+ tcheng 06/24/94 - fix comments in origrgc()
+ tanguyen 06/21/94 - fix comments and format
+ tcheng 06/20/94 - commenting origini/trm/err/rgc/urg() functions
+ tanguyen 06/16/94 - fix descriptions of ref operations
+ tanguyen 06/16/94 - clarifies refs comparison
+ tanguyen 05/12/94 - adds more interfaces (OCIObjectMarkUpdate)
+ jwijaya 05/10/94 - fix examples, add origurg, change origcon to origrgc
+ tanguyen 05/03/94 - remove unnecessary 'type' argument from
+ 'OCIObjectCopy'
+ tanguyen 03/08/94 - clarifies comments
+ jwijaya 02/16/94 - more questions
+ jwijaya 02/11/94 - more comments
+ jwijaya 02/10/94 - identify optional arguments
+ jwijaya 02/07/94 - Creation
+*/
+
+
+#ifndef ORATYPES
+#include <oratypes.h>
+#endif
+#ifndef ORO_ORACLE
+#include <oro.h>
+#endif
+#ifndef OCI_ORACLE
+#include <oci.h>
+#endif
+#ifndef ORT_ORACLE
+#include <ort.h>
+#endif
+
+#ifndef ORI_ORACLE
+#define ORI_ORACLE
+
+/*---------------------------------------------------------------------------*/
+/* SHORT NAMES SUPPORT SECTION */
+/*---------------------------------------------------------------------------*/
+
+#ifdef SLSHORTNAME
+
+/* the following are short names that are only supported on IBM mainframes
+ with the SLSHORTNAME defined.
+ With this all subsequent long names will actually be substituted with
+ the short names here */
+
+#define OCIDurationBegin origbgu
+#define OCIDurationEnd origedu
+#define OCIDurationGetParent origpdr
+#define OCICacheFlushRefresh oricfrh
+#define OCICacheUnpin oricunp
+#define OCICacheFree oricfre
+#define OCICacheUnmark oricumk
+#define OCICacheGetObjects oricgpr
+#define OCICacheRegister oricscb
+#define OCIObjectUnpin oriounp
+#define OCIObjectPinCountReset orioupz
+#define OCIObjectLock oriolck
+#define OCIObjectLockNoWait oriolnw
+#define OCIObjectMarkUpdate orioupd
+#define OCIObjectUnmark orioumk
+#define OCIObjectUnmarkByRef orioumr
+#define OCIObjectAlwaysLatest oriomkl
+#define OCIObjectNotAlwaysLatest oriouml
+#define OCIObjectMarkDeleteByRef oriordl
+#define OCIObjectMarkDelete oriopdl
+#define OCIObjectFlush oriofls
+#define OCIObjectFlushRefresh oriofrh
+#define OCIObjectCopy oriocpy
+#define OCIObjectGetTypeRef oriogtr
+#define OCIObjectGetObjectRef oriogor
+#define OCIObjectGetInd oriogns
+#define OCIObjectExists oriogex
+#define OCIObjectGetProperty oriogpr
+#define OCIObjectRefresh oriorfs
+#define OCIObjectPinTable oriogtb
+#define OCIObjectGetPrimaryKeyTypeRef oriogpf
+#define OCIObjectMakeObjectRef oriomrf
+
+#define OCIObjectNew orionew
+#define OCIObjectPin oriopin
+#define OCIObjectFree oriofre
+#define OCIObjectArrayPin orioapn
+#define OCIObjectIsDirty oriodrt
+#define OCIObjectIsDirtied oriodrd
+#define OCIObjectIsLoaded orioldd
+#define OCICacheFlush oricfls
+#define OCICacheRefresh oricrfs
+
+#endif /* SLSHORTNAME */
+
+/*---------------------------------------------------------------------------*/
+/* PUBLIC TYPES AND CONSTANTS */
+/*---------------------------------------------------------------------------*/
+
+/* Also see oro.h. */
+
+/*---------------------------------------------------------------------------*/
+/* PUBLIC FUNCTIONS */
+/*---------------------------------------------------------------------------*/
+/*---------------------------------------------------------------------------*/
+/* OBJECT/INSTANCE OPERATIONS */
+/*---------------------------------------------------------------------------*/
+
+/*--------------------------- OCIObjectNew ----------------------------------*/
+sword OCIObjectNew( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
+ OCITypeCode typecode, OCIType *tdo, void *table,
+ OCIDuration duration, boolean value,
+ void **instance );
+/*
+ NAME: OCIObjectNew - OCI new (create) a standalone instance
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ svc (IN) - OCI service handle.
+ typecode (IN) - the typecode of the type of the instance.
+ tdo (IN, optional) - pointer to the type descriptor object. The
+ TDO describes the type of the instance that is to be
+ created. Refer to OCITypeByName() for obtaining a TDO.
+ The TDO is required for creating a named type (e.g. an
+ object or a collection).
+ table (IN, optional) - pointer to a table object which specifies a
+ table in the server. This parameter can be set to NULL
+ if no table is given. See the description below to find
+ out how the table object and the TDO are used together
+ to determine the kind of instances (persistent,
+ transient, value) to be created. Also see
+ OCIObjectPinTable() for retrieving a table object.
+ duration (IN) - this is an overloaded parameter. The use of this
+ parameter is based on the kind of the instance that is
+ to be created.
+ a) persistent object. This parameter specifies the
+ pin duration.
+ b) transient object. This parameter specififes the
+ allocation duration and pin duration.
+ c) value. This parameter specifies the allocation
+ duration.
+ value (IN) - specifies whether the created object is a value.
+ If TRUE, then a value is created. Otherwise, a
+ referenceable object is created. If the instance is
+ not an object, then this parameter is ignored.
+ instance (OUT) - address of the newly created instance
+
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ DESCRIPTION:
+ This function creates a new instance of the type specified by the
+ typecode or the TDO. Based on the parameters 'typecode' (or 'tdo'),
+ 'value' and 'table', different kinds of instances can be created:
+
+ The parameter 'table' is not NULL?
+
+ yes no
+ ----------------------------------------------------------------
+ | object type (value=TRUE) | value | value |
+ ----------------------------------------------------------------
+ | object type (value=FALSE) | persistent obj | transient obj |
+ type ----------------------------------------------------------------
+ | built-in type | value | value |
+ ----------------------------------------------------------------
+ | collection type | value | value |
+ ----------------------------------------------------------------
+
+ This function allocates the top level memory chunk of an OTS instance.
+ The attributes in the top level memory are initialized (e.g. an
+ attribute of varchar2 is initialized to a vstring of 0 length).
+
+ If the instance is an object, the object is marked existed but is
+ atomically null.
+
+ FOR PERSISTENT OBJECTS:
+ The object is marked dirty and existed. The allocation duration for
+ the object is session. The object is pinned and the pin duration is
+ specified by the given parameter 'duration'.
+
+ FOR TRANSIENT OBJECTS:
+ The object is pinned. The allocation duration and the pin duration are
+ specified by the given parameter 'duration'.
+
+ FOR VALUES:
+ The allocation duration is specified by the given parameter 'duration'.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*--------------------------- OCIObjectPin ----------------------------------*/
+sword OCIObjectPin( OCIEnv *env, OCIError *err, OCIRef *object_ref,
+ OCIComplexObject *corhdl, OCIPinOpt pin_option,
+ OCIDuration pin_duration,
+ OCILockOpt lock_option, void **object );
+/*
+ NAME: OCIObjectPin - OCI pin a referenceable object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ object_ref (IN) - the reference to the object.
+ corhdl (IN) - handle for complex object retrieval.
+ pin_option (IN) - See description below.
+ pin_duration (IN) - The duration of which the object is being accesed
+ by a client. The object is implicitly unpinned at
+ the end of the pin duration.
+ If OCI_DURATION_NULL is passed, there is no pin
+ promotion if the object is already loaded into
+ the cache. If the object is not yet loaded, then
+ the pin duration is set to OCI_DURATION_DEFAULT.
+ lock_option (IN) - lock option (e.g., exclusive). If a lock option
+ is specified, the object is locked in the server.
+ See 'oro.h' for description about lock option.
+ object (OUT) - the pointer to the pinned object.
+
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ DESCRIPTION:
+
+ This function pins a referenceable object instance given the object
+ reference. The process of pinning serves three purposes:
+
+ 1) locate an object given its reference. This is done by the object
+ cache which keeps track of the objects in the object heap.
+
+ 2) notify the object cache that an object is being in use. An object
+ can be pinned many times. A pinned object will remain in memory
+ until it is completely unpinned (see OCIObjectUnpin()).
+
+ 3) notify the object cache that a persistent object is being in use
+ such that the persistent object cannot be aged out. Since a
+ persistent object can be loaded from the server whenever is needed,
+ the memory utilization can be increased if a completely unpinned
+ persistent object can be freed (aged out), even before the
+ allocation duration is expired.
+
+ Also see OCIObjectUnpin() for more information about unpinning.
+
+ FOR PERSISTENT OBJECTS:
+
+ When pinning a persistent object, if it is not in the cache, the object
+ will be fetched from the persistent store. The allocation duration of
+ the object is session. If the object is already in the cache, it is
+ returned to the client. The object will be locked in the server if a
+ lock option is specified.
+
+ This function will return an error for a non-existent object.
+
+ A pin option is used to specify the copy of the object that is to be
+ retrieved:
+
+ 1) If option is OCI_PIN_ANY (pin any), if the object is already
+ in the environment heap, return this object. Otherwise, the object
+ is retrieved from the database. This option is useful when the
+ client knows that he has the exclusive access to the data in a
+ session.
+
+ 2) If option is OCI_PIN_LATEST (pin latest), if the object is
+ not cached, it is retrieved from the database. If the object is
+ cached, it is refreshed with the latest version. See
+ OCIObjectRefresh() for more information about refreshing.
+
+ 3) If option is OCI_PIN_RECENT (pin recent), if the object is loaded
+ into the cache in the current transaction, the object is returned.
+ If the object is not loaded in the current transaction, the object
+ is refreshed from the server.
+
+ FOR TRANSIENT OBJECTS:
+
+ This function will return an error if the transient object has already
+ been freed. This function does not return an error if an exclusive
+ lock is specified in the lock option.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*------------------------------ OCIObjectUnpin -----------------------------*/
+sword OCIObjectUnpin( OCIEnv *env, OCIError *err, void *object );
+/*
+ NAME: OCIObjectUnpin - OCI unpin a referenceable object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by
+ calling OCIErrorGet().
+ object (IN) - pointer to an object
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The specified object must be pinned.
+ DESCRIPTION:
+ This function unpins an object. An object is completely unpinned when
+ 1) the object was unpinned N times after it has been pinned N times
+ (by calling OCIObjectPin()).
+ 2) it is the end of the pin duration
+ 3) the function OCIObjectPinCountReset() is called
+
+ There is a pin count associated with each object which is incremented
+ whenever an object is pinned. When the pin count of the object is zero,
+ the object is said to be completely unpinned. An unpinned object can
+ be freed without error.
+
+ FOR PERSISTENT OBJECTS:
+ When a persistent object is completely unpinned, it becomes a candidate
+ for aging. The memory of an object is freed when it is aged out. Aging
+ is used to maximize the utilization of memory. An dirty object cannot
+ be aged out unless it is flushed.
+
+ FOR TRANSIENT OBJECTS:
+ The pin count of the object is decremented. A transient can be freed
+ only at the end of its allocation duration or when it is explicitly
+ deleted by calling OCIObjectFree().
+
+ FOR VALUE:
+ This function will return an error for value.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*---------------------------- OCIObjectPinCountReset -----------------------*/
+sword OCIObjectPinCountReset( OCIEnv *env, OCIError *err, void *object );
+/*
+ NAME: OCIObjectPinCountReset - OCI resets the pin count of a referenceable
+ object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by
+ calling OCIErrorGet().
+ object (IN) - pointer to an object
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The specified object must be pinned.
+ DESCRIPTION:
+ This function completely unpins an object. When an object is
+ completely unpinned, it can be freed without error.
+
+ FOR PERSISTENT OBJECTS:
+ When a persistent object is completely unpinned, it becomes a candidate
+ for aging. The memory of an object is freed when it is aged out. Aging
+ is used to maximize the utilization of memory. An dirty object cannot
+ be aged out unless it is flushed.
+
+ FOR TRANSIENT OBJECTS:
+ The pin count of the object is decremented. A transient can be freed
+ only at the end of its allocation duration or when it is explicitly
+ freed by calling OCIObjectFree().
+
+ FOR VALUE:
+ This function will return an error for value.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*--------------------------- OCIObjectLock ---------------------------------*/
+sword OCIObjectLock( OCIEnv *env, OCIError *err, void *object );
+/*
+ NAME: OCIObjectLock - OCI lock a persistent object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by
+ calling OCIErrorGet().
+ object (IN) - pointer to the persistent object
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The specified object must be pinned.
+ DESCRIPTION:
+ This function locks a persistent object at the server. Unlike
+ OCIObjectLockNoWait() this function waits if another user currently
+ holds a lock on the desired object. This function
+ returns an error if:
+ 1) the object is non-existent.
+
+ This function will return an error for transient objects and values.
+ The lock of an object is released at the end of a transaction.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+*/
+
+/*------------------------ OCIObjectLockNoWait ------------------------------*/
+sword OCIObjectLockNoWait( OCIEnv *env, OCIError *err, void *object );
+/*
+ NAME: OCIObjectLockNoWait - OCI lock a persistent object, do not wait for
+ the lock, return error if lock not available
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by
+ calling OCIErrorGet().
+ object (IN) - pointer to the persistent object
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The specified object must be pinned.
+ DESCRIPTION:
+ This function locks a persistent object at the server. Unlike
+ OCIObjectLock() this function will not wait if another user holds
+ the lock on the desired object. This function returns an error if:
+ 1) the object is non-existent.
+ 2) the object is currently locked by another user in which
+ case this function returns with an error.
+
+ This function will return an error for transient objects and values.
+ The lock of an object is released at the end of a transaction.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+*/
+
+/*--------------------------- OCIObjectMarkUpdate ---------------------------*/
+sword OCIObjectMarkUpdate( OCIEnv *env, OCIError *err, void *object );
+/*
+ NAME: OCIObjectMarkUpdate - OCI marks an object as updated
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by
+ calling OCIErrorGet().
+ object (IN) - pointer to the persistent object
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The specified object must be pinned.
+ DESCRIPTION:
+ FOR PERSISTENT OBJECTS:
+ This function marks the specified persistent object as updated. The
+ persistent objects will be written to the server when the object cache
+ is flushed. The object is not locked or flushed by this function. It
+ is an error to update a deleted object.
+
+ After an object is marked updated and flushed, this function must be
+ called again to mark the object as updated if it has been dirtied
+ after it is being flushed.
+
+ FOR TRANSIENT OBJECTS:
+ This function marks the specified transient object as updated. The
+ transient objects will NOT be written to the server. It is an error
+ to update a deleted object.
+
+ FOR VALUES:
+ It is an no-op for values.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*----------------------------- OCIObjectUnmark -----------------------------*/
+sword OCIObjectUnmark( OCIEnv *env, OCIError *err, void *object );
+/*
+ NAME: OCIObjectUnmark - OCI unmarks an object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by
+ calling OCIErrorGet().
+ object (IN) - pointer to the persistent object
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The specified object must be pinned.
+ DESCRIPTION:
+ FOR PERSISTENT OBJECTS AND TRANSIENT OBJECTS:
+ This function unmarks the specified persistent object as dirty. Changes
+ that are made to the object will not be written to the server. If the
+ object is marked locked, it remains marked locked. The changes that
+ have already made to the object will not be undone implicitly.
+
+ FOR VALUES:
+ It is an no-op for values.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*----------------------------- OCIObjectUnmarkByRef ------------------------*/
+sword OCIObjectUnmarkByRef( OCIEnv *env, OCIError *err, OCIRef *ref );
+/*
+ NAME: OCIObjectUnmarkByRef - OCI unmarks an object by Ref
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by
+ calling OCIErrorGet().
+ ref (IN) - reference of the object
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The specified object must be pinned.
+ DESCRIPTION:
+ FOR PERSISTENT OBJECTS AND TRANSIENT OBJECTS:
+ This function unmarks the specified persistent object as dirty. Changes
+ that are made to the object will not be written to the server. If the
+ object is marked locked, it remains marked locked. The changes that
+ have already made to the object will not be undone implicitly.
+
+ FOR VALUES:
+ It is an no-op for values.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*--------------------------- OCIObjectFree ---------------------------------*/
+sword OCIObjectFree( OCIEnv *env, OCIError *err, void *instance,
+ ub2 flags );
+/*
+ NAME: OCIObjectFree - OCI free (and unpin) an standalone instance
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ instance (IN) - pointer to a standalone instance.
+ flags (IN) - If OCI_OBJECT_FREE_FORCE is set, free the object
+ even if it is pinned or dirty.
+ If OCI_OBJECT_FREE_NONULL is set, the null
+ structure will not be freed.
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The instance to be freed must be standalone.
+ - If the instance is a referenceable object, the object must be pinned.
+ DESCRIPTION:
+ This function deallocates all the memory allocated for an OTS instance,
+ including the null structure.
+
+ FOR PERSISTENT OBJECTS:
+ This function will return an error if the client is attempting to free
+ a dirty persistent object that has not been flushed. The client should
+ either flush the persistent object or set the parameter 'flag' to
+ OCI_OBJECT_FREE_FORCE.
+
+ This function will call OCIObjectUnpin() once to check if the object
+ can be completely unpin. If it succeeds, the rest of the function will
+ proceed to free the object. If it fails, then an error is returned
+ unless the parameter 'flag' is set to OCI_OBJECT_FREE_FORCE.
+
+ Freeing a persistent object in memory will not change the persistent
+ state of that object at the server. For example, the object will
+ remain locked after the object is freed.
+
+ FOR TRANSIENT OBJECTS:
+
+ This function will call OCIObjectUnpin() once to check if the object
+ can be completely unpin. If it succeeds, the rest of the function will
+ proceed to free the object. If it fails, then an error is returned
+ unless the parameter 'flag' is set to OCI_OBJECT_FREE_FORCE.
+
+ FOR VALUES:
+ The memory of the object is freed immediately.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+*/
+
+/*----------------------- OCIObjectMarkDeleteByRef --------------------------*/
+sword OCIObjectMarkDeleteByRef( OCIEnv *env, OCIError *err,
+ OCIRef *object_ref);
+/*
+ NAME: OCIObjectMarkDeleteByRef - OCI "delete" (and unpin) an object given
+ a reference
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ object_ref (IN) - ref of the object to be deleted
+
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ DESCRIPTION:
+ This function marks the object designated by 'object_ref' as deleted.
+
+ FOR PERSISTENT OBJECTS:
+ If the object is not loaded, then a temporary object is created and is
+ marked deleted. Otherwise, the object is marked deleted.
+
+ The object is deleted in the server when the object is flushed.
+
+ FOR TRANSIENT OBJECTS:
+ The object is marked deleted. The object is not freed until it is
+ unpinned.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*--------------------------- OCIObjectMarkDelete ---------------------------*/
+sword OCIObjectMarkDelete( OCIEnv *env, OCIError *err, void *instance );
+/*
+ NAME: OCIObjectMarkDelete - OCI "delete" an instance given a Pointer
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ instance (IN) - pointer to the instance
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The instance must be standalone.
+ - If the instance is a referenceable object, then it must be pinned.
+ DESCRIPTION:
+
+ FOR PERSISTENT OBJECTS:
+ The object is marked deleted. The memory of the object is not freed.
+ The object is deleted in the server when the object is flushed.
+
+ FOR TRANSIENT OBJECTS:
+ The object is marked deleted. The memory of the object is not freed.
+
+ FOR VALUES:
+ This function frees a value immediately.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*---------------------------- OCIObjectFlush -------------------------------*/
+sword OCIObjectFlush( OCIEnv *env, OCIError *err, void *object );
+/*
+ NAME: OCIObjectFlush - OCI flush a persistent object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ object (IN) - pointer to the persistent object
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The specified object must be pinned.
+ DESCRIPTION:
+ This function flushes a modified persistent object to the server.
+ An exclusive lock is obtained implicitly for the object when flushed.
+
+ When the object is written to the server, triggers may be fired.
+ Objects can be modified by the triggers at the server. To keep the
+ objects in the object cache being coherent with the database, the
+ clients can free or refresh the objects in the cache.
+
+ This function will return an error for transient objects and values.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*------------------------ OCIObjectRefresh ---------------------------------*/
+sword OCIObjectRefresh( OCIEnv *env, OCIError *err, void *object );
+/*
+ NAME: OCIObjectRefresh - OCI refresh a persistent object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ object (IN) - pointer to the persistent object
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The specified object must be pinned.
+ DESCRIPTION:
+ This function refreshes an unmarked object with data retrieved from the
+ latest snapshot in the server. An object should be refreshed when the
+ objects in the cache are inconsistent with the objects at
+ the server:
+ 1) When an object is flushed to the server, triggers can be fired to
+ modify more objects in the server. The same objects (modified by
+ the triggers) in the object cache become obsolete.
+ 2) When the user issues a SQL or executes a PL/SQL procedure to modify
+ any object in the server, the same object in the cache becomes
+ obsolete.
+
+ The object that is refreshed will be 'replaced-in-place'. When an
+ object is 'replaced-in-place', the top level memory of the object will
+ be reused so that new data can be loaded into the same memory address.
+ The top level memory of the null structre is also reused. Unlike the
+ top level memory chunk, the secondary memory chunks may be resized and
+ reallocated. The client should be careful when holding onto a pointer
+ to the secondary memory chunk (e.g. assigning the address of a
+ secondary memory to a local variable), since this pointer can become
+ invalid after the object is refreshed.
+
+ The object state will be modified as followed after being refreshed:
+ - existent : set to appropriate value
+ - pinned : unchanged
+ - allocation duration : unchanged
+ - pin duration : unchanged
+
+ This function is an no-op for transient objects or values.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*---------------------------- OCIObjectCopy --------------------------------*/
+sword OCIObjectCopy( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
+ void *source, void *null_source,
+ void *target, void *null_target, OCIType *tdo,
+ OCIDuration duration, ub1 option );
+/*
+ NAME: OCIObjectCopy - OCI copy one instance to another
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ svc (IN) - OCI service context handle
+ source (IN) - pointer to the source instance
+ null_source (IN) - pointer to the null structure of the source
+ target (IN) - pointer to the target instance
+ null_target (IN) - pointer to the null structure of the target
+ tdo (IN) - the TDO for both source and target
+ duration (IN) - allocation duration of the target memory
+ option (IN) - specify the copy option:
+ OROOCOSFN - Set Reference to Null. All references
+ in the source will not be copied to the target. The
+ references in the target are set to null.
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - If source or target is referenceable, it must be pinned.
+ - The target or the containing instance of the target must be already
+ be instantiated (e.g. created by OCIObjectNew()).
+ - The source and target instances must be of the same type. If the
+ source and target are located in a different databases, then the
+ same type must exist in both databases.
+ DESCRIPTION:
+ This function copies the contents of the 'source' instance to the
+ 'target' instance. This function performs a deep-copy such that the
+ data that is copied/duplicated include:
+ a) all the top level attributes (see the exceptions below)
+ b) all the secondary memory (of the source) that is reachable from the
+ top level attributes.
+ c) the null structure of the instance
+
+ Memory is allocated with the specified allocation duration.
+
+ Certain data items are not copied:
+ a) If the option OCI_OBJECTCOPY_NOREF is specified, then all references
+ in the source are not copied. Instead, the references in the target
+ are set to null.
+ b) If the attribute is a LOB, then it is set to null.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*---------------------------- OCIObjectGetTypeRef --------------------------*/
+sword OCIObjectGetTypeRef( OCIEnv *env, OCIError *err, void *instance,
+ OCIRef *type_ref );
+/*
+ NAME: OCIObjectGetTypeRef - get the type reference of a standalone object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ instance (IN) - pointer to an standalone instance
+ type_ref (OUT) - reference to the type of the object. The reference
+ must already be allocated.
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The instance must be standalone.
+ - If the object is referenceable, the specified object must be pinned.
+ - The reference must already be allocated.
+ DESCRIPTION:
+ This function returns a reference to the TDO of a standalone instance.
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*--------------------------- OCIObjectGetObjectRef -------------------------*/
+sword OCIObjectGetObjectRef( OCIEnv *env, OCIError *err, void *object,
+ OCIRef *object_ref );
+/*
+ NAME: OCIObjectGetObjectRef - OCI get the object reference of an
+ referenceable object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ object (IN) - pointer to a persistent object
+ object_ref (OUT) - reference of the given object. The reference must
+ already be allocated.
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The specified object must be pinned.
+ - The reference must already be allocated.
+ DESCRIPTION:
+ This function returns a reference to the given object. It returns an
+ error for values.
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*--------------------------- OCIObjectMakeObjectRef -----------------------*/
+sword OCIObjectMakeObjectRef( OCIEnv *env, OCIError *err,
+ const OCISvcCtx *svc, void * table,
+ void **values, ub4 array_len,
+ OCIRef *object_ref );
+/*
+ NAME: OCIObjectMakeObjectRef - OCI Create an object reference to a
+ referenceable object.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ svc (IN) - the service context
+ table (IN) - A pointer to the table object (must be pinned)
+ attrlist (IN) - A list of values (OCI type values) from which
+ the ref is to be created.
+ attrcnt (IN) - The length of the attrlist array.
+ object_ref (OUT) - reference of the given object. The reference must
+ already be allocated.
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The specified table object must be pinned.
+ - The reference must already be allocated.
+ DESCRIPTION:
+ This function creates a reference given the values that make up the
+ reference and also a pointer to the table object.
+ Based on the table's OID property, whether it is a pk based OID or
+ a system generated OID, the function creates a sys-generated REF or
+ a pk based REF.
+ In case of system generated REFs pass in a OCIRaw which is 16 bytes
+ long contatining the sys generated OID.
+ In case of PK refs pass in the OCI equivalent for numbers, chars etc..
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*--------------------------- OCIObjectGetPrimaryKeyTypeRef --------------- */
+sword OCIObjectGetPrimaryKeyTypeRef( OCIEnv *env, OCIError *err,
+ const OCISvcCtx *svc, void *table,
+ OCIRef *type_ref );
+/*
+ NAME: OCIObjectGetPrimaryKeyTypeRef - OCI get the REF to the pk OID type
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ svc (IN) - the service context
+ table (IN) - pointer to the table object
+ type_ref (OUT) - reference of the pk type. The reference must
+ already be allocated.
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The specified table object must be pinned.
+ - The reference must already be allocated.
+ DESCRIPTION:
+ This function returns a reference to the pk type. It returns an
+ error for values. If the table is not a Pk oid table/view, then
+ it returns error.
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*-------------------------- OCIObjectGetInd --------------------------------*/
+sword OCIObjectGetInd( OCIEnv *env, OCIError *err, void *instance,
+ void **null_struct );
+/*
+ NAME: OCIObjectGetInd - OCI get the null structure of a standalone object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ instance (IN) - pointer to the instance
+ null_struct (OUT) - null structure
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The object must be standalone.
+ - If the object is referenceable, the specified object must be pinned.
+ DESCRIPTION:
+ This function returns the null structure of an instance. This function
+ will allocate the top level memory of the null structure if it is not
+ already allocated. If an null structure cannot be allocated for the
+ instance, then an error is returned. This function only works for
+ ADT or row type instance.
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*------------------------- OCIObjectExists --------------------------------*/
+sword OCIObjectExists(OCIEnv *env, OCIError *err, void *ins, boolean *exist);
+/*
+ NAME: OCIObjectExist - OCI checks if the object exists
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ ins (IN) - pointer to an instance
+ exist (OUT) - return TRUE if the object exists
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The object must be standalone.
+ - if object is a referenceable, it must be pinned.
+ DESCRIPTION:
+ This function returns the existence of an instance. If the instance
+ is a value, this function always returns TRUE.
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*------------------------- OCIObjectGetProperty ---------------------------*/
+sword OCIObjectGetProperty(OCIEnv *envh, OCIError *errh, const void *obj,
+ OCIObjectPropId propertyId,
+ void *property, ub4 *size );
+/*
+ NAME: OCIObjectGetProperty - OCIObject Get Property of given object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ obj (IN) - object whose property is returned
+ propertyId (IN) - id which identifies the desired property
+ property (OUT) - buffer into which the desired property is
+ copied
+ size (IN/OUT) - on input specifies the size of the property buffer
+ passed by caller, on output will contain the
+ size in bytes of the property returned.
+ This parameter is required for string type
+ properties only (e.g OCI_OBJECTPROP_SCHEMA,
+ OCI_OBJECTPROP_TABLE). For non-string
+ properties this parameter is ignored since
+ the size is fixed.
+ DESCRIPTION:
+ This function returns the specified property of the object.
+ The desired property is identified by 'propertyId'. The property
+ value is copied into 'property' and for string typed properties
+ the string size is returned via 'size'.
+
+ Objects are classified as persistent, transient and value
+ depending upon the lifetime and referenceability of the object.
+ Some of the properties are applicable only to persistent
+ objects and some others only apply to persistent and
+ transient objects. An error is returned if the user tries to
+ get a property which in not applicable to the given object.
+ To avoid such an error, the user should first check whether
+ the object is persistent or transient or value
+ (OCI_OBJECTPROP_LIFETIME property) and then appropriately
+ query for other properties.
+
+ The different property ids and the corresponding type of
+ 'property' argument is given below.
+
+ OCI_OBJECTPROP_LIFETIME
+ This identifies whether the given object is a persistent
+ object (OCI_OBJECT_PERSISTENT) or a
+ transient object (OCI_OBJECT_TRANSIENT) or a
+ value instance (OCI_OBJECT_VALUE).
+ 'property' argument must be a pointer to a variable of
+ type OCIObjectLifetime.
+
+ OCI_OBJECTPROP_SCHEMA
+ This returns the schema name of the table in which the
+ object exists. An error is returned if the given object
+ points to a transient instance or a value. If the input
+ buffer is not big enough to hold the schema name an error
+ is returned, the error message will communicate the
+ required size. Upon success, the size of the returned
+ schema name in bytes is returned via 'size'.
+ 'property' argument must be an array of type text and 'size'
+ should be set to size of array in bytes by the caller.
+
+ OCI_OBJECTPROP_TABLE
+ This returns the table name in which the object exists. An
+ error is returned if the given object points to a
+ transient instance or a value. If the input buffer is not
+ big enough to hold the table name an error is returned,
+ the error message will communicate the required size. Upon
+ success, the size of the returned table name in bytes is
+ returned via 'size'. 'property' argument must be an array
+ of type text and 'size' should be set to size of array in
+ bytes by the caller.
+
+ OCI_OBJECTPROP_PIN_DURATION
+ This returns the pin duration of the object.
+ An error is returned if the given object points to a value
+ instance. Valid pin durations are: OCI_DURATION_SESSION and
+ OCI_DURATION_TRANS.
+ 'property' argument must be a pointer to a variable of type
+ OCIDuration.
+
+ OCI_OBJECTPROP_ALLOC_DURATION
+ This returns the allocation duration of the object.
+ Valid allocation durations are: OCI_DURATION_SESSION and
+ OCI_DURATION_TRANS.
+ 'property' argument must be a pointer to a variable of type
+ OCIDuration.
+
+ OCI_OBJECTPROP_LOCK
+ This returns the lock status of the
+ object. The possible lock status is enumerated by OCILockOpt.
+ An error is returned if the given object points to a transient
+ or value instance.
+ 'property' argument must be a pointer to a variable of
+ type OCILockOpt.
+ Note, the lock status of an object can also be retrieved by
+ calling OCIObjectIsLocked().
+
+ OCI_OBJECTPROP_MARKSTATUS
+ This returns the status flag which indicates whether the
+ object is a new object, updated object and/or deleted object.
+ The following macros can be used to test the mark status
+ flag:
+
+ OCI_OBJECT_IS_UPDATED(flag)
+ OCI_OBJECT_IS_DELETED(flag)
+ OCI_OBJECT_IS_NEW(flag)
+ OCI_OBJECT_IS_DIRTY(flag)
+
+ An object is dirty if it is a new object or marked deleted or
+ marked updated.
+ An error is returned if the given object points to a transient
+ or value instance. 'property' argument must be of type
+ OCIObjectMarkStatus.
+
+ OCI_OBJECTPROP_VIEW
+ This identifies whether the specified object is a view object
+ or not. If property value returned is TRUE, it indicates the
+ object is a view otherwise it is not.
+ 'property' argument must be of type boolean.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR. Possible errors are TBD
+ */
+
+/*---------------------------- OCIObjectIsLocked --------------------------*/
+sword OCIObjectIsLocked( OCIEnv *env, OCIError *err, void *ins,
+ boolean *lock);
+/*
+ NAME: OCIObjectIsLocked - OCI get the lock status of a standalone object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ ins (IN) - pointer to an instance
+ lock (OUT) - return value for the lock status.
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The instance must be standalone.
+ - If the object is referenceable, the specified object must be pinned.
+ DESCRIPTION:
+ This function returns the lock status of an instance. If the instance
+ is a value, this function always returns FALSE.
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*------------------------- OCIObjectIsDirty ------------------------------*/
+sword OCIObjectIsDirty( OCIEnv *env, OCIError *err, void *ins,
+ boolean *dirty);
+/*
+ NAME: OCIObjectIsDirty - OCI get the dirty status of a standalone object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ ins (IN) - pointer to an instance
+ dirty (OUT) - return value for the dirty status.
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ - The instance must be standalone.
+ - if instance is an object, the instance must be pinned.
+ DESCRIPTION:
+ This function returns the dirty status of an instance. If the instance
+ is a value, this function always returns FALSE.
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*--------------------------- OCIObjectPinTable -----------------------------*/
+sword OCIObjectPinTable( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
+ const oratext *schema_name,
+ ub4 s_n_length, const oratext *object_name, ub4 o_n_length,
+ const OCIRef *scope_obj_ref, OCIDuration pin_duration,
+ void ** object );
+/*
+ NAME: OCIObjectPinTable - OCI get table object
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ svc (IN) - OCI service context handle
+ schema_name (IN, optional) - schema name of the table
+ s_n_length (IN, optional) - length of the schema name
+ object_name (IN) - name of the table
+ o_n_length (IN) - length of the table name
+ scope_obj_ref (IN, optional) - reference of the scoping object
+ pin_duration (IN) - pin duration. See description in OCIObjectPin().
+ object (OUT) - the pinned table object
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ DESCRIPTION:
+ This function pin a table object with the specified pin duration.
+ The client can unpin the object by calling OCIObjectUnpin(). See
+ OCIObjectPin() and OCIObjectUnpin() for more information about pinning
+ and unpinning.
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*------------------------- OCIObjectArrayPin -------------------------------*/
+sword OCIObjectArrayPin(OCIEnv *env, OCIError *err, OCIRef **ref_array,
+ ub4 array_size, OCIComplexObject **cor_array,
+ ub4 cor_array_size, OCIPinOpt pin_option,
+ OCIDuration pin_duration, OCILockOpt lock,
+ void **obj_array, ub4 *pos );
+/*
+ NAME: OCIObjectArrayPin - ORIO array pin
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ ref_array (IN) - array of references to be pinned
+ array_size (IN) - number of elements in the array of references
+ pin_option (IN) - pin option. See OCIObjectPin().
+ pin_duration (IN) - pin duration. See OCIObjectPin().
+ lock_option (IN) - lock option. See OCIObjectPin().
+ obj_array (OUT) - If this argument is not NULL, the pinned objects
+ will be returned in the array. The user must
+ allocate this array with element type being
+ 'void *'. The size of this array is identical to
+ 'array'.
+ pos (OUT) - If there is an error, this argument will contain
+ the element that is causing the error. Note that
+ this argument is set to 1 for the first element in
+ the ref_array.
+ REQUIRE:
+ - a valid OCI environment handle must be given.
+ - If 'obj_array' is not NULL, then it must already be allocated and
+ the size of 'obj_array' is 'array_size'.
+ DESCRIPTION:
+ This function pin an array of references. All the pinned objects are
+ retrieved from the database in one network roundtrip. If the user
+ specifies an output array ('obj_array'), then the address of the
+ pinned objects will be assigned to the elements in the array. See
+ OCIObjectPin() for more information about pinning.
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*---------------------------------------------------------------------------*/
+/* HEAP/CACHE OPERATIONS */
+/*---------------------------------------------------------------------------*/
+
+/*--------------------------- OCICacheFlush ---------------------------------*/
+sword OCICacheFlush( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
+ void *context, OCIRef *(*get)(void *context, ub1 *last),
+ OCIRef **ref );
+/*
+ NAME: OCICacheFlush - OCI flush persistent objects
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ svc (IN) [optional] - OCI service context. If null pointer is
+ specified, then the dirty objects in all connections
+ will be flushed.
+ context (IN) [optional] - specifies an user context that is an
+ argument to the client callback function 'get'. This
+ parameter is set to NULL if there is no user context.
+ get (IN) [optional] - an client-defined function which acts an
+ iterator to retrieve a batch of dirty objects that need
+ to be flushed. If the function is not NULL, this function
+ will be called to get a reference of a dirty object.
+ This is repeated until a null reference is returned by
+ the client function or the parameter 'last' is set to
+ TRUE. The parameter 'context' is passed to get()
+ for each invocation of the client function. This
+ parameter should be NULL if user callback is not given.
+ If the object that is returned by the client function is
+ not a dirtied persistent object, the object is ignored.
+ All the objects that are returned from the client
+ function must be from newed or pinned the same service
+ context, otherwise, an error is signalled. Note that the
+ returned objects are flushed in the order in which they
+ are marked dirty.
+ ref (OUT) [optional] - if there is an error in flushing the
+ objects, (*ref) will point to the object that
+ is causing the error. If 'ref' is NULL, then the object
+ will not be returned. If '*ref' is NULL, then a
+ reference will be allocated and set to point to the
+ object. If '*ref' is not NULL, then the reference of
+ the object is copied into the given space. If the
+ error is not caused by any of the dirtied object,
+ the given ref is initalized to be a NULL reference
+ (OCIRefIsNull(*ref) is TRUE).
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ DESCRIPTION:
+ This function flushes the modified persistent objects from the
+ environment heap to the server. The objects are flushed in the order
+ that they are marked updated or deleted.
+
+ See OCIObjectFlush() for more information about flushing.
+
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*--------------------------- OCICacheRefresh -------------------------------*/
+sword OCICacheRefresh(OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
+ OCIRefreshOpt option, void *context,
+ OCIRef *(*get)(void *context), OCIRef **ref);
+/*
+ NAME: OCICacheRefresh - OCI ReFreSh persistent objects
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ svc (IN) [optional] - OCI service context. If null pointer is
+ specified, then the persistent objects in all connections
+ will be refreshed.
+ option (IN) [optional] - if OCI_REFRESH_LOAD is specified, all
+ objects that is loaded within the transaction are
+ refreshed. If the option is OCI_REFERSH_LOAD and the
+ parameter 'get' is not NULL, this function will ignore
+ the parameter.
+ context (IN) [optional] - specifies an user context that is an
+ argument to the client callback function 'get'. This
+ parameter is set to NULL if there is no user context.
+ get (IN) [optional] - an client-defined function which acts an
+ iterator to retrieve a batch of objects that need to be
+ refreshed. If the function is not NULL, this function
+ will be called to get a reference of an object. If
+ the reference is not NULL, then the object will be
+ refreshed. These steps are repeated until a null
+ reference is returned by this function. The parameter
+ 'context' is passed to get() for each invocation of the
+ client function. This parameter should be NULL if user
+ callback is not given.
+ ref (OUT) [optional] - if there is an error in refreshing the
+ objects, (*ref) will point to the object that
+ is causing the error. If 'ref' is NULL, then the object
+ will not be returned. If '*ref' is NULL, then a
+ reference will be allocated and set to point to the
+ object. If '*ref' is not NULL, then the reference of
+ the object is copied into the given space. If the
+ error is not caused by any of the object,
+ the given ref is initalized to be a NULL reference
+ (OCIRefIsNull(*ref) is TRUE).
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ DESCRIPTION:
+ This function refreshes all pinned persistent objects. All unpinned
+ persistent objects are freed. See OCIObjectRefresh() for more
+ information about refreshing.
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*---------------------------- OCICacheUnpin --------------------------------*/
+sword OCICacheUnpin( OCIEnv *env, OCIError *err, const OCISvcCtx *svc );
+/*
+ NAME: OCICacheUnpin - OCI UNPin objects
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ svc (IN) [optional] - OCI service context. If null pointer is
+ specified, then the objects in all connections
+ will be unpinned.
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ DESCRIPTION:
+ If a connection is specified, this function completely unpins the
+ persistent objects in that connection. Otherwise, all persistent
+ objects in the heap are completely unpinned. All transient objects in
+ the heap are also completely unpinned. See OCIObjectUnpin() for more
+ information about unpinning.
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/*----------------------------- OCICacheFree --------------------------------*/
+sword OCICacheFree( OCIEnv *env, OCIError *err, const OCISvcCtx *svc );
+/*
+ NAME: OCICacheFree - OCI FREe instances
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ svc (IN) [optional] - OCI service context. If null pointer is
+ specified, then the objects in all connections
+ will be freed.
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ DESCRIPTION:
+ If a connection is specified, this function frees the persistent
+ objects, transient objects and values allocated for that connection.
+ Otherwise, all persistent objects, transient objects and values in the
+ heap are freed. Objects are freed regardless of their pin count. See
+ OCIObjectFree() for more information about freeing an instance.
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+*/
+
+/*---------------------------- OCICacheUnmark -------------------------------*/
+sword OCICacheUnmark( OCIEnv *env, OCIError *err, const OCISvcCtx *svc );
+/*
+ NAME: OCICacheUnmark - OCI Unmark all dirty objects
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns
+ OCI_ERROR. The error recorded in 'err' can be
+ retrieved by calling OCIErrorGet().
+ svc (IN) [optional] - OCI service context. If null pointer is
+ specified, then the objects in all connections
+ will be unmarked.
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ DESCRIPTION:
+ If a connection is specified, this function unmarks all dirty objects
+ in that connection. Otherwise, all dirty objects in the cache are
+ unmarked. See OCIObjectUnmark() for more information about unmarking
+ an object.
+ RETURNS:
+ if environment handle or error handle is null, return
+ OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+
+sword OCIDurationBegin( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
+ OCIDuration parent, OCIDuration *dur );
+/*
+ NAME: OCIDurationBegin - OCI DURATION BEGIN
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ This should be passed NULL, when cartridge services
+ are to be used.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ svc (IN/OUT) - OCI service handle.
+ parent (IN) - parent for the duration to be started.
+ dur (OUT) - newly created user duration
+ REQUIRES:
+ - a valid OCI environment handle must be given for non-cartridge
+ services.
+ - For cartridge services, NULL should be given for environment handle
+ - A valid service handle must be given in all cases.
+ DESCRIPTION:
+ This function starts a new user duration. A user can have multiple
+ active user durations simultaneously. The user durations do not have
+ to be nested.
+
+ The object subsystem predefines 3 durations :
+ 1) session - memory allocated with session duration comes from
+ the UGA heap (OCI_DURATION_SESSION). A session
+ duration terminates at the end of the user session.
+ 2) transaction - memory allocated with transaction duration comes
+ from the UGA heap (OCI_DURATION_TRANS). A trans-
+ action duration terminates at the end of the user
+ transaction.
+ 3) call - memory allocated with call duration comes from PGA
+ heap (OCI_DURATION_CALL). A call duration terminates
+ at the end of the user call.
+
+ Each user duration has a parent duration. A parent duration can be a
+ predefined duration or another user duration. The relationship between
+ a user duration and its parent duration (child duration) are:
+
+ 1) An user duration is nested within the parent duration. When its
+ parent duration terminates, the user duration will also terminate.
+ 2) The memory allocated with an user duration comes from the heap of
+ its parent duration. For example, if the parent duration of an
+ user duration is call, then the memory allocated with the user
+ duration will also come from the PGA heap.
+
+ This function can be used as both part of cartridge services as well
+ as without cartridge services.
+ The difference in the function in the case of cartridge and
+ non-cartridge services is:
+ In case of cartridge services, as descibed above a new user
+ duration is created as a child of the "parent" duration.
+ But when used for non-cartridge purposes, when a pre-defined
+ duration is passed in as parent, it is mapped to the cache duration
+ for that connection (which is created if not already present) and
+ the new user duration will be child of the cache duration.
+
+ RETURNS:
+ if environment handle and service handle is null or if error
+ handle is null return OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+
+sword OCIDurationEnd( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
+ OCIDuration duration );
+/*
+ NAME: OCIDurationEnd - OCI DURATION END
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ This should be passed NULL, when cartridge services
+ are to be used.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ svc (IN/OUT) - OCI service handle.
+ dur (OUT) - a previously created user duration using
+ OCIDurationBegin()
+ REQUIRES:
+ - a valid OCI environment handle must be given for non-cartridge
+ services.
+ - For cartridge services, NULL should be given for environment handle
+ - A valid service handle must be given in all cases.
+ DESCRIPTION:
+ This function terminates a user duration. All memory allocated for
+ this duration is freed.
+
+ This function can be used as both part of cartridge services as well
+ as without cartridge services. In both cased, the heap duration
+ is freed and all the allocated memory for that duration is freed.
+ The difference in the function in the case of cartridge and
+ non-cartridge services is:
+ In case of non-cartridge services, if the duration is pre-
+ defined, the associated cache duration (see OCIDurationBegin())
+ is also terminated and the following is done.
+ 1) The child durations are terminated.
+ 2) All objects pinned for this duration are unpinned.
+ 3) All instances allocated for this duration are freed.
+
+ In case of cartridge services, only the heap duration is
+ freed. All the context entries allocated for that duration are
+ freed from the context hash table..
+
+ RETURNS:
+ if environment handle and service handle is null or if error
+ handle is null return OCI_INVALID_HANDLE.
+ if operation suceeds, return OCI_SUCCESS.
+ if operation fails, return OCI_ERROR.
+ */
+
+/******************************************************************************
+** DO NOT USE THE FUNCTIONS BELOW! **
+** UNSUPPORTED INTERFACE **
+** WILL BE REMOVED/CHANGED IN A FUTURE RELEASE **
+******************************************************************************/
+
+sword OCIDurationGetParent( OCIEnv *env, OCIError *err,
+ OCIDuration duration, OCIDuration *parent );
+
+sword OCIObjectAlwaysLatest( OCIEnv *env, OCIError *err, void *object );
+
+sword OCIObjectNotAlwaysLatest( OCIEnv *env, OCIError *err,
+ void *object );
+
+sword OCIObjectFlushRefresh( OCIEnv *env, OCIError *err, void *object);
+
+sword OCIObjectIsLoaded( OCIEnv *env, OCIError *err, void *ins,
+ boolean *load);
+
+sword OCIObjectIsDirtied( OCIEnv *env, OCIError *err, void *ins,
+ boolean *dirty);
+
+sword OCICacheGetObjects( OCIEnv *env, OCIError *err,
+ const OCISvcCtx *svc,
+ OCIObjectProperty property,
+ void *client_context,
+ void (*client_callback)(
+ void *client_context,
+ void *object ));
+
+sword OCICacheRegister( OCIEnv *env, OCIError *err,
+ OCIObjectEvent event,
+ void *client_context,
+ void (*client_callback)(
+ void *client_context,
+ OCIObjectEvent event,
+ void *object));
+
+sword OCICacheFlushRefresh( OCIEnv *env, OCIError *err,
+ const OCISvcCtx *svc, void *context,
+ OCIRef *(*get)(void *context, ub1 *last),
+ OCIRef **ref );
+
+sword OCIObjectSetData(OCIEnv *env, OCIError *err, void *obj_hdr,
+ void *data);
+
+sword OCIObjectGetNewOID(OCIEnv *env, OCIError *err, OCISvcCtx *svc,
+ ub1 *oid);
+
+
+#endif /* ORI_ORACLE */
--- /dev/null
+/* Copyright (c) 1994, 2006, Oracle. All rights reserved. */
+
+/*
+ Author: Tin Nguyen
+ Date: 02/07/94
+ Source documents: "Functional Specification for C Object Interface, Object
+ Management Subsystem", "Oracle C Coding Standards
+ version 2.2", and the header file template
+ Rule sets: the generic and .h file rule sets
+ Quality status: not exited
+ Identification tag: [ one or more letters to identify the .h file ]
+ Revision code: [ date of the last revision of the .h file ]
+
+ Note to the user of this header file:
+
+ Anything in this header file that is marked private is not supported and
+ must not be used. Private sections are included in the header file to
+ improve internal maintenance.
+
+ NAME
+
+ ORID - Oracle Object Interface for Dynamic Data Access
+
+ DESCRIPTION
+
+ This file contains declarations for C object interface functions including
+ the dynamic object data access operations that allow callers to dynamically
+ access and manipulate objects; these operations include getting and setting
+ attributes of an object. These dynamic object operations are for accessing
+ and manipulation objects whose types are not known at compile-time.
+
+ RELATED DOCUMENTS
+
+ Functional Specification for C Object Interface / Object Management System
+
+ PUBLIC FUNCTIONS
+
+ OCIObjectSetAttr - ORID SET attribute value
+ OCIObjectGetAttr - ORID GET attribute value
+
+ PRIVATE FUNCTIONS
+
+ None
+
+ EXAMPLES
+
+ EXAMPLE 1
+
+ /o
+ o This example illustrates how an interative program can use the dynamic
+ o attribute access to display and modify attributes of an ADT instance.
+ o The interactive program does not know the type of the object at
+ o compile time.
+ o/
+
+ void display(adt_ref, object, null_struct, names, names_count,
+ names_length, indexes, indexes_count)
+ {
+ /o Pin the ADT o/
+ if (OCIObjectPin(env, &adt_ref, OROOPOCUR, OROOPDTRA, OROOLMNON, &adt)
+ != OROSTASUC)
+ /o error handling code o/
+
+ /o
+ o Call the type manager to obtain all the attributes in the object.
+ o Display the content of each attribute in the ADT instance. If the
+ o attribute is an array, display each element of the array. If the
+ o attribute is an ADT instance, recursively call this routine to
+ o display the embedded ADT instance.
+ o/
+ numAttrs = OCITypeAttrs(env, adt);
+ for (i= 1; i <= numAttrs; i++)
+ {
+ /o get attribute descriptor o/
+ if (ortgabp(env, adt, i, &ado_ref, &ado) != OROSTASUC)
+ /o error handling code o/
+
+ /o get attribute name o/
+ names[names_count] = OCITypeElemName(env, ado,
+ &names_length[names_count]);
+
+ /o dynamically get the attr o/
+ if (OCIObjectGetAttr(env, object, null_struct, 0, adt_ref, names,
+ names_length, names_count+1, indexes, indexes_count, 0,
+ &null, &null_info, &attr) != OROSTASUC)
+ /o error handling code o/
+
+ /o check if attribute is null o/
+ if (null) continue;
+
+ /o get typecode of attribute o/
+ typecode = OCITypeElemTypeCode(env, ado);
+
+ /o if attribute is a varray, display each element in varray o/
+ if (typecode == OCI_TYPECODE_VARRAY)
+ {
+ /o get the reference to the type of the element of the array o/
+ if (OCITypeElemParameterizedTyper(env, ado, &attr_type_ref)
+ != OROSTASUC)
+ /o error handling code o/
+
+ /o get the size of array o/
+ if (orlasiz(env, &attr_type_ref, (orlva *)attr,
+ &numElm) != OROSTASUC)
+ /o error handling code o/
+
+ /o get the typecode of the element of the array o/
+ if (ortty2r(env, attr_type_ref, &typecode) != OROSTASUC)
+ /o error handling code o/
+
+ /o iterate the array o/
+ for (j=0; j < numElm; j++)
+ {
+ /o get an element in the array o/
+ if (OCIObjectGetAttr(env, attr, null_info, j+1, attr_type_ref,
+ names, names_length, 0, indexes, 0, 0, &null, &null_info,
+ &element) != OROSTASUC)
+ /o error handling code o/
+
+ /o check if element is null o/
+ if (null) continue;
+
+ /o if attr is an ADT instance, recursively call this routine o/
+ if (typecode == OCI_TYPECODE_ADT || typecode ==
+ OCI_TYPECODE_UNNAMEDADT)
+ {
+ /o display the element as an adt o/
+ display(attr_type_ref, element, null_info, names, lengths,
+ 0, indexes, 0);
+ }
+
+ /o if attribute is scalar, print the value to the screen o/
+ else output_to_screen(element, typecode);
+ }
+ }
+
+ /o if attribute is an ADT instance, recursively call this routine o/
+ else if (typecode == OCI_TYPECODE_ADT || typecode ==
+ OCI_TYPECODE_UNNAMEDADT)
+ {
+ /o get the type ref of the attribute o/
+ if (ortgarf(env, ado, &attr_type_ref) != OROSTASUC)
+ /o error handling code o/
+
+ display(attr_type_ref, attr, null_info, 0, names, 0, names_length,
+ indexes, 0);
+ }
+
+ /o if attribute is scalar, print the value to the screen o/
+ else output_to_screen(attr, typecode);
+ }
+ }
+
+ /o ******** main routine *********** o/
+ ....
+
+ /o
+ o Allocate the arrays for storing the path expression
+ o/
+
+ /o get the tdo of type 'long' o/
+ if (orttypget(&env, con, "SYS", sizeof("SYS"), "SINT32", sizeof("SINT32"),
+ OROOPDSES, &long_ref, &long_tdo) != OROSTASUC)
+ /o error handling code o/
+
+ /o get the tdo of type 'varchar' o/
+ if (orttypget(&env, con, "SYS", sizeof("SYS"), "SQL_VARCHAR2",
+ sizeof("SQL_VARCHAR2"), OROOPDSES, &vchar_ref, &vchar_tdo)
+ != OROSTASUC)
+ /o error handling code o/
+
+ /o allocate the varrays for the path expression o/
+ if (orlalloc(env, &vchar_ref, MAX_ARR_SIZE, &attr_names) != OROSTASUC)
+ /o error handling code o/
+
+ if (orlalloc(env, &long_ref, MAX_ARR_SIZE, &attr_name_lengths)
+ != OROSTASUC)
+ /o error handling code o/
+
+ if (orlalloc(env, &long_ref, MAX_ARR_SIZE, &attr_name_indexes)
+ != OROSTASUC)
+ /o error handling code o/
+
+ /o
+ o Get an ADT instance. The ref to the ADT instance can be obtained
+ o by through ORI or OSCI.
+ o/
+ if (OCIObjectPin(env, &obj_ref, OROOPOCUR, OROOPDTRA, OROOLMUPD, &object)
+ != OROSTASUC)
+ /o error handling code o/
+
+ /o get the null structure of the ADT instance o/
+ if (OCIObjectGetInd(gp, object, &null_struct) != OROSTASUC)
+ /o error handling code o/
+
+ /o
+ o Get the type of the ADT instance
+ o/
+
+ /o find out the type of the ADT instance o/
+ if (oriogto(env, object, &adt_ref) != OROSTASUC)
+ /o error handling code o/
+
+ /o display the object o/
+ display(adt_ref, object, null_struct, attr_names, 0, attr_names_lengths,
+ attr_names_indexes, 0);
+
+ /o After the object is displayed, the program waits for the user to
+ o respond. The user modifies the values of an attribute and the
+ o program generates a path expression for the attribute and calls
+ o OCIObjectSetAttr() to set the value.
+ o/
+
+ if (OCIObjectSetAttr(env, object, null_struct, adt_ref,
+ (text **)attr_names, (ub4 *)attr_name_lengths,
+ attr_names_count, (ub4 *)attr_array_indexes,
+ attr_array_indexes_count,
+ (void *)0, FALSE, (void *)value) != OROSTASUC)
+ /o error handling code o/
+
+ END OF EXAMPLE 1
+
+ NOTES
+
+ This file has been subsetted to contain only the routines that will
+ be in the first release.
+
+ MODIFIED
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ srseshad 03/12/03 - convert oci public api to ansi
+ aahluwal 06/03/02 - bug 2360115
+ bpalaval 02/09/01 - Change text to oratext.
+ whe 09/01/99 - 976457:check __cplusplus for C++ code
+ sthakur 09/18/97 - collection indexing not supported
+ cxcheng 08/05/97 - fix compile with short names
+ skrishna 03/18/97 - fix ifdef for supporting ansi and k&r proto-types
+ cxcheng 02/06/97 - take out short name support except with SLSHORTNAME
+ cxcheng 10/17/96 - final renaming of functions
+ jboonleu 10/07/96 - beautify with OCI long names
+ cxcheng 10/07/96 - change short names to long names for readability
+ jboonleu 09/27/96 - fix lint
+ jwijaya 07/03/96 - add ANSI prototypes
+ jboonleu 04/13/95 - new interface
+ jwijaya 10/11/94 - fix the sccs header and add namespace
+ tanguyen 08/22/94 - fix example
+ tanguyen 08/09/94 - remove Sccsid declaration
+ tanguyen 07/20/94 - fix OCIObjectSetAttr and OCIObjectGetAttr to
+ use position descriptor
+ tanguyen 07/18/94 - change 'object' type to become ptr to object
+ tanguyen 06/30/94 - Fix the ORID_ORACLE ifdef
+ tanguyen 06/27/94 - update to template format
+ skotsovo 05/12/94 - replace ado with attribute position
+ jweisz 05/11/94 - test new checkin facility
+ jwijaya 05/05/94 - orienv/ref/typ -> oroenv/ref/typ
+ jwijaya 02/07/94 - Creation
+
+*/
+
+#ifndef ORATYPES
+#include <oratypes.h>
+#endif
+#ifndef ORO_ORACLE
+#include <oro.h>
+#endif
+#ifndef OCI_ORACLE
+#include <oci.h>
+#endif
+
+#ifndef ORID_ORACLE
+#define ORID_ORACLE
+
+#ifdef SLSHORTNAME
+
+#define OCIObjectSetAttr oridset
+#define OCIObjectGetAttr oridget
+
+#endif /* SLSHORTNAME */
+
+/*---------------------------------------------------------------------------*/
+/* PUBLIC FUNCTIONS */
+/*---------------------------------------------------------------------------*/
+
+/*-------------------------- OCIObjectSetAttr ----------------------------*/
+sword OCIObjectSetAttr( OCIEnv *env, OCIError *err, void *instance,
+ void *null_struct, struct OCIType *tdo,
+ const oratext **names, const ub4 *lengths,
+ const ub4 name_count, const ub4 *indexes,
+ const ub4 index_count, const OCIInd null_status,
+ const void *attr_null_struct, const void *attr_value );
+/*
+ NAME: OCIObjectSetAttr - ORID SET value
+ PARAMETERS:
+ env (IN) - OCI environment handle initialized in object mode
+ err (IN) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ instance (IN) - pointer to an ADT instance
+ null_struct (IN) - the null structure of the ADT instance or array
+ tdo (IN) - pointer to the TDO
+ names (IN) - array of attribute names. This is used to specify
+ the names of the attributes in the path expression.
+ lengths (IN) - array of lengths of attribute names.
+ name_count (IN) - number of element in the array 'names'.
+ indexes (IN) [OPTIONAL] - currently NOT SUPPORTED, pass (ub4 *)0.
+ index_count (IN) [OPTIONAL] - currently NOT SUPPORTED, pass (ub4)0.
+ attr_null_status (IN) - the null status of the attribute if the type of
+ attribute is primitive.
+ attr_null_struct (IN) - the null structure of an ADT or collection
+ attribute.
+ attr_value (IN) - pointer to the attribute value.
+ REQUIRES:
+ DESCRIPTION:
+ This function set the attribute of the given object with the given
+ value. The position of the attribute is specified as a path
+ expression which is an array of names and an array of indexes.
+ RETURNS:
+ one of OROSTA*
+ EXAMPLES:
+ For path expression stanford.cs.stu[5].addr, the arrays will look like
+ names = {"stanford", "cs", "stu", "addr"}
+ lengths = {8, 2, 3, 4}
+ indexes = {5}
+
+ Also see the above example.
+ */
+
+/*-------------------------- OCIObjectGetAttr ----------------------------*/
+sword OCIObjectGetAttr( OCIEnv *env, OCIError *err, void *instance,
+ void *null_struct, struct OCIType *tdo,
+ const oratext **names, const ub4 *lengths,
+ const ub4 name_count, const ub4 *indexes,
+ const ub4 index_count, OCIInd *attr_null_status,
+ void **attr_null_struct, void **attr_value,
+ struct OCIType **attr_tdo );
+/*
+ NAME: OCIObjectGetAttr - ORID GET value
+ PARAMETERS:
+ env (IN) - OCI environment handle initialized in object mode
+ err (IN) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ instance (IN) - pointer to an ADT instance
+ null_struct (IN) - the null structure of the ADT instance or array
+ tdo (IN) - pointer to the TDO
+ names (IN) - array of attribute names. This is used to specify
+ the names of the attributes in the path expression.
+ lengths (IN) - array of lengths of attribute names.
+ name_count (IN) - number of element in the array 'names'.
+ indexes (IN) [OPTIONAL] - currently NOT SUPPORTED, pass (ub4 *)0.
+ index_count (IN) [OPTIONAL] - currently NOT SUPPORTED, pass (ub4)0.
+ attr_null_status (OUT) - the null status of the attribute if the type
+ of attribute is primitive.
+ attr_null_struct (OUT) - the null structure of an ADT or collection
+ attribute.
+ attr_value (OUT) - pointer to the attribute value.
+ attr_tdo (OUT) - pointer to the TDO of the attribute.
+ REQUIRES:
+ - a valid OCI environment handle must be given.
+ DESCRIPTION:
+ This function gets a value from an ADT instance or from an array.
+ If the parameter 'instance' points to an ADT instance, then the path
+ expression specifies the location of the attribute in the ADT.
+ It is assumed that the object is pinned and that the value returned
+ is valid until the object is unpinned.
+ RETURNS:
+ one of OROSTA*
+ EXAMPLES:
+ See example in OCIObjectSetAttr(). Also see the above example.
+ */
+
+#endif /* ORID_ORACLE */
--- /dev/null
+/* Copyright (c) 1993, 2006, Oracle. All rights reserved. */
+
+/*
+ Author: Srinath Krishnaswamy
+ Date: 11/24/93
+ Source documents: "Functional Specification for C Language Mapping of
+ OTS Types, Object Management Subsystem", "Oracle C
+ Coding Standards version 2.2", and the header file
+ template
+ Rule sets: the generic and .h file rule sets
+ Quality status: not exited
+ Identification tag: [ one or more letters to identify the .h file ]
+ Revision code: 11/24/93
+
+ NAME
+
+ ORL - ORacle's external C Language interface to primitive OTS types
+
+ DESCRIPTION
+
+ This header file contains C langauge interface to the OTS primitive
+ types. The interface includes C mapping of OTS primitive types and
+ the prototype of the pre-defined operations on the primitive types.
+
+ ***********************************************************************
+ *** NOTE: The OCI functions for objects requires the ***
+ *** application to be running in OBJECT mode. That is, during ***
+ *** process initialization OCIInitialize(), the mode ***
+ *** specified should be OBJECT mode. ***
+ ** OCIInitialize(OCI_OBJECT, ..); ***
+ ***********************************************************************
+
+ RELATED DOCUMENTS
+
+ [1] Krishnaswamy, Srinath and Nguyen, Tin A., "Functional Specification
+ for C Language Mapping of OTS Types, Object Management Subsystem",
+ March 1994.
+ [2] Nguyen, Tin A., "The Open Type System", Oracle Corporation,
+ February 1994.
+ [3] Klein, Jonathan D., "Large Field Management", Oracle Corporation,
+ October 1993.
+
+ PUBLIC FUNCTIONS
+
+ OCI - OCI functions to manipulate Oracle Number, float and decimal
+ ARITHMETIC
+ OCINumberInc - OCINumber INCrement (optimized)
+ OCINumberDec - OCINumber DECrement (optimized)
+ OCINumberAdd - OCINumber ADD numbers
+ OCINumberSub - OCINumber SUBtract numbers
+ OCINumberMul - OCINumber MULtiply numbers
+ OCINumberDiv - OCINumber DIVide numbers
+ OCINumberMod - OCINumber MODulo division
+ OCINumberIntPower - OCINumber integer PoWeR
+ OCINumberShift - OCINumber decimal ShiFT number
+ OCINumberNeg - OCINumber NEGate number
+ OCINumberAbs - OCINumber ABSolute value
+ OCINumberCeil - OCINumber CEiling of number
+ OCINumberFloor - OCINumber FLooR of number
+ OCINumberSqrt - OCINumber SQuare Root of number
+ OCINumberSign - OCINumber get SIGN of number
+ NATIVE TYPE CONVERSION
+ OCINumberToInt - OCINumber convert number TO machine-format Integer
+ OCINumberFromInt - OCINumber convert machine-format Integer TO Number
+ OCINumberToReal - OCINumber convert number TO machine-format Real
+ OCINumberToRealArray - OCINumber convert array of numbers TO
+ machine-format Real
+ OCINumberFromReal - OCINumber convert machine-format Real TO Number
+ TEXT STRING CONVERSION
+ OCINumberToText - OCINumber convert number TO String
+ OCINumberFromText - OCINumber convert String TO Number
+ COMPARISON
+ OCINumberCmp - OCINumber CoMPare numbers
+ OCINumberIsZero - OCINumber comparison with ZERo
+ OCINumberIsInt - OCINumber Is an Integer
+ ASSIGNMENT
+ OCINumberAssign - OCINumber ASsiGn number
+ OCINumberSetZero - OCINumber Set number to Zero value
+ OCINumberSetPi - OCINumber Set number to Pi
+ ROUNDING
+ OCINumberTrunc - OCINumber TRUncate an Oracle number
+ OCINumberRound - OCINumber ROUnd number
+ OCINumberPrec - OCINumber round to Precision digits
+ TRANSCENDENTAL
+ OCINumberSin - OCINumber SINe
+ OCINumberArcSin - OCINumber Arc SINe
+ OCINumberHypSin - OCINumber SiNe Hyperbolic
+ OCINumberCos - OCINumber COSine
+ OCINumberArcCos - OCINumber Arc COSine
+ OCINumberHypCos - OCINumber CoSine Hyperbolic
+ OCINumberTan - OCINumber TANgent
+ OCINumberArcTan - OCINumber Arc TANgent
+ OCINumberArcTan2 - OCINumber Arc TaNgent 2
+ OCINumberHypTan - OCINumber TaNgent Hyperbolic
+ OCINumberPower - OCINumber arbitrary Base EXponentiation
+ OCINumberExp - OCINumber EXPonentiation to base e
+ OCINumberLn - OCINumber Logarithm Natural
+ OCINumberLog - OCINumber LOGarithm to arbitrary base
+
+ OCIDate - OCI functions to manipulate OCI Date
+ OCIDateToExternal - OCIDate convert date to external form
+ OCIDateFromExternal - OCIDate convert external form of date into OCIDate
+ OCIDateAssign - OCIDate Assignment
+ OCIDateToText - OCIDate convert date TO String
+ OCIDateFromText - OCIDate convert String TO Date
+ OCIDateZoneToZone - OCIDate convert date from one time
+ Zone TO another Zone
+ OCIDateCompare - OCIDate CoMPare dates
+ OCIDateAddMonths - OCIDate ADd or subtract Months
+ OCIDateAddDays - OCIDate ADd or subtract Days
+ OCIDateLastDay - OCIDate get date of LaST day of month
+ OCIDateDaysBetween - OCIDate get number of days BeTWeen two dates
+ OCIDateNextDay - OCIDate get date of Next DaY
+ OCIDateCheck - OCIDate CHecK if the given date is valid
+ OCIDateSysDate - OCIDate get current SYStem date and time
+
+ OCIString - OCI String functions to manipulate Variable-length string
+ OCIStringAssign - OCIString Assign string to string
+ OCIStringAssignText - OCIString Assign Text string to string
+ OCIStringResize - OCIString ReSiZe string
+ OCIStringSize - OCIString get String Size
+ OCIStringPtr - OCIString get String PoinTeR
+ OCIStringAllocSize - OCIString get Allocated SiZe
+
+ OCIRaw - OCI Raw functions to manipulate variable-length raW
+ OCIRawAssignRaw - OCIRaw Assign Raw (of type OCIRaw*) to raw
+ (of type OCIRaw*)
+ OCIRawResize - OCIRaw Resize raw
+ OCIRawSize - OCIRaw get Raw Size
+ OCIRawPtr - OCIRaw get Raw data Pointer
+ OCIRawAllocSize - OCIRaw get Allocated Size
+
+ OCIColl - OCI Collection generic functions. These functions can be
+ used to manipulate both variable-length array (varray) and
+ nested table.
+ OCICollSize - OCIColl return current SIZe of the given collection
+ (in number of elements)
+ OCICollMax - OCIColl return the MAXimum number of elements in the
+ collection (i.e. upper-bound)
+ OCICollGetElem - OCIColl GET pointer to the element at the given
+ position
+ OCICollAssignElem - OCIColl assign to element at given index
+ OCICollAssign - OCIColl ASsiGn collection; perform deep-copy of source
+ collection to target collection
+ OCICollAppend - OCIColl aPPend the given element to the end of the
+ collection
+ OCICollTrim - OCIColl trim (delete) the given number of elements
+ from the end of the collection
+ OCICollIsLocator - OCIColl indicates whether a collection is locator
+ based or not.
+ OCIIterCreate - OCIColl Create an ITerator to scan the collection
+ elements
+ OCIIterDelete - OCIColl Delete ITerator
+ OCIIterInit - OCIColl Initialize ITerator to scan the given collection
+ OCIIterGetCurrent - OCIColl Iterator based, get CURrent
+ collection element
+ OCIIterNext - OCIColl Iterator based, get NeXT collection element
+ OCIIterPrev - OCIColl Iterator based, get PReVious collection element
+
+ OCITable - OCI functions to manipulate nested Table. The OCIColl*() and
+ OCITable*() functions can be used to manipulate nested table
+ OCITableDelete(i) - OCITable if element(i) exists then the element is
+ marked as deleted else the function returns false. So
+ delete's create "holes".
+ OCITableExists(i) - OCITable return true iff an element at
+ position i EXIsts
+ OCITableFirst - OCITable return the smallest value of i for which
+ exists(i) is true.
+ OCITableLast - OCITable return the largest value of i for which
+ exists(i) is true.
+ OCITableNext(i) - OCITable return pointer to the smallest position j,
+ greater than i, such that OCITableExists(j) is true
+ OCITablePrev(i) - OCITable return pointer to the largest position j,
+ less than i, such that OCITableExists(j) is true
+ OCITableSize - OCITable return current SIZe of the given nested table not
+ including deleted elements
+
+ OCIRef - OCI functions to manipulate object Reference
+ OCIRefClear - OCIRef CLeaR or nullify a ref
+ OCIRefAssign - OCIRef ASsiGn a ref to another
+ OCIRefIsEqual - OCIRef compare two refs for EQUality
+ OCIRefIsNull - OCIRef test if a ref is NULl
+ OCIRefFromHex - OCIRef convert a Hexadecimal string TO a Ref
+ OCIRefToHex - OCIRef convert a ref to a Hexadecimal string
+ OCIRefHexSize - OCIRef get size of buffer in bytes to store hexadecimal
+ string
+
+ OBSOLETE: to be replaced by functions from oci.h:
+
+ ORLL - ORL functions to manipulate lob Locators
+ orllasg - ORLL AsiGn one locator to another
+ orllequ - ORLL compare two locators for EQUality
+ orlliini - ORLL Is the locator INItialized?
+ orllgsz - ORLL Get locator SiZe
+ orllgcid - ORLL Get Character set ID
+
+ NOTE: The following are specific to FILE lobs:
+
+ orllsnm - ORLL Set directory alias and file NaMe in the locator
+ orllgnm - ORLL Get directory alias and file NaMe from the locator
+
+ EXAMPLES
+
+ Examples are given in the description of each function where
+ relevant.
+
+ NOTES
+
+ This file has been subsetted to contain ONLY the routines that will
+ be in the first release.
+
+ QUESTIONS
+
+ MODIFIED
+ bkhaladk 08/01/05 - add defn for OCIBinXmlReposCtx
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ srseshad 03/12/03 - convert oci public api to ansi
+ rpingte 11/21/02 - Add OCICollGetElemArray and OCINumberToRealArray
+ aahluwal 06/03/02 - bug 2360115
+ gayyappa 02/01/02 - fix 2210776 : change Dom to DOM
+ whe 09/25/01 - add OCIXMLType & OCIDomDocument opaque types
+ bpalaval 02/09/01 - Change text to oratext.
+ rkasamse 09/20/99 - lint changes
+ whe 09/01/99 - 976457:check __cplusplus for C++ code
+ hsbedi 08/11/99 - Add macro
+ rxgovind 10/14/98 - make non exposed calls (OCIRowType etc) private
+ rxgovind 06/09/98 - update OCIRowTypeCreate
+ nmantrav 05/11/98 - add OCIRowTypeGetCount
+ rxgovind 03/29/98 - add OCIRowType and OCIRowData interfaces
+ jwijaya 05/06/98 - add OCICollIsLocator
+ rxgovind 03/18/98 - opaque types: move to kolo.h
+ etucker 02/02/98 - add comments for Dec and Inc
+ etucker 01/29/98 - Finish core5 integration
+ rxgovind 11/11/97 - opaque types
+ etucker 10/28/97 - add ORLN functions for SDK
+ cxcheng 07/28/97 - remove OCILobLocator #define
+ skmishra 05/13/97 - stdcc compatibility changes
+ skrishna 04/25/97 - rename OCINumber*(): Exp Power TanHyp Zero Init
+ TanToArc Sqr Truncate and Compare
+ skotsovo 03/31/97 - remove OCILobLocatorSize
+ skrishna 03/25/97 - remove orld2i and orldi2d
+ skrishna 03/18/97 - fix ifdef for supporting ansi and k&r proto-types
+ cxcheng 02/06/97 - take out short name support except with SLSHORTNAME
+ skrishna 01/06/97 - update OCITableSize() comments
+ skrishna 12/27/96 - fix OCIDateGet/OCIDateSet
+ skrishna 12/12/96 - update OCICollGelElem comments
+ skrishna 11/07/96 - OCICollGetElem: interface change
+ skrishna 11/05/96 - add OCIDate Get/Set and OCIDateAssign
+ cxcheng 10/31/96 - change OCINumberTanHyp to OCINumberHypTan
+ cxcheng 10/30/96 - #define orll short names to long names
+ dchatter 10/26/96 - fix some OCI file long names
+ cxcheng 10/24/96 - remove unnecessary comment in front
+ cxcheng 10/14/96 - disable long name mapping for LOB functions
+ skrishna 10/13/96 - continue beautification
+ skotsovo 10/16/96 - update ocilob names
+ cxcheng 10/09/96 - add structure members in #define for date/time
+ cxcheng 10/09/96 - more lint fixes
+ skrishna 10/09/96 - continue beautification
+ cxcheng 10/09/96 - more fixes
+ skrishna 10/09/96 - change fixed-char rep. to orlvstr*
+ jwijaya 10/08/96 - continue beautification
+ jwijaya 10/07/96 - beautify
+ cxcheng 10/07/96 - more changes
+ cxcheng 10/04/96 - replace short names with long names
+ skrishna 10/01/96 - orlcsiz, orltsiz: change prototype to take errhdl
+ skrishna 09/23/96 - fix lint errors
+ skotsovo 09/23/96 - remove orllmkcur().
+ jwijaya 09/17/96 - comments on null ref
+ skrishna 09/19/96 - change orlraw format
+ skotsovo 09/19/96 - add orlliini and remove orllnul
+ skrishna 08/14/96 - orlvstr: change format to ub4 followed by text
+ jboonleu 08/06/96 - update comment
+ skotsovo 08/08/96 - revert to locators instead of descriptors as input t
+ jboonleu 07/23/96 - remove orlrcur
+ skrishna 07/06/96 - add orltsiz
+ skrishna 07/05/96 - add orld2i and orldi2d
+ jwijaya 07/03/96 - add ANSI prototypes
+ skrishna 06/27/96 - document default string format in orlds2d & orld2s
+ skrishna 06/25/96 - change max date value
+ skrishna 06/18/96 - modify orld2s() comments
+ skotsovo 06/13/96 - orll functions take lob descriptors instead of locat
+ rxgovind 06/05/96 - change prototype of orlrcur to take ocienvh
+ skrishna 05/30/96 - support collection trimming
+ skrishna 05/30/96 - remove orlralo/fre and orllalo/fre instead use
+ orionew/fre
+ skrishna 05/28/96 - add orlt*() and modify orla*()
+ skotsovo 05/23/96 - add orlbl typedefs for pro*c
+ jboonleu 05/14/96 - add orlrcur
+ rxgovind 05/08/96 - changes for 3gl callbacks
+ skotsovo 05/01/96 - in orllasg, no need to alloc orlbl*
+ skrishna 04/21/96 - merge changes from 960418 object branch into big
+ skrishna 04/17/96 - rename orlrcpy to orlrasg
+ skrishna 04/12/96 - add orlr2h and orlrh2r functions
+ skotsovo 04/15/96 - add fnt to make the lob locator current
+ skrishna 04/08/96 - change orl*() to take ocienvh* and ocierrh* instead
+ of oroenv*
+ skotsovo 03/22/96 - add locator functions
+ skotsovo 03/22/96 - add locator functions
+ skrishna 02/27/96 - remove mlslabel interface
+ skotsovo 02/20/96 - remove orlbty and use dty type instead.
+ skotsovo 02/14/96 - add text file lobs.
+ skrishna 01/31/96 - update comments of orln2r, orldchk, orlds2d & orld2s
+ skrishna 01/31/96 - change orld2s() and orln2s() to return string length
+ skrishna 01/21/96 - remove old raw interface
+ skrishna 12/14/95 - add raw interface
+ skotsovo 01/03/96 - change LOB offsets and lengths from ub4 to ubig_ora
+ to support 64 bit machines.
+ skotsovo 10/30/95 - add orlblsiz() to get lob locator size
+ skrishna 10/24/95 - move ref functions from ori and update the ref
+ functions to support variable-length ref
+ cxcheng 10/20/95 - add more comments on number versions
+ cxcheng 10/13/95 - add more number functions
+ cxcheng 08/29/95 - Support for segmented varrays
+ cxcheng 08/18/95 - modifiy orlmls structure
+ skrishna 06/06/95 - rename orln, orld, orlvs and orlva to orlnum,
+ orldat, orlvstr and orlvary respectively
+ skrishna 11/15/94 - remove orlnget() function
+ skrishna 09/20/94 - modify orldbtw() to return number of days only
+ skrishna 08/24/94 - change format string length type from ub4 to ub1
+ skrishna 07/19/94 - Rename orln2c & orlnc2n to orln2s & orlns2n
+ skrishna 06/29/94 - Add blob interface; add examples
+ skrishna 06/23/94 - Update comments and format
+ skrishna 05/19/94 - update varray append comments
+ skrishna 05/05/94 - Subsetting
+ skrishna 11/24/93 - Creation
+*/
+
+#ifndef ORATYPES
+#include <oratypes.h>
+#endif
+
+#ifndef ORO_ORACLE
+#include <oro.h>
+#endif
+
+#ifndef ORT_ORACLE
+#include <ort.h>
+#endif
+
+#ifndef OCI_ORACLE
+#include <oci.h>
+#endif
+
+#ifndef ORL_ORACLE
+#define ORL_ORACLE
+
+/*---------------------------------------------------------------------------*/
+/* SHORT NAMES SUPPORT SECTION */
+/*---------------------------------------------------------------------------*/
+
+#ifdef SLSHORTNAME
+
+/* the following are short names that are only supported on IBM mainframes
+ with the SLSHORTNAME defined.
+ With this all subsequent long names will actually be substituted with
+ the short names here */
+
+#define OCIArray orlvary
+#define OCIColl orlcol
+#define OCICollAppend orlcapp
+#define OCICollAssign orlcasg
+#define OCICollAssignElem orlcase
+#define OCICollGetElem orlcget
+#define OCICollGetElemArray orlcgeta
+#define OCICollMax orlcmax
+#define OCICollSize orlcsiz
+#define OCICollTrim orlctrm
+#define OCICollIsLocator orlcilc
+#define OCIDate orldat
+#define OCIDateAddDays orldadd
+#define OCIDateAddMonths orldadm
+#define OCIDateCheck orldchk
+#define OCIDateCompare orldcmp
+#define OCIDateDD day_orldat
+#define OCIDateDaysBetween orldbtw
+#define OCIDateFromText orlds2d
+#define OCIDateLastDay orldlst
+#define OCIDateMM mon_orldat
+#define OCIDateNextDay orldndy
+#define OCIDateSysDate orldsys
+#define OCIDateTime time_orldat
+#define OCIDateYYYY gye_orldat
+#define OCIDateZoneToZone orldz2z
+#define OCIIter orlcitr
+#define OCIIterCreate orlccit
+#define OCIIterDelete orlcdit
+#define OCIIterGetCurrent orlcicur
+#define OCIIterInit orlciit
+#define OCIIterNext orlcinxt
+#define OCIIterPrev orlciprv
+#define OCINumber orlnum
+#define OCINumberAbs orlnabs
+#define OCINumberAdd orlnadd
+#define OCINumberArcCos orlnacos
+#define OCINumberArcSin orlnasin
+#define OCINumberArcTan orlnatan
+#define OCINumberAssign orlnasg
+#define OCINumberCeil orlncel
+#define OCINumberCos orlncos
+#define OCINumberDiv orlndiv
+#define OCINumberPower orlnbex
+#define OCINumberFloor orlnflr
+#define OCINumberFromInt orlni2n
+#define OCINumberFromReal orlnr2n
+#define OCINumberFromText orlns2n
+#define OCINumberHypCos orlncsh
+#define OCINumberHypSin orlnsnh
+#define OCINumberSetZero orlnini
+#define OCINumberSetPi orlnspi
+#define OCINumberInc orlninc
+#define OCINumberDec orlndec
+#define OCINumberIntPower orlnpwr
+#define OCINumberLn orlnln
+#define OCINumberLog orlnlog
+#define OCINumberMod orlnmod
+#define OCINumberMul orlnmul
+#define OCINumberNeg orlnneg
+#define OCINumberPart orlnpart
+#define OCINumberExp orlnexp
+#define OCINumberRound orlnrou
+#define OCINumberPrec orlnpre
+#define OCINumberShift orlnsft
+#define OCINumberSign orlnsgn
+#define OCINumberSin orlnsin
+#define OCINumberSqrt orlnsqr
+#define OCINumberSub orlnsub
+#define OCINumberTan orlntan
+#define OCINumberHypTan orlntnh
+#define OCINumberArcTan2 orlnatn2
+#define OCINumberToInt orln2i
+#define OCINumberToReal orln2r
+#define OCINumberToRealArray orln2ra
+#define OCINumberToText orln2s
+#define OCINumberTrunc orlntru
+#define OCINumberCmp orlncmp
+#define OCINumberIsZero orlnzer
+#define OCINumberIsInt orlnint
+#define OCIRaw orlraw
+#define OCIRawAllocSize orlwasz
+#define OCIRawAssignBytes orlwabr
+#define OCIRawAssignRaw orlwarr
+#define OCIRawPtr orlwgrp
+#define OCIRawResize orlwrsz
+#define OCIRawSize orlwgsz
+#define OCIRefAssign orlrasg
+#define OCIRefClear orlrclr
+#define OCIRefFromHex orlrh2r
+#define OCIRefHexSize orlrhsz
+#define OCIRefIsEqual orlrequ
+#define OCIRefIsNull orlrnul
+#define OCIRefToHex orlr2h
+#define OCIString orlvstr
+#define OCIStringAllocSize orlvasz
+#define OCIStringAssign orlvass
+#define OCIStringAssignText orlvats
+#define OCIStringPtr orlvgsp
+#define OCIStringResize orlvrsz
+#define OCIStringSize orlvgsz
+#define OCITable orltbl
+#define OCITableDelete orltdel
+#define OCITableExists orltexi
+#define OCITableFirst orltfst
+#define OCITableLast orltlst
+#define OCITableNext orltnxt
+#define OCITablePrev orltprv
+#define OCITableSize orltsiz
+#define OCITime orldtm
+#define OCITimeHH orldtmhh
+#define OCITimeMI orldtmmm
+#define OCITimeSS orldtmss
+#define OCI_LOBMODE_READONLY ORLBMORO
+#define OCI_LOBMODE_READWRITE ORLBMORW
+
+#endif /* SLSHORTNAME */
+
+/*****************************************************************************/
+/* NUMBER/FLOAT/DECIMAL TYPE */
+/*****************************************************************************/
+
+#define OCI_NUMBER_SIZE 22
+struct OCINumber
+{
+ ub1 OCINumberPart[OCI_NUMBER_SIZE];
+};
+typedef struct OCINumber OCINumber;
+
+/*
+ * OCINumber - OCI Number mapping in c
+ *
+ * The OTS types: NUMBER, NUMERIC, INT, SHORTINT, REAL, DOUBLE PRECISION,
+ * FLOAT and DECIMAL are represented by OCINumber.
+ * The contents of OCINumber is opaque to clients.
+ *
+ * For binding variables of type OCINumber in OCI calls (OCIBindByName(),
+ * OCIBindByPos(), and OCIDefineByPos()) use the type code SQLT_VNU.
+ */
+
+/*
+ EXAMPLE
+
+ The following example shows how to manipulate an attribute of type
+ oracle number.
+
+ struct person
+ {
+ OCINumber sal;
+ };
+ typedef struct person person;
+
+ OCIError *err;
+ person* joe;
+ person* tom;
+ person* debbie;
+ OCINumber *joesal;
+ OCINumber *tomsal;
+ OCINumber *debsal;
+ sword status;
+ int inum;
+ double dnum;
+ OCINumber ornum;
+ char buffer[21];
+ ub4 buflen;
+ sword result;
+
+ /o See oci.h for an example of how to initialize OCIError.
+ o For this example, assume the OCIEnv and OCIError has been
+ o initialized.
+ o/
+
+ /o Pin joe, tom and debbie person objects in the object cache. See ori.h
+ o for an example on pinning objects. For this example, assume that
+ o joe, tom and debbie are pointing to pinned objects.
+ o/
+ joesal = &joe->sal;
+ tomsal = &tom->sal;
+ debsal = &debbie->sal;
+
+ /o initialize joe's salary to be $12,000 o/
+ inum = 12000;
+ status = OCINumberFromInt(err, &inum, sizeof(inum), OCI_NUMBER_SIGNED,
+ joesal);
+ if (status != OCI_SUCCESS)
+ /o goto to handle error from OCINumberFromInt o/;
+
+ /o initialize tom's salary to be same as joe o/
+ OCINumberAssign(err, joesal, tomsal);
+
+ /o initialize debbie's salary to be 20% more than joe's o/
+ dnum = 1.2;
+ status = OCINumberFromReal(err, &dnum, sizeof(double), &ornum);
+ if (status != OCI_SUCCESS)
+ /o goto to handle error from OCINumberFromReal o/;
+ status = OCINumberMul(err, joesal, &ornum, debsal);
+ if (status != OCI_SUCCESS) /o goto to handle error from OCINumberMul o/;
+
+ /o give tom a 50% raise o/
+ dnum = 1.5;
+ status = OCINumberFromReal(err, &dnum, sizeof(double), &ornum);
+ if (status != OCI_SUCCESS)
+ /o goto to handle error from OCINumberFromReal o/;
+ status = OCINumberMul(err, tomsal, &ornum, tomsal);
+ if (status != OCI_SUCCESS) /o goto to handle error from OCINumberMul o/;
+
+ /o double joe's salary o/
+ status = OCINumberAdd(err, joesal, joesal, joesal);
+ if (status != OCI_SUCCESS) /o goto to handle error from OCINumberAdd o/;
+
+ /o get joe's salary in integer o/
+ status = OCINumberToInt(err, joesal, sizeof(inum), OCI_NUMBER_SIGNED,
+ &inum);
+ if (status != OCI_SUCCESS)/o goto to handle error from OCINumberToInt o/;
+ /o inum is set to 24000 o/
+
+ /o get debbie's salary in double o/
+ status = OCINumberToReal(err, debsal, sizeof(dnum), &dnum);
+ if (status != OCI_SUCCESS)/o goto to handle error from OCINumberToReal o/;
+ /o dnum is set to 14400 o/
+
+ /o print tom's salary as DEM0001`8000.00 o/
+ buflen = sizeof(buffer);
+ status = OCINumberToText(err, tomsal, "C0999G9999D99", 13,
+ "NLS_NUMERIC_CHARACTERS='.`' NLS_ISO_CURRENCY='Germany'", 54,
+ &buflen, buffer);
+ if (status != OCI_SUCCESS)/o goto to handle error from OCINumberToText o/;
+ printf("tom's salary = %s\n", buffer);
+
+ /o compare joe and tom's salary o/
+ status = OCINumberCmp(err, joesal, tomsal, &result);
+ if (status != OCI_SUCCESS) /o goto to handle error from OCINumberCmp o/;
+ /o result is positive o/
+
+ /o read debbie's new salary from string o/
+ status = OCINumberFromText(err, "48`000.00", 9, "99G999D99", 9,
+ "NLS_NUMERIC_CHARACTERS='.`'", 27, debsal);
+ if (status != OCI_SUCCESS)
+ /o goto to handle error from OCINumberFromText o/;
+ /o debbie's salary is now 48000.00 o/
+
+*/
+
+/*----------------------------- OCINumberInc --------------------------------*/
+
+sword OCINumberInc( OCIError *err, OCINumber *number );
+/*
+ NAME: OCINumberInc - OCINumber INCrement numbers
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN/OUT) a positive Oracle number to be incremented
+ DESCRIPTION:
+ Increment Oracle number in place. It is assumed that the input is
+ an integer between 0 and 100^21-2. If the is input too large, it will
+ be treated as 0 - the result will be an Oracle number 1. If the input
+ is not a positive integer, the result will be unpredictable.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*----------------------------- OCINumberDec --------------------------------*/
+
+sword OCINumberDec( OCIError *err, OCINumber *number );
+/*
+ NAME: OCINumberDec - OCINumber DECrement numbers
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN/OUT) - a positive Oracle number to be decremented
+ DESCRIPTION:
+ Decrement Oracle number in place. It is assumed that the input is an
+ integer between 1 and 100^21-2. If the input is too large, it will be
+ treated as 1 - the result will be an Oracle number 0. If the input is
+ not a positive integer, the result will be unpredictable.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*-------------------------- OCINumberSetZero -------------------------------*/
+
+void OCINumberSetZero( OCIError *err, OCINumber *num );
+/*
+ NAME: OCINumberSetZero - OCINumber Set number to Zero value
+ PARAMETERS:
+ err (IN/OUT) - pointer to OCI error handle
+ num (OUT) - set to zero value
+ DESCRIPTION:
+ Initialize the given number to value 0.
+ */
+
+/*--------------------------- OCINumberSetPi --------------------------------*/
+
+void OCINumberSetPi( OCIError *err, OCINumber *num );
+/*
+ NAME: OCINumberSetPi - OCINumber Set number to Pi
+ err (IN/OUT) - pointer to OCI error handle
+ num (OUT) - set to zero value
+ DESCRIPTION:
+ Initialize the given number to value Pi.
+ */
+
+/*----------------------------- OCINumberAdd --------------------------------*/
+
+sword OCINumberAdd( OCIError *err, const OCINumber *number1,
+ const OCINumber *number2, OCINumber *result );
+/*
+ NAME: OCINumberAdd - OCINumber ADD numbers
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number1, number2 (IN) - numbers to be added
+ result (OUT) - result of adding 'number1' with 'number2'
+ DESCRIPTION:
+ Add 'number1' with 'number2' and return result in 'result'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*----------------------------- OCINumberSub --------------------------------*/
+
+sword OCINumberSub( OCIError *err, const OCINumber *number1,
+ const OCINumber *number2, OCINumber *result );
+/*
+ NAME: OCINumberSub - OCINumber SUBtract numbers
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number1, number2 (IN) - 'number2' subtracted from 'number1'
+ result (OUT) - subtraction result
+ DESCRIPTION:
+ Subtract 'number2' from 'number1' and return result in 'result'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*----------------------------- OCINumberMul --------------------------------*/
+
+sword OCINumberMul( OCIError *err, const OCINumber *number1,
+ const OCINumber *number2, OCINumber *result );
+/*
+ NAME: OCINumberMul - OCINumber MULtiply numbers
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number1, number2 (IN) - numbers to be multiplied
+ result (OUT) - multiplication result
+ DESCRIPTION:
+ Multiply 'number1' with 'number2' and return result in 'result'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*----------------------------- OCINumberDiv --------------------------------*/
+
+sword OCINumberDiv( OCIError *err, const OCINumber *number1,
+ const OCINumber *number2, OCINumber *result );
+/*
+ NAME: OCINumberDiv - OCINumber DIVide numbers
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number1 (IN) - pointer to the numerator
+ number2 (IN) - pointer to the denominator
+ result (OUT) - division result
+ DESCRIPTION:
+ Divide 'number1' by 'number2' and return result in 'result'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ underflow errorr
+ overflow errorr
+ divide by zero errorr
+ */
+
+/*----------------------------- OCINumberMod --------------------------------*/
+
+sword OCINumberMod( OCIError *err, const OCINumber *number1,
+ const OCINumber *number2, OCINumber *result );
+/*
+ NAME: OCINumberMod - OCINumber MODulous
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number1 (IN) - pointer to the numerator
+ number2 (IN) - pointer to the denominator
+ result (OUT) - remainder of the result
+ DESCRIPTION:
+ Finds the remainder of the division of two Oracle numbers.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ divide by zero errorr
+ */
+
+/*------------------------ OCINumberIntPower --------------------------------*/
+
+sword OCINumberIntPower( OCIError *err, const OCINumber *base,
+ const sword exp, OCINumber *result );
+/*
+ NAME: OCINumberIntPower - OCINumber takes an arbitary base to an arbitary
+ integer PoWeR
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ base (IN) - base of the exponentiation
+ exp (IN) - exponent to which the base is to be raised
+ result (OUT) - output of exponentiation
+ DESCRIPTION:
+ Takes an arbitary base to an arbitary integer power.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*-------------------------- OCINumberShift ---------------------------------*/
+
+sword OCINumberShift( OCIError *err, const OCINumber *number,
+ const sword nDig, OCINumber *result );
+/*
+ NAME: OCINumberShift - OCINumber multiplies by a power of 10.
+
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - Oracle Number to be shifted.
+ nDig (IN) - number of decimal places to shift.
+ result (OUT) - shift result.
+ DESCRIPTION:
+ Multiplies number by 10^NDig and sets product to the result.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*----------------------------- OCINumberNeg --------------------------------*/
+
+sword OCINumberNeg( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberNeg - OCINumber NEGate number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - number to be negated
+ result (OUT) - will contain negated value of 'number'
+ DESCRIPTION:
+ Negates an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*------------------------- OCINumberToText ---------------------------------*/
+
+sword OCINumberToText( OCIError *err, const OCINumber *number,
+ const oratext *fmt, ub4 fmt_length,
+ const oratext *nls_params, ub4 nls_p_length,
+ ub4 *buf_size, oratext *buf );
+/*
+ NAME: OCINumberToText - OCINumber convert number TO String
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - Oracle number to be converted
+ fmt (IN) - conversion format
+ fmt_length (IN) - length of the 'fmt' parameter
+ nls_params (IN) - nls format specification, if null string
+ i.e. (oratext *)0, then the default parameters for the
+ session is used
+ nls_p_length (IN) - length of the 'nls_params' parameter
+ buf_size (IN/OUT) - size of the buffer must be passed as input by
+ the caller, this function will return the length of the
+ resulting string in bytes via this parameter. The length
+ does not include the terminating null ('\0').
+ buf (OUT) - buffer into which the converted string is placed. The
+ resulting string is null terminated.
+ DESCRIPTION:
+ Converts the given number to a character string
+ according to the specified format. Refer to "TO_NUMBER" conversion
+ function described in "Oracle SQL Language Reference Manual" for a
+ description of format and NLS parameters.
+ The converted number string is stored in the buffer 'buf', up to
+ a max of '*buf_size' bytes. Length of the resulting string is
+ returned via 'buf_size'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'number' or 'buf' is null
+ buffer too small
+ invalid format
+ invalid nls format
+ number to text translation for the given format causes overflow
+ */
+
+/*-------------------------- OCINumberFromText ------------------------------*/
+
+sword OCINumberFromText( OCIError *err, const oratext *str,
+ ub4 str_length, const oratext *fmt, ub4 fmt_length,
+ const oratext *nls_params, ub4 nls_p_length,
+ OCINumber *number );
+/*
+ NAME: OCINumberFromText - OCINumber convert String TO Number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ str (IN) - input string to be converted to Oracle number
+ str_length (IN) - size of the input string
+ fmt (IN) - conversion format
+ fmt_length (IN) - length of the 'fmt' parameter
+ nls_params (IN) - nls format specification, if null string
+ i.e. (oratext *)0, then the default parameters for the
+ session is used
+ nls_p_length (IN) - length of the 'nls_params' parameter
+ number (OUT) - given string converted to number
+ DESCRIPTION:
+ Converts the given string to a number
+ according to the specified format. Refer to "TO_NUMBER" conversion
+ function described in "Oracle SQL Language Reference Manual" for a
+ description of format and NLS parameters.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'number' or 'str' is null
+ 'str_length' is 0
+ invalid format
+ invalid nls format
+ invalid input string
+ */
+
+/*-------------------------- OCINumberToInt ---------------------------------*/
+
+#define OCI_NUMBER_UNSIGNED 0 /* Unsigned type -- ubX */
+#define OCI_NUMBER_SIGNED 2 /* Signed type -- sbX */
+
+sword OCINumberToInt( OCIError *err, const OCINumber *number,
+ uword rsl_length, uword rsl_flag, void *rsl );
+/*
+ NAME: OCINumberToInt - OCINumber convert number TO Integer
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - number to be converted
+ rsl_length (IN) - size of the desired result
+ rsl_s_flag (IN) - flag denoting the desired sign of the output; valid
+ values are OCI_NUMBER_UNSIGNED, OCI_NUMBER_SIGNED
+ rsl (OUT) - pointer to space for the result
+ DESCRIPTION:
+ Native type conversion function.
+ Converts the given Oracle number into an xbx (e.g. ub2, ub4, sb2 etc.)
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'number' or 'rsl' is null
+ integer value of 'number' is too big -- overflow
+ integer value of 'number' is too small -- underflow
+ invalid sign flag value ('rsl_s_flag')
+ */
+
+/*--------------------------- OCINumberFromInt ------------------------------*/
+
+sword OCINumberFromInt( OCIError *err, const void *inum, uword inum_length,
+ uword inum_s_flag, OCINumber *number );
+/*
+ NAME: OCINumberFromInt - OCINumber convert Integer TO Number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ inum (IN) - pointer to the integer to be converted
+ inum_length (IN) - size of the integer
+ inum_s_flag (IN) - flag that designates the sign of the integer; valid
+ values are OCI_NUMBER_UNSIGNED, OCI_NUMBER_SIGNED
+ number (OUT) - given integer converted to Oracle number
+ DESCRIPTION:
+ Native type conversion function. Converts any Oracle standard
+ machine-native integer type (xbx) to an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'number' or 'inum' is null
+ integer too BIG -- the number is too large to fit into an Oracle
+ number
+ invalid sign flag value ('inum_s_flag')
+ */
+
+/*------------------------- OCINumberToReal ---------------------------------*/
+
+sword OCINumberToReal( OCIError *err, const OCINumber *number,
+ uword rsl_length, void *rsl );
+/*
+ NAME: OCINumberToReal - OCINumber convert number TO Real
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - number to be converted
+ rsl_length (IN) - is the size of the desired result,
+ sizeof( float | double | long double)
+ rsl (OUT) - pointer to space for storing the result
+ DESCRIPTION:
+ Native type conversion function. Converts an Oracle number into a
+ machine-native real type. This function only converts numbers up to
+ LDBL_DIG, DBL_DIG, or FLT_DIG digits of precision and removes
+ trailing zeroes. The above constants are defined in float.h
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'number' or 'rsl' is null
+ 'rsl_length' is 0
+ */
+
+/*------------------------- OCINumberToRealArray ----------------------------*/
+
+sword OCINumberToRealArray( OCIError *err, const OCINumber **number,
+ uword elems, uword rsl_length, void *rsl );
+/*
+ NAME: OCINumberToRealArray - OCINumber convert array of numbers TO Real
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - Pointer to array of number to be converted
+ elems (IN) - Upper bound of number array
+ rsl_length (IN) - is the size of the desired result,
+ sizeof( float | double | long double)
+ rsl (OUT) - pointer to array of space for storing the result
+ DESCRIPTION:
+ Native type conversion function. Converts an Oracle number into a
+ machine-native real type. This function only converts numbers up to
+ LDBL_DIG, DBL_DIG, or FLT_DIG digits of precision and removes
+ trailing zeroes. The above constants are defined in float.h
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'number' or 'rsl' is null
+ 'rsl_length' is 0
+ */
+
+/*-------------------------- OCINumberFromReal ------------------------------*/
+
+sword OCINumberFromReal( OCIError *err, const void *rnum,
+ uword rnum_length, OCINumber *number );
+/*
+ NAME: OCINumberFromReal - OCINumber convert Real TO Number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ rnum (IN) - pointer to the floating point number to be converted
+ rnum_length (IN) - size of the desired result, i.e.
+ sizeof({float | double | long double})
+ number (OUT) - given float converted to Oracle number
+ DESCRIPTION:
+ Native type conversion function. Converts a machine-native floating
+ point type to an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'number' or 'rnum' is null
+ 'rnum_length' is 0
+ */
+
+/*----------------------------- OCINumberCmp --------------------------------*/
+
+sword OCINumberCmp( OCIError *err, const OCINumber *number1,
+ const OCINumber *number2, sword *result );
+/*
+ NAME: OCINumberCmp - OCINumber CoMPare numbers
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number1, number2 (IN) - numbers to be compared
+ result (OUT) - 0 if equal, negative if number1 < number2,
+ positive if number1 > number2
+ DESCRIPTION:
+ The function OCINumberCmp compares two numbers.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'number1' or 'number2' or 'result' is null
+ */
+
+/*---------------------------- OCINumberSign --------------------------------*/
+
+sword OCINumberSign( OCIError *err, const OCINumber *number,
+ sword *result );
+/*
+ NAME: OCINumberSign - OCINumber obtains SiGN of an Oracle number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - number whose sign is returned
+ result (OUT) - 0 if number == 0, -1 if number < 0,
+ 1 if number > 0
+ DESCRIPTION:
+ Obtains sign of an Oracle number
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'number' or 'result' is null
+ */
+
+/*---------------------------- OCINumberIsZero ------------------------------*/
+
+sword OCINumberIsZero( OCIError *err, const OCINumber *number,
+ boolean *result );
+/*
+ NAME: OCINumberIsZero - OCINumber comparison with ZERo
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - numbers to be compared
+ result (OUT) - set to TRUE if equal to zero else FALSE
+ DESCRIPTION:
+ Test if the given number is equal to zero.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'number' or 'result' is null
+ */
+
+/*---------------------------- OCINumberIsInt -------------------------------*/
+
+sword OCINumberIsInt( OCIError *err, const OCINumber *number,
+ boolean *result );
+/*
+ NAME: OCINumberIsInt - OCINumber Is Integer value.
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - number to be tested
+ result (OUT) - set to TRUE if integer value else FALSE
+ DESCRIPTION:
+ Test if the given number is an integer value.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'number' or 'result' is null
+ */
+
+/*-------------------------- OCINumberAssign --------------------------------*/
+
+sword OCINumberAssign( OCIError *err, const OCINumber *from,
+ OCINumber *to );
+/*
+ NAME: OCINumberAssign - OCINumber ASsiGn number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ from (IN) - number to be assigned
+ to (OUT) - number copied into
+ DESCRIPTION:
+ Assign number 'from' to 'to'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'from' or 'to' is null
+ */
+
+/*----------------------------- OCINumberAbs --------------------------------*/
+
+sword OCINumberAbs( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberAbs - OCINumber compute ABSolute value
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - input number
+ result (OUT) - output which will contain the absolue value of the
+ input number
+ DESCRIPTION:
+ Computes the absolute value of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*---------------------------- OCINumberCeil --------------------------------*/
+
+sword OCINumberCeil( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberCeil - OCINumber compute the CEiL value of an Oracle number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - input number
+ result (OUT) - output which will contain the ceil value of the
+ input number
+ DESCRIPTION:
+ Computes the ceil value of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*--------------------------- OCINumberFloor --------------------------------*/
+
+sword OCINumberFloor( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberFloor - OCINumber compute the FLooR value of an Oracle number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - input number
+ result (OUT) - output which will contain the floor value of the
+ input number
+ DESCRIPTION:
+ Computes the floor value of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*----------------------------- OCINumberSqrt -------------------------------*/
+
+sword OCINumberSqrt( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberSqrt - OCINumber compute the SQuare Root of an Oracle number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - input number
+ result (OUT) - output which will contain the square root of the
+ input number
+ DESCRIPTION:
+ Computes the square root of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ 'number' is negative
+ */
+
+/*--------------------------- OCINumberTrunc --------------------------------*/
+
+sword OCINumberTrunc( OCIError *err, const OCINumber *number,
+ sword decplace, OCINumber *result );
+/*
+ NAME: OCINumberTrunc - OCINumber TRUncate an Oracle number at a
+ specified decimal place
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - input number
+ decplace (IN) - number of decimal digits to the right of the
+ decimal point to truncate at. Negative values are allowed.
+ result (OUT) - output of truncation
+ DESCRIPTION:
+ Truncate an Oracle number at a specified decimal place
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*----------------------------- OCINumberPower ------------------------------*/
+
+sword OCINumberPower( OCIError *err, const OCINumber *base,
+ const OCINumber *number, OCINumber *result );
+/*
+ NAME: OCINumberPower - OCINumber takes an arbitary Base to an
+ arbitary Power
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ base (IN) - base of the exponentiation
+ number (IN) - exponent to which the base is to be raised
+ result (OUT) - output of exponentiation
+ DESCRIPTION:
+ Takes an arbitary base to an arbitary power.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*--------------------------- OCINumberRound --------------------------------*/
+
+sword OCINumberRound( OCIError *err, const OCINumber *number,
+ sword decplace, OCINumber *result );
+/*
+ NAME: OCINumberRound - OCINumber ROUnds an Oracle number to a specified
+ decimal place
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - round this number and return result in 'result'
+ decplace (IN) - number of decimal digits to the right of the
+ decimal point to round to. Negative values are allowed.
+ result (OUT) - output of rounding
+ DESCRIPTION:
+ Rounds an Oracle number to a specified decimal place
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*--------------------------- OCINumberPrec ---------------------------------*/
+
+sword OCINumberPrec( OCIError *err, const OCINumber *number,
+ sword nDigs, OCINumber *result );
+/*
+ NAME: OCINumberPrec - Rounds an Oracle number to a specified number of
+ decimal digits.
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - number for which to set precision.
+ nDig (IN) - number of decimal digits desired in the result.
+ result (OUT) - result.
+ DESCRIPTION:
+ Performs a floating point round with respect to the number
+ of digits.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*----------------------------- OCINumberSin --------------------------------*/
+
+sword OCINumberSin( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberSin - OCINumber takes the SINe of an Oracle number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - argument of the sine in radians
+ result (OUT) - result of the sine
+ DESCRIPTION:
+ Takes the sine in radians of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*-------------------------- OCINumberArcSin --------------------------------*/
+
+sword OCINumberArcSin( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberArcSin - OCINumber takes the Arc SINe of an Oracle number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - argument of the arc sine
+ result (OUT) - result of the arc sine in radians
+ DESCRIPTION:
+ Takes the arc sine in radians of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ 'number' is < -1 or 'number' is > 1.
+ */
+
+/*-------------------------- OCINumberHypSin --------------------------------*/
+
+sword OCINumberHypSin( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberHypSin - OCINumber takes the SiNe Hyperbolic of an
+ Oracle number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - argument of the sine hyperbolic
+ result (OUT) - result of the sine hyperbolic
+ DESCRIPTION:
+ Takes the hyperbolic sine of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ NOTES:
+ An Oracle number overflow causes an unpredictable result value.
+ */
+
+/*----------------------------- OCINumberCos --------------------------------*/
+
+sword OCINumberCos( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberCos - OCINumber takes the COSine of an Oracle number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - argument of the cosine in radians
+ result (OUT) - result of the cosine
+ DESCRIPTION:
+ Takes the cosine in radians of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*-------------------------- OCINumberArcCos --------------------------------*/
+
+sword OCINumberArcCos( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberArcCos - OCINumber takes the Arc COSine of an Oracle number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - argument of the arc cosine
+ result (OUT) - result of the arc cosine in radians
+ DESCRIPTION:
+ Takes the arc cosine in radians of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ 'number' is < -1 or 'number' is > 1.
+ */
+
+/*-------------------------- OCINumberHypCos --------------------------------*/
+
+sword OCINumberHypCos( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberHypCos - OCINumber takes the CoSine Hyperbolic of an
+ Oracle number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - argument of the cosine hyperbolic
+ result (OUT) - result of the cosine hyperbolic
+ DESCRIPTION:
+ Takes the hyperbolic cosine of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ NOTES:
+ An Oracle number overflow causes an unpredictable result value.
+ */
+
+/*----------------------------- OCINumberTan --------------------------------*/
+
+sword OCINumberTan( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberTan - OCINumber takes the TANgent of an Oracle number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - argument of the tangent in radians
+ result (OUT) - result of the tangent
+ DESCRIPTION:
+ Takes the tangent in radians of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*-------------------------- OCINumberArcTan --------------------------------*/
+
+sword OCINumberArcTan( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberArcTan - OCINumber takes the Arc TANgent of an Oracle number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - argument of the arc tangent
+ result (OUT) - result of the arc tangent in radians
+ DESCRIPTION:
+ Takes the arc tangent in radians of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*------------------------ OCINumberArcTan2 ---------------------------------*/
+
+sword OCINumberArcTan2( OCIError *err, const OCINumber *number1,
+ const OCINumber *number2, OCINumber *result );
+/*
+ NAME: OCINumberArcTan2 - OCINumber takes the ATan2 of 2 Oracle numbers
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number1 (IN) - first argument of atan2(y,x) function which
+ corresponds to 'y' parameter in the function
+ number2 (IN) - second argument of atan2(y,x) function which
+ corresponds to 'x' parameter in the function
+ result (OUT) - result of the atan2() in radians
+ DESCRIPTION:
+ Takes the atan2(number1, number2).
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ 'number2' is 0
+ */
+
+/*----------------------------- OCINumberHypTan -----------------------------*/
+
+sword OCINumberHypTan( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberHypTan - OCINumber takes the TaNgent Hyperbolic of an Oracle
+ number
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - argument of the tangent hyperbolic
+ result (OUT) - result of the tangent hyperbolic
+ DESCRIPTION:
+ Takes the hyperbolic tangent of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ NOTES:
+ An Oracle number overflow causes an unpredictable result value.
+ */
+
+/*--------------------------- OCINumberExp ----------------------------------*/
+
+sword OCINumberExp( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberExp - OCINumber EXPonential
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - e raised to this Oracle number power
+ result (OUT) - output of exponentiation
+ DESCRIPTION:
+ Raises e to the specified Oracle number power
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ */
+
+/*----------------------------- OCINumberLn ---------------------------------*/
+
+sword OCINumberLn( OCIError *err, const OCINumber *number,
+ OCINumber *result );
+/*
+ NAME: OCINumberLn - OCINumber Logarithm Natural
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ number (IN) - logarithm of this number is computed
+ result (OUT) - logarithm result
+ DESCRIPTION:
+ Takes the logarithm of the given Oracle number with respect
+ to the given base.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ 'number' is <= 0
+ */
+
+/*----------------------------- OCINumberLog --------------------------------*/
+
+sword OCINumberLog( OCIError *err, const OCINumber *base,
+ const OCINumber *number, OCINumber *result );
+/*
+ NAME: OCINumberLog - OCINumber LOGarithm any base
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ base (IN) - base of the logarithm
+ number (IN) - opearnd
+ result (OUT) - logarithm result
+ DESCRIPTION:
+ Takes the logarithm with the specified base of an Oracle number.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ any of the number arguments is null
+ 'number' is <= 0
+ 'base' is <= 0
+ */
+
+/*****************************************************************************/
+/* ORACLE DATE TYPE */
+/*****************************************************************************/
+
+struct OCITime
+{
+ ub1 OCITimeHH; /* hours; range is 0 <= hours <=23 */
+ ub1 OCITimeMI; /* minutes; range is 0 <= minutes <= 59 */
+ ub1 OCITimeSS; /* seconds; range is 0 <= seconds <= 59 */
+};
+typedef struct OCITime OCITime;
+
+/*
+ * OCITime - OCI TiMe portion of date
+ *
+ * This structure should be treated as an opaque structure as the format
+ * of this structure may change. Use OCIDateGetTime/OCIDateSetTime
+ * to manipulate time portion of OCIDate.
+ */
+
+struct OCIDate
+{
+ sb2 OCIDateYYYY; /* gregorian year; range is -4712 <= year <= 9999 */
+ ub1 OCIDateMM; /* month; range is 1 <= month < 12 */
+ ub1 OCIDateDD; /* day; range is 1 <= day <= 31 */
+ OCITime OCIDateTime; /* time */
+};
+typedef struct OCIDate OCIDate;
+
+/*
+ * OCIDate - OCI oracle Date representation in C
+ *
+ * OCIDate represents the C mapping of Oracle date.
+ *
+ * This structure should be treated as an opaque structure as the format
+ * of this structure may change. Use OCIDateGetDate/OCIDateSetDate
+ * to access/initialize OCIDate.
+ *
+ * For binding variables of type OCIDate in OCI calls (OCIBindByName(),
+ * OCIBindByPos(), and OCIDefineByPos()) use the type code SQLT_ODT.
+ */
+
+/*
+ EXAMPLE
+
+ The following example shows how to manipulate an attribute of type
+ oracle date.
+
+ #define FMT "Month dd, YYYY, HH:MI A.M."
+ #define LANG "American"
+
+ struct person
+ {
+ OCIDate start_date;
+ };
+ typedef struct person person;
+
+ OCIError *err;
+ person *joe;
+ sword status; /o error status o/
+
+ /o See oci.h for an example of how to initialize OCIError.
+ o For this example, assume the OCIEnv and OCIError has been
+ o initialized.
+ o/
+
+ /o Pin joe person object in the object cache. See ori.h
+ o for an example on pinning objects. For this example, assume that
+ o joe is pointing to the pinned object.
+ o/
+
+ /o set the start date of joe o/
+ OCIDateSetTime(&joe->start_date, 8, 0, 0);
+ OCIDateSetDate(&joe->start_date, 1990, 10, 5);
+
+ /o check if the date is valid o/
+ uword invalid;
+ if (OCIDateCheck(err, &joe->start_date, &invalid) != OCI_SUCCESS)
+ /o error handling code o/
+ if (invalid)
+ /o error handling code o/
+
+ /o convert date for display purposes o/
+ char str[100];
+ ub4 strlen = sizeof(str);
+ if (OCIDateToText(err, &joe->start_date, FMT, sizeof(FMT)-1, LANG,
+ sizeof(LANG)-1, &strlen, str) != OCI_SUCCESS)
+ /o error handling code o/
+
+ */
+
+/*--------------------------- OCIDateGetTime --------------------------------*/
+/* void OCIDateGetTime(/o_ const OCIDate *date, ub1 *hour, ub1 *min,
+ ub1 *sec _o/); */
+#define OCIDateGetTime(date, hour, min, sec) \
+ { \
+ *hour = (date)->OCIDateTime.OCITimeHH; \
+ *min = (date)->OCIDateTime.OCITimeMI; \
+ *sec = (date)->OCIDateTime.OCITimeSS; \
+ }
+/*
+ NAME: OCIDateGetTime - OCIDate Get Time portion of date
+ PARAMETERS:
+ date (IN) - Oracle date whose time data is retrieved
+ hour (OUT) - hour value returned
+ min (OUT) - minute value returned
+ sec (OUT) - second value returned
+ DESCRIPTION:
+ Return time inforamtion stored in the given date. The time
+ information returned is: hour, minute and seconds.
+ RETURNS:
+ NONE
+ */
+
+/*--------------------------- OCIDateGetDate --------------------------------*/
+/* void OCIDateGetDate(/o_ const OCIDate *date, sb2 *year, ub1 *month,
+ ub1 *day _o/); */
+#define OCIDateGetDate(date, year, month, day) \
+ { \
+ *year = (date)->OCIDateYYYY; \
+ *month = (date)->OCIDateMM; \
+ *day = (date)->OCIDateDD; \
+ }
+/*
+ NAME: OCIDateGetDate - OCIDate Get Date (year, month, day) portion of date
+ PARAMETERS:
+ date (IN) - Oracle date whose year, month, day data is retrieved
+ year (OUT) - year value returned
+ month (OUT) - month value returned
+ day (OUT) - day value returned
+ DESCRIPTION:
+ Return year, month, day inforamtion stored in the given date.
+ RETURNS:
+ NONE
+ */
+
+/*--------------------------- OCIDateSetTime --------------------------------*/
+/* void OCIDateSetTime(/o_ OCIDate *date, ub1 hour, ub1 min,
+ ub1 sec _o/); */
+#define OCIDateSetTime(date, hour, min, sec) \
+ { \
+ (date)->OCIDateTime.OCITimeHH = hour; \
+ (date)->OCIDateTime.OCITimeMI = min; \
+ (date)->OCIDateTime.OCITimeSS = sec; \
+ }
+/*
+ NAME: OCIDateSetTime - OCIDate Set Time portion of date
+ PARAMETERS:
+ date (OUT) - Oracle date whose time data is set
+ hour (IN) - hour value to be set
+ min (IN) - minute value to be set
+ sec (IN) - second value to be set
+ DESCRIPTION:
+ Set the date with the given time inforamtion.
+ RETURNS:
+ NONE
+ */
+
+/*--------------------------- OCIDateSetDate --------------------------------*/
+/* void OCIDateSetDate(/o_ OCIDate *date, sb2 year, ub1 month, ub1 day _o/); */
+#define OCIDateSetDate(date, year, month, day) \
+ { \
+ (date)->OCIDateYYYY = year; \
+ (date)->OCIDateMM = month; \
+ (date)->OCIDateDD = day; \
+ }
+/*
+ NAME: OCIDateSetDate - OCIDate Set Date (year, month, day) portion of date
+ PARAMETERS:
+ date (IN) - Oracle date whose year, month, day data is set
+ year (OUT) - year value to be set
+ month (OUT) - month value to be set
+ day (OUT) - day value to be set
+ DESCRIPTION:
+ Set the date with the given year, month, day inforamtion.
+ RETURNS:
+ NONE
+ */
+
+/*--------------------------- OCIDateAssign ---------------------------------*/
+
+sword OCIDateAssign( OCIError *err, const OCIDate *from,
+ OCIDate *to );
+/*
+ NAME: OCIDateAssign - OCIDate Assignment
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ from (IN) - date to be assigned
+ to (OUT) - lhs of assignment
+ DESCRIPTION:
+ Performs date assignment.
+ RETURNS:
+ OCI_SUCCESS
+ */
+
+/*--------------------------- OCIDateToText ---------------------------------*/
+
+sword OCIDateToText( OCIError *err, const OCIDate *date,
+ const oratext *fmt, ub1 fmt_length,
+ const oratext *lang_name, ub4 lang_length,
+ ub4 *buf_size, oratext *buf );
+/*
+ NAME: OCIDateToText - OCIDate convert date TO String
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ date (IN) - Oracle date to be converted
+ fmt (IN) - conversion format, if null string pointer (oratext*)0, then
+ the date is converted to a character string in the
+ date format "DD-MON-YY".
+ fmt_length (IN) - length of the 'fmt' parameter
+ lang_name (IN) - specifies the language in which the names and
+ abbreviations of months and days are returned;
+ default language of session is used if 'lang_name'
+ is null i.e. (oratext *)0
+ lang_length (IN) - length of the 'nls_params' parameter
+ buf_size (IN/OUT) - size of the buffer; size of the resulting string
+ is returned via this parameter
+ buf (OUT) - buffer into which the converted string is placed
+ DESCRIPTION:
+ Converts the given date to a string according to the specified format.
+ Refer to "TO_DATE" conversion function described in
+ "Oracle SQL Language Reference Manual" for a description of format
+ and NLS arguments. The converted null-terminated date string is
+ stored in the buffer 'buf'.
+
+ An error is reported upon overflow, e.g. trying to convert a number
+ of value 10 using format '9' causes an overflow.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ buffer too small
+ invalid format
+ unknown language
+ overflow error
+ */
+
+/*---------------------------- OCIDateFromText ------------------------------*/
+
+sword OCIDateFromText( OCIError *err, const oratext *date_str,
+ ub4 d_str_length, const oratext *fmt, ub1 fmt_length,
+ const oratext *lang_name, ub4 lang_length,
+ OCIDate *date );
+/*
+ NAME: OCIDateFromText - OCIDate convert String TO Date
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ date_str (IN) - input string to be converted to Oracle date
+ d_str_length (IN) - size of the input string, if the length is -1
+ then 'date_str' is treated as a null terminated string
+ fmt (IN) - conversion format; if 'fmt' is a null pointer, then
+ the string is expected to be in 'DD-MON-YY' format.
+ fmt_length (IN) - length of the 'fmt' parameter
+ lang_name (IN) - language in which the names and abbreviations of
+ days and months are specified, if null i.e. (oratext *)0,
+ the default language of session is used,
+ lang_length (IN) - length of the 'lang_name' parameter
+ date (OUT) - given string converted to date
+ DESCRIPTION:
+ Converts the given string to Oracle date
+ according to the specified format. Refer to "TO_DATE" conversion
+ function described in "Oracle SQL Language Reference Manual" for a
+ description of format.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ invalid format
+ unknown language
+ invalid input string
+ <to be discovered>
+ */
+
+/*----------------------------- OCIDateCompare ------------------------------*/
+
+sword OCIDateCompare( OCIError *err, const OCIDate *date1,
+ const OCIDate *date2, sword *result );
+/*
+ NAME: OCIDateCompare - OCIDate CoMPare dates
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ date1, date2 (IN) - dates to be compared
+ result (OUT) - comparison result, 0 if equal, -1 if date1 < date2,
+ 1 if date1 > date2
+ DESCRIPTION:
+ The function OCIDateCompare compares two dates. It returns -1 if date1
+ is smaller than date2, 0 if they are equal, and 1 if date1 is greater
+ than date2.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ invalid date
+ <to be discovered>
+ */
+
+/*------------------------- OCIDateAddMonths --------------------------------*/
+
+sword OCIDateAddMonths( OCIError *err, const OCIDate *date, sb4 num_months,
+ OCIDate *result );
+/*
+ NAME: OCIDateAddMonths - OCIDate ADd or subtract Months
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ date (IN) - 'num_months' added or subtracted from 'date'
+ num_months (IN) - number of months to be added or subtracted
+ (a negative value will be subtracted)
+ result (IN/OUT) - result of adding or subtracting to 'date'
+ DESCRIPTION:
+ The function OCIDateAddDays adds or subtracts num_months from the
+ date 'date'.
+ If the input 'date' is the last day of a month, then
+ appropriate adjustments are made to ensure that the output date is
+ also the last day of the month. For example, Feb. 28 + 1 month =
+ March 31, and November 30 - 3 months = August 31. Otherwise the
+ 'result' date has the same day component as 'date'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ invalid date
+ <to be discovered>
+ */
+
+/*--------------------------- OCIDateAddDays --------------------------------*/
+
+sword OCIDateAddDays( OCIError *err, const OCIDate *date, sb4 num_days,
+ OCIDate *result );
+/*
+ NAME: OCIDateAddDays - OCIDate ADd or subtract Days
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ date (IN) - 'num_days' added or subtracted from 'date'
+ num_days (IN) - number of days to be added or subtracted
+ (a negative value will be subtracted)
+ result (IN/OUT) - result of adding or subtracting to 'date'
+ DESCRIPTION:
+ The function OCIDateAddDays adds or subtracts num_days from the
+ date 'date'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ invalid date
+ <to be discovered>
+ */
+
+/*--------------------------- OCIDateLastDay --------------------------------*/
+
+sword OCIDateLastDay( OCIError *err, const OCIDate *date,
+ OCIDate *last_day );
+/*
+ NAME: OCIDateLastDay - OCIDate get date of the LaST day of the month
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ date (IN) - input date
+ last_day (OUT) - last day of the month in date 'date'
+ DESCRIPTION:
+ The function OCIDateLastDay returns the date of the last day of the
+ month in date 'date'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ invalid date
+ <to be discovered>
+ */
+
+/*----------------------- OCIDateDaysBetween --------------------------------*/
+
+sword OCIDateDaysBetween( OCIError *err, const OCIDate *date1,
+ const OCIDate *date2, sb4 *num_days );
+/*
+ NAME: OCIDateDaysBetween - OCIDate get number of days BeTWeen two dates
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ date1, date2 (IN) - input dates
+ num_days (OUT) - number of days between date1 and date2
+ DESCRIPTION:
+ The function OCIDateDaysBetween returns the number of days between
+ date1 and date2. The time is ignored in this computation.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ invalid date
+ <to be discovered>
+ */
+
+/*------------------------ OCIDateZoneToZone --------------------------------*/
+
+sword OCIDateZoneToZone( OCIError *err, const OCIDate *date1,
+ const oratext *zon1,
+ ub4 zon1_length, const oratext *zon2,
+ ub4 zon2_length, OCIDate *date2 );
+/*
+ NAME: OCIDateZoneToZone - OCIDate convert date from one Zone TO another Zone
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ date1 (IN) - date to be converted
+ zon1 (IN) - zone of input date
+ zon1_length (IN) - length in bytes of string 'zon1'
+ zon2 (IN) - zone to be converted to
+ zon2_length (IN) - length in bytes of string 'zon2'
+ date2 (OUT) - converted date (in 'zon2')
+ DESCRIPTION:
+ Converts date from one time zone to another. Given date 'date1'
+ in time zone 'zon1' returns date 'date2' in time zone 'zon2'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ invlid date
+ invald input time zone
+ invald output time zone
+ <to be discovered>
+ */
+
+/*--------------------------- OCIDateNextDay --------------------------------*/
+
+sword OCIDateNextDay( OCIError *err, const OCIDate *date,
+ const oratext *day_p, ub4 day_length,
+ OCIDate *next_day );
+/*
+ NAME: OCIDateNextDay - OCIDate get date of Next DaY
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ date (IN) - returned date should be later than this date
+ day (IN) - first day of week named by this is returned
+ day_length (IN) - length in bytes of string 'day'
+ next_day (OUT) - first day of the week named by 'day' later than 'date'
+ DESCRIPTION:
+ Returns the date of the first day of the
+ week named by 'day' that is later than date 'date'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ invalid date
+ invalid day
+ <to be discovered>
+ */
+
+/*----------------------------- OCIDateCheck --------------------------------*/
+
+/* Listing of error bits used by OCIDateCheck() */
+#define OCI_DATE_INVALID_DAY 0x1 /* Bad DAy */
+#define OCI_DATE_DAY_BELOW_VALID 0x2 /* Bad DAy Low/high bit (1=low)*/
+#define OCI_DATE_INVALID_MONTH 0x4 /* Bad MOnth */
+#define OCI_DATE_MONTH_BELOW_VALID 0x8 /* Bad MOnth Low/high bit (1=low)*/
+#define OCI_DATE_INVALID_YEAR 0x10 /* Bad YeaR */
+#define OCI_DATE_YEAR_BELOW_VALID 0x20 /* Bad YeaR Low/high bit (1=low)*/
+#define OCI_DATE_INVALID_HOUR 0x40 /* Bad HouR */
+#define OCI_DATE_HOUR_BELOW_VALID 0x80 /* Bad HouR Low/high bit (1=low)*/
+#define OCI_DATE_INVALID_MINUTE 0x100 /* Bad MiNute */
+#define OCI_DATE_MINUTE_BELOW_VALID 0x200
+ /* Bad MiNute Low/high bit (1=low)*/
+#define OCI_DATE_INVALID_SECOND 0x400 /* Bad SeCond */
+#define OCI_DATE_SECOND_BELOW_VALID 0x800
+ /* bad second Low/high bit (1=low)*/
+#define OCI_DATE_DAY_MISSING_FROM_1582 0x1000
+ /* Day is one of those "missing" from 1582 */
+#define OCI_DATE_YEAR_ZERO 0x2000 /* Year may not equal zero */
+#define OCI_DATE_INVALID_FORMAT 0x8000 /* Bad date format input */
+
+sword OCIDateCheck( OCIError *err, const OCIDate *date, uword *valid );
+/*
+ NAME: OCIDateCheck - OCIDate CHecK if the given date is valid
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ date (IN) - date to be checked
+ valid (OUT) - returns zero for a valid date, otherwise
+ the ORed combination of all error bits specified below:
+
+ Macro name Bit number Error
+ ---------- ---------- -----
+ OCI_DATE_INVALID_DAY 0x1 Bad day
+ OCI_DATE_DAY_BELOW_VALID 0x2 Bad DAy Low/high bit (1=low)
+ OCI_DATE_INVALID_MONTH 0x4 Bad MOnth
+ OCI_DATE_MONTH_BELOW_VALID 0x8 Bad MOnth Low/high bit (1=low)
+ OCI_DATE_INVALID_YEAR 0x10 Bad YeaR
+ OCI_DATE_YEAR_BELOW_VALID 0x20 Bad YeaR Low/high bit (1=low)
+ OCI_DATE_INVALID_HOUR 0x40 Bad HouR
+ OCI_DATE_HOUR_BELOW_VALID 0x80 Bad HouR Low/high bit (1=low)
+ OCI_DATE_INVALID_MINUTE 0x100 Bad MiNute
+ OCI_DATE_MINUTE_BELOW_VALID 0x200 Bad MiNute Low/high bit (1=low)
+ OCI_DATE_INVALID_SECOND 0x400 Bad SeCond
+ OCI_DATE_SECOND_BELOW_VALID 0x800 bad second Low/high bit (1=low)
+ OCI_DATE_DAY_MISSING_FROM_1582 0x1000 Day is one of those "missing"
+ from 1582
+ OCI_DATE_YEAR_ZERO 0x2000 Year may not equal zero
+ OCI_DATE_INVALID_FORMAT 0x8000 Bad date format input
+
+ So, for example, if the date passed in was 2/0/1990 25:61:10 in
+ (month/day/year hours:minutes:seconds format), the erroor returned
+ would be OCI_DATE_INVALID_DAY | OCI_DATE_DAY_BELOW_VALID |
+ OCI_DATE_INVALID_HOUR | OCI_DATE_INVALID_MINUTE
+
+ DESCRIPTION:
+ Check if the given date is valid.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ 'date' and 'valid' pointers are NULL pointers
+ */
+
+/*--------------------------- OCIDateSysDate --------------------------------*/
+
+sword OCIDateSysDate( OCIError *err, OCIDate *sys_date );
+/*
+ NAME: OCIDateSysDate - OCIDate get current SYStem date and time
+ PARAMETERS:
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ sys_date (OUT) - current system date and time
+ DESCRIPTION:
+ Returns the current system date and time.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'err' is NULL.
+ OCI_ERROR if
+ <to be discovered>
+ */
+
+/*****************************************************************************/
+/* FIXED-LENGTH STRING - CHAR (N) */
+/*****************************************************************************/
+
+/*
+ * An ADT attribute declared as "x CHAR(n)" is mapped to "OCIString *x;".
+ * The representation of OCIString * is shown below.
+ */
+
+/*****************************************************************************/
+/* VARIABLE-LENGTH STRING */
+/*****************************************************************************/
+
+/*
+ * The variable-length string is represented in C as a pointer to OCIString
+ * structure. The OCIString structure is opaque to the user. Functions are
+ * provided to allow the user to manipulate a variable-length string.
+ *
+ * A variable-length string can be declared as:
+ *
+ * OCIString *vstr;
+ *
+ * For binding variables of type OCIString* in OCI calls (OCIBindByName(),
+ * OCIBindByPos() and OCIDefineByPos()) use the external type code SQLT_VST.
+ */
+typedef struct OCIString OCIString;
+
+/*-------------------------- OCIStringAssign --------------------------------*/
+
+sword OCIStringAssign( OCIEnv *env, OCIError *err, const OCIString *rhs,
+ OCIString **lhs );
+/*
+ NAME: OCIStringAssign - OCIString Assign String to String
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ rhs (IN) - RHS of the assignment, the type of rhs is also OCIString
+ lhs (IN/OUT) - LHS of the assignment
+ DESCRIPTION:
+ Assign 'rhs' string to 'lhs' string. The 'lhs' string may be
+ resized depending upon the size of the 'rhs'. The assigned string is
+ null-terminated. The 'length' field will not include the extra byte
+ needed for null termination.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ out of space error
+ */
+
+/*---------------------- OCIStringAssignText --------------------------------*/
+
+sword OCIStringAssignText( OCIEnv *env, OCIError *err, const oratext *rhs,
+ ub4 rhs_len, OCIString **lhs );
+/*
+ NAME: OCIStringAssignText - OCIString Assign Text string to String
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ rhs (IN) - RHS of the assignment, the type of rhs is a text string
+ rhs_len (IN) - length of the 'rhs' string
+ lhs (IN/OUT) - LHS of the assignment
+ DESCRIPTION:
+ Assign 'rhs' string to 'lhs' string. The 'lhs' string may be
+ resized depending upon the size of the 'rhs'. The assigned string is
+ null-terminated. The 'length' field will not include the extra byte
+ needed for null termination.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ out of space error
+ */
+
+/*-------------------------- OCIStringResize --------------------------------*/
+
+sword OCIStringResize( OCIEnv *env, OCIError *err, ub4 new_size,
+ OCIString **str );
+/*
+ NAME: OCIStringResize - OCIString ReSiZe string memory
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ new_size (IN) - new memory size of the string in bytes
+ str (IN/OUT) - allocated memory for the string is freed from the
+ OOCI heap
+ DESCRIPTION:
+ This function resizes the memory of the given variable-length string in
+ the object cache. The contents of the string are NOT preserved.
+ This function may allocate the string in a new memory region in
+ which case the original memory occupied by the given string will
+ be freed. If the input string is null (str == NULL), then this
+ function will allocate memory for the string.
+
+ If the new_size is 0, then this function frees the memory occupied
+ by 'str' and a null pointer value is returned.
+
+ NOTE: The caller must compute 'new_size' taking into account space
+ for the null character ('\0').
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ out of space error
+ */
+
+/*---------------------------- OCIStringSize --------------------------------*/
+
+ub4 OCIStringSize( OCIEnv *env, const OCIString *vs );
+/*
+ NAME: OCIStringSize - OCIString Get String siZe
+ PARAMETERS:
+ env(IN) - pointer to OCI environment handle
+ vs (IN) - string whose size is returned
+ DESCRIPTION:
+ Return the size of the given string.
+ RETURNS:
+ size of the string in bytes is returned
+ */
+
+/*----------------------------- OCIStringPtr --------------------------------*/
+
+oratext *OCIStringPtr( OCIEnv *env, const OCIString *vs );
+/*
+ NAME: OCIStringPtr - OCIString Get String Pointer
+ PARAMETERS:
+ env(IN) - pointer to OCI environment handle
+ vs (IN) - pointer to the text of this string is returned
+ DESCRIPTION:
+ Return the pointer to the text of the given string.
+ RETURNS:
+ pointer to the text of the string is returned
+ */
+
+/*----------------------- OCIStringAllocSize --------------------------------*/
+
+sword OCIStringAllocSize( OCIEnv *env, OCIError *err, const OCIString *vs,
+ ub4 *allocsize );
+/*
+ NAME: OCIStringAllocSize - OCIString get Allocated SiZe of string memory
+ in bytes
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ vs (IN) - string whose allocated size in bytes is returned
+ allocsize (OUT) - allocated size of string memory in bytes is returned
+ DESCRIPTION:
+ Return the allocated size of the string memory in bytes. The
+ allocated size is >= actual string size.
+ REQUIRES:
+ vs is a non-null pointer
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR on error
+ */
+
+/*****************************************************************************/
+/* VARIABLE-LENGTH RAW */
+/*****************************************************************************/
+
+/*
+ * The variable-length raw is represented in C as a pointer to OCIRaw
+ * structure. The OCIRaw structure is opaque to the user. Functions are
+ * provided to allow the user to manipulate a variable-length raw.
+ *
+ * A variable-length raw can be declared as:
+ *
+ * OCIRaw *raw;
+ *
+ * For binding variables of type OCIRaw* in OCI calls (OCIBindByName(),
+ * OCIBindByPos() and OCIDefineByPos()) use the external type code SQLT_LVB.
+ */
+typedef struct OCIRaw OCIRaw;
+
+/*-------------------------- OCIRawAssignRaw --------------------------------*/
+
+sword OCIRawAssignRaw( OCIEnv *env, OCIError *err, const OCIRaw *rhs,
+ OCIRaw **lhs );
+/*
+ NAME: OCIRawAssignRaw - OCIRaw Assign Raw (of type OCIRaw*) to
+ Raw (of type OCIRaw*)
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ rhs (IN) - RHS of the assignment, the type of rhs is also OCIRaw
+ lhs (IN/OUT) - LHS of the assignment
+ DESCRIPTION:
+ Assign 'rhs' raw to 'lhs' raw. The 'lhs' raw may be
+ resized depending upon the size of the 'rhs'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ out of space error
+ */
+
+/*------------------------ OCIRawAssignBytes --------------------------------*/
+
+sword OCIRawAssignBytes( OCIEnv *env, OCIError *err, const ub1 *rhs,
+ ub4 rhs_len, OCIRaw **lhs );
+/*
+ NAME: OCIRawAssignBytes - OCIRaw Assign raw Bytes (of type ub1*) to Raw
+ (of type OCIRaw*)
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ rhs (IN) - RHS of the assignment, the type of rhs is ub1 *
+ rhs_len (IN) - length of the 'rhs' raw
+ lhs (IN/OUT) - LHS of the assignment
+ DESCRIPTION:
+ Assign 'rhs' raw to 'lhs' raw. The 'lhs' raw may be
+ resized depending upon the size of the 'rhs'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ out of space error
+ */
+
+/*---------------------------- OCIRawResize ---------------------------------*/
+
+sword OCIRawResize( OCIEnv *env, OCIError *err, ub4 new_size,
+ OCIRaw **raw );
+/*
+ NAME: OCIRawResize - OCIRaw ReSiZe memory of variable-length raw
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ new_size (IN) - new size of the raw data in bytes
+ raw (IN) - variable-length raw pointer; the raw is
+ resized to 'new_size'
+ DESCRIPTION:
+ This function resizes the memory of the given variable-length raw in
+ the object cache.
+ The previous contents of the raw are NOT preserved.
+ This function may allocate the raw in a new memory region in
+ which case the original memory occupied by the given raw will
+ be freed. If the input raw is null (raw == NULL), then this
+ function will allocate memory for the raw data.
+
+ If the new_size is 0, then this function frees the memory occupied
+ by 'raw' and a null pointer value is returned.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ out of space error
+ */
+
+/*------------------------------- OCIRawSize --------------------------------*/
+
+ub4 OCIRawSize( OCIEnv * env, const OCIRaw *raw );
+/*
+ NAME: OCIRawSize - OCIRaw Get Raw siZe
+ PARAMETERS:
+ env (IN) - pointer to OCI environment handle
+ raw (INT) - raw whose size is returned
+ DESCRIPTION:
+ Return the size of the given raw.
+ RETURNS:
+ size of the raw in bytes is returned
+ */
+
+/*--------------------------------- OCIRawPtr -------------------------------*/
+ub1 *OCIRawPtr( OCIEnv * env, const OCIRaw *raw );
+/*
+ NAME: OCIRawPtr - OCIRaw Get Raw data Pointer
+ PARAMETERS:
+ env (IN) - pointer to OCI environment handle
+ raw (IN) - pointer to the data of this raw is returned
+ DESCRIPTION:
+ Return the pointer to the data of the given raw.
+ RETURNS:
+ pointer to the data of the raw is returned
+ */
+
+/*------------------------------ OCIRawAllocSize ----------------------------*/
+
+sword OCIRawAllocSize( OCIEnv *env, OCIError *err, const OCIRaw *raw,
+ ub4 *allocsize );
+/*
+ NAME: OCIRawAllocSize - OCIRaw get Allocated SiZe of raw memory in bytes
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ raw (IN) - raw whose allocated size in bytes is returned
+ allocsize (OUT) - allocated size of raw memory in bytes is returned
+ DESCRIPTION:
+ Return the allocated size of the raw memory in bytes. The
+ allocated size is >= actual raw size.
+ REQUIRES:
+ raw is a non-null pointer
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR upon error
+ */
+
+/*****************************************************************************/
+/* OBJECT REFERENCE OPERATIONS */
+/*****************************************************************************/
+
+/*
+ * See the definition of OCIRef in oro.h.
+ *
+ * For binding variables of type OCIRef* in OCI calls (OCIBindByName(),
+ * OCIBindByPos() and OCIDefineByPos()) use the code SQLT_REF.
+ *
+ */
+
+/*---------------------------- OCIRefClear ----------------------------------*/
+void OCIRefClear( OCIEnv *env, OCIRef *ref );
+/*
+ NAME: OCIRefClear - OCIRef CLeaR or nullify a ref
+ PARAMETERS:
+ env (IN) - pointer to OCI environment handle
+ ref (IN/OUT) - ref to clear
+ DESCRIPTION:
+ Clear or nullify the given ref. A ref is considered to be a null ref
+ if it does not contain a valid OID (and thus doesn't point to an
+ object). Logically, a null ref is a dangling ref.
+
+ Note that a null ref is still a valid SQL value and is not SQL-ly null.
+ It can be used as a valid non-null constant ref value for NOT NULL
+ column or attribute of a row in a table.
+
+ If a null pointer value is passed as a ref,
+ then this function is a no-op.
+ */
+
+/*--------------------------- OCIRefAssign ----------------------------------*/
+sword OCIRefAssign( OCIEnv *env, OCIError *err, const OCIRef *source,
+ OCIRef **target );
+/*
+ NAME: OCIRefAssign - OCIRef CoPY a ref to another
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ source (IN) - ref to copy from
+ target (IN/OUT) - ref to copy to
+ DESCRIPTION:
+ Copy 'source' ref to 'target' ref; both then reference the same
+ object. If the target ref pointer is null (i.e. *target == NULL)
+ then the copy function will allocate memory for the target ref
+ in OOCI heap prior to the copy.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ 1) out of memory
+ */
+
+/*-------------------------- OCIRefIsEqual ----------------------------------*/
+boolean OCIRefIsEqual( OCIEnv *env, const OCIRef *x, const OCIRef *y );
+/*
+ NAME: OCIRefIsEqual - OCIRef compare two refs for EQUality
+ PARAMETERS:
+ env (IN) - pointer to OCI environment handle
+ x (IN) - ref to compare
+ y (IN) - ref to compare
+ DESCRIPTION:
+ Compare the given refs for equality.
+ Two refs are equal if and only if:
+ - they are both referencing the same persistent object, or
+ - they are both referencing the same transient object.
+
+ NOTE THAT TWO NULL REFS ARE CONSIDERED NOT EQUAL BY THIS FUNCTION.
+ RETURNS:
+ TRUE if the two refs are equal
+ FALSE if the two refs are not equal, or X is NULL, or Y is NULL
+ */
+
+/*--------------------------- OCIRefIsNull ----------------------------------*/
+boolean OCIRefIsNull( OCIEnv *env, const OCIRef *ref );
+/*
+ NAME: OCIRefIsNull - OCIRef test if a ref is NULl
+ PARAMETERS:
+ env (IN) - pointer to OCI environment handle
+ ref (IN) - ref to test for null
+ DESCRIPTION:
+ Return TRUE if the given ref is null; otherwise, return FALSE.
+ A ref is null if and only if:
+ - it is supposed to be referencing a persistent object, but
+ its OID is null, or
+ - it is supposed to be referencing a transient object, but it is
+ currently not pointing to an object.
+ A ref is a dangling ref if the object that it points to does not
+ exist.
+ RETURNS:
+ TRUE if the given ref is NULL
+ FALSE if the given ref is not NULL
+ */
+
+/*-------------------------- OCIRefHexSize ----------------------------------*/
+ub4 OCIRefHexSize( OCIEnv *env, const OCIRef *ref );
+/*
+ NAME: OCIRefHexSize - OCIRef Hexadecimal buffer SiZe in bytes
+ PARAMETERS:
+ env (IN) - pointer to OCI environment handle
+ ref (IN) - ref whose size in hexadecimal representation in bytes is
+ returned
+ DESCRIPTION:
+ Return the size of the buffer in bytes required for the hexadecimal
+ representation of the ref. A buffer of at-least this size must be
+ passed to ref-to-hex (OCIRefToHex) conversion function.
+ RETURNS:
+ size of hexadecimal representation of ref
+ */
+
+/*-------------------------- OCIRefFromHex ---------------------------------*/
+sword OCIRefFromHex( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
+ const oratext *hex, ub4 length, OCIRef **ref );
+/*
+ NAME:
+ OCIRefFromHex - OCIRef convert a Hexadecimal string TO a Ref
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by
+ calling OCIErrorGet().
+ svc (IN) - OCI service context handle; if the resulting ref is
+ initialized with this service context
+ hex (IN) - hexadecimal string (that was produced by 'OCIRefToHex()"
+ previously) to be convert into a ref
+ length (IN) - length of the hexadecimal string
+ ref (IN/OUT) - ref is initialized with the given value ('hex').
+ If *ref is null, then space for the ref is allocated in the
+ object cache, otherwise the memory occupied by the given ref
+ is re-used.
+ DESCRIPTION:
+ Convert the given hexadecimal string into a ref. This function
+ ensures that the resulting ref is well formed. It does NOT ensure
+ that the object pointed to by the resulting ref exists or not.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ */
+
+/*--------------------------- OCIRefToHex -----------------------------------*/
+sword OCIRefToHex( OCIEnv *env, OCIError *err, const OCIRef *ref,
+ oratext *hex, ub4 *hex_length );
+/*
+ NAME:
+ OCIRefToHex - OCIRef convert ref to a Hexadecimal string
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by
+ calling OCIErrorGet().
+ ref (IN) - ref to be converted into a hexadecimal string; if the
+ ref is a null ref (i.e. OCIRefIsNull(ref) == TRUE) then
+ a zero hex_length value is returned
+ hex (OUT) - buffer that is large enough to contain the resulting
+ hexadecimal string; the contents of the string is opaque
+ to the caller
+ hex_length (IN/OUT) - on input specifies the size of the 'hex' buffer,
+ on output specifies the actual size of the hexadecimal
+ string being returned in 'hex'
+ DESCRIPTION:
+ Convert the given ref into a hexadecimal string, and return the length
+ of the string. The resulting string is opaque to the caller.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ the given buffer is not big enough to hold the resulting string
+ */
+
+
+/*****************************************************************************/
+/* COLLECTION FUNCTIONS */
+/*****************************************************************************/
+
+/*
+ The generic collection is represented by the type 'OCIColl'. The following
+ operations OCIColl*() are provided on a generic collection:
+ - get current size of collection
+ - get upper bound of collection
+ - get pointer to an element given its index
+ - set element at given index (assign element)
+ - append an element
+ - trim the given number of elements from the end of the collection
+ - collection assignment
+
+ The following iterator based scanning functions are also provided on a
+ generic collection. These functions make use of an iterator which is
+ defined to be of type OCIIter.
+
+ - create an iterator for scanning collection
+ - destroy iterator
+ - reset iterator to the beginning of collection
+ - get pointer to current element pointed by iterator
+ - get pointer to next element
+ - get pointer to previous element
+
+ The collections variable-length array (varray) and nested table
+ are sub-types of generic collection. This means that the OCIColl*()
+ functions can also be used to manipulate varray and nested table.
+
+ The varray is represented by OCIArray type and nested table by OCITable.
+ Besides OCIColl*() functions no additional functions are provided for
+ manipulating varrays. The OCIColl*() functions are a complete set of
+ functions to manipulate varrays.
+
+ Besides OCIColl*() functions, the following functions OCITable*() can be
+ used to manipulate nested table. The OCITable*() functions operate on
+ nested tables only and should not be used on a varray.
+
+ - delete an element at index i. Note that the position
+ ordinals of the remaining elements of the table is not changed by the
+ delete operation. So delete creates "holes" in the table.
+ - check if an element exists at the given index i
+ - return the smallest value of i for which exists(i) is true
+ - return the largest value of i for which exists(i) is true
+ - return pointer to the smallest position j, greater than i, such that
+ OCITableExists(j) is true
+ - return pointer to the largest position j, less than i, such that
+ OCITableExists(j) is true
+
+ For binding variables of type OCIColl* or OCITable* in OCI calls
+ (OCIBindByName(), OCIBindByPos() and OCIDefineByPos()) use the external
+ type code SQLT_NTY.
+ */
+
+/* OCIColl - generic collection type */
+typedef struct OCIColl OCIColl;
+
+/* OCIArray - varray collection type */
+typedef OCIColl OCIArray;
+
+/* OCITable - nested table collection type */
+typedef OCIColl OCITable;
+
+/* OCIIter - collection iterator */
+typedef struct OCIIter OCIIter;
+
+/*----------------------------- OCICollSize ---------------------------------*/
+
+sword OCICollSize( OCIEnv *env, OCIError *err, const OCIColl *coll,
+ sb4 *size );
+/*
+ NAME: OCICollSize - OCIColl return current SIZe of the given collection
+ PARAMETERS:
+ env(IN) - pointer to OCI environment handle
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ coll (IN) - collection whose number of elements is returned
+ size (OUT) - current number of elements in the collection
+ DESCRIPTION:
+ Returns the current number of elements in the given collection.
+
+ For collections of type nested table wherein 'delete element'
+ operation is allowed, the count returned by OCICollSize() will
+ NOT be decremented upon deleting elements. For example:
+
+ OCICollSize(...);
+ // assume 'size' returned is equal to 5
+ OCITableDelete(...); // delete one element
+ OCICollSize(...);
+ // 'size' returned will still be 5
+
+ To get the count minus the deleted elements use OCITableSize().
+ Continuing the above example,
+
+ OCITableSize(...)
+ // 'size' returned will be equal to 4
+
+ Note, a trim operation (OCICollTrim) will decrement the count
+ by the number of trimmed elements. Continuing the above example,
+
+ OCICollTrim(..,1..); // trim one element
+ OCICollSize(...);
+ // 'size' returned will be equal to 4
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ error during loading of collection into object cache
+ any of the input parameters is null
+ */
+
+/*------------------------------ OCICollMax ---------------------------------*/
+
+sb4 OCICollMax( OCIEnv *env, const OCIColl *coll );
+/*
+ NAME: OCICollMax - OCIColl return MAXimum size (upper-bound) of the
+ given collection (in number of elements)
+ PARAMETERS:
+ env(IN) - pointer to OCI environment handle
+ coll (IN) - collection whose upper-bound in number of elements
+ is returned
+ DESCRIPTION:
+ Returns the max number of elements that the given collection can hold.
+ A value 0 indicates that the collection has no upper-bound.
+ REQUIRES:
+ coll must point to a valid collection descriptor
+ RETURNS:
+ upper-bound of the given collection
+ */
+
+/*-------------------------- OCICollGetElem ---------------------------------*/
+
+sword OCICollGetElem( OCIEnv *env, OCIError *err, const OCIColl *coll,
+ sb4 index, boolean *exists, void **elem,
+ void **elemind );
+/*
+ NAME: OCICollGetElem - OCIColl GET pointer to the element at the given index
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ coll (IN) - pointer to the element in this collection is returned
+ index (IN) - index of the element whose pointer is returned
+ exists (OUT) - set to FALSE if element at the specified index does
+ not exist else TRUE
+ elem (OUT) - address of the desired element is returned
+ elemind (OUT) [optional] - address of the null indicator information
+ is returned; if (elemind == NULL) then the null indicator
+ information will NOT be returned
+ DESCRIPTION:
+ Get the address of the element at the given position. Optionally
+ this function also returns the address of the element's null indicator
+ information.
+
+ The following table describes for each collection element type
+ what the corresponding element pointer type is. The element pointer
+ is returned via the 'elem' parameter of OCICollGetElem().
+
+ Element Type *elem is set to
+ ----------------------- ---------------
+ Oracle Number (OCINumber) OCINumber*
+ Date (OCIDate) OCIDate*
+ Variable-length string (OCIString*) OCIString**
+ Variable-length raw (OCIRaw*) OCIRaw**
+ object reference (OCIRef*) OCIRef**
+ lob locator (OCILobLocator*) OCILobLocator**
+ object type (e.g. person) person*
+
+ The element pointer returned by OCICollGetElem() is in a form
+ such that it can not only be used to access the
+ element data but also is in a form that can be used as the target
+ (i.e left-hand-side) of an assignment statement.
+
+ For example, assume the user is iterating over the elements of
+ a collection whose element type is object reference (OCIRef*). A call
+ to OCICollGetElem() returns pointer to a reference handle
+ (i.e. OCIRef**). After getting, the pointer to the collection
+ element, the user may wish to modify it by assigning a new reference.
+ This can be accomplished via the ref assignment function shown below:
+
+ sword OCIRefAssign( OCIEnv *env, OCIError *err, const OCIRef *source,
+ OCIRef **target );
+
+ Note that the 'target' parameter of OCIRefAssign() is of type
+ 'OCIRef**'. Hence OCICollGetElem() returns 'OCIRef**'.
+ If '*target == NULL' a new ref will be allocated by OCIRefAssign()
+ and returned via the 'target' parameter.
+
+ Similarly, if the collection element was of type string (OCIString*),
+ OCICollGetElem() returns pointer to string handle
+ (i.e. OCIString**). If a new string is assigned, via
+ OCIStringAssign() or OCIStringAssignText() the type of the target
+ must be 'OCIString **'.
+
+ If the collection element is of type Oracle number, OCICollGetElem()
+ returns OCINumber*. The prototype of OCINumberAssign() is shown below:
+
+ sword OCINumberAssign(OCIError *err, const OCINumber *from,
+ OCINumber *to);
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ */
+
+/*------------------------- OCICollGetElemArray -----------------------------*/
+
+sword OCICollGetElemArray( OCIEnv *env, OCIError *err, const OCIColl *coll,
+ sb4 index, boolean *exists, void **elem,
+ void **elemind, uword *nelems);
+/*
+ NAME: OCICollGetElemArray - OCIColl GET pointers to elements from given index
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ coll (IN) - pointers to the elements in this collection is returned
+ index (IN) - starting index of the element
+ exists (OUT) - set to FALSE if element at the specified index does
+ not exist else TRUE
+ elem (OUT) - address of the desired elements is returned
+ elemind (OUT) [optional] - address of the null indicators information
+ is returned; if (elemind == NULL) then the null indicator
+ information will NOT be returned
+ nelems(IN/OUT) - Upper bound of elem and/or elemind array
+ DESCRIPTION:
+ Get the address of the elements from the given position. Optionally
+ this function also returns the address of the element's null indicator
+ information.
+
+ The following table describes for each collection element type
+ what the corresponding element pointer type is. The element pointer
+ is returned via the 'elem' parameter of OCICollGetElem().
+
+ Element Type *elem is set to
+ ----------------------- ---------------
+ Oracle Number (OCINumber) OCINumber*
+ Date (OCIDate) OCIDate*
+ Variable-length string (OCIString*) OCIString**
+ Variable-length raw (OCIRaw*) OCIRaw**
+ object reference (OCIRef*) OCIRef**
+ lob locator (OCILobLocator*) OCILobLocator**
+ object type (e.g. person) person*
+
+ The element pointer returned by OCICollGetElem() is in a form
+ such that it can not only be used to access the
+ element data but also is in a form that can be used as the target
+ (i.e left-hand-side) of an assignment statement.
+
+ For example, assume the user is iterating over the elements of
+ a collection whose element type is object reference (OCIRef*). A call
+ to OCICollGetElem() returns pointer to a reference handle
+ (i.e. OCIRef**). After getting, the pointer to the collection
+ element, the user may wish to modify it by assigning a new reference.
+ This can be accomplished via the ref assignment function shown below:
+
+ sword OCIRefAssign( OCIEnv *env, OCIError *err, const OCIRef *source,
+ OCIRef **target );
+
+ Note that the 'target' parameter of OCIRefAssign() is of type
+ 'OCIRef**'. Hence OCICollGetElem() returns 'OCIRef**'.
+ If '*target == NULL' a new ref will be allocated by OCIRefAssign()
+ and returned via the 'target' parameter.
+
+ Similarly, if the collection element was of type string (OCIString*),
+ OCICollGetElem() returns pointer to string handle
+ (i.e. OCIString**). If a new string is assigned, via
+ OCIStringAssign() or OCIStringAssignText() the type of the target
+ must be 'OCIString **'.
+
+ If the collection element is of type Oracle number, OCICollGetElem()
+ returns OCINumber*. The prototype of OCINumberAssign() is shown below:
+
+ sword OCINumberAssign(OCIError *err, const OCINumber *from,
+ OCINumber *to);
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ */
+
+/*----------------------- OCICollAssignElem ---------------------------------*/
+
+sword OCICollAssignElem( OCIEnv *env, OCIError *err, sb4 index,
+ const void *elem,
+ const void *elemind, OCIColl *coll );
+/*
+ NAME: OCICollAssignElem - OCIColl ASsign Element
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ index (IN) - index of the element whose is assigned to
+ elem (IN) - element which is assigned from (source element)
+ elemind (IN) [optional] - pointer to the element's null indicator
+ information; if (elemind == NULL) then the null indicator
+ information of the assigned element will be set to non-null.
+ coll (IN/OUT) - collection to be updated
+ DESCRIPTION:
+ Assign the given element value 'elem' to the element at coll[index].
+ If the collection is of type nested table, the element at the given
+ index may not exist (i.e. may have been deleted). In this case, the
+ given element is inserted at index 'index'.
+ Otherwise, the element at index 'index' is updated with the value
+ of 'elem'.
+
+ Note that the given element is deep-copied and
+ 'elem' is strictly an input parameter.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ out of memory error
+ given index is out of bounds of the given collection
+ */
+
+/*--------------------------- OCICollAssign ---------------------------------*/
+
+sword OCICollAssign( OCIEnv *env, OCIError *err, const OCIColl *rhs,
+ OCIColl *lhs );
+/*
+ NAME: OCICollAssign - OCIColl ASsiGn collection
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ rhs (IN) - collection to be assigned from
+ lhs (OUT) - collection to be assigned to
+ DESCRIPTION:
+ Assign 'rhs' to 'lhs'. The 'lhs' collection may be decreased or
+ increased depending upon the size of 'rhs'. If the 'lhs' contains
+ any elements then the elements will be deleted prior to the
+ assignment. This function performs a deep-copy. The memory for the
+ elements comes from the object cache.
+
+ An error is returned if the element types of the lhs and rhs
+ collections do not match. Also, an error is returned if the
+ upper-bound of the lhs collection is less than the current number of
+ elements in the rhs collection.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ out of memory error
+ type mis-match of lhs and rhs collections
+ upper-bound of lhs collection is less than the current number of
+ elements in the rhs collection
+ */
+
+/*--------------------------- OCICollAppend ---------------------------------*/
+
+sword OCICollAppend( OCIEnv *env, OCIError *err, const void *elem,
+ const void *elemind, OCIColl *coll );
+/*
+ NAME: OCICollAppend - OCIColl APPend collection
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the element which is appended to the end
+ of the given collection
+ elemind (IN) [optional] - pointer to the element's null indicator
+ information; if (elemind == NULL) then the null indicator
+ information of the appended element will be set to non-null.
+ coll (IN/OUT) - updated collection
+ DESCRIPTION:
+ Append the given element to the end of the given collection.
+ Appending an element is equivalent to:
+ - increasing the size of the collection by 1 element
+ - updating (deep-copying) the last element's data with the given
+ element's data
+
+ Note that the pointer to the given element 'elem' will not be saved
+ by this function. So 'elem' is strictly an input parameter.
+ An error is returned if the current size of the collection
+ is equal to the max size (upper-bound) of the collection prior to
+ appending the element.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ out of memory error
+ current size of collection == max size of the collection
+ */
+
+/*----------------------------- OCICollTrim ---------------------------------*/
+
+sword OCICollTrim( OCIEnv *env, OCIError *err, sb4 trim_num,
+ OCIColl *coll );
+/*
+ NAME: OCICollTrim - OCIColl Trim elements from the end of the collection
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ trim_num (IN) - number of elements to trim
+ coll (IN/OUT) - 'trim_num' of elements are removed (freed) from the
+ end of the collection
+ DESCRIPTION:
+ Trim the collection by the given number of elements. The elements are
+ removed from the end of the collection.
+
+ An error is returned if the 'trim_num' is greater than the current
+ size of the collection.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ 'trim_num' is greater than the current size of the collection.
+ */
+
+/*--------------------------- OCICollIsLocator ------------------------------*/
+
+sword OCICollIsLocator(OCIEnv *env, OCIError *err, const OCIColl *coll,
+ boolean *result );
+/*
+Name: OCICollIsLocator - OCIColl indicates whether a collection is locator
+ based or not.
+Parameters:
+ env(IN) - pointer to OCI environment handle
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ coll (IN) - collection item.
+ result (OUT) - TRUE if the collection item is a locator, FALSE
+ otherwise
+Description:
+ Returns TRUE in the result OUT parameter if the collection item is a
+ locator, otherwise returns FALSE.
+Returns:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+*/
+
+/*---------------------------- OCIIterCreate --------------------------------*/
+
+sword OCIIterCreate( OCIEnv *env, OCIError *err, const OCIColl *coll,
+ OCIIter **itr );
+/*
+ NAME: OCIIterCreate - OCIColl Create an ITerator to scan the collection
+ elements
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ coll (IN) - collection which will be scanned; the different
+ collection types are varray and nested table
+ itr (OUT) - address to the allocated collection iterator is
+ returned by this function
+ DESCRIPTION:
+ Create an iterator to scan the elements of the collection. The
+ iterator is created in the object cache. The iterator is initialized
+ to point to the beginning of the collection.
+
+ If the next function (OCIIterNext) is called immediately
+ after creating the iterator then the first element of the collection
+ is returned.
+ If the previous function (OCIIterPrev) is called immediately after
+ creating the iterator then "at beginning of collection" error is
+ returned.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ out of memory error
+ */
+
+/*----------------------------- OCIIterDelete ------------------------------*/
+
+sword OCIIterDelete( OCIEnv *env, OCIError *err, OCIIter **itr );
+/*
+ NAME: OCIIterDelete - OCIColl Delete ITerator
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ itr (IN/OUT) - the allocated collection iterator is destroyed and
+ the 'itr' is set to NULL prior to returning
+ DESCRIPTION:
+ Delete the iterator which was previously created by a call to
+ OCIIterCreate.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ to be discovered
+ */
+
+/*----------------------------- OCIIterInit ---------------------------------*/
+
+sword OCIIterInit( OCIEnv *env, OCIError *err, const OCIColl *coll,
+ OCIIter *itr );
+/*
+ NAME: OCIIterInit - OCIColl Initialize ITerator to scan the given
+ collection
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ coll (IN) - collection which will be scanned; the different
+ collection types are varray and nested table
+ itr (IN/OUT) - pointer to an allocated collection iterator
+ DESCRIPTION:
+ Initializes the given iterator to point to the beginning of the
+ given collection. This function can be used to:
+
+ a. reset an iterator to point back to the beginning of the collection
+ b. reuse an allocated iterator to scan a different collection
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ */
+
+/*------------------------ OCIIterGetCurrent --------------------------------*/
+
+sword OCIIterGetCurrent( OCIEnv *env, OCIError *err, const OCIIter *itr,
+ void **elem, void **elemind );
+/*
+ NAME: OCIIterGetCurrent - OCIColl Iterator based, get CURrent collection
+ element
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ itr (IN) - iterator which points to the current element
+ elem (OUT) - address of the element pointed by the iterator is returned
+ elemind (OUT) [optional] - address of the element's null indicator
+ information is returned; if (elemind == NULL) then the null
+ indicator information will NOT be returned
+ DESCRIPTION:
+ Returns pointer to the current element and its corresponding null
+ information.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ */
+
+/*------------------------------ OCIIterNext --------------------------------*/
+
+sword OCIIterNext( OCIEnv *env, OCIError *err, OCIIter *itr,
+ void **elem, void **elemind, boolean *eoc );
+/*
+ NAME: OCIIterNext - OCIColl Iterator based, get NeXT collection element
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ itr (IN/OUT) - iterator is updated to point to the next element
+ elem (OUT) - after updating the iterator to point to the next element,
+ address of the element is returned
+ elemind (OUT) [optional] - address of the element's null indicator
+ information is returned; if (elemind == NULL) then the null
+ indicator information will NOT be returned
+ eoc (OUT) - TRUE if iterator is at End Of Collection (i.e. next
+ element does not exist) else FALSE
+ DESCRIPTION:
+ Returns pointer to the next element and its corresponding null
+ information. The iterator is updated to point to the next element.
+
+ If the iterator is pointing to the last element of the collection
+ prior to executing this function, then calling this function will
+ set eoc flag to TRUE. The iterator will be left unchanged in this
+ situation.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ */
+
+/*------------------------------ OCIIterPrev --------------------------------*/
+
+sword OCIIterPrev( OCIEnv *env, OCIError *err, OCIIter *itr,
+ void **elem, void **elemind, boolean *boc );
+/*
+ NAME: OCIIterPrev - OCIColl Iterator based, get PReVious collection element
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ itr (IN/OUT) - iterator is updated to point to the previous
+ element
+ elem (OUT) - after updating the iterator to point to the previous
+ element, address of the element is returned
+ elemind (OUT) [optional] - address of the element's null indicator
+ information is returned; if (elemind == NULL) then the null
+ indicator information will NOT be returned
+ boc (OUT) - TRUE if iterator is at Beginning Of Collection (i.e.
+ previous element does not exist) else FALSE.
+ DESCRIPTION:
+ Returns pointer to the previous element and its corresponding null
+ information. The iterator is updated to point to the previous element.
+
+ If the iterator is pointing to the first element of the collection
+ prior to executing this function, then calling this function will
+ set 'boc' to TRUE. The iterator will be left unchanged in this
+ situation.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ */
+
+/*****************************************************************************/
+/* FUNCTIONS WHICH OPERATE ONLY ON NESTED TABLE OCITable*() */
+/*****************************************************************************/
+
+/*---------------------------- OCITableSize ---------------------------------*/
+
+sword OCITableSize( OCIEnv *env, OCIError *err, const OCITable *tbl,
+ sb4 *size);
+/*
+ NAME: OCITableSize - OCITable return current SIZe of the given
+ nested table (not including deleted elements)
+ PARAMETERS:
+ env(IN) - pointer to OCI environment handle
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tbl (IN) - nested table whose number of elements is returned
+ size (OUT) - current number of elements in the nested table. The count
+ does not include deleted elements.
+ DESCRIPTION:
+ Returns the count of elements in the given nested table.
+
+ The count returned by OCITableSize() will be decremented upon
+ deleting elements from the nested table. So, this count DOES NOT
+ includes any "holes" created by deleting elements.
+ For example:
+
+ OCITableSize(...);
+ // assume 'size' returned is equal to 5
+ OCITableDelete(...); // delete one element
+ OCITableSize(...);
+ // 'size' returned will be equal to 4
+
+ To get the count plus the count of deleted elements use
+ OCICollSize(). Continuing the above example,
+
+ OCICollSize(...)
+ // 'size' returned will still be equal to 5
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ error during loading of nested table into object cache
+ any of the input parameters is null
+ */
+
+/*---------------------- OCITableExists ---------------------------------*/
+
+sword OCITableExists( OCIEnv *env, OCIError *err, const OCITable *tbl,
+ sb4 index, boolean *exists );
+/*
+ NAME: OCITableExists - OCITable test whether element at the given index
+ EXIsts
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tbl (IN) - table in which the given index is checked
+ index (IN) - index of the element which is checked for existence
+ exists (OUT) - set to TRUE if element at given 'index' exists
+ else set to FALSE
+ DESCRIPTION:
+ Test whether an element exists at the given 'index'.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ */
+
+/*--------------------------- OCITableDelete -------------------------------*/
+
+sword OCITableDelete( OCIEnv *env, OCIError *err, sb4 index,
+ OCITable *tbl );
+/*
+ NAME: OCITableDelete - OCITable DELete element at the specified index
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ index (IN) - index of the element which must be deleted
+ tbl (IN) - table whose element is deleted
+ DESCRIPTION:
+ Delete the element at the given 'index'. Note that the position
+ ordinals of the remaining elements of the table is not changed by the
+ delete operation. So delete creates "holes" in the table.
+
+ An error is returned if the element at the specified 'index' has
+ been previously deleted.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ any of the input parameters is null
+ given index is not valid
+ */
+
+/*--------------------------- OCITableFirst ---------------------------------*/
+
+sword OCITableFirst( OCIEnv *env, OCIError *err, const OCITable *tbl,
+ sb4 *index );
+/*
+ NAME: OCITableFirst - OCITable return FirST index of table
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tbl (IN) - table which is scanned
+ index (OUT) - first index of the element which exists in the given
+ table is returned
+ DESCRIPTION:
+ Return the first index of the element which exists in the given
+ table.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ table is empty
+ */
+
+/*---------------------------- OCITableLast ---------------------------------*/
+
+sword OCITableLast( OCIEnv *env, OCIError *err, const OCITable *tbl,
+ sb4 *index );
+/*
+ NAME: OCITableFirst - OCITable return LaST index of table
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tbl (IN) - table which is scanned
+ index (OUT) - last index of the element which exists in the given
+ table is returned
+ DESCRIPTION:
+ Return the last index of the element which exists in the given
+ table.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ table is empty
+ */
+
+/*---------------------------- OCITableNext ---------------------------------*/
+
+sword OCITableNext( OCIEnv *env, OCIError *err, sb4 index,
+ const OCITable *tbl, sb4 *next_index,
+ boolean *exists );
+/*
+ NAME: OCITableNext - OCITable return NeXT available index of table
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ index (IN) - starting at 'index' the index of the next element
+ which exists is returned
+ tbl (IN) - table which is scanned
+ next_index (OUT) - index of the next element which exists
+ is returned
+ exists (OUT) - FALSE if no next index available else TRUE
+ DESCRIPTION:
+ Return the smallest position j, greater than 'index', such that
+ exists(j) is TRUE.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ no next index available
+ */
+
+/*---------------------------- OCITablePrev ---------------------------------*/
+
+sword OCITablePrev( OCIEnv *env, OCIError *err, sb4 index,
+ const OCITable *tbl, sb4 *prev_index,
+ boolean *exists );
+/*
+ NAME: OCITablePrev - OCITable return PReVious available index of table
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode.
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ index (IN) - starting at 'index' the index of the previous element
+ which exists is returned
+ tbl (IN) - table which is scanned
+ prev_index (OUT) - index of the previous element which exists
+ is returned
+ exists (OUT) - FALSE if no next index available else TRUE
+ DESCRIPTION:
+ Return the largest position j, less than 'index', such that
+ exists(j) is TRUE.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
+ OCI_ERROR if
+ no previous index available
+ */
+
+/*------------------------ OCINumberToLnx -----------------------------------*/
+/* void OCINumberToLnx(/o_ OCINumber *num _o/); */
+
+#define OCINumberToLnx(num) ((lnxnum_t *)num)
+
+/*
+ NAME: OCINumberToLnx
+ PARAMETERS:
+ num (IN) - OCINumber to convert ;
+ DESCRIPTION:
+ Converts OCINumber to its internal lnx format
+ This is not to be used in Public interfaces , but
+ has been provided due to special requirements from
+ SQLPLUS development group as they require to call
+ Core funtions directly .
+*/
+
+/* OCI representation of XMLType */
+typedef struct OCIXMLType OCIXMLType;
+
+/* OCI representation of OCIDomDocument */
+typedef struct OCIDOMDocument OCIDOMDocument;
+
+/* OCI representation for the Binary XML repository context */
+typedef struct OCIBinXmlReposCtx OCIBinXmlReposCtx;
+
+#endif /* ORL_ORACLE */
--- /dev/null
+/* Copyright (c) 1994, 2003, Oracle Corporation. All rights reserved. */
+
+/*
+ NAME
+ OCI - Oracle Object Interface for External/Internal/Kernel Clients
+
+ DESCRIPTION
+ This header file contains Oracle object interface definitions which
+ can be included by external user applications, tools, as well as
+ the kernel. It defines types and constants that are common to all
+ object interface which is being defined in several other header files
+ (e.g., ori.h, ort.h, and orl.h).
+
+ RELATED DOCUMENTS
+ TBD
+
+ INSPECTION STATUS [[ deletable if no inspection ]]
+ Inspection date: [[ date of the last logging meeting ]]
+ Inspection status: [[ exited, not exited, or N/A if exit is not a goal ]]
+ Estimated increasing cost defects per page:
+ Rule sets: [[ rule sets inspected against or planned to be
+ inspected against ]]
+
+ ACCEPTANCE REVIEW STATUS [[ deletable if no approval review ]]
+ Review date: [[ date of the meeting where issues were logged and the
+ approval status was decided ]]
+ Review status: [[ current status: accepted, conditionally accepted,
+ major revision required, rejected ]]
+ Reviewers: [[ names of the members on the review team ]]
+
+ PUBLIC FUNCTIONS
+
+ EXAMPLES
+ Examples are given in the description of each function or macro where
+ relevant.
+
+ MODIFIED
+ mnanal 06/09/03 - backout of fix 2836388
+ mnanal 05/14/03 - bug-2836388
+ srseshad 11/27/02 - Change OCI_TYPECODE_BFLOAT/BDOUBLE codes
+ rxgovind 10/09/02 - add OCI_TYPECODE_UROWID
+ mxyang 09/17/02 - grabtrans 'mmorsi_obj_float'
+ srseshad 09/11/02 -
+ srseshad 09/01/02 -
+ aahluwal 06/03/02 - bug 2360115
+ celsbern 10/19/01 - merge LOG to MAIN
+ rxgovind 10/16/01 - update typecodes
+ rxgovind 09/19/01 - add typecodes
+ rkasamse 08/15/01 - add OCI_DURATION_USER_CALLBACK
+ jchai 09/24/01 - add type code for PLS_INTEGER
+ porangas 08/22/01 - Fix bug#1776434
+ schatter 04/09/01 - merge 1456235: define OCI_DURATION_INVALID
+ rdani 10/12/00 - 1449943 NOCOPY and PIPELINE
+ ciyer 05/26/00 - short names for abstract, overriding
+ rkasamse 05/25/00 - OCCI enhancements
+ smuralid 05/11/00 - OCITypeMethodFlags - add NOT INSTANTIABLE, OVERRIDING
+ rxgovind 05/09/00 - add OCI_TYPECODE_NONE
+ tnbui 07/28/99 - Remove OCI_TYPECODE_TIMESTAMP_ITZ
+ tnbui 07/21/99 - TS LOCAL TZ
+ thoang 06/21/99 - Add OCI_TYPECODE_TIMESTAMP_ITZ
+ thoang 03/04/99 - Add datetime datatypes
+ rkasamse 10/20/98 - add OCI_ATTR_CACHE_ARRAYFLUSH
+ rkasamse 10/29/98 - add OCI_DURATION_CALLOUT
+ rkasamse 04/28/98 - OCI_OBJECT_DETECTCHANGE -> OCI_ATTR_OBJECT_DETECTCHAN
+ rkasamse 04/28/98 - OCI_OBJECT_NEWNOTNULL -> OCI_ATTR_OBJECT_NEWNOTNULL
+ rkasamse 04/23/98 - add OCI_OBJECT_DETECTCHANGE
+ rkasamse 04/03/98 - add OCI_OBJECT_NEWNOTNULL
+ pmitra 04/01/98 - OCI_LOCK_X_NOWAIT added
+ rxgovind 02/18/98 - add OCI_TYPECODE_OPAQUE
+ rkasamse 02/13/98 - Add OCI_DURATION_PROCESS
+ cxcheng 07/28/97 - fix compile with SLSHORTNAME
+ skrishna 07/14/97 - add OCIObjectGetProperty
+ cxcheng 04/30/97 - make OCITypeParamMode values consistent with PL/SQL
+ skrishna 04/28/97 - undocument OCIObjectProperty & OCIObjectEvent
+ cxcheng 03/29/97 - remove all remaining short names
+ sthakur 03/20/97 - add casts to constants
+ cxcheng 02/21/97 - temporarily put SLSHORTNAME for PL/SQL
+ cxcheng 02/06/97 - take out short name support except with SLSHORTNAME
+ lchidamb 01/20/97 - update OCIRef comments
+ sgollapu 11/19/96 - Add OCI type codes for BOOL,REC,and TAB
+ cxcheng 11/19/96 - more typecode changes
+ cxcheng 11/13/96 - add #include for ocidfn.h
+ cxcheng 11/13/96 - add OCI_TYPECODE_ADT for compatibility
+ cxcheng 11/12/96 - add SQLT_NCO for named collection
+ cxcheng 11/11/96 - more changes to typecodes
+ cxcheng 11/07/96 - #define OCI_TYPECODE_MLSLABEL to SQLT_LAB
+ cxcheng 11/06/96 - fix #define omission for OROTCNAT
+ cxcheng 10/30/96 - move OCI_TYPECODE_* to ocidfn.h as SQLT_*
+ cxcheng 10/28/96 - more beautification changes
+ jboonleu 10/29/96 - add flags for freeing object
+ dchatter 10/26/96 - delete redef of OCISvcCtx, OCIError, OCIEnv
+ cxcheng 10/15/96 - more changes
+ cxcheng 10/14/96 - more final fixes to constants
+ mluong 10/11/96 -
+ mluong 10/11/96 - KOCON and KONSP are in lowercase
+ mluong 10/11/96 - add some define per Calvin
+ cxcheng 10/09/96 - add #define for OROOCOSFN to OCI_COPY_NOREF
+ jboonleu 10/08/96 - change OROOCOSFN to OCICopyFlag
+ jboonleu 10/07/96 - use new OCI names for cache options
+ cxcheng 10/07/96 - add OROTCS02 for KOTTCBRI and OROTCS03 as spare
+ cxcheng 10/07/96 - more lint fixes
+ cxcheng 10/02/96 - move oronsp to ko.h as konsp
+ cxcheng 10/01/96 - add long names for readability
+ cxcheng 10/01/96 - remove orotty and orotal
+ rjenkins 09/28/96 - 2k char 4k varchar2
+ jboonleu 09/27/96 - add macro used only in beta2
+ cxcheng 09/27/96 - move oroenv to oroenv.h
+ cxcheng 09/24/96 - remove unnecessary orotyp
+ cxcheng 09/25/96 - add typecode OROTCS01 as placeholder for lob pointer
+ cxcheng 09/20/96 - add TDO load option orotgo
+ jboonleu 09/18/96 - add OROOPOREC
+ jboonleu 09/10/96 - add OROOPODFL
+ jweisz 08/27/96 - add SQL internal typecode OROTCS00
+ cxcheng 08/02/96 - add PLSQL internal typecodes OROTCP..
+ cxcheng 08/01/96 - add OROTCFAR to fill up space left by OROTCCAR
+ jboonleu 07/16/96 - new pin option
+ cxcheng 06/18/96 - add casts to OROTNOPRE and OROTNOSCL
+ cxcheng 05/29/96 - change OROTCNPT back to OROTCDOM
+ vkrishna 05/27/96 - add OROTCCAR
+ cxcheng 05/17/96 - replace OROTCFAR with OROTCCAR
+ cxcheng 05/08/96 - change orotmf from ub1 to ub2
+ cxcheng 05/07/96 - fix public defines for method types
+ cxcheng 04/30/96 - change OROTCDOM to OROTCNPT
+ cxcheng 04/15/96 - remove obsolete OROTTYICT
+ jboonleu 04/12/96 - add new pin option
+ sthakur 04/12/96 - add indicator type and indicator status
+ cxcheng 04/10/96 - add function parameter codes for ORT/KOT
+ cxcheng 04/03/96 - replace OROTCFAR as OROTCCAR
+ jwijaya 03/29/96 - add OROTTCCAR
+ jwijaya 03/27/96 - better comments for orotc
+ cxcheng 02/23/96 - add typecodes for SMALLINT and VARCHAR2
+ skrishna 02/22/96 - add oroind - null indicator type
+ cxcheng 02/21/96 - change lob character codes to OROTCCLB, OROTCBLB...
+ jboonleu 02/06/96 - new value for predefined duration
+ cxcheng 01/12/96 - add OROTCCLO, OROTCBLO, OROTCFIL to orotc
+ cxcheng 12/05/95 - add OROTCDOM and OROTCAAT to orotc
+ skotsovo 10/30/95 - reserve space for internal 'oid' type
+ jwijaya 10/20/95 - support variable-length ref
+ cxcheng 10/03/95 - add OROTMFOR for ordering function to orotmf
+ cxcheng 10/03/95 - Adding the ordering function type to orotmf
+ jboonleu 09/28/95 - set OROODTPRE
+ jboonleu 09/25/95 - add oroodt
+ skotsovo 03/10/95 - update to only include release 1
+ jboonleu 02/15/95 - add OROOPOREC, remove orocro, oroolo
+ skotsovo 01/30/95 - add default max lengths for varrays and vstrings
+ skotsovo 01/24/95 - categorize sint32, double, and real as number types
+ (with precision and scale) instead of scalar types.
+ skotsovo 12/20/94 - add release 1 types
+ skotsovo 12/12/94 - update according to new ots doc
+ skotsovo 12/01/94 - add default precision and scale
+ jwijaya 11/15/94 - rename ORONSPTAB to ORONSPEXT
+ jwijaya 10/25/94 - tint
+ jwijaya 10/06/94 - add namespace
+ jwijaya 10/02/94 - connection handle -> connection number
+ skotsovo 09/12/94 - keep 0 as uninitialized value for ORT consts
+ skotsovo 08/24/94 - fix orotec
+ skotsovo 08/17/94 - modify type code names
+ skotsovo 08/12/94 - fix 141 lint errors
+ skotsovo 07/25/94 - modify categorization of complex types (orotc)
+ skotsovo 07/07/94 - change typecode enum values & add decimal type
+ skotsovo 07/01/94 - change order of typecodes
+ jwijaya 06/15/94 - review
+ jboonleu 06/13/94 - add comments for the object cache options
+ jwijaya 06/13/94 - adhere to the header file template
+ skotsovo 06/09/94 - make ots scalar type names consistent with the ots
+ document
+ jwijaya 06/07/94 - include oratypes.h instead of s.h
+ skotsovo 05/24/94 - change typecodes
+ jwijaya 05/23/94 - fix comments of ororef
+ skotsovo 05/19/94 - remove type composition
+ skotsovo 05/09/94 - modified orotc according to new OTS document
+ jwijaya 05/03/94 - oroid and ororef
+ jwijaya 01/26/94 - Creation
+*/
+
+
+#ifndef ORATYPES
+#include <oratypes.h>
+#endif
+
+#ifndef OCIDFN_ORACLE
+#include <ocidfn.h>
+#endif
+
+#ifndef ORO_ORACLE
+#define ORO_ORACLE
+
+/*---------------------------------------------------------------------------*/
+/* SHORT NAMES SUPPORT SECTION */
+/*---------------------------------------------------------------------------*/
+
+#ifdef SLSHORTNAME
+
+/* the following are short names that are only supported on IBM mainframes
+ with the SLSHORTNAME defined.
+ With this all subsequent long names will actually be substituted with
+ the short names here */
+
+#define OCIDuration oroodt
+#define OCIInd oroind
+#define OCILockOpt oroolm
+#define OCIMarkOpt oroomo
+#define OCIObjectEvent orocev
+#define OCIObjectProperty oroopr
+#define OCIPinOpt oroopo
+#define OCIRef ororef
+#define OCIRefreshOpt orooro
+#define OCITypeCode orotc
+#define OCITypeEncap orotec
+#define OCITypeGetOpt orotgo
+#define OCITypeMethodFlag orotmf
+#define OCITypeParamMode orotpm
+#define OCIObjectPropId oroopi
+#define OCIObjectLifetime oroolft
+#define OCIObjectMarkstatus oroomst
+#define OCI_LOCK_NONE OROOLMNUL
+#define OCI_LOCK_X OROOLMX
+#define OCI_LOCK_X_NOWAIT OROOLMXNW
+#define OCI_MARK_DEFAULT OROOMODFL
+#define OCI_MARK_NONE OROOMONON
+#define OCI_MARK_UPDATE OROOMOUPD
+#define OCI_OBJECTEVENT_AFTER_FLUSH OROCEVAFL
+#define OCI_OBJECTEVENT_AFTER_REFRESH OROCEVARF
+#define OCI_OBJECTEVENT_BEFORE_FLUSH OROCEVBFL
+#define OCI_OBJECTEVENT_BEFORE_REFRESH OROCEVBRF
+#define OCI_OBJECTEVENT_WHEN_LOCK OROCEVWLK
+#define OCI_OBJECTEVENT_WHEN_MARK_DELETED OROCEVWDL
+#define OCI_OBJECTEVENT_WHEN_MARK_UPDATED OROCEVWUP
+#define OCI_OBJECTEVENT_WHEN_UNMARK OROCEVWUM
+#define OCI_OBJECTPROP_DIRTIED OROOPRDRT
+#define OCI_OBJECTPROP_LOADED OROOPRLOD
+#define OCI_OBJECTPROP_LOCKED OROOPRLCK
+#define OCI_PIN_ANY OROOPOANY
+#define OCI_PIN_DEFAULT OROOPODFL
+#define OCI_PIN_LATEST OROOPOLST
+#define OCI_PIN_RECENT OROOPOREC
+#define OCI_REFRESH_LOADED OROOROLOD
+#define OCI_TYPEENCAP_PRIVATE OROTECPVT
+#define OCI_TYPEENCAP_PUBLIC OROTECPUB
+#define OCI_TYPEGET_ALL OROTGOALL
+#define OCI_TYPEGET_HEADER OROTGOHDR
+#define OCI_TYPEMETHOD_CONSTANT OROTMCON
+#define OCI_TYPEMETHOD_CONSTRUCTOR OROTMCSTR
+#define OCI_TYPEMETHOD_DESTRUCTOR OROTMDSTR
+#define OCI_TYPEMETHOD_INLINE OROTMINL
+#define OCI_TYPEMETHOD_MAP OROTMMAP
+#define OCI_TYPEMETHOD_OPERATOR OROTMOP
+#define OCI_TYPEMETHOD_ORDER OROTMOR
+#define OCI_TYPEMETHOD_RNDS OROTMRDS
+#define OCI_TYPEMETHOD_RNPS OROTMRPS
+#define OCI_TYPEMETHOD_SELFISH OROTMSLF
+#define OCI_TYPEMETHOD_VIRTUAL OROTMVRT
+#define OCI_TYPEMETHOD_WNDS OROTMWDS
+#define OCI_TYPEMETHOD_WNPS OROTMWPS
+#define OCI_TYPEMETHOD_ABSTRACT OROTMABSTRACT
+#define OCI_TYPEMETHOD_OVERRIDING OROTMOVERRIDING
+#define OCI_TYPEMETHOD_PIPELINED OROTMPIPELINED
+#define OCI_TYPEPARAM_BYREF OROTPMREF
+#define OCI_TYPEPARAM_IN OROTPMIN
+#define OCI_TYPEPARAM_INOUT OROTPMIO
+#define OCI_TYPEPARAM_OUT OROTPMOUT
+#define OCI_TYPEPARAM_OUTNCPY OROTPMOUTNCPY
+#define OCI_TYPEPARAM_INOUTNCPY OROTPMIONCPY
+
+#endif /* SLSHORTNAME */
+
+
+/*---------------------------------------------------------------------------*/
+/* PUBLIC TYPES, CONSTANTS AND MACROS */
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------*/
+/* GENERAL OBJECT TYPES, CONSTANTS, MACROS */
+/*---------------------------------------------------------------------------*/
+
+/*------------------------- OBJECT REFERENCE (REF) --------------------------*/
+
+typedef struct OCIRef OCIRef;
+/*
+ * OCIRef - OCI object REFerence
+ *
+ * In the Oracle object runtime environment, an object is identified by an
+ * object reference (ref) which contains the object identifier plus other
+ * runtime information. The contents of a ref is opaque to clients. Use
+ * OCIObjectNew() to construct a ref.
+ */
+
+
+/*--------------------------- OBJECT INDICATOR ------------------------------*/
+
+typedef sb2 OCIInd;
+/*
+ * OCIInd -- a variable of this type contains (null) indicator information
+ */
+
+#define OCI_IND_NOTNULL (OCIInd)0 /* not NULL */
+#define OCI_IND_NULL (OCIInd)(-1) /* NULL */
+#define OCI_IND_BADNULL (OCIInd)(-2) /* BAD NULL */
+#define OCI_IND_NOTNULLABLE (OCIInd)(-3) /* not NULLable */
+
+/*---------------------------------------------------------------------------*/
+/* OBJECT CACHE */
+/*---------------------------------------------------------------------------*/
+
+/* To enable object change detection mode, set this to TRUE */
+#define OCI_ATTR_OBJECT_DETECTCHANGE 0x00000020
+
+/* To enable object creation with non-NULL attributes by default, set the
+ following to TRUE.
+ By default, object is created with NULL attributes
+*/
+#define OCI_ATTR_OBJECT_NEWNOTNULL 0x00000010
+
+/* To enable sorting of the objects that belong to the same table
+ before being flushed through OCICacheFlush.
+ Please note that by enabling this object cache will not be flushing
+ the objects in the same order they were dirtied */
+#define OCI_ATTR_CACHE_ARRAYFLUSH 0x00000040
+
+/*--------------------------- OBJECT PIN OPTION -----------------------------*/
+
+enum OCIPinOpt
+{
+ /* 0 = uninitialized */
+ OCI_PIN_DEFAULT = 1, /* default pin option */
+ OCI_PIN_ANY = 3, /* pin any copy of the object */
+ OCI_PIN_RECENT = 4, /* pin recent copy of the object */
+ OCI_PIN_LATEST = 5 /* pin latest copy of the object */
+};
+typedef enum OCIPinOpt OCIPinOpt;
+
+/*
+ * OCIPinOpt - OCI object Pin Option
+ *
+ * In the Oracle object runtime environment, the program has the option to
+ * specify which copy of the object to pin.
+ *
+ * OCI_PINOPT_DEFAULT pins an object using the default pin option. The default
+ * pin option can be set as an attribute of the OCI environment handle
+ * (OCI_ATTR_PINTOPTION). The value of the default pin option can be
+ * OCI_PINOPT_ANY, OCI_PINOPT_RECENT, or OCI_PIN_LATEST. The default option
+ * is initialized to OCI_PINOPT_ANY.
+ *
+ * OCI_PIN_ANY pins any copy of the object. The object is pinned
+ * using the following criteria:
+ * If the object copy is not loaded, load it from the persistent store.
+ * Otherwise, the loaded object copy is returned to the program.
+ *
+ * OCI_PIN_RECENT pins the latest copy of an object. The object is
+ * pinned using the following criteria:
+ * If the object is not loaded, load the object from the persistent store
+ * from the latest version.
+ * If the object is not loaded in the current transaction and it is not
+ * dirtied, the object is refreshed from the latest version.
+ * Otherwise, the loaded object copy is returned to the program.
+ *
+ * OCI_PINOPT_LATEST pins the latest copy of an object. The object copy is
+ * pinned using the following criteria:
+ * If the object copy is not loaded, load it from the persistent store.
+ * If the object copy is loaded and dirtied, it is returned to the program.
+ * Otherwise, the loaded object copy is refreshed from the persistent store.
+ */
+
+
+
+/*--------------------------- OBJECT LOCK OPTION ----------------------------*/
+
+enum OCILockOpt
+{
+ /* 0 = uninitialized */
+ OCI_LOCK_NONE = 1, /* null (same as no lock) */
+ OCI_LOCK_X = 2, /* exclusive lock */
+ OCI_LOCK_X_NOWAIT = 3 /* exclusive lock, do not wait */
+};
+typedef enum OCILockOpt OCILockOpt;
+/*
+ * OCILockOpt - OCI object LOCK Option
+ *
+ * This option is used to specify the locking preferences when an object is
+ * loaded from the server.
+ */
+
+
+/*------------------------- OBJECT MODIFYING OPTION -------------------------*/
+
+enum OCIMarkOpt
+{
+ /* 0 = uninitialized */
+ OCI_MARK_DEFAULT = 1, /* default (the same as OCI_MARK_NONE) */
+ OCI_MARK_NONE = OCI_MARK_DEFAULT, /* object has not been modified */
+ OCI_MARK_UPDATE /* object is to be updated */
+};
+typedef enum OCIMarkOpt OCIMarkOpt;
+/*
+ * OCIMarkOpt - OCI object Mark option
+ *
+ * When the object is marked updated, the client has to specify how the
+ * object is intended to be changed.
+ */
+
+/*-------------------------- OBJECT Duration --------------------------------*/
+
+typedef ub2 OCIDuration;
+
+#define OCI_DURATION_INVALID 0xFFFF /* Invalid duration */
+#define OCI_DURATION_BEGIN (OCIDuration)10
+ /* beginning sequence of duration */
+#define OCI_DURATION_NULL (OCIDuration)(OCI_DURATION_BEGIN-1)
+ /* null duration */
+#define OCI_DURATION_DEFAULT (OCIDuration)(OCI_DURATION_BEGIN-2) /* default */
+#define OCI_DURATION_USER_CALLBACK (OCIDuration)(OCI_DURATION_BEGIN-3)
+#define OCI_DURATION_NEXT (OCIDuration)(OCI_DURATION_BEGIN-4)
+ /* next special duration */
+#define OCI_DURATION_SESSION (OCIDuration)(OCI_DURATION_BEGIN)
+ /* the end of user session */
+#define OCI_DURATION_TRANS (OCIDuration)(OCI_DURATION_BEGIN+1)
+ /* the end of user transaction */
+/******************************************************************************
+** DO NOT USE OCI_DURATION_CALL. IT IS UNSUPPORTED **
+** WILL BE REMOVED/CHANGED IN A FUTURE RELEASE **
+******************************************************************************/
+#define OCI_DURATION_CALL (OCIDuration)(OCI_DURATION_BEGIN+2)
+ /* the end of user client/server call */
+#define OCI_DURATION_STATEMENT (OCIDuration)(OCI_DURATION_BEGIN+3)
+
+/* This is to be used only during callouts. It is similar to that
+of OCI_DURATION_CALL, but lasts only for the duration of a callout.
+Its heap is from PGA */
+#define OCI_DURATION_CALLOUT (OCIDuration)(OCI_DURATION_BEGIN+4)
+
+#define OCI_DURATION_LAST OCI_DURATION_CALLOUT
+ /* last of predefined durations */
+
+/* This is not being treated as other predefined durations such as
+ SESSION, CALL etc, because this would not have an entry in the duration
+ table and its functionality is primitive such that only allocate, free,
+ resize memory are allowed, but one cannot create subduration out of this
+*/
+#define OCI_DURATION_PROCESS (OCIDuration)(OCI_DURATION_BEGIN-5)
+
+/*
+ * OCIDuration - OCI object duration
+ *
+ * A client can specify the duration of which an object is pinned (pin
+ * duration) and the duration of which the object is in memory (allocation
+ * duration). If the objects are still pinned at the end of the pin duration,
+ * the object cache manager will automatically unpin the objects for the
+ * client. If the objects still exist at the end of the allocation duration,
+ * the object cache manager will automatically free the objects for the client.
+ *
+ * Objects that are pinned with the option OCI_DURATION_TRANS will get unpinned
+ * automatically at the end of the current transaction.
+ *
+ * Objects that are pinned with the option OCI_DURATION_SESSION will get
+ * unpinned automatically at the end of the current session (connection).
+ *
+ * The option OCI_DURATION_NULL is used when the client does not want to set
+ * the pin duration. If the object is already loaded into the cache, then the
+ * pin duration will remain the same. If the object is not yet loaded, the
+ * pin duration of the object will be set to OCI_DURATION_DEFAULT.
+ */
+
+/*----------------------------- OBJECT PROPERTY -----------------------------*/
+
+/******************************************************************************
+** DO NOT USE OCIObjectProperty. IT IS UNSUPPORTED **
+** WILL BE REMOVED/CHANGED IN A FUTURE RELEASE **
+******************************************************************************/
+enum OCIObjectProperty
+{
+ /* 0 = uninitialized */
+ OCI_OBJECTPROP_DIRTIED = 1, /* dirty objects */
+ OCI_OBJECTPROP_LOADED, /* objects loaded in the transaction */
+ OCI_OBJECTPROP_LOCKED /* locked objects */
+};
+typedef enum OCIObjectProperty OCIObjectProperty;
+/*
+ * OCIObjectProperty -- OCI Object Property
+ * This specifies the properties of objects in the object cache.
+ */
+
+/*------------------------- CACHE REFRESH OPTION ---------------------------*/
+
+enum OCIRefreshOpt
+{
+ /* 0 = uninitialized */
+ OCI_REFRESH_LOADED = 1 /* refresh objects loaded in the transaction */
+};
+typedef enum OCIRefreshOpt OCIRefreshOpt;
+/*
+ * OCIRefreshOpt - OCI cache Refresh Option
+ * This option is used to specify the set of objects to be refreshed.
+ *
+ * OCI_REFRESH_LOAD refreshes the objects that are loaded in the current
+ * transaction.
+ */
+
+/*-------------------------------- OBJECT EVENT -----------------------------*/
+
+/******************************************************************************
+** DO NOT USE OCIObjectEvent. IT IS UNSUPPORTED **
+** WILL BE REMOVED/CHANGED IN A FUTURE RELEASE **
+******************************************************************************/
+enum OCIObjectEvent
+{
+ /* 0 = uninitialized */
+ OCI_OBJECTEVENT_BEFORE_FLUSH = 1, /* before flushing the cache */
+ OCI_OBJECTEVENT_AFTER_FLUSH, /* after flushing the cache */
+ OCI_OBJECTEVENT_BEFORE_REFRESH, /* before refreshing the cache */
+ OCI_OBJECTEVENT_AFTER_REFRESH, /* after refreshing the cache */
+ OCI_OBJECTEVENT_WHEN_MARK_UPDATED, /* when an object is marked updated */
+ OCI_OBJECTEVENT_WHEN_MARK_DELETED, /* when an object is marked deleted */
+ OCI_OBJECTEVENT_WHEN_UNMARK, /* when an object is being unmarked */
+ OCI_OBJECTEVENT_WHEN_LOCK /* when an object is being locked */
+};
+typedef enum OCIObjectEvent OCIObjectEvent;
+/*
+ * OCIObjectEvent -- OCI Object Event
+ * This specifies the kind of event that is supported by the object
+ * cache. The program can register a callback that is invoked when the
+ * specified event occurs.
+ */
+
+/*----------------------------- OBJECT COPY OPTION --------------------------*/
+#define OCI_OBJECTCOPY_NOREF (ub1)0x01
+/*
+ * OCIObjectCopyFlag - Object copy flag
+ *
+ * If OCI_OBJECTCOPY_NOREF is specified when copying an instance, the
+ * reference and lob will not be copied to the target instance.
+ */
+
+/*----------------------------- OBJECT FREE OPTION --------------------------*/
+#define OCI_OBJECTFREE_FORCE (ub2)0x0001
+#define OCI_OBJECTFREE_NONULL (ub2)0x0002
+#define OCI_OBJECTFREE_HEADER (ub2)0x0004
+/*
+ * OCIObjectFreeFlag - Object free flag
+ *
+ * If OCI_OBJECTCOPY_FORCE is specified when freeing an instance, the instance
+ * is freed regardless it is pinned or diritied.
+ * If OCI_OBJECTCOPY_NONULL is specified when freeing an instance, the null
+ * structure is not freed.
+ */
+
+/*----------------------- OBJECT PROPERTY ID -------------------------------*/
+
+typedef ub1 OCIObjectPropId;
+#define OCI_OBJECTPROP_LIFETIME 1 /* persistent or transient or value */
+#define OCI_OBJECTPROP_SCHEMA 2 /* schema name of table containing object */
+#define OCI_OBJECTPROP_TABLE 3 /* table name of table containing object */
+#define OCI_OBJECTPROP_PIN_DURATION 4 /* pin duartion of object */
+#define OCI_OBJECTPROP_ALLOC_DURATION 5 /* alloc duartion of object */
+#define OCI_OBJECTPROP_LOCK 6 /* lock status of object */
+#define OCI_OBJECTPROP_MARKSTATUS 7 /* mark status of object */
+#define OCI_OBJECTPROP_VIEW 8 /* is object a view object or not? */
+
+/*
+ * OCIObjectPropId - OCI Object Property Id
+ * Identifies the different properties of objects.
+ */
+
+/*----------------------- OBJECT LIFETIME ----------------------------------*/
+
+enum OCIObjectLifetime
+{
+ /* 0 = uninitialized */
+ OCI_OBJECT_PERSISTENT = 1, /* persistent object */
+ OCI_OBJECT_TRANSIENT, /* transient object */
+ OCI_OBJECT_VALUE /* value object */
+};
+typedef enum OCIObjectLifetime OCIObjectLifetime;
+/*
+ * OCIObjectLifetime - OCI Object Lifetime
+ * Classifies objects depending upon the lifetime and referenceability
+ * of the object.
+ */
+
+/*----------------------- OBJECT MARK STATUS -------------------------------*/
+
+typedef uword OCIObjectMarkStatus;
+#define OCI_OBJECT_NEW 0x0001 /* new object */
+#define OCI_OBJECT_DELETED 0x0002 /* object marked deleted */
+#define OCI_OBJECT_UPDATED 0x0004 /* object marked updated */
+/*
+ * OCIObjectMarkStatus - OCI Object Mark Status
+ * Status of the object - new or updated or deleted
+ */
+
+/* macros to test the object mark status */
+#define OCI_OBJECT_IS_UPDATED(flag) bit((flag), OCI_OBJECT_UPDATED)
+#define OCI_OBJECT_IS_DELETED(flag) bit((flag), OCI_OBJECT_DELETED)
+#define OCI_OBJECT_IS_NEW(flag) bit((flag), OCI_OBJECT_NEW)
+#define OCI_OBJECT_IS_DIRTY(flag) \
+ bit((flag), OCI_OBJECT_UPDATED|OCI_OBJECT_NEW|OCI_OBJECT_DELETED)
+
+/*---------------------------------------------------------------------------*/
+/* TYPE MANAGER */
+/*---------------------------------------------------------------------------*/
+
+/*------------------------------ TYPE CODE ----------------------------------*/
+
+/*
+ * Type manager typecodes
+ *
+ * These are typecodes designed to be used with the type manager;
+ * they also include longer, more readable versions of existing SQLT names.
+ * Those types that are directly related to existing SQLT types are #define'd
+ * to their SQLT equivalents.
+ *
+ * The type manager typecodes are designed to be useable for all OCI calls.
+ * They are in the range from 192 to 320 for typecodes, so as not to conflict
+ * with existing OCI SQLT typecodes (see ocidfn.h).
+ */
+
+#define OCI_TYPECODE_REF SQLT_REF /* SQL/OTS OBJECT REFERENCE */
+#define OCI_TYPECODE_DATE SQLT_DAT /* SQL DATE OTS DATE */
+#define OCI_TYPECODE_SIGNED8 27 /* SQL SIGNED INTEGER(8) OTS SINT8 */
+#define OCI_TYPECODE_SIGNED16 28 /* SQL SIGNED INTEGER(16) OTS SINT16 */
+#define OCI_TYPECODE_SIGNED32 29 /* SQL SIGNED INTEGER(32) OTS SINT32 */
+#define OCI_TYPECODE_REAL 21 /* SQL REAL OTS SQL_REAL */
+#define OCI_TYPECODE_DOUBLE 22 /* SQL DOUBLE PRECISION OTS SQL_DOUBLE */
+#define OCI_TYPECODE_BFLOAT SQLT_IBFLOAT /* Binary float */
+#define OCI_TYPECODE_BDOUBLE SQLT_IBDOUBLE /* Binary double */
+#define OCI_TYPECODE_FLOAT SQLT_FLT /* SQL FLOAT(P) OTS FLOAT(P) */
+#define OCI_TYPECODE_NUMBER SQLT_NUM/* SQL NUMBER(P S) OTS NUMBER(P S) */
+#define OCI_TYPECODE_DECIMAL SQLT_PDN
+ /* SQL DECIMAL(P S) OTS DECIMAL(P S) */
+#define OCI_TYPECODE_UNSIGNED8 SQLT_BIN
+ /* SQL UNSIGNED INTEGER(8) OTS UINT8 */
+#define OCI_TYPECODE_UNSIGNED16 25 /* SQL UNSIGNED INTEGER(16) OTS UINT16 */
+#define OCI_TYPECODE_UNSIGNED32 26 /* SQL UNSIGNED INTEGER(32) OTS UINT32 */
+#define OCI_TYPECODE_OCTET 245 /* SQL ??? OTS OCTET */
+#define OCI_TYPECODE_SMALLINT 246 /* SQL SMALLINT OTS SMALLINT */
+#define OCI_TYPECODE_INTEGER SQLT_INT /* SQL INTEGER OTS INTEGER */
+#define OCI_TYPECODE_RAW SQLT_LVB /* SQL RAW(N) OTS RAW(N) */
+#define OCI_TYPECODE_PTR 32 /* SQL POINTER OTS POINTER */
+#define OCI_TYPECODE_VARCHAR2 SQLT_VCS
+ /* SQL VARCHAR2(N) OTS SQL_VARCHAR2(N) */
+#define OCI_TYPECODE_CHAR SQLT_AFC /* SQL CHAR(N) OTS SQL_CHAR(N) */
+#define OCI_TYPECODE_VARCHAR SQLT_CHR
+ /* SQL VARCHAR(N) OTS SQL_VARCHAR(N) */
+#define OCI_TYPECODE_MLSLABEL SQLT_LAB /* OTS MLSLABEL */
+#define OCI_TYPECODE_VARRAY 247 /* SQL VARRAY OTS PAGED VARRAY */
+#define OCI_TYPECODE_TABLE 248 /* SQL TABLE OTS MULTISET */
+#define OCI_TYPECODE_OBJECT SQLT_NTY /* SQL/OTS NAMED OBJECT TYPE */
+#define OCI_TYPECODE_OPAQUE 58 /* SQL/OTS Opaque Types */
+#define OCI_TYPECODE_NAMEDCOLLECTION SQLT_NCO
+ /* SQL/OTS NAMED COLLECTION TYPE */
+#define OCI_TYPECODE_BLOB SQLT_BLOB /* SQL/OTS BINARY LARGE OBJECT */
+#define OCI_TYPECODE_BFILE SQLT_BFILE /* SQL/OTS BINARY FILE OBJECT */
+#define OCI_TYPECODE_CLOB SQLT_CLOB /* SQL/OTS CHARACTER LARGE OBJECT */
+#define OCI_TYPECODE_CFILE SQLT_CFILE /* SQL/OTS CHARACTER FILE OBJECT */
+
+/* the following are ANSI datetime datatypes added in 8.1 */
+#define OCI_TYPECODE_TIME SQLT_TIME /* SQL/OTS TIME */
+#define OCI_TYPECODE_TIME_TZ SQLT_TIME_TZ /* SQL/OTS TIME_TZ */
+#define OCI_TYPECODE_TIMESTAMP SQLT_TIMESTAMP /* SQL/OTS TIMESTAMP */
+#define OCI_TYPECODE_TIMESTAMP_TZ SQLT_TIMESTAMP_TZ /* SQL/OTS TIMESTAMP_TZ */
+
+#define OCI_TYPECODE_TIMESTAMP_LTZ SQLT_TIMESTAMP_LTZ /* TIMESTAMP_LTZ */
+
+#define OCI_TYPECODE_INTERVAL_YM SQLT_INTERVAL_YM /* SQL/OTS INTRVL YR-MON */
+#define OCI_TYPECODE_INTERVAL_DS SQLT_INTERVAL_DS /* SQL/OTS INTRVL DAY-SEC */
+#define OCI_TYPECODE_UROWID SQLT_RDD /* Urowid type */
+
+
+#define OCI_TYPECODE_OTMFIRST 228 /* first Open Type Manager typecode */
+#define OCI_TYPECODE_OTMLAST 320 /* last OTM typecode */
+#define OCI_TYPECODE_SYSFIRST 228 /* first OTM system type (internal) */
+#define OCI_TYPECODE_SYSLAST 235 /* last OTM system type (internal) */
+#define OCI_TYPECODE_PLS_INTEGER 266 /* type code for PLS_INTEGER */
+
+/* the following are PL/SQL-only internal. They should not be used */
+#define OCI_TYPECODE_ITABLE SQLT_TAB /* PLSQL indexed table */
+#define OCI_TYPECODE_RECORD SQLT_REC /* PLSQL record */
+#define OCI_TYPECODE_BOOLEAN SQLT_BOL /* PLSQL boolean */
+
+/* NOTE : The following NCHAR related codes are just short forms for saying
+ OCI_TYPECODE_VARCHAR2 with a charset form of SQLCS_NCHAR. These codes are
+ intended for use in the OCIAnyData API only and nowhere else. */
+#define OCI_TYPECODE_NCHAR 286
+#define OCI_TYPECODE_NVARCHAR2 287
+#define OCI_TYPECODE_NCLOB 288
+
+
+/* To indicate absence of typecode being specified */
+#define OCI_TYPECODE_NONE 0
+/* To indicate error has to be taken from error handle - reserved for
+ sqlplus use */
+#define OCI_TYPECODE_ERRHP 283
+
+/* The OCITypeCode type is interchangeable with the existing SQLT type
+ which is a ub2 */
+typedef ub2 OCITypeCode;
+
+
+/*----------------------- GET OPTIONS FOR TDO ------------------------------*/
+
+enum OCITypeGetOpt
+{
+ OCI_TYPEGET_HEADER,
+ /* load only the header portion of the TDO when getting type */
+ OCI_TYPEGET_ALL /* load all attribute and method descriptors as well */
+};
+typedef enum OCITypeGetOpt OCITypeGetOpt;
+
+/*
+ * OCITypeGetOpt
+ *
+ * This is the flag passed to OCIGetTypeArray() to indicate how the TDO is
+ * going to be loaded into the object cache.
+ * OCI_TYPEGET_HEADER implies that only the header portion is to be loaded
+ * initially, with the rest loaded in on a 'lazy' basis. Only the header is
+ * needed for PL/SQL and OCI operations. OCI_TYPEGET_ALL implies that ALL
+ * the attributes and methods belonging to a TDO will be loaded into the
+ * object cache in one round trip. Hence it will take much longer to execute,
+ * but will ensure that no more loading needs to be done when pinning ADOs
+ * etc. This is only needed if your code needs to examine and manipulate
+ * attribute and method information.
+ *
+ * The default is OCI_TYPEGET_HEADER.
+ */
+
+
+/*------------------------ TYPE ENCAPSULTATION LEVEL ------------------------*/
+
+enum OCITypeEncap
+{
+ /* 0 = uninitialized */
+ OCI_TYPEENCAP_PRIVATE, /* private: only internally visible */
+ OCI_TYPEENCAP_PUBLIC /* public: visible to both internally and externally */
+};
+typedef enum OCITypeEncap OCITypeEncap;
+/*
+ * OCITypeEncap - OCI Encapsulation Level
+ */
+
+
+/*---------------------------- TYPE METHOD FLAGS ----------------------------*/
+
+enum OCITypeMethodFlag
+{
+ OCI_TYPEMETHOD_INLINE = 0x0001, /* inline */
+ OCI_TYPEMETHOD_CONSTANT = 0x0002, /* constant */
+ OCI_TYPEMETHOD_VIRTUAL = 0x0004, /* virtual */
+ OCI_TYPEMETHOD_CONSTRUCTOR = 0x0008, /* constructor */
+ OCI_TYPEMETHOD_DESTRUCTOR = 0x0010, /* destructor */
+ OCI_TYPEMETHOD_OPERATOR = 0x0020, /* operator */
+ OCI_TYPEMETHOD_SELFISH = 0x0040, /* selfish method (generic otherwise) */
+
+ OCI_TYPEMETHOD_MAP = 0x0080, /* map (relative ordering) */
+ OCI_TYPEMETHOD_ORDER = 0x0100, /* order (relative ordering) */
+ /* OCI_TYPEMETHOD_MAP and OCI_TYPEMETHOD_ORDER are mutually exclusive */
+
+ OCI_TYPEMETHOD_RNDS= 0x0200, /* Read no Data State (default) */
+ OCI_TYPEMETHOD_WNDS= 0x0400, /* Write no Data State */
+ OCI_TYPEMETHOD_RNPS= 0x0800, /* Read no Process State */
+ OCI_TYPEMETHOD_WNPS= 0x1000, /* Write no Process State */
+ OCI_TYPEMETHOD_ABSTRACT = 0x2000, /* abstract (not instantiable) method */
+ OCI_TYPEMETHOD_OVERRIDING = 0x4000, /* overriding method */
+ OCI_TYPEMETHOD_PIPELINED = 0x8000 /* method is pipelined */
+};
+typedef enum OCITypeMethodFlag OCITypeMethodFlag;
+
+/* macros to test the type method flags */
+#define OCI_METHOD_IS_INLINE(flag) bit((flag), OCI_TYPEMETHOD_INLINE)
+#define OCI_METHOD_IS_CONSTANT(flag) bit((flag), OCI_TYPEMETHOD_CONSTANT)
+#define OCI_METHOD_IS_VIRTUAL(flag) bit((flag), OCI_TYPEMETHOD_VIRTUAL)
+#define OCI_METHOD_IS_CONSTRUCTOR(flag) bit((flag), OCI_TYPEMETHOD_CONSTRUCTOR)
+#define OCI_METHOD_IS_DESTRUCTOR(flag) bit((flag), OCI_TYPEMETHOD_DESTRUCTOR)
+#define OCI_METHOD_IS_OPERATOR(flag) bit((flag), OCI_TYPEMETHOD_OPERATOR)
+#define OCI_METHOD_IS_SELFISH(flag) bit((flag), OCI_TYPEMETHOD_SELFISH)
+#define OCI_METHOD_IS_MAP(flag) bit((flag), OCI_TYPEMETHOD_MAP)
+#define OCI_METHOD_IS_ORDER(flag) bit((flag), OCI_TYPEMETHOD_ORDER)
+#define OCI_METHOD_IS_RNDS(flag) bit((flag), OCI_TYPEMETHOD_RNDS)
+#define OCI_METHOD_IS_WNDS(flag) bit((flag), OCI_TYPEMETHOD_WNDS)
+#define OCI_METHOD_IS_RNPS(flag) bit((flag), OCI_TYPEMETHOD_RNPS)
+#define OCI_METHOD_IS_WNPS(flag) bit((flag), OCI_TYPEMETHOD_WNPS)
+#define OCI_METHOD_IS_ABSTRACT(flag) bit((flag), OCI_TYPEMETHOD_ABSTRACT)
+#define OCI_METHOD_IS_OVERRIDING(flag) bit((flag), OCI_TYPEMETHOD_OVERRIDING)
+#define OCI_METHOD_IS_PIPELINED(flag) bit((flag), OCI_TYPEMETHOD_PIPELINED)
+
+#define OCI_TYPEMETHOD_IS_INLINE(flag) bit((flag), OCI_TYPEMETHOD_INLINE)
+#define OCI_TYPEMETHOD_IS_CONSTANT(flag) bit((flag), OCI_TYPEMETHOD_CONSTANT)
+#define OCI_TYPEMETHOD_IS_VIRTUAL(flag) bit((flag), OCI_TYPEMETHOD_VIRTUAL)
+#define OCI_TYPEMETHOD_IS_CONSTRUCTOR(flag) \
+ bit((flag), OCI_TYPEMETHOD_CONSTRUCTOR)
+#define OCI_TYPEMETHOD_IS_DESTRUCTOR(flag) \
+ bit((flag), OCI_TYPEMETHOD_DESTRUCTOR)
+#define OCI_TYPEMETHOD_IS_OPERATOR(flag) bit((flag), OCI_TYPEMETHOD_OPERATOR)
+#define OCI_TYPEMETHOD_IS_SELFISH(flag) bit((flag), OCI_TYPEMETHOD_SELFISH)
+#define OCI_TYPEMETHOD_IS_MAP(flag) bit((flag), OCI_TYPEMETHOD_MAP)
+#define OCI_TYPEMETHOD_IS_ORDER(flag) bit((flag), OCI_TYPEMETHOD_ORDER)
+#define OCI_TYPEMETHOD_IS_RNDS(flag) bit((flag), OCI_TYPEMETHOD_RNDS)
+#define OCI_TYPEMETHOD_IS_WNDS(flag) bit((flag), OCI_TYPEMETHOD_WNDS)
+#define OCI_TYPEMETHOD_IS_RNPS(flag) bit((flag), OCI_TYPEMETHOD_RNPS)
+#define OCI_TYPEMETHOD_IS_WNPS(flag) bit((flag), OCI_TYPEMETHOD_WNPS)
+#define OCI_TYPEMETHOD_IS_ABSTRACT(flag) bit((flag), OCI_TYPEMETHOD_ABSTRACT)
+#define OCI_TYPEMETHOD_IS_OVERRIDING(flag) \
+ bit((flag), OCI_TYPEMETHOD_OVERRIDING)
+#define OCI_TYPEMETHOD_IS_PIPELINED(flag) bit((flag), OCI_TYPEMETHOD_PIPELINED)
+
+/* macros to set the type method flags */
+#define OCI_TYPEMETHOD_SET_INLINE(flag) bis((flag), OCI_TYPEMETHOD_INLINE)
+#define OCI_TYPEMETHOD_SET_CONSTANT(flag) bis((flag), OCI_TYPEMETHOD_CONSTANT)
+#define OCI_TYPEMETHOD_SET_VIRTUAL(flag) bis((flag), OCI_TYPEMETHOD_VIRTUAL)
+#define OCI_TYPEMETHOD_SET_CONSTRUCTOR(flag) \
+ bis((flag), OCI_TYPEMETHOD_CONSTRUCTOR)
+#define OCI_TYPEMETHOD_SET_DESTRUCTOR(flag) \
+ bis((flag), OCI_TYPEMETHOD_DESTRUCTOR)
+#define OCI_TYPEMETHOD_SET_OPERATOR(flag) bis((flag), OCI_TYPEMETHOD_OPERATOR)
+#define OCI_TYPEMETHOD_SET_SELFISH(flag) bis((flag), OCI_TYPEMETHOD_SELFISH)
+#define OCI_TYPEMETHOD_SET_MAP(flag) bis((flag), OCI_TYPEMETHOD_MAP)
+#define OCI_TYPEMETHOD_SET_ORDER(flag) bis((flag), OCI_TYPEMETHOD_ORDER)
+#define OCI_TYPEMETHOD_SET_RNDS(flag) bis((flag), OCI_TYPEMETHOD_RNDS)
+#define OCI_TYPEMETHOD_SET_WNDS(flag) bis((flag), OCI_TYPEMETHOD_WNDS)
+#define OCI_TYPEMETHOD_SET_RNPS(flag) bis((flag), OCI_TYPEMETHOD_RNPS)
+#define OCI_TYPEMETHOD_SET_WNPS(flag) bis((flag), OCI_TYPEMETHOD_WNPS)
+
+/* macros to clear the type method flags */
+#define OCI_TYPEMETHOD_CLEAR_INLINE(flag) bic((flag), OCI_TYPEMETHOD_INLINE)
+#define OCI_TYPEMETHOD_CLEAR_CONSTANT(flag) \
+ bic((flag), OCI_TYPEMETHOD_CONSTANT)
+#define OCI_TYPEMETHOD_CLEAR_VIRTUAL(flag) bic((flag), OCI_TYPEMETHOD_VIRTUAL)
+#define OCI_TYPEMETHOD_CLEAR_CONSTRUCTOR(flag) \
+ bic((flag), OCI_TYPEMETHOD_CONSTRUCTOR)
+#define OCI_TYPEMETHOD_CLEAR_DESTRUCTOR(flag) \
+ bic((flag), OCI_TYPEMETHOD_DESTRUCTOR)
+#define OCI_TYPEMETHOD_CLEAR_OPERATOR(flag) \
+ bic((flag), OCI_TYPEMETHOD_OPERATOR)
+#define OCI_TYPEMETHOD_CLEAR_SELFISH(flag) bic((flag), OCI_TYPEMETHOD_SELFISH)
+#define OCI_TYPEMETHOD_CLEAR_MAP(flag) bic((flag), OCI_TYPEMETHOD_MAP)
+#define OCI_TYPEMETHOD_CLEAR_ORDER(flag) bic((flag), OCI_TYPEMETHOD_ORDER)
+#define OCI_TYPEMETHOD_CLEAR_RNDS(flag) bic((flag), OCI_TYPEMETHOD_RNDS)
+#define OCI_TYPEMETHOD_CLEAR_WNDS(flag) bic((flag), OCI_TYPEMETHOD_WNDS)
+#define OCI_TYPEMETHOD_CLEAR_RNPS(flag) bic((flag), OCI_TYPEMETHOD_RNPS)
+#define OCI_TYPEMETHOD_CLEAR_WNPS(flag) bic((flag), OCI_TYPEMETHOD_WNPS)
+
+/*--------------------------- TYPE PARAMETER MODE ---------------------------*/
+
+enum OCITypeParamMode
+{
+ /* PL/SQL starts this from 0 */
+ OCI_TYPEPARAM_IN = 0, /* in */
+ OCI_TYPEPARAM_OUT, /* out */
+ OCI_TYPEPARAM_INOUT, /* in-out */
+ OCI_TYPEPARAM_BYREF, /* call by reference (implicitly in-out) */
+ OCI_TYPEPARAM_OUTNCPY, /* OUT with NOCOPY modifier */
+ OCI_TYPEPARAM_INOUTNCPY /* IN OUT with NOCOPY modifier */
+};
+typedef enum OCITypeParamMode OCITypeParamMode;
+
+
+/*-------------------------------- DEFAULTS ---------------------------------*/
+
+/* default binary and decimal precision and scale */
+
+#define OCI_NUMBER_DEFAULTPREC ((ub1)0) /* no precision specified */
+#define OCI_NUMBER_DEFAULTSCALE ((sb1)MAXSB1MINVAL)
+ /* no binary/decimal scale specified */
+
+/* default maximum length for varrays and vstrings (used in sql.bsq) */
+
+#define OCI_VARRAY_MAXSIZE 4000
+ /* default maximum number of elements for a varray */
+#define OCI_STRING_MAXLEN 4000 /* default maximum length of a vstring */
+
+/*---------------------------------------------------------------------------*/
+/* This set of macro is used only in beta2. They should be removed as soon as
+ * PLSQL has made the changes of not using these macros.
+ */
+
+/* Special duration for allocating memory only. No instance can be allocated
+ * given these durations.
+ */
+#define OCICoherency OCIRefreshOpt
+#define OCI_COHERENCY_NONE (OCIRefreshOpt)2
+#define OCI_COHERENCY_NULL (OCIRefreshOpt)4
+#define OCI_COHERENCY_ALWAYS (OCIRefreshOpt)5
+
+#endif /* ORO_ORACLE */
+
--- /dev/null
+/* @(#)ort.h 1.44 95/07/07 */
+
+/* Copyright (c) 1994, 2005, Oracle. All rights reserved. */
+
+/*
+ NAME
+
+ ORT - ORacle's external open Type interface to the open type manager (OTM)
+
+ DESCRIPTION
+
+ The open type manager interface includes dynamic type operations to
+ create, delete, update, and access types. See the "Functional
+ Specification for Oracle Object Call Interface (Objects Project),
+ Version 1.0" for a user level description of the OTM. For a more
+ detailed description, see the "Component Document for the Open Type
+ Manager, Version 1.0".
+
+ NOTE: MOST Of the functions in this header file are being desupported.
+ Please use the OCIDescribeAny interface as described in oci.h
+ instead.
+ The OCIType, OCITypeElem, OCITypeMethod abstract types continue
+ to be supported. The only two functions that remain to be documented
+ are OCITypeArrayByName and OCITypeArrayByRef.
+ All obsolete types/functions are marked accordingly below.
+
+ RELATED DOCUMENTS
+
+ For the functional specification for the OTM, see:
+ [1] Kotsovolos, Susan, "Functional Specification for Oracle Object
+ Call Interface (Objects Project), Version 1.0", Oracle
+ Corporation, February 1995.
+ For the internal design of the OTM, see the following:
+ [2] Kotsovolos, Susan, "Component Document for the Open Type Manager",
+ Oracle Corporation, November 1994.
+ [3] Kotsovolos, Susan, "Design for The Open Type Manager, Oracle
+ Object Management Subsystem Version 1.0", Oracle Corporation,
+ March 1994.
+ [4] Kotsovolos, Susan and Tin A. Nguyen, "The Open Type Manager",
+ Oracle Corporation, March 1994.
+ [5] Kotsovolos, Susan and Tin A. Nguyen, "Schema Evolution",
+ Oracle Corporation, March 1994.
+ For a description of the types the OTM must support, see:
+ [6] Nguyen, Tin A., "The Open Type System", Oracle Corporation,
+ February 1994.
+
+ INSPECTION STATUS
+
+ Inspection date:
+ Inspection status:
+ Estimated increasing cost defects per page:
+ Rule sets:
+
+ ACCEPTANCE REVIEW STATUS
+
+ Review date:
+ Review status:
+ Reviewers:
+
+
+ **** ALL OBSOLETE FUNCTIONS/TYPES ARE MARKED ACCORDINGLY ***
+
+ EXPORT FUNCTIONS
+
+ None
+
+ PUBLIC DATA STRUCTURES
+
+ OCIType - type descriptor in the object cache
+ OCITypeElem - type element descriptor in the object cache
+ (used for attributes and paramters)
+ OCITypeCode - Open Type System type code.
+ OCITypeMethod - method descriptor in the object cache
+ OCITypeParamMode - parameter modes (ie. IN, IN-OUT etc)
+
+ PUBLIC FUNCTIONS
+
+ ITERATOR (for OCITypeAttrNext and OCITypeMethodNext)
+
+ OCITypeIterNew - ** OBSOLETE ** Create new instance of an iteraton.
+ OCITypeIterSet - ** OBSOLETE ** Initialize iterator.
+ OCITypeIterFree - ** OBSOLETE ** Free instance of iterator.
+
+ TYPE GET
+
+ OCITypeByName - ** OBSOLETE ** Get a type by name.
+ OCITypeArrayByName - Get an array of types by their names.
+ OCITypeByRef - ** OBSOLETE ** Get a type by its CREF.
+ OCITypeArrayByRef - Get an array of types by their CREFs.
+
+ TYPE ACCESSORS
+
+ OCITypeName - ** OBSOLETE ** OCI Get a type's name.
+ OCITypeSchema - ** OBSOLETE ** OCI Get a type's schema name.
+ OCITypeTypeCode - ** OBSOLETE ** OCI Get a type's type code.
+ OCITypeVersion - ** OBSOLETE ** OCI Get a Type's user-readable Version.
+ OCITypeAttrs - ** OBSOLETE ** OCI Get a Type's Number of Attributes.
+ OCITypeMethods - ** OBSOLETE ** OCI Get a Type's Number of Methods.
+
+ TYPE ELEMENT ACCESSORS (they represent attributes/parameters/results)
+
+ OCITypeElemName - ** OBSOLETE ** Get a type element's (only for
+ attributes) name.
+ OCITypeElemType - ** OBSOLETE ** Get a type element's type
+ descriptor.
+ OCITypeElemTypeCode - ** OBSOLETE ** Get a type element's typecode.
+ OCITypeElemParameterizedType - ** OBSOLETE ** Get a type element's
+ parameterized type's type descriptor.
+ OCITypeElemNumPrec - ** OBSOLETE ** Get a number's precision.
+ OCITypeElemNumScale - ** OBSOLETE ** Get a decimal or oracle Number's
+ Scale
+ OCITypeElemCharSetID - ** OBSOLETE ** Get a fixed or variable length
+ string's character set ID.
+ OCITypeElemCharSetForm - ** OBSOLETE ** Get a fixed or variable length
+ string's character set form (how
+ character set information has
+ been specified).
+ OCITypeElemLength - ** OBSOLETE ** Get a raw, fixed or variable
+ length string's length.
+ OCITypeElemParamMode - ** OBSOLETE ** Get element's parameter's mode
+ (only valid for parameter).
+ OCITypeElemDefaultValue - ** OBSOLETE ** Get element's Default Value.
+
+ ATTRIBUTE ACCESSORS
+
+ OCITypeAttrByName - ** OBSOLETE ** Get an Attribute by Name.
+ OCITypeAttrNext - ** OBSOLETE ** Get an Attribute by Iteration.
+
+ COLLECTION ACCESSORS
+
+ OCITypeCollTypeCode - ** OBSOLETE ** Get a named collection's typecode.
+ OCITypeCollElem - ** OBSOLETE ** Get a named collection's element's
+ type element information.
+ OCITypeCollSize - ** OBSOLETE ** Get a named collection's size in
+ number of elements.
+
+ METHOD ACCESSORS
+
+ OCITypeMethodOverload - ** OBSOLETE ** Get number of overloaded methods
+ with the given method name.
+ (no direct equivalent for
+ OCIDescribe interface)
+ OCITypeMethodByName - ** OBSOLETE ** Get one or more methods by name.
+ OCITypeMethodNext - ** OBSOLETE ** Iterate to the next method to
+ retrieve.
+ OCITypeMethodName - ** OBSOLETE ** Get method's name.
+ OCITypeMethodEncap - ** OBSOLETE ** Get method's encapsulation level.
+ OCITypeMethodFlags - ** OBSOLETE ** et method's flags.
+ OCITypeMethodMap - ** OBSOLETE ** Get type's map function.
+ OCITypeMethodOrder - ** OBSOLETE ** Get type's order function.
+ OCITypeMethodParams - ** OBSOLETE ** Get a method's number of
+ parameters.
+
+ RESULT ACCESSORS
+
+ OCITypeResult - ** OBSOLETE ** OCI Get a method's Result.
+
+ See also ATTRIBUTE/PARAMETER/RESULT TYPE ACCESSORS.
+
+ PARAMETER ACCESSORS
+
+ OCITypeParamByPos - ** OBSOLETE ** Get a Parameter in a method By
+ Position.
+ OCITypeParamByName - ** OBSOLETE ** Get a Parameter in a method By Name.
+ OCITypeParamPos - ** OBSOLETE ** Get a Parameter's PoSition in a
+ method.
+
+ CALL GRAPHS:
+
+ Only type accessors are supported for 8.0.
+ ** OBSOLETE ** please use OCIDescribe interface
+
+ TYPE ACCESSOR EXAMPLE
+
+ CREATE TYPE CAR
+ (
+ name vstring,
+ age number,
+ number car_age; /o Oracle number o/
+ weight car_weight; /o abstract type o/
+
+ PUBLIC:
+
+ /o methods o/
+ car(orlvs a_name, number an_age, WEIGHT a_weight);
+ ~car();
+ inline number get_age() const;
+
+ /o relative ordering (map) functions o/
+ number car_map
+ );
+
+ /o the following code accesses the type created above o/
+
+ ub1 meth_flags;
+ ub4 i, j;
+ ub4 text_len, position;
+ ub4 count;
+ ub4 length;
+ OCITypeCode typecode;
+ OCIRef *attr_ref;
+ OCIRef *param_ref;
+ OCIType *tdo, new_tdo, final_tdo;
+ OCITypeElem *elem;
+ OCITypeIter *iterator_ort;
+ oratext (*names)[];
+ ub4 lengths[];
+ ub4 *positions;
+ oratext *name;
+ oratext name_buffer[M_IDEN];
+
+ /o initialize the references o/
+ DISCARD orlrini(env, err, (dvoid *)&attr_ref);
+ DISCARD orlrini(env, err, (dvoid *)¶m_ref);
+
+ /o ----------------- GET INFORMATION ABOUT A TYPE ----------------- o/
+
+ /o start a transaction o/
+
+ /o Pin the type until the end of the transaction. Pinning the type is
+ o required before using any type accessors.
+ o/
+ if (OCITypeByName(env, err, svc, (oratext *)0, 0, "CAR", strlen("CAR"),
+ OCI_DURATION_TRANS, &car_ref, &car_tdo) != OCI_SUCCESS)
+ /o error o/ ;
+
+ /o get the type's name o/
+ if (!memcmp(OCITypeName(env, err, car_tdo, &text_len), "person",
+ text_len))
+ /o do something o/ ;
+
+ /o get the type's schema name o/
+ if (!memcmp(OCITypeSchema(env, err, car_tdo, &text_len), "john",
+ text_len))
+ /o do something o/ ;
+
+ /o get the type code of the type o/
+ if (OCITypeTypeCode(env, err, car_tdo) == OCI_TYPECODE_ADT)
+ /o do something o/ ;
+
+ /o get the type version o/
+ if (!memcmp(OCITypeVersion(env, err, car_tdo, &text_len), "1", text_len))
+ /o do something o/ ;
+
+ /o ------- GET FLATTENED POSITION OF AN ATTRIBUTES IN A TYPE ------- o/
+
+ names = malloc(sizeof(oratext *) * 2);
+ names[0] = malloc(strlen("car_weight"));
+ names[1] = malloc(strlen("ounces"));
+ memcpy(names[0], "car_weight", strlen("car_weight"));
+ memcpy(names[1], "ounces", strlen("ounces"));
+
+ lengths = malloc(sizeof(ub4) * 2);
+ lengths[0] = strlen("car_weight");
+ lengths[1] = strlen("ounces");
+
+ /o ---------- GET IMMEDIATE ATTRIBUTES IN A TYPE ---------- o/
+
+ /o loop through all attributes in the type with iterator o/
+ if (OCITypeIterNew(env, err, car_tdo, &iterator_ort) != OCI_SUCCESS)
+ /o do something o/
+
+ while (OCITypeAttrNext(env, err, iterator_ort, &ado) != OCI_NO_DATA)
+ {
+ /o get the attribute's name o/
+ if (!memcmp(OCITypeElemName(env, err, ado, &text_len),
+ "tiger", text_len))
+ /o do something o/ ;
+
+ /o get the attribute's type descriptor o/
+ if (OCITypeElemType(env, err, ado, &tdo) != OCI_SUCCESS)
+ /o error o/ ;
+
+ /o get the attribute's type code o/
+ typecode = OCITypeElemTypeCode(env, err, ado);
+
+ switch (typecode)
+ {
+ /o scalar types o/
+ case OCI_TYPECODE_DATE: /o date o/
+ case OCI_TYPECODE_SIGNED8: /o byte o/
+ case OCI_TYPECODE_SIGNED16: /o short o/
+ case OCI_TYPECODE_UNSIGNED8: /o unsigned byte o/
+ case OCI_TYPECODE_UNSIGNED16: /o unsigned short o/
+ case OCI_TYPECODE_OCTET: /o octet o/
+ case OCI_TYPECODE_TABLE: /o nested table o/
+ case OCI_TYPECODE_CLOB: /o character lob o/
+ case OCI_TYPECODE_BLOB: /o binary lob o/
+ case OCI_TYPECODE_CFILE: /o character file object o/
+ case OCI_TYPECODE_BFILE: /o binary file object o/
+
+ /o do something o/
+ break;
+
+ /o number types o/
+ case OCI_TYPECODE_NUMBER: /o oracle number o/
+ case OCI_TYPECODE_DECIMAL: /o decimal o/
+ {
+ /o get the scale of the number o/
+ if (OCITypeElemNumScale(env, err, ado) == 3)
+ /o do something o/ ;
+ }
+ /o fall through to get the precision o/
+
+ case OCI_TYPECODE_FLOAT: /o float o/
+ case OCI_TYPECODE_SIGNED32: /o long o/
+ case OCI_TYPECODE_UNSIGNED32: /o unsigned long o/
+ case OCI_TYPECODE_REAL: /o real o/
+ case OCI_TYPECODE_DOUBLE: /o double o/
+ {
+ /o get the precision of the number o/
+ if (OCITypeElemNumPrec(env, err, ado) == 2)
+ /o do something o/ ;
+ }
+ break;
+
+ /o string types o/
+ case OCI_TYPECODE_CHAR: /o fixed length string o/
+ case OCI_TYPECODE_VARCHAR2: /o variable length string o/
+ case OCI_TYPECODE_RAW: /o raw o/
+ {
+ /o get the length of the fixed or variable length string o/
+ if (OCITypeElemLength(env, err, ado) < 100)
+ /o do something o/
+ }
+ break;
+
+ /o parameterized types o/
+ case OCI_TYPECODE_REF: /o reference o/
+ case OCI_TYPECODE_PTR: /o pointer o/
+ {
+ /o get the type stored in the parameterized type o/
+ if (OCITypeElemParameterizedType(env, err, ado, &tdo)
+ != OCI_SUCCESS)
+ /o error o/ ;
+
+ /o do something o/
+ if (OCI_TYPEELEM_IS_REF(OCITypeElemFlags(env, err, ado)))...
+ }
+ break;
+
+ /o domain type o/
+ case OCI_TYPECODE_NAMEDCOLLECTION:
+ switch (OCITypeCollTypeCode(env, err, tdo))
+ {
+ case OCI_TYPECODE_VARRAY: /o variable array o/
+ ub4 num_elems;
+ OCIType *element_type;
+
+ /o get the number of elements in the farray or the maximum number
+ o of elements in the varray.
+ o/
+ OCITypeCollSize(env, err, tdo, &num_elems);
+
+ /o get the type of the array o/
+ OCITypeElemType(env, err, tdo, &element_type);
+ }
+ break;
+
+ case OCI_TYPECODE_TABLE: /o multiset o/
+ {
+ OCIType *table_type;
+
+ /o get the type of the multiset o/
+ OCITypeElemType(env, err, tdo, &table_type);
+
+ /o do something o/
+ }
+ }
+
+ /o abstract type o/
+ case OCI_TYPECODE_ADT: /o abstract data type o/
+ {
+ /o get the adt information o/
+ if (OCITypeElemType(env, err, ado, &tdo) != OCI_SUCCESS)
+ /o error o/ ;
+
+ /o do something o/
+ }
+ break;
+
+ default:
+ DISCARD printf("Error: invalid type code\n");
+
+ } /o end of typecode switch o/
+
+ } /o end of loop through all attributes in a type o/
+
+
+ /o ------------ GET THE IMMEDIATE METHODS OF A TYPE ------------ o/
+
+ /o loop through all methods in the type by reusing iterator o/
+ if (OCITypeIterSet(env, err, car_tdo, iterator_ort) != OCI_SUCCESS)
+ /o do something o/
+
+ while (OCITypeMethodNext(env, err, iterator_ort) != OCI_NO_DATA)
+ {
+ /o get the method's name o/
+ if (!memcmp(OCITypeMethodName(env, err, mdo, &text_len), "car",
+ text_len))
+ /o do something o/ ;
+
+ /o get the method's encapsulation o/
+ if (OCITypeMethodEncap(env, err, mdo) == OCI_TYPEENCAP_PUBLIC)
+ /o do something o/ ;
+
+ /o get the method's flags o/
+ meth_flags = OCITypeMethodFlags(env, err, mdo);
+ if (meth_flags & OCI_TYPEMETHOD_VIRTUAL)
+ /o do something o/ ;
+
+
+ /o ------------ GET THE PARAMETERS IN A METHOD ------------ o/
+
+ /o loop through all parameters in the method o/
+ count = OCITypeMethodParams(env, err, mdo);
+ for (j = 1; j <= count; j++)
+ {
+ /o get the parameter information by position o/
+ if (OCITypeParamByPos(env, err, mdo, i, &elem) != OCI_SUCCESS)
+ /o error o/ ;
+
+ /o get the parameter's name o/
+ if (!memcmp(OCITypeElemName(env, err, elem, &text_len), "an_age",
+ text_len))
+ /o do something o/ ;
+
+ /o get the parameter's mode o/
+ if (OCITypeElemMode(env, err, elem) == OCI_PARAM_OUT)
+ /o do something o/ ;
+
+ /o get the parameter's required flag o/
+ if (ortgprq(env, err, elem))
+ /o do something o/ ;
+ }
+ }
+
+ /o get a method by name o/
+ if (OCITypeMethodByName(env, err, car_tdo, "car_constructor",
+ strlen("car_constructor"), NULLP(OCIRef), &mdo)
+ != OCI_SUCCESS)
+ /o error o/ ;
+
+ /o get a parameter in a method by name o/
+ if (OCITypeParamByName(env, err, mdo, "an_age", strlen("an_age"), &elem)
+ != OCI_SUCCESS)
+ /o error o/ ;
+
+ /o get a parameter's typecode o/
+ typecode = OCITypeElemTypeCode(env, err, elem);
+
+ /o get a parameter's type object o/
+ if (OCITypeElemType(env, err, elem, &tdo)) != OCI_SUCCESS)
+ /o error o/ ;
+
+ /o get a parameter's position in a method o/
+ if (ortgpps(env, err, mdo, "an_age", strlen("an_age"),
+ &position, NULLP(OCIRef), NULLP(OCITypeElem)) != OCI_SUCCESS)
+ /o error o/ ;
+
+ /o ------------ GET THE METHOD's RESULT ------------ o/
+
+ /o get a method by name o/
+ if (OCITypeMethodByName(env, err, car_tdo, "get_age", strlen("get_age"),
+ &mdo) != OCI_SUCCESS)
+ /o error o/ ;
+
+ /o get the typecode of the method's result o/
+ typecode = OCITypeElemTypeCode(env, err, mdo);
+
+
+ /o ----------------- END ---------------- o/
+
+ /o free the references implicitly allocated o/
+ DISCARD orlrfre(env, err, (dvoid *)&attr_ref);
+ DISCARD orlrfre(env, err, (dvoid *)¶m_ref);
+
+ NOTES
+
+ MODIFIED
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ srseshad 03/12/03 - convert oci public api to ansi
+ aahluwal 06/03/02 - bug 2360115
+ skabraha 04/16/02 - fix compiler warnings
+ rkasamse 03/02/01 - do not use iterator : keyword in MSVB
+ bpalaval 02/09/01 - Change text to oratext.
+ rxgovind 01/31/00 - add OCIType interfaces for transient types
+ whe 09/01/99 - 976457:check __cplusplus for C++ code
+ cxcheng 05/06/97 - make OCI_TYPE?? test macros return either 1 or 0
+ cxcheng 04/22/97 - add comment on desupporting OCIType functions
+ skrishna 03/18/97 - fix ifdef for supporting ansi and k&r proto-types
+ cxcheng 02/26/97 - fix lint problem with oro names
+ cxcheng 02/06/97 - take out short name support except with SLSHORTNAME
+ cxcheng 01/15/97 - change prototype of OCITypeElemParameterizedType()
+ cxcheng 01/03/97 - replace bit in OCI_TYPEPARAM_IS_REQUIRED with bitwis
+ cxcheng 12/31/96 - replace OCI_PARAM_IS_REQUIRED with OCI_TYPEPARAM_IS_
+ cxcheng 12/09/96 - add prototype for OCITypeElemExtTypeCode and OCIType
+ cxcheng 11/25/96 - add schema name parameter to OCITypeVTInsert()
+ cxcheng 11/20/96 - fix prototype for OCITypeByName()
+ cxcheng 11/11/96 - fix prototype for OCITypeByName()
+ cxcheng 11/05/96 - remove OCITypeElemExtTypeCode and OCITypeCollExtType
+ dchatter 10/28/96 - change ortgatyp to be OCITypeArrayByName
+ cxcheng 10/25/96 - fix problem with ortgatyp at end
+ cxcheng 10/22/96 - add OCITypeByRef and OCITypeArrayByRef
+ cxcheng 10/20/96 - remove ortgtyp() from #define section at end
+ cxcheng 10/18/96 - rename OCITypeGetArray to OCITypeArrayByName
+ cxcheng 10/17/96 - final change to prototype for OCI_TYPEPARAM_IS_REQUI
+ cxcheng 10/15/96 - rename OCIEncapLevel and OCIMethodFlag
+ cxcheng 10/14/96 - change prototype of OCITypeResult
+ mluong 10/11/96 - fix compile error
+ jwijaya 10/10/96 - fix bug on OCI_PARAM_IS_REQUIRED
+ cxcheng 10/09/96 - more lint and link fixes
+ cxcheng 10/08/96 - more lint fixes
+ cxcheng 10/07/96 - more changes
+ cxcheng 10/04/96 - replace short names with long names
+ cxcheng 10/01/96 - change to long names for readability
+ cxcheng 09/27/96 - rename ortgatyp() to ortgtya() for lint
+ cxcheng 09/20/96 - add ortgatyp() for array get type
+ cxcheng 09/18/96 - add array pin and iterator functions
+ cxcheng 08/09/96 - add version table calls
+ cxcheng 07/22/96 - add OCITypeElemType() to top
+ jwijaya 07/03/96 - add ANSI prototypes
+ cxcheng 06/28/96 - add OCITypeElemCharSetForm()
+ cxcheng 06/26/96 - fix comment on OCITypeParamByPos()/ortgpps()
+ cxcheng 06/18/96 - fix comments on OCITypeResult()
+ cxcheng 06/17/96 - improve comments
+ skrishna 06/03/96 - change OCITypeCollElem() prototype
+ vkrishna 05/29/96 - replace OROTCFAR with OROTCCAR
+ cxcheng 05/28/96 - fix comments, remove non-beta1 functions
+ cxcheng 05/02/96 - fix prototype bugs
+ cxcheng 04/29/96 - rename OCITypeElemm() to ortanct()
+ cxcheng 04/26/96 - add ortgrbp and ortftyi,
+ fix comments and examples
+ cxcheng 04/22/96 - big merge to main branch
+ cxcheng 04/17/96 - fix syntax
+ cxcheng 04/08/96 - change prototype to ortaty()
+ skrishna 04/08/96 - change ort*() to take OCIEnv* and OCIError* instead
+ of oroenv*
+ cxcheng 03/28/96 - add ortslob(), change ortsstr() prototype
+ cxcheng 03/13/96 - change alter type interface
+ cxcheng 03/11/96 - ORT interface changes
+ cxcheng 02/27/96 - correct comments
+ jboonleu 02/09/96 - rename oroopd to OCIDuration
+ cxcheng 01/19/96 - change ORTCTYVAL to ORTCTYEMB for embedded ADT
+ cxcheng 02/14/96 - add more comments
+ jboonleu 02/09/96 - rename oroopd to OCIDuration
+ cxcheng 02/07/96 - fix comments and examples
+ cxcheng 01/19/96 - new ORT interface without korfc's
+ cxcheng 01/08/96 - consolidate collection functions
+ cxcheng 12/14/95 - remove obsolete ortgcol() and ortrelease()
+ jweisz 12/12/95 - merge screwup: ortdth twice
+ cxcheng 12/05/95 - change multiset interface for new standard
+ skotsovo 12/01/95 - merge from /vobs/rdbms/public/ort.h@@/main/
+ st_rdbms_big_dev/st_rdbms_obj/
+ st_rdbms_jwijaya_variable_ref
+ cxcheng 11/13/95 - add ortaty()/orteaty()
+ cxcheng 11/13/95 - add new collection type accessors
+ skotsovo 10/30/95 - add 'oid' type b/c extent type uses it.
+ skotsovo 10/24/95 - update according to new variable length ref
+ cxcheng 10/05/95 - add null support, change prototypes to calls
+ cxcheng 10/03/95 - add OCITypeMethodOrder() to get ORDER method
+ cxcheng 09/28/95 - add OCITypeElemm() for collection types support
+ skotsovo 06/05/95 - add adt_type parameter to ortsab()
+ skotsovo 05/10/95 - ifdef'd out ortgafp()
+ skotsovo 03/07/95 - update interface to only include release 1
+ skotsovo 02/22/95 - add multiset accessors
+ skotsovo 02/09/95 - update according to new ots doc
+ skotsovo 01/31/95 - add rest of release 1 types
+ skotsovo 01/24/95 - categorize sint32, double, and real as number types
+ (with precision and scale) instead of scalar types.
+ skotsovo 01/12/95 - remove dependency from ortdty interface
+ skotsovo 01/03/95 - remove orotyp accessors
+ skotsovo 12/12/94 - update comments
+ skotsovo 12/05/94 - change OCITypeElemParameterizedTyper interface
+ skotsovo 10/26/94 - add type version table
+ skotsovo 10/17/94 - fix ortgafp() comments
+ skotsovo 10/14/94 - modify ortgafp() parameters
+ skotsovo 10/14/94 - add examples
+ skotsovo 10/13/94 - add a few new routines
+ jwijaya 10/07/94 - add namespace to pin by name
+ jwijaya 10/02/94 - connection handle -> connection number
+ skotsovo 09/13/94 - modify example to use updated oririni interface
+ skotsovo 08/25/94 - change scale to sb1 from sb2
+ skotsovo 07/28/94 - add ortbeg() and ortend()
+ skotsovo 07/14/94 - add decimal type & call graph
+ skotsovo 06/28/94 - subset by removing miscellaneous functions
+ skotsovo 06/28/94 - consistently put comments before typedefs
+ skotsovo 06/27/94 - modify according to new header file template, add
+ more examples, and change ortcty() to return a
+ reference to the type
+ skotsovo 06/24/94 - add functions to get type information from orotyp
+ skotsovo 06/20/94 - finish modifying according to header template
+ skotsovo 06/09/94 - modify according to header file template
+ skotsovo 06/08/94 - replace s.h with oratypes.h
+ skotsovo 05/24/94 - modify comments & update example
+ skotsovo 05/23/94 - modify fnt names for create, alter and drop type
+ skotsovo 05/18/94 - remove ortdme() -- delete a method
+ skotsovo 05/17/94 - add tdo parameter to all type modifiers
+ skotsovo 05/11/94 - return text* instead of including it in arglist
+ skotsovo 11/16/93 - creation
+
+*/
+
+#ifndef ORATYPES
+#include <oratypes.h>
+#endif
+#ifndef ORO_ORACLE
+#include <oro.h>
+#endif
+#ifndef OCI_ORACLE
+#include <oci.h>
+#endif
+
+#ifndef ORT_ORACLE
+#define ORT_ORACLE
+
+/*---------------------------------------------------------------------------*/
+/* SHORT NAMES SUPPORT SECTION */
+/*---------------------------------------------------------------------------*/
+
+#ifdef SLSHORTNAME
+
+/* the following are short names that are only supported on IBM mainframes
+ with the SLSHORTNAME defined.
+ With this all subsequent long names will actually be substituted with
+ the short names here */
+
+#define OCITypeArrayByName ortgatyp
+#define OCITypeAttrByName ortgabn
+#define OCITypeAttrNext ortgabi
+#define OCITypeAttrs ortgtna
+#define OCITypeByRef ortgtbrf
+#define OCITypeCollElem ortgcel
+#define OCITypeCollExtTypeCode ortgcsqt
+#define OCITypeCollSize ortgcne
+#define OCITypeCollTypeCode ortgdttc
+#define OCITypeElem ortado
+#define OCITypeElemCharSetForm ortgscform
+#define OCITypeElemCharSetID ortgscid
+#define OCITypeElemDefaultValue ortgpdv
+#define OCITypeElemExtTypeCode ortgasqt
+#define OCITypeElemLength ortgsl
+#define OCITypeElemName ortganm
+#define OCITypeElemNumPrec ortgnp
+#define OCITypeElemNumScale ortgns
+#define OCITypeElemParamMode ortgpmo
+#define OCITypeElemParameterizedType ortgpa
+#define OCITypeElemType ortgaty
+#define OCITypeElemTypeCode ortgatc
+#define OCITypeIter ortitr
+#define OCITypeIterFree ortifre
+#define OCITypeIterNew ortinew
+#define OCITypeIterSet ortiset
+#define OCITypeMethod ortmdo
+#define OCITypeMethodByName ortgmbn
+#define OCITypeMethodEncap ortgmen
+#define OCITypeMethodFlags ortgmfl
+#define OCITypeMethodMap ortgmmap
+#define OCITypeMethodName ortgmnm
+#define OCITypeMethodNext ortgmbi
+#define OCITypeMethodOrder ortgmor
+#define OCITypeMethodOverload ortgmno
+#define OCITypeMethodParams ortgmnp
+#define OCITypeMethods ortgtnm
+#define OCITypeName ortgtme
+#define OCITypeParamByName ortgpbn
+#define OCITypeParamPos ortgpps
+#define OCITypeSchema ortgtsch
+#define OCITypeTypeCode ortgttc
+#define OCITypeVTInit ortvini
+#define OCITypeVTInsert ortvins
+#define OCITypeVTSelect ortvsel
+#define OCITypeVersion ortgtvn
+
+#endif /* SLSHORTNAME */
+
+
+/*============================*/
+/* PUBLIC TYPES AND CONSTANTS */
+/*============================*/
+
+/*----------------------------- TYPE DESCRIPTION ----------------------------*/
+
+/*
+ * OCIType - OCI Type Description Object
+ *
+ * The contents of an 'OCIType' is private/opaque to clients. Clients just
+ * need to declare and pass 'OCIType' pointers in to the type manage
+ * functions.
+ * The pointer points to the type in the object cache. Thus, clients don't
+ * need to allocate space for this type and must NEVER free the pointer to the
+ * 'OCIType'.
+ */
+
+typedef struct OCIType OCIType;
+
+/*------------------------- TYPE ELEMENT DESCRIPTION ------------------------*/
+
+
+/*
+ * OCITypeElem - OCI Type Element object
+ *
+ * The contents of an 'OCITypeElem' is private/opaque to clients. Clients just
+ * need to declare and pass 'OCITypeElem' pointers in to the type manager
+ * functions.
+ *
+ * 'OCITypeElem' objects contains type element information such as the numeric
+ * precision for example, for number objects, and the number of elements for
+ * arrays.
+ * They ARE used to describe type attributes, collection elements,
+ * method parameters, and method results. Hence they are pass in or returned
+ * by attribute, collection, and method parameter/result accessors.
+ */
+
+typedef struct OCITypeElem OCITypeElem;
+
+
+/*--------------------------- METHOD DESCRIPTION ---------------------------*/
+
+
+/*
+ * OCITypeMethod - OCI Method Description object
+ *
+ * The contents of an 'OCITypeMethod' is private/opaque to clients. Clients
+ * just need to declare and pass 'OCITypeMethod' pointers in to the type
+ * manager functions.
+ * The pointer points to the method in the object cache. Thus, clients don't
+ * need to allocate space for this type and must NEVER free the pointer to
+ * the 'OCITypeMethod'.
+ */
+
+typedef struct OCITypeMethod OCITypeMethod;
+
+
+/*--------------------------- TYPE ACCESS ITERATOR --------------------------*/
+
+/*
+ * OCITypeIter- OCI Type Iterator
+ *
+ * The contents of an 'orti' is private/opaque to clients. Clients just
+ * need to declare and pass 'orti' pointers in to the type manager functions.
+ * The iterator is used to retreive MDO's and ADO's that belong to the TDO
+ * one at a time. It needs to be allocated by the 'OCITypeIterNew()' function
+ * call and deallocated with the 'OCITypeIterFree()' function call.
+ */
+
+typedef struct OCITypeIter OCITypeIter;
+
+
+/*==================*/
+/* PUBLIC FUNCTIONS */
+/*==================*/
+
+/*--------------------------------------------------------------------------*/
+/* ITERATOR */
+/*--------------------------------------------------------------------------*/
+
+/*-----------------------_- OCITypeIterNew ---------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeIterNew( OCIEnv *env, OCIError *err, OCIType *tdo,
+ OCITypeIter **iterator_ort );
+
+/*
+ NAME: OCITypeIterNew - OCI Iterator NEW
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to the pinned type in the object cache to
+ initialize the iterator with
+ iterator_ort (OUT) - pointer to the pointer to the new iterator created
+ DESCRIPTION:
+ Create a new instance of a method/attribute iterator and initalize
+ it's values.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+ 2) error while allocating space for the iterator.
+*/
+
+/*------------------------ OCITypeIterSet ---------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeIterSet( OCIEnv *env, OCIError *err, OCIType *tdo,
+ OCITypeIter *iterator_ort );
+
+/*
+ NAME: OCITypeIterSet - OCI Iterator SET
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to the pinned type in the object cache to
+ initialize the iterator with
+ iterator_ort (IN/OUT) - pointer to the iterator to set
+ DESCRIPTION:
+ Initializes the iterator. This is used to reset the state of the
+ iterator.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+*/
+
+/*------------------------ OCITypeIterFree ---------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeIterFree( OCIEnv *env, OCIError *err, OCITypeIter
+ *iterator_ort );
+
+/*
+ NAME: OCITypeIterFree - OCI Iterator FREe
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ iterator_ort (IN/OUT) - pointer to the iterator to free
+ DESCRIPTION:
+ Free space allocated for the iterator.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+ 2) error while freeing the iterator, probably bad iterator pointer.
+*/
+
+
+/*--------------------------------------------------------------------------*/
+/* TYPE GET */
+/*--------------------------------------------------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeByName( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
+ const oratext *schema_name, ub4 s_length,
+ const oratext *type_name, ub4 t_length,
+ const oratext *version_name, ub4 v_length,
+ OCIDuration pin_duration, OCITypeGetOpt get_option,
+ OCIType **tdo );
+/*
+ NAME: OCITypeByName - OCI Get the most current version of an existing TYPe
+ by name.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ svc (IN) - OCI service handle
+ schema_name (IN, optional) - name of schema associated with the
+ type. By default, the user's schema name is used.
+ s_length (IN) - length of the 'schema_name' parameter
+ type_name (IN) - name of the type to get
+ t_length (IN) - length of the 'type_name' parameter
+ version_name (IN, optional) - user readable version of the type.
+ Pass (oratext *)0 for the most current version.
+ v_length (IN) - length of version_name in bytes. Should be 0 if
+ the most current version is to be retrieved.
+ pin_duration (IN) - pin duration (e.g. until the end of current
+ transaction). See 'oro.h' for a description of
+ each option.
+ get_option (IN) - options for loading the types. It can be one of two
+ values:
+ OCI_TYPEGET_HEADER for only the header to be loaded, or
+ OCI_TYPEGET_ALL for the TDO and all ADO and MDOs to be
+ loaded.
+ tdo (OUT) - pointer to the pinned type in the object cache
+ DESCRIPTION:
+ Get a pointer to a version of the existing type associated
+ with schema/type name.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+ 2) the adt type associated with schema/type name does not exist.
+ NOTE:
+ Schema and type names are CASE-SENSITIVE. If they have been created
+ via SQL, you need to use uppercase names.
+*/
+
+sword OCITypeArrayByName( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
+ ub4 array_len,
+ const oratext *schema_name[], ub4 s_length[],
+ const oratext *type_name[], ub4 t_length[],
+ const oratext *version_name[], ub4 v_length[],
+ OCIDuration pin_duration,
+ OCITypeGetOpt get_option, OCIType **tdo );
+
+/*
+ NAME: OCITypeArrayByName - OCI Get array of TYPes by name.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ svc (IN) - OCI service handle
+ array_len (IN) - number of schema_name/type_name/version_name entries to
+ be retrieved.
+ schema_name (IN, optional) - array of schema names associated with the
+ types to be retrieved. The array must have array_len
+ elements if specified.
+ If 0 is supplied, the default schema is assumed, otherwise
+ it MUST have array_len number of elements.
+ 0 can be supplied for one or more of the entries to indicate
+ that the default schema is desired for those entries.
+ s_length (IN) - array of schema_name lengths with each entry
+ corresponding to the length of the corresponding schema_name
+ entry in the schema_name array in bytes.
+ The array must either have array_len number of elements or
+ it MUST be 0 if schema_name is not specified.
+ type_name (IN) - array of the names of the types to retrieve. This
+ MUST have array_len number of elements.
+ t_length (IN) - array of the lengths of type names in the type_name
+ array in bytes.
+ version_name (IN) - array of the version names of the types to retrieve
+ corresponding. This can be 0 to indicate retrieval of the
+ most current versions, or it MUST have array_len number of
+ elements.
+ If 0 is supplied, the most current version is assumed,
+ otherwise it MUST have array_len number of elements.
+ 0 can be supplied for one or more of the entries to indicate
+ that the current version is desired for those entries.
+ v_length (IN) - array of the lengths of version names in the
+ version_name array in bytes.
+ pin_duration (IN) - pin duration (e.g. until the end of current
+ transaction) for the types retreieve. See 'oro.h' for a
+ description of each option.
+ get_option (IN) - options for loading the types. It can be one of two
+ values:
+ OCI_TYPEGET_HEADER for only the header to be loaded, or
+ OCI_TYPEGET_ALL for the TDO and all ADO and MDOs to be
+ loaded.
+ tdo (OUT) - output array for the pointers to each pinned type in the
+ object cache. It must have space for array_len pointers.
+ Use OCIObjectGetObjectRef() to obtain the CREF to each
+ pinned type descriptor.
+ DESCRIPTION:
+ Get pointers to the existing types associated with the schema/type name
+ array. This is similar to OCITypeByName() except that all the TDO's are
+ retreived via a single network roundtrip.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+ 2) one or more adt types associated with a schema/type name entry
+ does not exist.
+*/
+
+sword OCITypeByRef( OCIEnv *env, OCIError *err,
+ const OCIRef *type_ref, OCIDuration pin_duration,
+ OCITypeGetOpt get_option, OCIType **tdo );
+
+/*
+ NAME: OCITypeArrayByRef - OCI Get array of TYPes by REF.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ type_ref (IN) - OCIRef * pointing to the particular version of
+ the type descriptor object to obtain.
+ The array must have array_len elements if specified.
+ pin_duration (IN) - pin duration (e.g. until the end of current
+ transaction) for the type to retreieve. See 'oro.h' for a
+ description of each option.
+ get_option (IN) - options for loading the type. It can be one of two
+ values:
+ OCI_TYPEGET_HEADER for only the header to be loaded, or
+ OCI_TYPEGET_ALL for the TDO and all ADO and MDOs to be
+ loaded.
+ tdo (OUT) - pointer to the pinned type in the object cache
+ DESCRIPTION:
+ Get pointers to the
+ with the schema/type name array. This is similar to OCITypeByName()
+ except that all the TDO's are retreived via a single network roundtrip.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+ 2) one or more adt types associated with a schema/type name entry
+ does not exist.
+*/
+
+sword OCITypeArrayByRef( OCIEnv *env, OCIError *err,
+ ub4 array_len, const OCIRef **type_ref,
+ OCIDuration pin_duration,
+ OCITypeGetOpt get_option, OCIType **tdo );
+
+/*
+ NAME: OCITypeArrayByRef - OCI Get array of TYPes by REF.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ array_len (IN) - number of schema_name/type_name/version_name entries to
+ be retrieved.
+ type_ref (IN) - array of OCIRef * pointing to the particular version of
+ the type descriptor object to obtain.
+ The array must have array_len elements if specified.
+ pin_duration (IN) - pin duration (e.g. until the end of current
+ transaction) for the types retreieve. See 'oro.h' for a
+ description of each option.
+ get_option (IN) - options for loading the types. It can be one of two
+ values:
+ OCI_TYPEGET_HEADER for only the header to be loaded, or
+ OCI_TYPEGET_ALL for the TDO and all ADO and MDOs to be
+ loaded.
+ tdo (OUT) - output array for the pointers to each pinned type in the
+ object cache. It must have space for array_len pointers.
+ Use OCIObjectGetObjectRef() to obtain the CREF to each
+ pinned type descriptor.
+ DESCRIPTION:
+ Get pointers to the
+ with the schema/type name array. This is similar to OCITypeByName()
+ except that all the TDO's are retreived via a single network roundtrip.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+ 2) one or more adt types associated with a schema/type name entry
+ does not exist.
+*/
+
+
+/*--------------------------------------------------------------------------*/
+/* TYPE ACCESSORS */
+/*--------------------------------------------------------------------------*/
+
+/*---------------------------- OCITypeName ---------------------------------*/
+
+/* ** OBSOLETE ** */
+oratext* OCITypeName( OCIEnv *env, OCIError *err, const OCIType *tdo,
+ ub4 *n_length );
+/*
+ NAME: OCITypeName - ORT Get a Type's naME.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to to the type descriptor in the object cache
+ n_length (OUT) - length (in bytes) of the returned type name. The
+ caller must allocate space for the ub4 before calling this
+ routine.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ 3) 'n_length' must point to an allocated ub4.
+ DESCRIPTION:
+ Get the name of the type.
+ RETURNS:
+ the name of the type
+ NOTES:
+ The type descriptor, 'tdo', must be unpinned when the accessed
+ information is no longer needed.
+ */
+
+/*------------------------ OCITypeSchema ---------------------------------*/
+
+/* ** OBSOLETE ** */
+oratext* OCITypeSchema( OCIEnv *env, OCIError *err, const OCIType *tdo,
+ ub4 *n_length );
+/*
+ NAME: OCITypeSchema - ORT Get a Type's SCHema name.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to to the type descriptor in the object cache
+ n_length (OUT) - length (in bytes) of the returned schema name. The
+ caller must allocate space for the ub4 before calling this
+ routine.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ 3) 'n_length' must point to an allocated ub4.
+ DESCRIPTION:
+ Get the schema name of the type.
+ RETURNS:
+ the schema name of the type
+ NOTES:
+ The type descriptor, 'tdo', must be unpinned when the accessed
+ information is no longer needed.
+ */
+
+/*------------------------ OCITypeTypeCode ---------------------------------*/
+
+/* ** OBSOLETE ** */
+OCITypeCode OCITypeTypeCode( OCIEnv *env, OCIError *err,
+ const OCIType *tdo );
+/*
+ NAME: OCITypeTypeCode - OCI Get a Type's Type Code.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to to the type descriptor in the object cache
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the type code of the type.
+ RETURNS:
+ The type code of the type.
+ NOTES:
+ The type descriptor, 'tdo', must be unpinned when the accessed
+ information is no longer needed.
+ */
+
+/*----------------------- OCITypeCollTypeCode -------------------------------*/
+
+/* ** OBSOLETE ** */
+OCITypeCode OCITypeCollTypeCode( OCIEnv *env, OCIError *err,
+ const OCIType *tdo );
+/*
+ NAME: OCITypeCollTypeCode - OCI Get a Domain Type's Type Code.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to to the type descriptor in the object cache
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ 3) 'tdo' MUST point to a named collection type.
+ DESCRIPTION:
+ Get the type code of the named collection type. For V8.0, named
+ collection types can only be variable length arrays and nested tables.
+ RETURNS:
+ OCI_TYPECODE_VARRAY for variable length array, and
+ OCI_TYPECODE_TABLE for nested tables.
+ NOTES:
+ The type descriptor, 'tdo', should be unpinned when the accessed
+ information is no longer needed.
+ */
+
+/*------------------------- OCITypeVersion ---------------------------------*/
+
+/* ** OBSOLETE ** */
+oratext* OCITypeVersion( OCIEnv *env, OCIError *err, const OCIType *tdo,
+ ub4 *v_length );
+/*
+ NAME: OCITypeVersion - OCI Get a Type's user-readable VersioN.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to to the type descriptor in the object cache
+ v_length (OUT) - length (in bytes) of the returned user-readable
+ version. The caller must allocate space for the ub4 before
+ calling this routine.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ 3) 'v_length' must point to an allocated ub4.
+ DESCRIPTION:
+ Get the user-readable version of the type.
+ RETURNS:
+ The user-readable version of the type
+ NOTES:
+ The type descriptor, 'tdo', must be unpinned when the accessed
+ information is no longer needed.
+ */
+
+/*--------------------------- OCITypeAttrs ---------------------------------*/
+
+/* ** OBSOLETE ** */
+ub4 OCITypeAttrs( OCIEnv *env, OCIError *err, const OCIType *tdo );
+/*
+ NAME: OCITypeAttrs - OCI Get a Type's Number of Attributes.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to to the type descriptor in the object cache
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the number of attributes in the type.
+ RETURNS:
+ The number of attributes in the type. 0 for ALL non-ADTs.
+ NOTES:
+ The type descriptor, 'tdo', must be unpinned when the accessed
+ information is no longer needed.
+ */
+
+/*------------------------- OCITypeMethods ---------------------------------*/
+
+/* ** OBSOLETE ** */
+ub4 OCITypeMethods( OCIEnv *env, OCIError *err, const OCIType *tdo );
+/*
+ NAME: OCITypeMethods - OCI Get a Type's Number of Methods.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to to the type descriptor in the object cache
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the number of methods in a type.
+ RETURNS:
+ The number of methods in the type
+ NOTES:
+ The type descriptor, 'tdo', must be unpinned when the accessed
+ information is no longer needed.
+ */
+
+
+/*--------------------------------------------------------------------------*/
+/* TYPE ELEMENT INFORMATION ACCESSORS */
+/*--------------------------------------------------------------------------*/
+
+/*------------------------ OCITypeElemName ---------------------------------*/
+
+/* ** OBSOLETE ** */
+oratext* OCITypeElemName( OCIEnv *env, OCIError *err,
+ const OCITypeElem *elem, ub4 *n_length );
+/*
+ NAME: OCITypeElemName - OCI Get an Attribute's NaMe.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the type element descriptor in the object cache
+ n_length (OUT) - length (in bytes) of the returned attribute name.
+ The caller must allocate space for the ub4 before calling this
+ routine.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ 3) 'n_length' must point to an allocated ub4.
+ DESCRIPTION:
+ Get the name of the attribute.
+ RETURNS:
+ the name of the attribute and the length in n_length
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*------------------------ OCITypeElemTypeCode ------------------------------*/
+
+/* ** OBSOLETE ** */
+OCITypeCode OCITypeElemTypeCode( OCIEnv *env, OCIError *err,
+ const OCITypeElem *elem );
+/*
+ NAME: OCITypeElemTypeCode - OCI Get an Attribute's TypeCode.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the type element descriptor in the object cache
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the typecode of an attribute's type.
+ RETURNS:
+ the typecode of the attribute's type. If this is a scalar type, the
+ typecode sufficiently describes the scalar type and no further calls
+ need to be made. Valid scalar types include: OCI_TYPECODE_SIGNED8,
+ OCI_TYPECODE_UNSIGNED8, OCI_TYPECODE_SIGNED16, OCI_TYPECODE_UNSIGNED16,
+ OCI_TYPECODE_SIGNED32, OCI_TYPECODE_UNSIGNED32, OCI_TYPECODE_REAL,
+ OCI_TYPECODE_DOUBLE, OCI_TYPECODE_DATE,
+ OCI_TYPECODE_MLSLABEL, OROTCOID, OCI_TYPECODE_OCTET, or OROTCLOB.
+ This function converts the CREF (stored in the attribute) into a
+ typecode.
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*------------------------ OCITypeElemType ---------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeElemType( OCIEnv *env, OCIError *err, const OCITypeElem *elem,
+ OCIType **elem_tdo );
+/*
+ PARAMETERS
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the type element descriptor in the object cache
+ elem_tdo (OUT) - If the function completes successfully, 'elem_tdo'
+ points to the type descriptor (in the object cache) of the type of
+ the element.
+
+ REQUIRES
+ 1) All type accessors require that the type be pinned before calling
+ any accessor. This can be done by calling 'OCITypeByName()'.
+ 2) if 'elem' is not null, it must point to a valid type element descriptor
+ in the object cache.
+
+ DESCRIPTION
+ Get the type tdo of the type of this element.
+ RETURNS
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the parameters is null.
+
+ NOTES
+ The type must be unpinned when the accessed information is no
+ longer needed. This can be done by calling 'OCIObjectUnpin()'.
+ */
+
+/*------------------------- OCITypeElemFlags -------------------------------*/
+
+/* ** OBSOLETE ** */
+ub4 OCITypeElemFlags( OCIEnv *env, OCIError *err,
+ const OCITypeElem *elem );
+/*
+ NAME: OCITypeElemFlags - OCI Get a Elem's FLags
+ (inline, constant, virtual, constructor,
+ destructor).
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the type element descriptor in the object cache
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the flags of a type element (attribute, parameter).
+ RETURNS:
+ The flags of the type element.
+ NOTES:
+ The flag bits are not externally documented. Use only the macros
+ in the last section (ie. OCI_TYPEPARAM_IS_REQUIRED, and
+ OCI_TYPEELEM_IS_REF) to test for them only. The type must be unpinned
+ when the accessed information is no longer needed.
+ */
+
+/*------------------------ OCITypeElemNumPrec ------------------------------*/
+
+/* ** OBSOLETE ** */
+ub1 OCITypeElemNumPrec( OCIEnv *env, OCIError *err,
+ const OCITypeElem *elem );
+/*
+ NAME: OCITypeElemNumPrec - Get a Number's Precision. This includes float,
+ decimal, real, double, and oracle number.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the type element descriptor in the object cache
+ REQUIRES:
+ All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the precision of a float, decimal, long, unsigned long, real,
+ double, or Oracle number type.
+ RETURNS:
+ the precision of the float, decimal, long, unsigned long, real, double,
+ or Oracle number
+ */
+
+/*------------------------- OCITypeElemNumScale -----------------------------*/
+
+/* ** OBSOLETE ** */
+sb1 OCITypeElemNumScale( OCIEnv *env, OCIError *err,
+ const OCITypeElem *elem );
+/*
+ NAME: OCITypeElemNumScale - Get a decimal or oracle Number's Scale
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the type element descriptor in the object cache
+ REQUIRES:
+ All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the scale of a decimal, or Oracle number type.
+ RETURNS:
+ the scale of the decimal, or Oracle number
+ */
+
+/*------------------------ OCITypeElemLength -------------------------------*/
+
+/* ** OBSOLETE ** */
+ub4 OCITypeElemLength( OCIEnv *env, OCIError *err,
+ const OCITypeElem *elem );
+/*
+ NAME: OCITypeElemLength - Get a raw, fixed or variable length String's
+ length in bytes.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the type element descriptor in the object cache
+ REQUIRES:
+ All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the length of a raw, fixed or variable length string type.
+ RETURNS:
+ length of the raw, fixed or variable length string
+ */
+
+/*----------------------- OCITypeElemCharSetID -----------------------------*/
+
+/* ** OBSOLETE ** */
+ub2 OCITypeElemCharSetID( OCIEnv *env, OCIError *err,
+ const OCITypeElem *elem );
+/*
+ NAME: OCITypeElemCharSetID - Get a fixed or variable length String's
+ character set ID
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the type element descriptor in the object cache
+ REQUIRES:
+ All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the character set ID of a fixed or variable length string type.
+ RETURNS:
+ character set ID of the fixed or variable length string
+ */
+
+/*---------------------- OCITypeElemCharSetForm ----------------------------*/
+
+/* ** OBSOLETE ** */
+ub2 OCITypeElemCharSetForm( OCIEnv *env, OCIError *err,
+ const OCITypeElem *elem );
+/*
+ NAME: OCITypeElemCharSetForm - Get a fixed or variable length String's
+ character set specification form.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the attribute information in the object cache
+ REQUIRES:
+ All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the character form of a fixed or variable length string type.
+ The character form is an enumerated value that can be one of the
+ 4 values below:
+ SQLCS_IMPLICIT for CHAR, VARCHAR2, CLOB w/o a specified set
+ SQLCS_NCHAR for NCHAR, NCHAR VARYING, NCLOB
+ SQLCS_EXPLICIT for CHAR, etc, with "CHARACTER SET ..." syntax
+ SQLCS_FLEXIBLE for PL/SQL "flexible" parameters
+ RETURNS:
+ character form of the fixed or variable string
+ */
+
+/*--------------------- OCITypeElemParameterizedType ------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeElemParameterizedType( OCIEnv *env, OCIError *err,
+ const OCITypeElem *elem,
+ OCIType **type_stored );
+/*
+ NAME: OCITypeElemParameterizedType
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the type element descriptor in the object cache
+ type_stored (OUT) - If the function completes successfully,
+ and the parameterized type is complex, 'type_stored' is NULL.
+ Otherwise, 'type_stored' points to the type descriptor (in the
+ object cache) of the type that is stored in the parameterized
+ type. The caller must allocate space for the OCIType*
+ before calling this routine and must not write into the space.
+ REQUIRES:
+ All input parameters must be valid.
+ DESCRIPTION:
+ Get a descriptor to the parameter type of a parameterized type.
+ Parameterized types are types of the form:
+ REF T
+ VARRAY (n) OF T
+ etc, where T is the parameter in the parameterized type.
+ Additionally is_ref is set if the parameter is a PTR or REF.
+ For example, it is set for REF T or VARRAY(n) OF REF T.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the parameters is null.
+ 2) 'type_stored' is not NULL but points to NULL data.
+ NOTES:
+ Complex parameterized types will be in a future release (once
+ typedefs are supported. When setting the parameterized type
+ information, the user must typedef the contents if it's a
+ complex parameterized type. Ex. for varray<varray<car>>, use
+ 'typedef varray<car> varcar' and then use varray<varcar>.
+ */
+
+/*----------------------- OCITypeElemExtTypeCode ----------------------------*/
+
+/* ** OBSOLETE ** */
+OCITypeCode OCITypeElemExtTypeCode( OCIEnv *env, OCIError *err,
+ const OCITypeElem *elem );
+/*
+ NAME: OCITypeElemExtTypeCode - OCI Get an element's SQLT constant.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the type element descriptor in the object cache
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the internal Oracle typecode associated with an attribute's type.
+ This is the actual typecode for the attribute when it gets mapped
+ to a column in the Oracle database.
+ RETURNS:
+ The Oracle typecode associated with the attribute's type.
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*--------------------------------------------------------------------------*/
+/* ATTRIBUTE ACCESSORS */
+/*--------------------------------------------------------------------------*/
+
+/*------------------------ OCITypeAttrByName -------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeAttrByName( OCIEnv *env, OCIError *err, const OCIType *tdo,
+ const oratext *name, ub4 n_length,
+ OCITypeElem **elem );
+/*
+ NAME: OCITypeAttrByName - OCI Get an Attribute By Name.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to to the type descriptor in the object cache
+ name (IN) - the attribute's name
+ n_length (IN) - length (in bytes) of the 'name' parameter
+ elem (OUT) - If this function completes successfully, 'elem' points to
+ the selected type element descriptor pertaining to the
+ attributein the object cache.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) if 'tdo' is not null, it must point to a valid type descriptor
+ in the object cache.
+ DESCRIPTION:
+ Get an attribute given its name.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+ 2) the type does not contain an attribute with the input 'name'.
+ 3) 'name' is NULL.
+ NOTES:
+ The type descriptor, 'tdo', must be unpinned when the accessed
+ information is no longer needed.
+ Schema and type names are CASE-SENSITIVE. If they have been created
+ via SQL, you need to use uppercase names.
+ */
+
+/*------------------------ OCITypeAttrNext ---------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeAttrNext( OCIEnv *env, OCIError *err,
+ OCITypeIter *iterator_ort, OCITypeElem **elem );
+
+/*
+ NAME: OCITypeAttrNext - OCI Get an Attribute By Iteration.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ iterator_ort (IN/OUT) - iterator for retrieving the next attribute;
+ see OCITypeIterNew() to initialize iterator.
+ elem (OUT) - If this function completes successfully, 'elem' points to
+ the selected type element descriptor pertaining to the
+ attributein the object cache.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) if 'tdo' is not null, it must point to a valid type descriptor
+ in the object cache.
+ DESCRIPTION:
+ Iterate to the next attribute to retrieve.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_NO_DATA if there are no more attributes to iterate on; use
+ OCITypeIterSet() to reset the iterator if necessary.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*--------------------------------------------------------------------------*/
+/* COLLECTION ACCESSORS */
+/*--------------------------------------------------------------------------*/
+
+/*------------------------ OCITypeCollElem ---------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeCollElem( OCIEnv *env, OCIError *err, const OCIType *tdo,
+ OCITypeElem **element );
+/*
+ NAME: OCITypeCollElem
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to the type descriptor in the object cache
+ element (IN/OUT) - If the function completes successfully, this
+ points to the descriptor for the collection's element.
+ It is stored in the same format as an ADT attribute's
+ descriptor.
+ If *element is NULL, OCITypeCollElem() implicitly allocates a
+ new instance of OCITypeElem in the object cache. This instance
+ will be
+ automatically freed at the end of the session, and does not have
+ to be freed explicitly.
+ If *element is not NULL, OCITypeCollElem() assumes that it
+ points to a valid OCITypeElem descriptor and will copy the
+ results into it.
+ REQUIRES:
+ All input parameters must be valid.
+ DESCRIPTION:
+ Get a pointer to the descriptor (OCITypeElem) of the element of an
+ array or the rowtype of a nested table.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the parameters is null.
+ 2) the type TDO does not point to a valid collection's type.
+ NOTES:
+ Complex parameterized types will be in a future release (once
+ typedefs are supported. When setting the parameterized type
+ information, the user must typedef the contents if it's a
+ complex parameterized type. Ex. for varray<varray<car>>, use
+ 'typedef varray<car> varcar' and then use varray<varcar>.
+ */
+
+/*------------------------ OCITypeCollSize ---------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeCollSize( OCIEnv *env, OCIError *err, const OCIType *tdo,
+ ub4 *num_elems );
+/*
+ NAME: OCITypeCollSize - OCI Get a Collection's Number of Elements.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to the type descriptor in the object cache
+ num_elems (OUT) - number of elements in collection
+ REQUIRES:
+ All input parameters must be valid. tdo points to an array type
+ defined as a domain.
+ DESCRIPTION:
+ Get the number of elements stored in a fixed array or the maximum
+ number of elements in a variable array.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the parameters is null.
+ 2) 'tdo' does not point to a domain with a collection type.
+ NOTES:
+ Complex parameterized types will be in a future release (once
+ typedefs are supported. When setting the parameterized type
+ information, the user must typedef the contents if it's a
+ complex parameterized type. Ex. for varray<varray<car>>, use
+ 'typedef varray<car> varcar' and then use varray<varcar>.
+ */
+
+/*------------------------ OCITypeCollExtTypeCode ---------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeCollExtTypeCode( OCIEnv *env, OCIError *err,
+ const OCIType *tdo, OCITypeCode *sqt_code );
+/*
+ NAME: ortcsqt - OCI Get a Collection element's DTY constant.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to the type descriptor in the object cache
+ sqt_code (OUT) - SQLT code of type element.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the SQLT constant associated with an domain's element type.
+ The SQLT codes are defined in <sqldef.h> and are needed for OCI/OOCI
+ use.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the parameters is null.
+ 2) 'tdo' does not point to a domain with a collection type.
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+
+/*--------------------------------------------------------------------------*/
+/* METHOD ACCESSORS */
+/*--------------------------------------------------------------------------*/
+
+/*------------------------- OCITypeMethodOverload --------------------------*/
+
+/* ** OBSOLETE ** */
+ub4 OCITypeMethodOverload( OCIEnv *env, OCIError *err, const OCIType *tdo,
+ const oratext *method_name, ub4 m_length );
+/*
+ NAME: OCITypeMethodOverload - OCI Get type's Number of Overloaded names
+ for the given method name.
+ PARAMETERS:
+ gp (IN/OUT) - pga environment handle. Any errors are recorded here.
+ tdo (IN) - pointer to to the type descriptor in the object cache
+ method_name (IN) - the method's name
+ m_length (IN) - length (in bytes) of the 'method_name' parameter
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) if 'tdo' is not null, it must point to a valid type descriptor
+ in the object cache.
+ DESCRIPTION:
+ Overloading of methods implies that more than one method may have the
+ same method name. This routine returns the number of methods that
+ have the given method name. If there are no methods with the input
+ method name, 'num_methods' is 0. The caller uses this information when
+ allocating space for the array of mdo and/or position pointers before
+ calling 'OCITypeMethodByName()' or 'ortgmps()'.
+ RETURNS:
+ The number of methods with the given name. 0 if none contains the
+ name.
+ NOTES:
+ Schema and type names are CASE-SENSITIVE. If they have been created
+ via SQL, you need to use uppercase names.
+ */
+
+/*------------------------ OCITypeMethodByName ------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeMethodByName( OCIEnv *env, OCIError *err, const OCIType *tdo,
+ const oratext *method_name, ub4 m_length,
+ OCITypeMethod **mdos );
+/*
+ NAME: OCITypeMethodByName - OCI Get one or more Methods with Name.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to to the type descriptor in the object cache
+ method_name (IN) - the methods' name
+ m_length (IN) - length (in bytes) of the 'name' parameter
+ mdos (OUT) - If this function completes successfully, 'mdos' points to
+ the selected methods in the object cache. The caller must
+ allocate space for the array of OCITypeMethod pointers before
+ calling this routine and must not write into the space.
+ The number of OCITypeMethod pointers that will be returned can
+ be obtained by calling 'OCITypeMethodOverload()'.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) if 'tdo' is not null, it must point to a valid type descriptor
+ in the object cache.
+ DESCRIPTION:
+ Get one or more methods given the name.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+ 2) No methods in type has name 'name'.
+ 3) 'mdos' is not NULL but points to NULL data.
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ Schema and type names are CASE-SENSITIVE. If they have been created
+ via SQL, you need to use uppercase names.
+ */
+
+/*------------------------ OCITypeMethodNext --------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeMethodNext( OCIEnv *env, OCIError *err,
+ OCITypeIter *iterator_ort,
+ OCITypeMethod **mdo );
+
+/*
+ NAME: OCITypeMethodNext - OCI Get a Method By Iteration.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ iterator_ort (IN/OUT) - iterator for retrieving the next method;
+ see OCITypeIterNew() to set iterator.
+ mdo (OUT) - If this function completes successfully, 'mdo' points to
+ the selected method descriptor in the object cache. Positions
+ start at 1. The caller must allocate space for the
+ OCITypeMethod* before calling this routine and must not write
+ nto the space.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) if 'tdo' is not null, it must point to a valid type descriptor
+ in the object cache.
+ DESCRIPTION:
+ Iterate to the next method to retrieve.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_NO_DATA if there are no more attributes to iterate on; use
+ OCITypeIterSet() to reset the iterator if necessary.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+ 2) 'mdo' is not NULL but points to NULL data.
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*------------------------ OCITypeMethodName --------------------------------*/
+
+/* ** OBSOLETE ** */
+oratext *OCITypeMethodName( OCIEnv *env, OCIError *err,
+ const OCITypeMethod *mdo, ub4 *n_length );
+/*
+ NAME: OCITypeMethodName - OCI Get a Method's NaMe.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ mdo (IN) - pointer to the method descriptor in the object cache
+ n_length (OUT) - length (in bytes) of the 'name' parameter. The caller
+ must allocate space for the ub4 before calling this routine.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the (non-unique) real name of the method.
+ RETURNS:
+ the non-unique name of the method or NULL if there is an error.
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*------------------------ OCITypeMethodEncap -------------------------------*/
+
+/* ** OBSOLETE ** */
+OCITypeEncap OCITypeMethodEncap( OCIEnv *env, OCIError *err,
+ const OCITypeMethod *mdo );
+/*
+ NAME: OCITypeMethodEncap - Get a Method's ENcapsulation (private/public).
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ mdo (IN) - pointer to the method descriptor in the object cache
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the encapsulation (private, or public) of a method.
+ RETURNS:
+ the encapsulation (private, or public) of the method
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*------------------------ OCITypeMethodFlags -------------------------------*/
+
+/* ** OBSOLETE ** */
+OCITypeMethodFlag OCITypeMethodFlags( OCIEnv *env, OCIError *err,
+ const OCITypeMethod *mdo );
+/*
+ NAME: OCITypeMethodFlags - OCI Get a Method's FLags
+ (inline, constant, virtual, constructor,
+ destructor).
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ mdo (IN) - pointer to the method descriptor in the object cache
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the flags (inline, constant, virutal, constructor, destructor) of
+ a method.
+ RETURNS:
+ the flags (inline, constant, virutal, constructor, destructor) of
+ the method
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*------------------------ OCITypeMethodMap ---------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeMethodMap( OCIEnv *env, OCIError *err, const OCIType *tdo,
+ OCITypeMethod **mdo );
+/*
+ NAME: OCITypeMethodMap - OCI Get the Method's MAP function.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to to the type descriptor in the object cache
+ mdo (OUT) - If this function completes successfully, and there is a
+ map function for this type, 'mdo' points to the selected method
+ descriptor in the object cache. Otherwise, 'mdo' is null.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All required input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ A type may have only one map function. 'OCITypeMethodMap()' finds
+ this function, if it exists, and returns a reference and a pointer to
+ the method descriptor in the object cache. If the type does not have a
+ map (relative ordering) function, then 'mdo_ref' and 'mdo' are set
+ to null and an error is returned.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ the type does not contain a map function.
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*------------------------ OCITypeMethodOrder -------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeMethodOrder( OCIEnv *env, OCIError *err, const OCIType *tdo,
+ OCITypeMethod **mdo );
+/*
+ NAME: OCITypeMethodOrder - OCI Get the Method's ORder function.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ tdo (IN) - pointer to to the type descriptor in the object cache
+ mdo (OUT) - If this function completes successfully, and there is a
+ map function for this type, 'mdo' points to the selected method
+ descriptor in the object cache. Otherwise, 'mdo' is null.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All required input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ A type may have only one ORder or MAP function. 'OCITypeMethodOrder()'
+ finds this function, if it exists, and returns a ref and a pointer
+ to the method descriptor in the object cache. If the type does not
+ have a map (relative ordering) function, then 'mdo_ref' and 'mdo' are
+ set to null and an error is returned.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ the type does not contain a map function.
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*------------------------ OCITypeMethodParams ------------------------------*/
+
+/* ** OBSOLETE ** */
+ub4 OCITypeMethodParams( OCIEnv *env, OCIError *err,
+ const OCITypeMethod *mdo );
+/*
+ NAME: OCITypeMethodParams - OCI Get a Method's Number of Parameters.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ mdo (IN) - pointer to the method descriptor in the object cache
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the number of parameters in a method.
+ RETURNS:
+ the number of parameters in the method
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+
+/*--------------------------------------------------------------------------*/
+/* RESULT ACCESSORS */
+/*--------------------------------------------------------------------------*/
+
+/*-------------------------- OCITypeResult ---------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeResult( OCIEnv *env, OCIError *err, const OCITypeMethod *mdo,
+ OCITypeElem **elem );
+/*
+ NAME: OCITypeResult - OCI Get a method's result type descriptor.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ mdo (IN) - pointer to the method descriptor in the object cache
+ elem (OUT) - If this function completes successfully, 'rdo' points to
+ the selected result (parameter) descriptor in the object cache.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) 'elem' MUST be the address of an OCITypeElem pointer.
+ DESCRIPTION:
+ Get the result of a method.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+ 2) method returns no results.
+ NOTES:
+ The method must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+
+/*--------------------------------------------------------------------------*/
+/* PARAMETER ACCESSORS */
+/*--------------------------------------------------------------------------*/
+
+/*------------------------ OCITypeParamByPos -------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeParamByPos( OCIEnv *env, OCIError *err,
+ const OCITypeMethod *mdo, ub4 position,
+ OCITypeElem **elem );
+/*
+ NAME: OCITypeParamByPos - OCI Get a Parameter in a method By Position.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ mdo (IN) - pointer to the method descriptor in the object cache
+ position (IN) - the parameter's position. Positions start at 1.
+ elem (OUT) - If this function completes successfully, 'elem' points to
+ the selected parameter descriptor in the object cache.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ DESCRIPTION:
+ Get a parameter given its position in the method. Positions start
+ at 1.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+ 2) 'position' is not >= 1 and <= the number of parameters in the
+ method.
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*------------------------ OCITypeParamByName -------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeParamByName( OCIEnv *env, OCIError *err,
+ const OCITypeMethod *mdo,
+ const oratext *name, ub4 n_length,
+ OCITypeElem **elem );
+/*
+ NAME: OCITypeParamByName - OCI Get a Parameter in a method By Name.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ mdo (IN) - pointer to the method descriptor in the object cache
+ name (IN) - the parameter's name
+ n_length (IN) - length (in bytes) of the 'name' parameter
+ elem (OUT) - If this function completes successfully, 'elem' points to
+ the selected parameter descriptor in the object cache.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) if 'mdo' is not null, it must point to a valid method descriptor
+ in the object cache.
+ DESCRIPTION:
+ Get a parameter given its name.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the required parameters is null.
+ 2) the method does not contain a parameter with the input 'name'.
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*------------------------ OCITypeParamPos ---------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeParamPos( OCIEnv *env, OCIError *err,
+ const OCITypeMethod *mdo,
+ const oratext *name, ub4 n_length, ub4 *position,
+ OCITypeElem **elem );
+/*
+ NAME: OCITypeParamPos - OCI Get a parameter's position in a method
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ mdo (IN) - pointer to the method descriptor in the object cache
+ name (IN) - the parameter's name
+ n_length (IN) - length (in bytes) of the 'name' parameter
+ position (OUT) - If this function completes successfully, 'position'
+ points to the position of the parameter in the method starting
+ at position 1. position MUST point to space for a ub4.
+ elem (OUT) - If this function completes successfully, and
+ the input 'elem' is not NULL, 'elem' points to the selected
+ parameter descriptor in the object cache.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) if 'mdo' is not null, it must point to a valid method descriptor
+ in the object cache.
+ DESCRIPTION:
+ Get the position of a parameter in a method. Positions start at 1.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the parameters is null.
+ 2) the method does not contain a parameter with the input 'name'.
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*------------------------ OCITypeParamElemMode -----------------------------*/
+
+/* ** OBSOLETE ** */
+OCITypeParamMode OCITypeElemParamMode( OCIEnv *env, OCIError *err,
+ const OCITypeElem *elem );
+/*
+ NAME: OCITypeElemParamMode - OCI Get a parameter's mode
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the parameter descriptor in the object cache
+ (represented by an OCITypeElem)
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the mode (in, out, or in/out) of the parameter.
+ RETURNS:
+ the mode (in, out, or in/out) of the parameter
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+/*------------------------- OCITypeElemDefaultValue -------------------------*/
+
+/* ** OBSOLETE ** */
+oratext* OCITypeElemDefaultValue( OCIEnv *env, OCIError *err,
+ const OCITypeElem *elem,
+ ub4 *d_v_length );
+/*
+ NAME: OCITypeElemDefaultValue - OCI Get the element's Default Value.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ elem (IN) - pointer to the parameter descriptor in the object cache
+ (represented by an OCITypeElem)
+ d_v_length (OUT) - length (in bytes) of the returned default value.
+ The caller must allocate space for the ub4 before calling this
+ routine.
+ REQUIRES:
+ 1) All type accessors require that the type be pinned before calling
+ any accessor.
+ 2) All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Get the default value in text form (PL/SQL) of an element. For V8.0,
+ this only makes sense for a method parameter.
+ RETURNS:
+ The default value (text) of the parameter.
+ NOTES:
+ The type must be unpinned when the accessed information is no
+ longer needed.
+ */
+
+
+/*--------------------------------------------------------------------------*/
+/* TYPE VERSION TABLE */
+/*--------------------------------------------------------------------------*/
+
+/* For V8.0, the type version table is meant to be an internal data structure
+ only for Oracle clients for type version maintanence purposes. A more
+ general version of the API may be made public in subsequent releases. */
+
+
+/*--------------------------- OCITypeVTInit --------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeVTInit( OCIEnv *env, OCIError *err );
+/*
+ NAME: OCITypeVTInit - OCI type Version table INItialize
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ REQUIRES:
+ none
+ DESCRIPTION:
+ Allocate space for and initialize the type version table and the type
+ version table's index.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if internal errors occurrs during initialization.
+ */
+
+/*--------------------------- OCITypeVTInsert -------------------------------*/
+
+/* ** OBSOLETE ** */
+sword OCITypeVTInsert( OCIEnv *env, OCIError *err,
+ const oratext *schema_name, ub4 s_n_length,
+ const oratext *type_name, ub4 t_n_length,
+ const oratext *user_version, ub4 u_v_length );
+/*
+ NAME: OCITypeVTInsert - OCI type Version table INSert entry.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ schema_name (IN, optional) - name of schema associated with the
+ type. By default, the user's schema name is used.
+ s_n_length (IN) - length of the 'schema_name' parameter
+ type_name (IN) - type name to insert
+ t_n_length (IN) - length (in bytes) of the 'type_name' parameter
+ user_version (IN) - user readable version of the type
+ u_v_length (IN) - length (in bytes) of the 'user_version' parameter
+ REQUIRES:
+ none
+ DESCRIPTION:
+ Insert an entry into the type version table and the type version
+ table's index. The entry's type name and user readable version
+ fields are updated with the input values. All other fields are
+ initialized to null.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the parameters is invalid.
+ 2) an entry for 'type_name' has already been registered in the
+ type version table.
+ */
+
+/*------------------------------ OCITypeVTSelect ----------------------------*/
+
+/* OCITypeVTSelect - OCI type VERSion table SELECT entry */
+/* ** OBSOLETE ** */
+sword OCITypeVTSelect( OCIEnv *env, OCIError *err,
+ const oratext *schema_name, ub4 s_n_length,
+ const oratext *type_name, ub4 t_n_length,
+ oratext **user_version, ub4 *u_v_length,
+ ub2 *version );
+/*
+ NAME: OCITypeVTSelect - OCI type Version table SELect entry.
+ PARAMETERS:
+ env (IN/OUT) - OCI environment handle initialized in object mode
+ err (IN/OUT) - error handle. If there is an error, it is
+ recorded in 'err' and this function returns OCI_ERROR.
+ The error recorded in 'err' can be retrieved by calling
+ OCIErrorGet().
+ schema_name (IN, optional) - name of schema associated with the
+ type. By default, the user's schema name is used.
+ s_n_length (IN) - length of the 'schema_name' parameter
+ type_name (IN) - type name to select
+ t_n_length (IN) - length (in bytes) of the 'type_name' parameter
+ user_version (OUT, optional) - pointer to user readable version of the
+ type
+ u_v_length (OUT, optional) - length (in bytes) of the 'user_version'
+ parameter
+ version (OUT, optional) - internal type version
+ REQUIRES:
+ All input parameters must not be NULL and must be valid.
+ DESCRIPTION:
+ Select an entry in the type version table by name.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_INVALID_HANDLE if 'env' or 'err' is null.
+ OCI_ERROR if
+ 1) any of the parameters is invalid.
+ 2) an entry with 'type_name' does not exist.
+ */
+
+/* Compatibility function - following function prototype retained for
+ compatibility only */
+sword ortgcty( OCIEnv *env, OCIError *err, OCIType *coll_tdo,
+ OCIType **collelem_tdo );
+
+/*---------------------------------------------------------------------------*/
+/* Transient Type Construction functions */
+/*---------------------------------------------------------------------------*/
+
+sword OCITypeBeginCreate(OCISvcCtx *svchp, OCIError *errhp, OCITypeCode tc,
+ OCIDuration dur, OCIType **type);
+/*
+ NAME: OCITypeBeginCreate - OCI Type Begin Creation of a transient type.
+ REMARKS
+ Begins the construction process for a transient type. The type will be
+ anonymous (no name). To create a persistent named type, the CREATE TYPE
+ statement should be used from SQL. Transient types have no identity.
+ They are pure values.
+ PARAMETERS:
+ svchp (IN) - The OCI Service Context.
+ errhp (IN/OUT) - The OCI error handle. If there is an error, it is
+ recorded in errhp and this function returns
+ OCI_ERROR. Diagnostic information can be obtained by
+ calling OCIErrorGet().
+ tc - The TypeCode for the type. The Typecode could
+ correspond to a User Defined Type or a Built-in type.
+ Currently, the permissible values for User Defined
+ Types are OCI_TYPECODE_OBJECT for an Object Type
+ (structured), OCI_TYPECODE_VARRAY for a VARRAY
+ collection type or OCI_TYPECODE_TABLE for a nested
+ table collection type. For Object types,
+ OCITypeAddAttr() needs to be called to add each of
+ the attribute types. For Collection types,
+ OCITypeSetCollection() needs to be called.
+ Subsequently, OCITypeEndCreate() needs to be called
+ to finish the creation process.
+ The permissible values for Built-in type codes are
+ specified in the user manual. Additional information
+ on built-ins if any (like precision, scale for
+ numbers, character set info for VARCHAR2s etc.) must
+ be set with a subsequent call to OCITypeSetBuiltin().
+ Subsequently OCITypeEndCreate() needs to be called
+ to finish the creation process.
+ dur - The allocation duration for the Type. Could be a
+ predefined or a user defined duration.
+ type(OUT) - The OCIType (Type Descriptor) that is being
+ constructed.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_ERROR on error.
+*/
+
+
+sword OCITypeSetCollection(OCISvcCtx *svchp, OCIError *errhp, OCIType *type,
+ OCIParam *collelem_info, ub4 coll_count);
+/*
+ NAME: OCITypeSetCollection - OCI Type Set Collection information
+ REMARKS :
+ Set Collection type information. This call can be called only if the
+ OCIType has been constructed with a collection typecode.
+ PARAMETERS:
+ svchp (IN) - The OCI Service Context.
+ errhp (IN/OUT) - The OCI error handle. If there is an error, it is
+ recorded in errhp and this function returns
+ OCI_ERROR. Diagnostic information can be obtained by
+ calling OCIErrorGet().
+ type(IN OUT) - The OCIType (Type Descriptor) that is being
+ constructed.
+ collelem_info - collelem_info provides information on the collection
+ element. It is obtained by allocating an OCIParam
+ (parameter handle) and setting type information in
+ the OCIParam using OCIAttrSet() calls.
+ coll_count - The count of elements in the collection. Pass 0 for
+ a nested table (unbounded).
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_ERROR on error.
+*/
+
+sword OCITypeSetBuiltin(OCISvcCtx *svchp, OCIError *errhp, OCIType *type,
+ OCIParam *builtin_info);
+/*
+ NAME: OCITypeSetBuiltin - OCI Type Set Builtin information.
+ REMARKS:
+ Set Built-in type information. This call can be called only if the
+ OCIType has been constructed with a built-in typecode
+ (OCI_TYPECODE_NUMBER etc.).
+ PARAMETERS:
+ svchp (IN) - The OCI Service Context.
+ errhp (IN/OUT) - The OCI error handle. If there is an error, it is
+ recorded in errhp and this function returns
+ OCI_ERROR. Diagnostic information can be obtained by
+ calling OCIErrorGet().
+ type(IN OUT) - The OCIType (Type Descriptor) that is being
+ constructed.
+ builtin_info - builtin_info provides information on the built-in
+ (like precision, scale, charater set etc.). It is
+ obtained by allocating an OCIParam (parameter handle)
+ and setting type information in the OCIParam using
+ OCIAttrSet() calls.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_ERROR on error.
+*/
+
+sword OCITypeAddAttr(OCISvcCtx *svchp, OCIError *errhp, OCIType *type,
+ const oratext *a_name, ub4 a_length,
+ OCIParam *attr_info);
+/*
+ NAME: OCITypeAddAttr - OCI Type Add Attribute to an Object Type.
+ REMARKS:
+ Adds an attribute to an Object type (that was constructed earlier with
+ typecode OCI_TYPECODE_OBJECT).
+ PARAMETERS:
+ svchp (IN) - The OCI Service Context
+ errhp (IN/OUT) - The OCI error handle. If there is an error, it is
+ recorded in errhp and this function returns
+ OCI_ERROR. Diagnostic information can be obtained by
+ calling OCIErrorGet().
+ type (IN/OUT) - The Type description that is being constructed.
+ a_name(IN) - Optional. gives the name of the attribute.
+ a_length - Optional. gives length of attribute name.
+ attr_info - Information on the attribute. It is obtained by
+ allocating an OCIParam (parameter handle) and setting
+ type information in the OCIParam using OCIAttrSet()
+ calls.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_ERROR on error.
+*/
+
+sword OCITypeEndCreate(OCISvcCtx *svchp, OCIError *errhp, OCIType *type);
+/*
+ NAME: OCITypeEndCreate - OCI Type End Creation
+ REMARKS:
+ Finishes construction of a type description.Subsequently, only access
+ will be allowed.
+ PARAMETERS:
+ svchp (IN) - The OCI Service Context
+ errhp (IN/OUT) - The OCI error handle. If there is an error, it is
+ recorded in errhp and this function returns
+ OCI_ERROR. Diagnostic information can be obtained by
+ calling OCIErrorGet().
+ type (IN/OUT) - The Type description that is being constructed.
+ RETURNS:
+ OCI_SUCCESS if the function completes successfully.
+ OCI_ERROR on error.
+*/
+
+/*=========================*/
+/* PUBLIC MACROS AND FLAGS */
+/*=========================*/
+
+/*--------------------------------------------------------------------------*/
+/* TYPE ELEMENT FLAGS */
+/*--------------------------------------------------------------------------*/
+
+#define OCI_TYPEELEM_REF 0x8000 /* element is a REF */
+#define OCI_TYPEPARAM_REQUIRED 0x0800 /* parameter is required */
+
+/* macros to test flags */
+#define OCI_TYPEELEM_IS_REF(elem_flag) \
+ (((elem_flag) & OCI_TYPEELEM_REF)!=0)
+#define OCI_TYPEPARAM_IS_REQUIRED(param_flag) \
+ (((param_flag) & OCI_TYPEPARAM_REQUIRED)!=0)
+
+
+#endif /* ORT_ORACLE */
+
--- /dev/null
+
+/*
+ * $Header: sql2oci.h 08-may-2002.12:13:40 apopat Exp $
+ */
+
+/* Copyright (c) 1996, 2002, Oracle Corporation. All rights reserved. */
+
+/* NOTE: See 'header_template.doc' in the 'doc' dve under the 'forms'
+ directory for the header file template that includes instructions.
+*/
+
+/*
+ NAME
+ sql2oci.h - SQLLIB functions for V8 OCI interoperability
+
+ DESCRIPTION
+ This file contains SQLLIB functions to obtain OCI environment handle
+ and OCI service context in a Pro*c program.
+
+ RELATED DOCUMENTS
+
+ INSPECTION STATUS
+ Inspection date:
+ Inspection status:
+ Estimated increasing cost defects per page:
+ Rule sets:
+
+ ACCEPTANCE REVIEW STATUS
+ Review date:
+ Review status:
+ Reviewers:
+
+ PUBLIC FUNCTION(S)
+ SQLEnvGet()
+ SQLSvcCtxGet()
+
+ PRIVATE FUNCTION(S)
+ NONE
+
+ EXAMPLES
+
+ NOTES
+ <other useful comments, qualifications, etc.>
+
+ MODIFIED (MM/DD/YY)
+ apopat 05/08/02 - [2362423] MVS PE to make lines shorter than 79
+ apopat 07/31/99 - [707588] TAB to blanks for OCCS
+ apopat 04/06/99 - [563753] Allowing prototypes for C++
+ lvbcheng 06/23/98 - Add SQLRowidGet
+ sylin 02/25/98 - [600216] Add C++ support
+ lvbcheng 05/13/97 - Desupport wrappers
+ lvbcheng 01/13/97 - fix non-ANSI SQLNumberFromFloat error
+ lvbcheng 01/03/97 - test
+ lvbcheng 01/03/97 - Revert back to OCINumber *
+ lvbcheng 12/12/96 - Finalize
+ lvbcheng 12/06/96 - test
+ lvbcheng 12/06/96 - test
+ lvbcheng 12/05/96 - Add default context code
+ lvbcheng 12/05/96 - Add connection to sqlcpr.h and sql[a|k]pr.h
+ lvbcheng 12/05/96 - Remove merge conflicts
+ lvbcheng 12/02/96 - Change Interface of sql2oci wrappers
+ lvbcheng 10/21/96 - Add OCINumber set procedures
+ lvbcheng 10/21/96 - Add vstr wrappers
+ jbasu 08/02/96 - Remove private include files
+ jbasu 07/05/96 - [8.0] SQLSvcCtxGet() enhancements
+ jbasu 06/04/96 - Support for V80 objects
+ jbasu 06/04/96 - Creation
+
+*/
+
+#ifndef SQL2OCI_ORACLE
+# define SQL2OCI_ORACLE
+
+#ifndef OCI_ORACLE
+# include <oci.h>
+#endif /* OCI_ORACLE */
+
+#ifndef ORL_ORACLE
+# include <orl.h>
+#endif /* ORL_ORACLE */
+
+#ifndef SQLCPR_ORACLE
+# include <sqlcpr.h>
+#endif /* SQLCPR_ORACLE */
+
+#if defined (__STDC__) || defined (__cplusplus)
+
+/* --------------------- */
+/* Includes for ANSI C */
+/* --------------------- */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef SQLAPR_ORACLE
+# include <sqlapr.h>
+#endif /* SQLAPR_ORACLE */
+
+/* Get Procedures for OCI Env and Svc Ctx */
+
+extern sword SQLEnvGet(dvoid *rctx, OCIEnv **oeh);
+
+extern sword SQLSvcCtxGet(dvoid *rctx, text *dbname, sb4 dbnamelen,
+ OCISvcCtx **svc);
+
+#ifdef __cplusplus
+}
+#endif
+
+#else /* k&r style - non-ANSI code */
+
+/* -------------------- */
+/* Includes for K&R C */
+/* -------------------- */
+
+#ifndef SQLKPR_ORACLE
+# include <sqlkpr.h>
+#endif /* SQLKPR_ORACLE */
+
+/* ------------------------------------ */
+/* Get rowid of last exec sql statement */
+/* ------------------------------------ */
+
+void SQLRowidGet(/*_ dvoid *rctx, OCIRowid **urid _*/);
+
+/*
+ NAME: SQLRowidGet - SQLLIB Rowid Get
+
+ PARAMETERS:
+ rctx (IN): pointer to a sqllib runtime context
+ urid (OUT): pointer to an allocated rowid descriptor
+
+ DESCRIPTION:
+ Sets urid to be the rowid of the last row inserted,
+ updated or selected
+
+ */
+
+
+
+
+
+
+
+/* ------------------------------------------- */
+/* Get 8.0 OCI environment handle from SQLLIB */
+/* ------------------------------------------- */
+
+sword SQLEnvGet(/*_ dvoid *rctx, OCIEnv **oeh _*/);
+/*
+ NAME: SQLEnvGet - SQLLIB Get Environment from the Runtime Context
+
+ PARAMETERS:
+ rctx (IN): pointer to a sqllib runtime context
+ oeh (IN/OUT): OCIEnv ptr
+
+ DESCRIPTION:
+ Sets oeh to the OCIEnv corresponding to the runtime context.
+
+ RETURNS:
+ status - SQL_SUCCESS on success, SQL_ERROR on failure.
+
+ */
+
+/* ---------------------------------------------- */
+
+/* Get 8.0 OCI Service Context for a database connection in Pro*C */
+
+/* non-threaded, no Pro*C runtime context */
+sword SQLSvcCtxGet(/*_ dvoid *rctx, text *dbname, sb4 dbnamelen,
+ OCISvcCtx **svc _*/);
+/*
+ NAME: SQLSvcCtxGet - SQLLIB Service Context Get
+
+ PARAMETERS:
+ rctx (IN): pointer to a sqllib runtime context
+ dbname (IN): buffer containing the "logical" name for this connection.
+ dbnamelen (IN): length of the dbname buffer
+ svc (IN/OUT): address of an OCISvcCtx ptr
+
+ DESCRIPTION:
+ Sets svc to the OCI Service Context corresponding to the runtime context.
+
+ RETURNS:
+ status - SQL_SUCCESS on success, SQL_ERROR on failure.
+
+ NOTES:
+ 'dbname' is the buffer containing the "logical" name for this connection.
+ This would be the same identifier used in an AT clause in an embedded
+ SQL statement.
+
+ 'dbnamelen' is the length of buffer containing dbname.
+
+ If dbname is a NULL ptr or dbnamelen is 0, then the "default" database
+ connection is assumed (as in a SQL statement with no AT clause).
+
+ A value of -1 for dbnamelen can be used to indicate that dbname
+ is a NULL-terminated string.
+
+ */
+
+#endif /* k&r style - non-ANSI code */
+
+#endif /* SQL2OCI_ORACLE */
--- /dev/null
+/*
+ * $Header: sqlapr.h 08-may-2002.12:13:40 apopat Exp $
+ */
+
+/* Copyright (c) 1994, 2002, Oracle Corporation. All rights reserved. */
+/*
+ NAME
+ sqlapr.h - SQLlib ANSI PRototypes
+ DESCRIPTION
+ Defines ANSI prototypes for externalized SQLLIB functions used in
+ conjunction with OCI
+ PUBLIC FUNCTION(S)
+ sqllda: Get Logon Data Area for connection
+ sqlld2: Logon Data area form 2 -- with host name
+ sqlcda: Cursor data area from result set cursor
+ sqlcur: PCC cursor from cursor data area
+
+ NOTES
+
+ MODIFIED (MM/DD/YY)
+ apopat 05/08/02 - [2362423] MVS PE to make lines shorter than 79
+ apopat 09/20/00 - [1356099] Clarification on use of sqllda
+ lvbcheng 01/16/97 - Fix for b2
+ jbasu 02/08/95 - Add new prototypes for thread entry pts
+ jbasu 09/21/94 - Update sqlcda,sqlcur; move sqlrcn,sqlfcn to sqlefn.h
+ jbasu 09/13/94 - Move XA prototypes to sqlefn.h
+ jbasu 08/16/94 - use OCI cda_def type from ocidfn.h instead of sqlold
+ jbasu 08/16/94 - Creation
+*/
+
+#ifndef SQLAPR
+# define SQLAPR
+
+#ifndef OCIDFN
+# include <ocidfn.h>
+#endif
+
+#define SQLLDAGetCurrent(arg1, arg2) sqlldat(arg1, arg2)
+
+void sqllda( Lda_Def *lda );
+ /* LDA version 1. Creates an lda for use in OCI programs.
+ ** Assumes that we are logged on through an embedded SQL statement.
+ ** The lda is filled in using the connect information from the most
+ ** recently executed embedded SQL statement. So the ONLY way to use
+ ** sqllda() is to call sqllda() immediately after the
+ ** EXEC SQL CONNECT... statement.
+ */
+
+void sqlldat(dvoid *sqluga, Lda_Def *lda );
+ /* Thread-safe version of sqllda. Takes an extra parameter sqluga, which
+ * is the SQLLIB runtime context.
+ */
+
+/* **************************************************************************/
+/* ** SQLLD2 ** "sqlld2" is an extended version of */
+/* the sqllda function used to pass a connection to OCI. */
+/* "sqlld2" can be used at any time to set up an "lda" for use */
+/* by OCI. It does not need to called immediately after a SQL */
+/* statement using the particular connection (typically the */
+/* CONNECT itself). */
+/****************************************************************************/
+
+#define SQLDAGetNamed(arg1, arg2, arg3, arg4) sqlld2t(arg1, arg2, arg3, arg4)
+
+void sqlld2( Lda_Def *lda, text *hname, sb4 *hnamel );
+ /* LDa version 2. Creates an lda for use in OCI programs. The difference
+ ** between sqlld2 and sqllda is that sqlld2 allows specification of
+ ** the database host name to determine the connection to use in
+ ** establishing the lda.
+ ** hname - buffer containing the "logical" name for this connection. This
+ ** would be the same identifier used in an AT clause in an
+ ** embedded SQL statement. A null ptr indicates the "default"
+ ** database used when there is no AT clause in a SQL statement.
+ ** hnamel - length of buffer containing hname.
+ */
+
+void sqlld2t( dvoid *sqluga, Lda_Def *lda, text *hname, sb4 *hnamel );
+ /* Thread-safe version of sqlld2. Takes an extra parameter sqluga, which
+ * is the SQLLIB runtime context.
+ */
+
+#define SQLCDAFromResultSetCursor(arg1, arg2, arg3, arg4) \
+ sqlcdat(arg1, arg2, arg3, arg4)
+
+void sqlcda( Cda_Def *cda, dvoid *cur, sword *retval );
+/*
+ * Name: sqlcda() - SQLlib result set cursor to a Cursor Data Area in OCI
+ * Description: Translates a result set cursor in SQLLIB to a cursor data area
+ * in OCI. Both of these structs should have been previously
+ * created/allocated.
+ * Input : cur - pointer to a result set cursor struct allocated thru Pro*
+ * Output : cda - pointer to destination cursor data area in OCI
+ * retval- Return value: 0 if no error,SQLLIB error number otherwise
+ *
+ * Notes: 1. In case of an error, the v2_rc and rc fields of the cda are
+ * populated with the negative and positive error codes respectively.
+ * 2. The 'rows processed count' in the cda structure is NOT populated
+ * in this routine. This field is set to the correct value only
+ * AFTER a fetch is done in OCI using the cda. Same
+ * comment applies to other cda fields like the function type.
+ * ===========================================================================
+ */
+void sqlcdat(dvoid *sqluga, Cda_Def *cda, dvoid *cur, sword *retval );
+ /* Thread-safe version of sqlcda(). Takes an extra parameter sqluga, which
+ * is the SQLLIB runtime context.
+ */
+
+#define SQLCDAToResultSetCursor(SQL_SINGLE_RCTX, arg1, arg2, arg3) \
+ sqlcurt(arg1, arg2, arg3, arg4)
+
+void sqlcur( dvoid *cur, Cda_Def *cda, sword *retval );
+/*
+ * Name: sqlcur() - SQLlib result set CURsor from an oci cursor data area
+ * Description: Translates a cursor data area in OCI to a result set cursor
+ * in SQLLIB. Both of these structs should have been previously
+ * created/allocated.
+ * Input : cda - pointer to a cursor data area in OCI
+ * Output : cur - pointer to a result set cursor struct (previously
+ * allocated thru PCC)
+ * retval - Return value: 0 if no error, error code otherwise.
+ * Notes : The sqlca structure for PCC is NOT updated by this routine. This
+ * structure gets populated (with error code, rows fetched count etc)
+ * only AFTER a database operation is performed through PCC using the
+ * translated cursor.
+ *============================================================================
+ */
+void sqlcurt(dvoid *sqluga, dvoid *cur, Cda_Def *cda, sword *retval );
+ /* Thread-safe version of sqlcur(). Takes an extra parameter sqluga, which
+ * is the SQLLIB runtime context.
+ */
+
+#endif /* SQLAPR */
--- /dev/null
+/*
+ * $Header: sqlca.h 24-apr-2003.12:50:58 mkandarp Exp $ sqlca.h
+ */
+
+/* Copyright (c) 1985, 2003, Oracle Corporation. All rights reserved. */
+
+/*
+NAME
+ SQLCA : SQL Communications Area.
+FUNCTION
+ Contains no code. Oracle fills in the SQLCA with status info
+ during the execution of a SQL stmt.
+NOTES
+ **************************************************************
+ *** ***
+ *** This file is SOSD. Porters must change the data types ***
+ *** appropriately on their platform. See notes/pcport.doc ***
+ *** for more information. ***
+ *** ***
+ **************************************************************
+
+ If the symbol SQLCA_STORAGE_CLASS is defined, then the SQLCA
+ will be defined to have this storage class. For example:
+
+ #define SQLCA_STORAGE_CLASS extern
+
+ will define the SQLCA as an extern.
+
+ If the symbol SQLCA_INIT is defined, then the SQLCA will be
+ statically initialized. Although this is not necessary in order
+ to use the SQLCA, it is a good pgming practice not to have
+ unitialized variables. However, some C compilers/OS's don't
+ allow automatic variables to be init'd in this manner. Therefore,
+ if you are INCLUDE'ing the SQLCA in a place where it would be
+ an automatic AND your C compiler/OS doesn't allow this style
+ of initialization, then SQLCA_INIT should be left undefined --
+ all others can define SQLCA_INIT if they wish.
+
+ If the symbol SQLCA_NONE is defined, then the SQLCA variable will
+ not be defined at all. The symbol SQLCA_NONE should not be defined
+ in source modules that have embedded SQL. However, source modules
+ that have no embedded SQL, but need to manipulate a sqlca struct
+ passed in as a parameter, can set the SQLCA_NONE symbol to avoid
+ creation of an extraneous sqlca variable.
+
+MODIFIED
+ lvbcheng 07/31/98 - long to int
+ jbasu 12/12/94 - Bug 217878: note this is an SOSD file
+ losborne 08/11/92 - No sqlca var if SQLCA_NONE macro set
+ Clare 12/06/84 - Ch SQLCA to not be an extern.
+ Clare 10/21/85 - Add initialization.
+ Bradbury 01/05/86 - Only initialize when SQLCA_INIT set
+ Clare 06/12/86 - Add SQLCA_STORAGE_CLASS option.
+*/
+
+#ifndef SQLCA
+#define SQLCA 1
+
+struct sqlca
+ {
+ /* ub1 */ char sqlcaid[8];
+ /* b4 */ int sqlabc;
+ /* b4 */ int sqlcode;
+ struct
+ {
+ /* ub2 */ unsigned short sqlerrml;
+ /* ub1 */ char sqlerrmc[70];
+ } sqlerrm;
+ /* ub1 */ char sqlerrp[8];
+ /* b4 */ int sqlerrd[6];
+ /* ub1 */ char sqlwarn[8];
+ /* ub1 */ char sqlext[8];
+ };
+
+#ifndef SQLCA_NONE
+#ifdef SQLCA_STORAGE_CLASS
+SQLCA_STORAGE_CLASS struct sqlca sqlca
+#else
+ struct sqlca sqlca
+#endif
+
+#ifdef SQLCA_INIT
+ = {
+ {'S', 'Q', 'L', 'C', 'A', ' ', ' ', ' '},
+ sizeof(struct sqlca),
+ 0,
+ { 0, {0}},
+ {'N', 'O', 'T', ' ', 'S', 'E', 'T', ' '},
+ {0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0}
+ }
+#endif
+ ;
+#endif
+
+#endif
+
+/* end SQLCA */
--- /dev/null
+/*
+ * $Header: sqlcpr.h 28-dec-2005.15:32:23 apopat Exp $
+ */
+
+/* Copyright (c) 1988, 2005, Oracle. All rights reserved. */
+
+/* NAME
+ sqlcpr.h
+ FUNCTION
+ Contains 'customer' prototypes for the sql* routines generated by the
+ precompiler.
+ sqlald, sqlglm, sqlnul and sqlprc are included because, although we don't
+ generate calls to them, users may include calls to them.
+
+ 'customer' prototypes for dynamic method 4 (i.e., sqlda) reside
+ in the sqlda.h public header file.
+
+ NOTES
+ There should be no 'modified' notes in this file when it goes to the
+ customer. Remove them as they are put in. */
+
+#ifndef SQLCA
+# include <sqlca.h>
+#endif
+#ifndef ORACA
+# include <oraca.h>
+#endif
+
+#ifndef SQLPRO
+# define SQLPRO
+
+/* -------------------- */
+/* defines for sqlcpr.h */
+/* -------------------- */
+
+#define SQL_SUCCESS (sword)0
+#define SQL_ERROR (sword)-1
+
+#ifndef SQL_SINGLE_RCTX
+#define SQL_SINGLE_RCTX (dvoid *)0
+#endif /* SQL_SINGLE_RCTX */
+
+#define SQLErrorGetText(arg1, arg2, arg3, arg4) sqlglmt(arg1, arg2, arg3, arg4)
+
+#define SQLStmtGetText(arg1, arg2, arg3, arg4) sqlglst(arg1, arg2, arg3, arg4)
+
+#define SQLColumnNullCheck(arg1, arg2, arg3, arg4) \
+ sqlnult(arg1, arg2, arg3, arg4)
+
+#define SQLNumberPrecV6(arg1, arg2, arg3, arg4) sqlprct(arg1, arg2, arg3, arg4)
+
+#define SQLNumberPrecv7(arg1, arg2, arg3, arg4) sqlpr2t(arg1, arg2, arg3, arg4)
+
+#define SQLVarcharGetLength(arg1, arg2, arg3) sqlvcpt(arg1, arg2, arg3)
+
+#define SQLGetStride(arg1, arg2, arg3, arg4) sqlstrdt(arg1, arg2, arg3, arg4)
+
+#if defined (__STDC__) || defined (__cplusplus)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* user-callable functions - non-threaded */
+/* -------------------------------------- */
+
+extern void sqlglm( unsigned char*, size_t*, size_t* );
+extern void sqlgls( char*, size_t*, size_t* );
+extern void sqliem( unsigned char*, signed int* );
+extern void sqlnul( unsigned short*, unsigned short*, int* );
+extern void sqlprc( unsigned int*, int*, int* );
+extern void sqlpr2( unsigned int*, int*, int*);
+extern void sqlvcp( unsigned int*, unsigned int* );
+
+/* user-callable functions -- thread safe */
+/* -------------------------------------- */
+
+extern void sqlglmt( void*, unsigned char*, size_t*, size_t* );
+
+extern void sqlglst( void*, char*, size_t*, size_t* );
+
+extern void sqliemt( void*, unsigned char*, signed int*);
+
+extern void sqlnult( void*, unsigned short*, unsigned short*, int*);
+
+extern void sqlpr2t( void*, unsigned int*, int*, int*);
+
+extern void sqlprct( void*, unsigned int*, int*, int*);
+
+extern void sqlvcpt( void*, unsigned int*, unsigned int*);
+
+extern void SQLExtProcError( void*, char*, size_t );
+
+/* Removed generated Pro* 1.3 entry points */
+/* --------------------------------------- */
+
+/* Forms 3.0 compatibility functions */
+/* --------------------------------- */
+
+extern int iapprs( unsigned char* );
+extern int iappfo( unsigned char*, unsigned char*, size_t );
+extern int exiterr( unsigned char* );
+
+/* user-callable functions - non-threaded */
+/* -------------------------------------- */
+
+extern struct SQLDA *sqlald( int, size_t, size_t );
+extern void sqlclu( struct SQLDA*);
+
+/* user-callable functions -- thread safe */
+/* -------------------------------------- */
+
+extern struct SQLDA *sqlaldt( void*, int, size_t, size_t );
+
+extern void sqlclut( void*, struct SQLDA*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#else /* k&r C - not ANSI standard */
+
+
+/* user-callable functions - non-threaded */
+/* -------------------------------------- */
+
+extern void sqlglm( /*_ char*, size_t*, size_t* _*/ );
+extern void sqlgls( /*_ char*, size_t*, size_t* _*/);
+extern void sqliem( /*_ char*, int* _*/ );
+extern void sqlnul( /*_ unsigned short*, unsigned short*, int* _*/ );
+extern void sqlprc( /*_ unsigned int*, int*, int* _*/ );
+extern void sqlpr2( /*_ unsigned int*, int*, int* _*/);
+extern void sqlvcp( /*_ unsigned int *, unsigned int * _*/);
+extern void sqlstrd(/*_ ub1 *, ub1 *, size_t _*/);
+
+/* user-callable functions -- thread safe */
+/* -------------------------------------- */
+
+extern void sqlglmt(/*_ void*, char*, size_t*, size_t* _*/ );
+
+extern void sqlglst(/*_ void*, char*, size_t*, size_t* _*/);
+
+extern void sqliemt(/*_ void*, char*, int* _*/ );
+
+extern void sqlnult(/*_ void*, unsigned short*, unsigned short*, int* _*/ );
+
+extern void sqlprct(/*_ void*, unsigned int*, int*, int* _*/ );
+
+extern void sqlpr2t(/*_ void*, unsigned int*, int*, int* _*/);
+
+extern void sqlvcpt(/*_ void*, unsigned int *, unsigned int * _*/);
+
+extern void sqlstrdt(/*_ void *, ub1 *, ub1 *, size_t _*/);
+
+extern void SQLExtProcError(/*_ void*, char*, size_t _*/);
+
+extern void SQLRowidGet(/*_ void*, OCIRowid **urid _*/);
+
+/* Removed generated Pro* 1.3 entry points */
+/* --------------------------------------- */
+
+
+/* Forms 3.0 compatibility functions */
+/* --------------------------------- */
+
+extern int iapprs( /*_ char* _*/ );
+extern int iappfo( /*_ char*, char*, unsigned int _*/ );
+extern int exiterr( /*_ char* _*/ );
+
+/* user-callable functions - non-threaded */
+/* -------------------------------------- */
+
+extern struct SQLDA *sqlald( /*_ int, size_t, size_t _*/ );
+extern void sqlclu( /*_ struct SQLDA* _*/);
+
+/* user-callable functions -- thread safe */
+/* -------------------------------------- */
+
+extern struct SQLDA *sqlaldt(/*_ void*, int, size_t, size_t _*/ );
+extern void sqlclut(/*_ void*, struct SQLDA* _*/);
+
+#endif /* k&r C - not ANSI standard */
+
+#endif /* SQLPRO */
--- /dev/null
+/*
+ * $Header: sqlda.h 08-may-2007.05:58:33 ardesai Exp $ sqlda.h
+ */
+
+/***************************************************************
+* The SQLDA descriptor definition *
+*--------------------------------------------------------------*
+* VAX/3B Version *
+* *
+* Copyright (c) 1987, 2007, Oracle. All rights reserved. *
+***************************************************************/
+
+
+/* NOTES
+ **************************************************************
+ *** ***
+ *** This file is SOSD. Porters must change the data types ***
+ *** appropriately on their platform. See notes/pcport.doc ***
+ *** for more information. ***
+ *** ***
+ **************************************************************
+*/
+
+/* MODIFIED
+ ardesai 05/08/07 - Bug[6037057] Undef Y
+ apopat 05/08/02 - [2362423] MVS PE to make lines shorter than 79
+ apopat 07/31/99 - [707588] TAB to blanks for OCCS
+ lvbcheng 10/27/98 - change long to int for sqlda
+ lvbcheng 08/15/97 - Move sqlda protos to sqlcpr.h
+ lvbcheng 06/25/97 - Move sqlda protos to this file
+ jbasu 01/29/95 - correct typo
+ jbasu 01/27/95 - correct comment - ub2->sb2
+ jbasu 12/12/94 - Bug 217878: note this is an SOSD file
+ Morse 12/01/87 - undef L and S for v6 include files
+ Richey 07/13/87 - change int defs to long
+ Clare 09/13/84 - Port: Ch types to match SQLLIB structs
+ Clare 10/02/86 - Add ifndef SQLDA
+*/
+
+#ifndef SQLDA_
+#define SQLDA_ 1
+
+#ifdef T
+# undef T
+#endif
+#ifdef F
+# undef F
+#endif
+
+#ifdef S
+# undef S
+#endif
+#ifdef L
+# undef L
+#endif
+
+#ifdef Y
+ # undef Y
+#endif
+
+struct SQLDA {
+ /* ub4 */ int N; /* Descriptor size in number of entries */
+ /* text** */ char **V; /* Ptr to Arr of addresses of main variables */
+ /* ub4* */ int *L; /* Ptr to Arr of lengths of buffers */
+ /* sb2* */ short *T; /* Ptr to Arr of types of buffers */
+ /* sb2** */ short **I; /* Ptr to Arr of addresses of indicator vars */
+ /* sb4 */ int F; /* Number of variables found by DESCRIBE */
+ /* text** */ char **S; /* Ptr to Arr of variable name pointers */
+ /* ub2* */ short *M; /* Ptr to Arr of max lengths of var. names */
+ /* ub2* */ short *C; /* Ptr to Arr of current lengths of var. names */
+ /* text** */ char **X; /* Ptr to Arr of ind. var. name pointers */
+ /* ub2* */ short *Y; /* Ptr to Arr of max lengths of ind. var. names*/
+ /* ub2* */ short *Z; /* Ptr to Arr of cur lengths of ind. var. names*/
+ };
+
+typedef struct SQLDA SQLDA;
+
+#endif
+
+/* ----------------- */
+/* defines for sqlda */
+/* ----------------- */
+
+#define SQLSQLDAAlloc(arg1, arg2, arg3, arg4) sqlaldt(arg1, arg2, arg3, arg4)
+
+#define SQLSQLDAFree(arg1, arg2) sqlclut(arg1, arg2)
+
+
+
--- /dev/null
+/*
+ * $Header: sqlkpr.h 25-aug-2005.21:32:24 subanerj Exp $
+ */
+
+/* Copyright (c) 1994, 2005, Oracle. All rights reserved. */
+/*
+ NAME
+ sqlkpr.h - SQLlib K&R PRototypes
+ DESCRIPTION
+ Defines k&r prototypes for externalized SQLLIB functions used in
+ conjunction with OCI
+ PUBLIC FUNCTION(S)
+ sqllda: Get Logon Data Area for connection
+ sqlld2: Logon Data area form 2 -- with host name
+ sqlcda: Cursor data area from result set cursor
+ sqlcur: PCC cursor from cursor data area
+
+ NOTES
+
+ MODIFIED (MM/DD/YY)
+ subanerj 08/25/05 - ANSI prototypes; miscellaneous cleanup
+ apopat 05/08/02 - [2362423] MVS PE to make lines shorter than 79
+ apopat 09/20/00 - [1356099] Clarification on use of sqllda
+ lvbcheng 01/16/97 - Fix for b2
+ jbasu 02/08/95 - Add prototypes for new thread entry pts
+ jbasu 09/21/94 - Update sqlcda,sqlcur; move sqlrcn,sqlfcn to sqlefn.h
+ jbasu 09/13/94 - Move XA prototypes to sqlefn.h
+ jbasu 08/16/94 - use OCI cda_def type from ocidfn.h instead of sqlold
+ jbasu 08/16/94 - Creation
+*/
+
+#ifndef SQLKPR
+# define SQLKPR
+
+#ifndef OCIDFN
+# include <ocidfn.h>
+#endif
+
+#define SQLLDAGetCurrent(arg1, arg2) sqlldat(arg1, arg2)
+
+void sqllda(Lda_Def *lda);
+ /* LDA version 1. Creates an lda for use in OCI programs.
+ ** Assumes that we are logged on through an embedded SQL statement.
+ ** The lda is filled in using the connect information from the most
+ ** recently executed embedded SQL statement. So the ONLY way to use
+ ** sqllda() is to call sqllda() immediately after the
+ ** EXEC SQL CONNECT... statement.
+ */
+
+
+void sqlldat(dvoid *sqluga, Lda_Def *lda);
+ /* Thread-safe version of sqllda. Takes an extra parameter sqluga, which is
+ * the SQLLIB runtime context.
+ */
+
+/* **************************************************************************/
+/* ** SQLLD2 ** "sqlld2" is an extended version of */
+/* the sqllda function used to pass a connection to OCI. */
+/* "sqlld2" can be used at any time to set up an "lda" for use */
+/* by OCI. It does not need to called immediately after a SQL */
+/* statement using the particular connection (typically the */
+/* CONNECT itself). */
+/****************************************************************************/
+
+#define SQLDAGetNamed(arg1, arg2, arg3, arg4) sqlld2t(arg1, arg2, arg3, arg4)
+
+void sqlld2(Lda_Def *lda, text *hname, sb4 *hnamel);
+ /* LDa version 2. Creates an lda for use in OCI programs. The difference
+ ** between sqlld2 and sqllda is that sqlld2 allows specification of
+ ** the database host name to determine the connection to use in
+ ** establishing the lda.
+ ** hname - buffer containing the "logical" name for this connection. This
+ ** would be the same identifier used in an AT clause in an
+ ** embedded SQL statement. A null ptr indicates the "default"
+ ** database used when there is no AT clause in a SQL statement.
+ ** hnamel - length of buffer containing hname.
+ */
+
+void sqlld2t(dvoid *sqluga, Lda_Def *lda, text *hname, sb4 *hnamel);
+ /* Thread-safe version of sqlld2. Takes an extra parameter sqluga, which is
+ * the SQLLIB runtime context.
+ */
+
+#define SQLCDAFromResultSetCursor(arg1, arg2, arg3, arg4) \
+ sqlcdat(arg1, arg2, arg3, arg4)
+
+void sqlcda(/*_ Cda_Def *cda, dvoid *cur, sword *retval _*/);
+/*
+ * Name: sqlcda() - SQLlib result set cursor to a Cursor Data Area in OCI
+ * Description: Translates a result set cursor in SQLLIB to a cursor data area
+ * in OCI. Both of these structs should have been previously
+ * created/allocated.
+ * Input : cur -pointer to a result set cursor struct allocated thru Pro*
+ * Output : cda -pointer to destination cursor data area in OCI
+ * retval -Return value: 0 if no error,SQLLIB error number otherwise
+ *
+ * Notes: 1.In case of an error, the v2_rc and rc fields of the cda are
+ * populated with the negative and positive error codes respectively.
+ * 2.The 'rows processed count' in the cda structure is NOT populated
+ * in this routine. This field is set to the correct value only
+ * AFTER a fetch is done in OCI using the cda. Same
+ * comment applies to other cda fields like the function type.
+ * ===========================================================================
+ */
+void sqlcdat(/*_ dvoid *sqluga, Cda_Def *cda, dvoid *cur, sword *retval _*/);
+ /* Thread-safe version of sqlcda(). Takes an extra parameter sqluga, which
+ * is the SQLLIB runtime context.
+ */
+
+#define SQLCDAToResultSetCursor(SQL_SINGLE_RCTX, arg1, arg2, arg3) \
+ sqlcurt(arg1, arg2, arg3, arg4)
+
+void sqlcur(/*_ dvoid *cur, Cda_Def *cda, sword *retval _*/);
+/*
+ * Name: sqlcur() - SQLlib result set CURsor from an oci cursor data area
+ * Description: Translates a cursor data area in OCI to a result set cursor
+ * in SQLLIB. Both of these structs should have been previously
+ * created/allocated.
+ * Input : cda - pointer to a cursor data area in OCI
+ * Output : cur - pointer to a result set cursor struct (previously
+ * allocated thru PCC)
+ * retval - Return value: 0 if no error, error code otherwise.
+ * Notes :The sqlca structure for PCC is NOT updated by this routine. This
+ * structure gets populated (with error code, rows fetched count etc)
+ * only AFTER a database operation is performed through PCC using the
+ * translated cursor.
+ *============================================================================
+ */
+void sqlcurt(/*_ dvoid *sqluga, dvoid *cur, Cda_Def *cda, sword *retval _*/);
+ /* Thread-safe version of sqlcur(). Takes an extra parameter sqluga, which
+ * is the SQLLIB runtime context.
+ */
+
+#endif /* SQLKPR */
--- /dev/null
+/*
+ORACLE, Copyright (c) 1998, 2000 ORACLE Corporation
+ORACLE Utilities, Copyright (c) 1981, 1982, 1983, 1986, 1990, 1991,, 1998, 2000 1995,
+ 1998 ORACLE Corp
+
+Restricted Rights
+This program is an unpublished work under the Copyright Act of the
+United States and is subject to the terms and conditions stated in
+your license agreement with ORACORP including retrictions on
+use, duplication, and disclosure.
+
+Certain uncopyrighted ideas and concepts are also contained herein.
+These are trade secrets of ORACORP and cannot be used except in
+accordance with the written permission of ORACLE Corporation.
+*/
+
+#ifndef SQLUCS2_ORACLE
+#define SQLUCS2_ORACLE
+
+#ifndef ORATYPES
+# ifndef S_ORACLE
+# include <oratypes.h>
+# endif /* S_ORACLE */
+#endif /* ORATYPES */
+
+struct uvarchar {ub2 len; utext arr[1];};
+typedef struct uvarchar uvarchar;
+
+struct ulong_varchar {ub4 len; utext arr[1];};
+typedef struct ulong_varchar ulong_varchar;
+
+#endif /* SQLUCS2_ORACLE */
--- /dev/null
+/* Copyright (c) 1992, 2006, Oracle. All rights reserved. */
+
+/*
+ NAME
+ xa.h - <one-line expansion of the name>
+ DESCRIPTION
+ <short description of component this file declares/defines>
+ PUBLIC FUNCTION(S)
+ <list of external functions declared/defined - with one-line descriptions>
+ PRIVATE FUNCTION(S)
+ <list of static functions defined in .c file - with one-line descriptions>
+ RETURNS
+ <function return values, for .c file with single function>
+ NOTES
+ <other useful comments, qualifications, etc.>
+
+ This is the public XA .h file
+
+ MODIFIED (MM/DD/YY)
+ yohu 08/27/06 - XA/RAC project changes: XAER_AFFINITY
+ dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
+ whe 09/01/99 - 976457:check __cplusplus for C++ code
+ ntang 10/20/98 - Remove TMCACHE & TMFORCL
+ abhide 08/04/97 - implement xaoforcl
+ abhide 07/23/97 - XA OTS project changes
+ schandra 02/20/96 - lint
+ abhide 04/07/94 - merge changes from branch 1.1.710.1
+ abhide 02/14/94 - Creation
+ abhide 02/10/94 - Creation
+ abhide 02/10/94 - Creation
+*/
+/*
+ * xa.h header
+ * Typed in from X/Open doc of March 13, 1990
+ * Updated to Parsippany II draft, March, 1991
+ * Updated to Co Review draft, 19 Sep 1991
+ */
+
+#ifndef XA_H
+#define XA_H
+
+
+/*
+ * Transaction branch identification: XID and NULLXID:
+ */
+
+
+#define XIDDATASIZE 128 /* size in bytes */
+#define MAXGTRIDSIZE 64 /* maximum size in bytes of gtrid */
+#define MAXBQUALSIZE 64 /* maximum size in bytes of bqual */
+struct xid_t {
+ long formatID; /* format identifier */
+ long gtrid_length; /* value from 1 through 64 */
+ long bqual_length; /* value from 1 through 64 */
+ char data[XIDDATASIZE];
+};
+typedef struct xid_t XID;
+
+/*
+ * A value of -1 in formatID means that the XID is null.
+ */
+/*
+ * Declarations of routines by which RMs call TMs:
+ */
+
+int ax_reg(int, XID *, long);
+int ax_unreg(int, long);
+/*
+ * XA Switch Data Structure
+ */
+#define RMNAMESZ 32 /* length of resource manager name, */
+ /* including the null terminator */
+#define MAXINFOSIZE 256 /* maximum size in bytes of xa_info strings, */
+ /* including the null terminator */
+struct xa_switch_t {
+ char name[RMNAMESZ]; /* name of resource manager */
+ long flags; /* resource manager specific options */
+ long version; /* must be 0 */
+
+ int (*xa_open_entry)(char *, int, long); /*xa_open function pointer*/
+ int (*xa_close_entry)(char *, int, long); /*xa_close function pointer*/
+ int (*xa_start_entry)(XID *, int, long); /*xa_start function pointer*/
+ int (*xa_end_entry)(XID *, int, long); /*xa_end function pointer*/
+ int (*xa_rollback_entry)(XID *, int, long);
+ /*xa_rollback function pointer*/
+ int (*xa_prepare_entry)(XID *, int, long); /*xa_prepare function pointer*/
+ int (*xa_commit_entry)(XID *, int, long); /*xa_commit function pointer*/
+ int (*xa_recover_entry)(XID *, long, int, long);
+ /*xa_recover function pointer*/
+ int (*xa_forget_entry)(XID *, int, long); /*xa_forget function pointer*/
+ int (*xa_complete_entry)(int *, int *, int, long);
+};
+
+/*
+ * Flag definition for the RM switch
+ */
+#define TMNOFLAGS 0x00000000L /* no resource manager features
+ selected */
+#define TMREGISTER 0x00000001L /* resource manager dynamically
+ registers */
+#define TMNOMIGRATE 0x00000002L /* resource manager does not support
+ association migration */
+#define TMUSEASYNC 0x00000004L /* resource manager supports
+ asynchronous operations */
+/*
+ * Flag definitions for xa_ and ax_ routines
+ */
+/* Use TMNOFLAGS, defined above, when not specifying other flags */
+#define TMASYNC 0x80000000L /* perform routine asynchronously */
+#define TMONEPHASE 0x40000000L /* caller is using one-phase commit
+ optimisation */
+#define TMFAIL 0x20000000L /* dissociates caller and marks
+ transaction branch rollback-only */
+#define TMNOWAIT 0x10000000L /* return if blocking condition
+ exists */
+#define TMRESUME 0x08000000L /* caller is resuming association
+ with suspended transaction branch */
+#define TMSUCCESS 0x04000000L /* dissociate caller from transaction
+ branch */
+#define TMSUSPEND 0x02000000L /* caller is suspending, not ending,
+ association */
+#define TMSTARTRSCAN 0x01000000L /* start a recovery scan */
+#define TMENDRSCAN 0x00800000L /* end a recovery scan */
+#define TMMULTIPLE 0x00400000L /* wait for any asynchronous
+ operation */
+#define TMJOIN 0x00200000L /* caller is joining existing
+ transaction branch */
+#define TMMIGRATE 0x00100000L /* caller intends to perform
+ migration */
+
+/*
+ * ax_() return codes (transaction manager reports to resource manager)
+ */
+#define TM_JOIN 2 /* caller is joining existing transaction
+ branch */
+#define TM_RESUME 1 /* caller is resuming association with
+ suspended transaction branch */
+#define TM_OK 0 /* normal execution */
+#define TMER_TMERR -1 /* an error occurred in the transaction
+ manager */
+#define TMER_INVAL -2 /* invalid arguments were given */
+#define TMER_PROTO -3 /* routine invoked in an improper context */
+
+/*
+ * xa_() return codes (resource manager reports to transaction manager)
+ */
+#define XA_RBBASE 100 /* The inclusive lower bound of the
+ rollback codes */
+#define XA_RBROLLBACK XA_RBBASE /* The rollback was caused by an
+ unspecified reason */
+#define XA_RBCOMMFAIL XA_RBBASE+1 /* The rollback was caused by a
+ communication failure */
+#define XA_RBDEADLOCK XA_RBBASE+2 /* A deadlock was detected */
+#define XA_RBINTEGRITY XA_RBBASE+3 /* A condition that violates the
+ integrity of the resources was
+ detected */
+#define XA_RBOTHER XA_RBBASE+4 /* The resource manager rolled back the
+ transaction for a reason not on this
+ list */
+#define XA_RBPROTO XA_RBBASE+5 /* A protocal error occurred in the
+ resource manager */
+#define XA_RBTIMEOUT XA_RBBASE+6 /* A transaction branch took too long*/
+#define XA_RBTRANSIENT XA_RBBASE+7 /* May retry the transaction branch */
+#define XA_RBEND XA_RBTRANSIENT /* The inclusive upper bound of the
+ rollback codes */
+
+#define XA_NOMIGRATE 9 /* resumption must occur where
+ suspension occurred */
+#define XA_HEURHAZ 8 /* the transaction branch may have been
+ heuristically completed */
+#define XA_HEURCOM 7 /* the transaction branch has been
+ heuristically comitted */
+#define XA_HEURRB 6 /* the transaction branch has been
+ heuristically rolled back */
+#define XA_HEURMIX 5 /* the transaction branch has been
+ heuristically committed and rolled
+ back */
+#define XA_RETRY 4 /* routine returned with no effect
+ and may be re-issued */
+#define XA_RDONLY 3 /* the transaction was read-only
+ and has been committed */
+#define XA_OK 0 /* normal execution */
+#define XAER_ASYNC -2 /* asynchronous operation already
+ outstanding */
+#define XAER_RMERR -3 /* a resource manager error occurred
+ in the transaction branch */
+#define XAER_NOTA -4 /* the XID is not valid */
+#define XAER_INVAL -5 /* invalid arguments were given */
+#define XAER_PROTO -6 /* routine invoked in an improper
+ context */
+#define XAER_RMFAIL -7 /* resource manager unavailable */
+#define XAER_DUPID -8 /* the XID already exists */
+#define XAER_OUTSIDE -9 /* resource manager doing work */
+ /* outside global transaction */
+
+#define XAER_AFFINITY -10 /* XA on RAC: resumption must occur on
+ RAC instance where the transaction
+ branch was created */
+
+#endif /* ifndef XA_H */
--- /dev/null
+#! /bin/sh
+# Script for running ott in instant client.
+# Before running this script:
+# set jdk1.5/bin in your PATH
+# set LD_LIBRARY_PATH to include the directory containing the instant client
+# libraries
+# set ottclasses.zip, ojdbc5.jar, orai18n.jar as part of your CLASSPATH
+
+OS=`uname`
+MACHINE=`uname -m`
+JREOPTIONS=
+
+if [ "$OS" = "HP-UX" ]; then
+ if [ "$MACHINE" = "ia64" -o "$MACHINE" = "9000/800" ]; then
+ JREOPTIONS=-d64
+ fi
+fi
+if [ "$OS" = "SunOS" ]; then
+ if [ "$MACHINE" = "sun4u" -o "$MACHINE" = "sun4v" ]; then
+ JREOPTIONS=-d64
+ fi
+fi
+
+while [ $# -gt 0 ]
+do
+ case $1 in
+ user*)
+ OTTUSER="$OTTUSER $1"
+ export OTTUSER ;;
+ *)
+ args="$args $1";;
+ esac
+shift
+done
+
+exec java $JREOPTIONS oracle.ott.c.CMain nlslang=${NLS_LANG} $args