增加instant client for osx 64位版本
diff --git a/sdk/include/ori.h b/sdk/include/ori.h
new file mode 100644
index 0000000..60ea1b9
--- /dev/null
+++ b/sdk/include/ori.h
@@ -0,0 +1,2095 @@
+/* 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 */