| /* 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 */ |