Files correlati : Commento : - Creazione nuova cartella per contenere tutte le librerie esterne - Aggiunta nuova libreria sqlapi per interfacciare campo a vari DB git-svn-id: svn://10.65.10.50/branches/R_10_00@24149 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			2096 lines
		
	
	
		
			102 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			2096 lines
		
	
	
		
			102 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* 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 */
 |