Annotation of win32/sql/oracle/include/oci/ori.h, revision 1.1.1.1

1.1       parser      1: /* Copyright (c) Oracle Corporation 1994, 1996, 1997, 1998, 1999.  All Rights Reserved. */
                      2: 
                      3: /*
                      4:   NAME
                      5:     ORI - OCI navigational interface
                      6: 
                      7:   DESCRIPTION
                      8: 
                      9:     This section is intended to give a brief introduction to the navigational
                     10:     interfaces.  Readers can refer to the documents listed in the section 
                     11:     'RELATED DOCUMENTS' for more information. 
                     12: 
                     13:     PURPOSE 
                     14:        The Oracle Call Interface (OCI) supports navigational access of objects.
                     15:        In the navigational paradigm, data is represented as a graph of objects 
                     16:        connected by references.  Objects in the graph are reached by following
                     17:        the references.
                     18: 
                     19:     OBJECT ENVIRONMENT
                     20: 
                     21:       The object environment is initialized when the OCI environment handle is
                     22:       initialized with the object option.  An object environment contains a
                     23:       heap which buffers type instances in memory.  The object environment also 
                     24:       contains an object cache which keeps track of the objects in the object 
                     25:       environment.  Readers can refer to the "Functional Specification for 
                     26:       Programmatic Interface" for more information about the object 
                     27:       environment. 
                     28: 
                     29:     INSTANCE, OBJECT AND VALUE
                     30: 
                     31:       An OTS instance is an occurence of a type specified by the Oracle Type 
                     32:       System (OTS). This section describes how an OTS instance can be 
                     33:       represented in OCI. In OCI, an OTS instance can be classified based on
                     34:       the type, the lifetime and referencability (see the figure below):
                     35: 
                     36:       1) A persistent object is an instance of an object type. A persistent
                     37:          object resides in a row of a table in the server and can exist longer
                     38:          than the duration of a session (connection). Persistent objects can be
                     39:          identified by object references which contain the object identifiers.
                     40:          A persistent object is obtained by pinning its object reference.
                     41: 
                     42:       2) A transient object is an instance of an object type. A transient 
                     43:          object cannot exist longer than the duration of a session, and it is 
                     44:          used to contain temporary computing results. Transient objects can 
                     45:          also be identified by references which contain transient object
                     46:          identifiers.
                     47: 
                     48:       3) A value is an instance of an user-defined type (object type or 
                     49:          collection type) or any built-in OTS type.  Unlike objects, values of 
                     50:          object types are identified by memory pointers, rather than by 
                     51:          references.  
                     52: 
                     53:          A value can be standalone or embbeded.  A standalone value is usually
                     54:          obtained by issuing a select statement.  OCI also allows the client
                     55:          program to select a row of object table into a value by issuing a SQL
                     56:          statement.  Thus, a referenceable object (in the database) can be 
                     57:          represented as a value (which cannot be identified by a reference).
                     58:          A standalone value can also be an out-of-line attribute in an object 
                     59:          (e.g varchar, raw) or an out-of-line element in a collection (e.g.
                     60:          varchar, raw, object).
                     61:       
                     62:          An embedded value is phyiscally included in a containing instance.
                     63:          An embedded value can be an in-line attribute in an object (e.g.
                     64:          number, nested object) or an in-line element in a collection.
                     65: 
                     66:          All values are considered to be transient by OCI, e.g. OCI does not
                     67:          support automatic flushing a value to the database, and the client has
                     68:          to explicitly execute a SQL statement to store a value into the 
                     69:          database. For embedded values, they are flushed when their containing
                     70:          instance are flushed.
                     71: 
                     72: 
                     73:                                 OTS instance
                     74:                                  |        |  
                     75:                                  v        v
                     76:                                object    value         (type)
                     77:                                |    |
                     78:                                v    v
                     79:                        persistent  transient           (lifetime)
                     80:                   
                     81:  
                     82:                      persistent obj   transient obj     value  
                     83:       ---------------------------------------------------------------
                     84:       |              |              |               |  object type, |
                     85:       | type         | object type  |  object type  |  built-in,    |
                     86:       |              |              |               |  collection   |
                     87:       ---------------------------------------------------------------
                     88:       | maximum      | until object |  session      | session       |
                     89:       | lifetime     | is deleted   |               |               | 
                     90:       ---------------------------------------------------------------
                     91:       | referencable |    yes       |     yes       |    no         |    
                     92:       ---------------------------------------------------------------
                     93:       | embeddable   |    no        |     no        |    yes        |    
                     94:       ---------------------------------------------------------------
                     95: 
                     96:     REFERENCEABLE OBJECT, STANDALONE OBJECT, EMBEDDED OBJECT
                     97: 
                     98:        In the reminding of this include file, the following term will be used:
                     99:        1) The term 'object' can be generally referred to a persistent object,
                    100:           a transient object, a standalone value of object type, or an embedded
                    101:           value of object type.
                    102:        2) The term 'referenceable object' refers to a persistent object or a 
                    103:           transient object.
                    104:        3) The term 'standalone object' refers to a persistent object, a
                    105:           transient object or a standalone value of object type.
                    106:        4) The term 'embedded object' referes to a embbeded value of object 
                    107:           type.
                    108: 
                    109:     META ATTRIBUTES 
                    110: 
                    111:       There is a set of meta-attributes that are defined for standalone 
                    112:       objects.  A meta-attribute can be transient or persistent. A 
                    113:       transient meta-attribute is applicable to an instance only when it is 
                    114:       in memory. A persistent meta-attribute can be applicable to an instance 
                    115:       that is in the disk. 
                    116: 
                    117:       The set of user visible meta-attributes for persistent objects are:
                    118:       1) existent (persistent) : Does the object exist?
                    119:       2) nullness (persistent) : Null information of the instance
                    120:       3) locked   (persistent) : Is the object locked?
                    121:       4) pinned    (transient) : Is the object being accessed by the client?
                    122:       5) dirty     (transient) : Has the object been modified?
                    123:       6) allocation duration (transient) : see below
                    124:       7) pin duration        (transient) : see below
                    125: 
                    126:       The set of user visible meta-attributes for transient objects are:
                    127:       1) existent  (transient) : Does the object exist?
                    128:       2) nullness  (transient) : Null information of the instance 
                    129:       3) pinned    (transient) : Is the object being accessed by the client? 
                    130:       4) dirty     (transient) : Has the object been modified?
                    131:       4) allocation duration (transient) : see below
                    132:       5) pin duration        (transient) : see below
                    133: 
                    134:       The set of user visible meta-attributes for standalone values of object  
                    135:       type or collections are:
                    136:       1) allocation duration (transient) : see below
                    137:       2) nullness            (transient) : Null information of the instance 
                    138:                                            (of an object type)
                    139: 
                    140:     NULLNESS OF AN INSTANCE 
                    141: 
                    142:       Each standalone object is associated with a null structure which keeps 
                    143:       the null information about the object.  A null indicates the absence of 
                    144:       data. The null structure itself contains null indicators that represent:
                    145:         1) atomic nullness : a null value that pertains to the whole object 
                    146:         2) null status of the individual attribute in the object 
                    147: 
                    148:       The layout of a null structure in memory resembles that of the object,
                    149:       except that the null structure has additional indicators to represent 
                    150:       the atomic nullness for each object. 
                    151: 
                    152:       An non-existent object is different than an object that is atomically 
                    153:       null. A atomically null object is an existing object that has no data. 
                    154: 
                    155:     MEMORY LAYOUT OF AN OBJECT
                    156: 
                    157:       A standalone object in memory is composed of a top level memory chunk, 
                    158:       a null structure and optionally, a number of secondary memory chunks. 
                    159:       For a DEPARTMENT object type,
                    160: 
                    161:           OBJECT TYPE department
                    162:           {
                    163:               dep_name      varchar2(20),
                    164:               budget        number,
                    165:               manager       person,              /o person is an object type o/
                    166:               employees     collection of person
                    167:           }
                    168: 
                    169:       Each instance of DEPARTMENT will has a top level memory chunk which
                    170:       contains the top level attributes such as dep_name, budget, manager and
                    171:       employees.  The attributes dep_name and employees are themselves pointers
                    172:       to the additional memory (the secondary memory chunks). The secondary
                    173:       memory is for the out-of-line attribute (e.g. varray).
                    174: 
                    175:     CONSISTENCY MODEL
                    176: 
                    177:       Each pin operation behaves like a distinct SQL select.  Thus, the object 
                    178:       cache does not guarantee consistency for a graph of objects.  In order to
                    179:       retrieve a consistent graph of objects, the user has to explicitly start 
                    180:       a serializable transaction or a read-only transaction. 
                    181: 
                    182:     DURATION
                    183:       In OCI, a duration is used to specify 
                    184: 
                    185:         1) the length of memory allocation of an instance 
                    186:            When each instance is allocated, it is associate with an allocation
                    187:            duration.  The memory occupied by the object is freed automatically 
                    188:            at the end of its allocation duration. The allocation duration of an
                    189:            instance cannot be changed.  
                    190: 
                    191:         2) the length of pinning of an object
                    192:            When each object is pinned, the client has to give a pin duration 
                    193:            which specify the length of time that the object is intended to be
                    194:            used.  It is an user error to specify a pin duration longer than an
                    195:            allocation duration of the object. An object is completely unpinned 
                    196:            at the end of its pin duration (see OCIObjectUnpin()). 
                    197: 
                    198:       An OCI program can use the allocation duration and the pin duration to 
                    199:       automatically free the memory of the instances:
                    200:        1) Transient objects and values are freed at the end of the allocation
                    201:           duration.
                    202:        2) Persistent objects ARE freed at the end of the allocation duration.
                    203:           Persistent objects CAN be freed at the end of the pin duration when
                    204:           the objects are completely unpinned. The persistent objects are said
                    205:           to be aged out. See OCIObjectUnpin() for more details.
                    206: 
                    207:       There are 3 predefined duration: session, transaction, call.  The time 
                    208:       spans of these durations are defined based on the programming model 
                    209:       presented by OCI. The call duration is mapped to the transaction 
                    210:       duration in the client-side environment. See oro.h for the macros defined
                    211:       for these 3 durations.
                    212: 
                    213:       A pin duration can be promoted. For example, if an object is pinned with
                    214:       duration 1, and the object is later pinned with duration 2, the pin 
                    215:       routine will try to find a duration that is longer or equal to the 
                    216:       length of both duration 1 and duration 2.  The pin duration of the object
                    217:       is set to the that duration. The object is automatically unpinned only 
                    218:       after both duration 1 and duration 2 are terminated. 
                    219: 
                    220:   RELATED DOCUMENTS
                    221:     "Functional Specification for Oracle Object RDBMS" 
                    222:     "Functional Specification for Programmatic Interfaces" 
                    223:     "Functional Specification for the Oracle Type System (OTS)" 
                    224: 
                    225:   INSPECTION STATUS 
                    226:     Inspection date:
                    227:     Inspection status:
                    228:     Estimated increasing cost defects per page:
                    229:     Rule sets:        
                    230: 
                    231:   ACCEPTANCE REVIEW STATUS 
                    232:     Review date:   
                    233:     Review status:
                    234:     Reviewers: 
                    235: 
                    236:   PUBLIC FUNCTIONS
                    237:     OCIObjectNew - OCI new a standalone instance 
                    238:     OCIObjectPin - OCI pin an object by reference
                    239:     OCIObjectUnpin - OCI unpin a referenceable object
                    240:     OCIObjectPinCountReset - OCI reset the pin count of a referenceable object 
                    241:     OCIObjectLock - OCI lock a persistent object
                    242:     OCIObjectLockNoWait - OCI lock a persistent object
                    243:     OCIObjectMarkUpdate - OCI mark a referenceable object as updated
                    244:     OCIObjectUnmark - OCI unmark a dirtied referenceable object 
                    245:     OCIObjectUnmarkByRef - OCI unmark a dirtied object by reference 
                    246:     OCIObjectFree - OCI free a standalone instance 
                    247:     OCIObjectMarkDelete - OCI mark a referenceable object as deleted 
                    248:     OCIObjectMarkDeleteByRef - OCI mark a referenceable object as deleted by 
                    249:                                giving a reference
                    250:     OCIObjectFlush - OCI flush a persistent object
                    251:     OCIObjectRefresh - OCI refresh a persistent object 
                    252:     OCIObjectCopy - OCI CoPy one object to another
                    253:     OCIObjectGetTypeRef - OCI get the Type Reference of a standalone object 
                    254:     OCIObjectGetObjectRef - OCI get the Object's Reference 
                    255:     OCIObjectGetInd - OCI get Null Structure of an standalone object 
                    256:     OCIObjectExists - OCI get the existence of a referenceable object
                    257:     OCIObjectGetProperty - get object property
                    258:     OCIObjectIsLocked - OCI get the lock status of a referenceable object
                    259:     OCIObjectIsDirty - OCI get the dirty status of a referenceable object
                    260:     OCIObjectPinTable - OCI get Table object 
                    261:     OCIObjectArrayPin - OCI pin array of objects 
                    262:     OCIObjectGetPrimayKeyTypeRef - OCI get the Ref for the primary key OID's type 
                    263:     OCIObjectMakeObjectRef - OCI Create a pk or sys generated REF  
                    264: 
                    265:     OCICacheFlush - OCI flsuh the modified persistent objects in the cache
                    266:     OCICacheRefresh - OCI refresh persistent objects in the cache 
                    267:     OCICacheUnpin - OCI unpin referenceable objects in the cache
                    268:     OCICacheFree - OCI free all instances in the environment
                    269:     OCICacheUnmark - OCI unmark all dirty referenceable objects in the cache 
                    270: 
                    271:   PRIVATE FUNCTIONS
                    272:     None
                    273: 
                    274:   EXAMPLES 
                    275: 
                    276:     The following types will be used in the examples in this section: 
                    277: 
                    278:     OBJECT TYPE professor
                    279:     (
                    280:         varchar2  name;
                    281:         number    department;
                    282:         number    num_of_students; 
                    283:     );
                    284: 
                    285:     OBJECT TYPE course 
                    286:     (
                    287:         varchar2   name;
                    288:         number     grade; 
                    289:     );
                    290: 
                    291:     OBJECT TYPE student
                    292:     (
                    293:         vstring      name;
                    294:         number       department;
                    295:         ref          advisor;                      /o advisor is a professor o/
                    296:         collection   courses;
                    297:     );
                    298: 
                    299:     EXAMPLE 1
                    300: 
                    301:       Here is a set of examples to illustrate the usages of some of the
                    302:       orio and oric functions.  
                    303: 
                    304:       OCIenv    *env;              /o OCI environment handle o/
                    305:       OCIError  *err;              /o OCI error handle o/
                    306:       OCISvcCtx *svc;              /o OCI service handle o/
                    307: 
                    308:       dvoid   *stu_tbl;            /o pointer to the student table o/
                    309:       OCIType *stu_tdo;            /o student type tdo o/
                    310: 
                    311:       OCIRef    *stu2_ref;         /o object reference to student object o/
                    312:       student   *stu1;             /o pointer to the student object o/
                    313:       student   *stu2;             /o pointer to the student object o/
                    314:       professor *pro;              /o pointer to the professor object o/
                    315: 
                    316:       /o Initialize the OCI environment handle, error handle and service
                    317:         handle and login to the database o/ 
                    318:       ...
                    319: 
                    320:       /o CREATE A PERSISTENT OBJECT o/
                    321: 
                    322:       /o get the table object of student o/
                    323:       if (OCIObjectPinTable(env, err, svc, "ORACLEU", sizeof("ORACLEU"), 
                    324:           "STUDENT_TABLE", sizeof("STUDENT_TABLE"), (OCIRef *)0, 
                    325:           OCI_DURATION_NULL, &stu_tbl) != OCI_SUCCESS)
                    326:           /o error handling code o/ 
                    327: 
                    328:       /o get type object of student o/
                    329:       if (OCITypeByName(env, err, svc, "ORACLEU", sizeof("ORACLEU"), 
                    330:           "STUDENT", sizeof("STUDENT"), OCI_DURATION_NULL, OCI_TYPEGET_HEADER,
                    331:           &stu_tdo) != OCI_SUCCESS)
                    332:           /o error handling code o/ 
                    333: 
                    334:       /o create a persistent object 'mark' (of type student) o/ 
                    335:       if (OCIObjectNew(env, err, svc, OCI_TYPECODE_ADT, stu_tdo, stu_tbl, 
                    336:             OCI_DURATION_TRANS, (ub1)FALSE, (dvoid **)&stu1) != OCI_SUCCESS)
                    337:           /o error handling code o/
                    338: 
                    339:       /o RETRIEVE OBJECTS IN PERSISTENT STORES o/ 
                    340: 
                    341:       /o Use OCI to retrieve a reference to student object 'joe'.
                    342:        o The retrieved reference is bound to the variable stu2_ref.
                    343:        o/ 
                    344: 
                    345:       /o pin/retrieve the student "joe" by reference o/ 
                    346:       if (OCIObjectPin(env, err, &stu2_ref, (OCIComplexObject *)0, OCI_PIN_ANY,
                    347:                   OCI_DURATION_TRANS, OCI_LOCK_X, &stu2) != OCI_SUCCESS)
                    348:           /o error handling code o/ 
                    349: 
                    350:       /o pin/retrieve the advisor of student "joe" by reference o/ 
                    351:       if (OCIObjectPin(env, err, &stu2->advisor, (OCIComplexObject *)0,
                    352:           OCI_PIN_ANY, OCI_DURATION_TRANS, OCI_LOCK_X, &pro) != OCI_SUCCESS)
                    353:           /o error handling code o/ 
                    354: 
                    355:       /o MODIFY OBJECTS o/
                    356: 
                    357:       /o initialize the newly created object "mark" o/
                    358:       DISCARD OCIStringAssignText(env, err, "mark", sizeof("mark"), 
                    359:                                     &stu1->name);
                    360:       department = 522;
                    361:       DISCARD OCINumberFromInt(err, &department, sizeof(department), 
                    362:                                     OCI_NUMBER_UNSIGNED, &stu1->department);
                    363: 
                    364:       /o assign advisor to student "mark" o/
                    365:       DISCARD OCIRefAssign(env, err, &stu2->advisor, &stu1->advisor);
                    366: 
                    367:       /o update student "joe". o/  
                    368:       department = 533;
                    369:       DISCARD OCINumberFromInt(err, &department, sizeof(department), 
                    370:                                     OCI_NUMBER_UNSIGNED, &stu2->department);
                    371:       DISCARD OCIObjectMarkUpdate(env, err, stu2);
                    372: 
                    373:       /o UNPIN OBJECTS AFTER FINSIHED PROCESSING THEM o/ 
                    374: 
                    375:       /o unpin the student object "mark" o/
                    376:       if (OCIObjectUnpin(env, err, stu1) != OCI_SUCCESS)
                    377:           /o error handling code o/ 
                    378: 
                    379:       /o unpin the student object "joe" o/
                    380:       if (OCIObjectUnpin(env, err, stu2) != OCI_SUCCESS)
                    381:           /o error handling code o/ 
                    382: 
                    383:       /o unpin the professor object o/
                    384:       if (OCIObjectUnpin(env, err, pro) != OCI_SUCCESS)
                    385:           /o error handling code o/ 
                    386: 
                    387:       /o unpin the type object o/
                    388:       if (OCIObjectUnpin(env, err, stu_tdo) != OCI_SUCCESS)
                    389:           /o error handling code o/ 
                    390: 
                    391:       /o unpin the table object o/
                    392:       if (OCIObjectUnpin(env, err, stu_tbl) != OCI_SUCCESS)
                    393:           /o error handling code o/ 
                    394: 
                    395:       /o FLUSH MODIFIED OBJECTS BACK TO PERSISTENT STORE o/
                    396: 
                    397:       if (OCICacheFlush(env, err, svc, (dvoid *)0, ((OCIRef*)(*)())0, 
                    398:                        (OCIRef *)0) != OCI_SUCCESS)
                    399:           /o error handling code o/
                    400: 
                    401:       /o commit transaction o/
                    402: 
                    403:     END OF EXAMPLE 1
                    404: 
                    405:   NOTES
                    406:     This file has been subsetted to contain only the routines that will
                    407:     be in the first release.
                    408: 
                    409:   MODIFIED
                    410:     whe        09/01/99 - 976457:check __cplusplus for C++ code
                    411:     smuralid   10/29/98 - add comments for OCIObjectMakeObjectRef              
                    412:     mkrishna   08/19/98 - change OCIGetPkTypeRef to OCIObjectGetPrimaryKeyTypeR
                    413:     mkrishna   08/10/98 - add OCIObjectMakeObjectRef & OCIObjectGetPkTypeRef
                    414:     rkasamse   06/22/98 - add comments for OCIDurationBegin(End)
                    415:     pmitra     04/01/98 - OCIObjectLockNoWait added                            
                    416:     pmitra     11/05/97 - [573769] OCIObjectArrayPin pos parameter cannot be NU
                    417:     cxcheng    07/29/97 - fix compile for short names
                    418:     skrishna   07/14/97 - add OCIObjectGetProperty
                    419:     skrishna   04/30/97 - OCIObjectFlushRefresh: remove duplicate declaration
                    420:     skrishna   04/24/97 - flag unsupported functions
                    421:     sthakur    03/20/97 - modify flag argument to OCIObjectFree
                    422:     skrishna   03/18/97 - fix ifdef for supporting ansi and k&r proto-types
                    423:     cxcheng    02/19/97 - remove short names support
                    424:     cxcheng    02/06/97 - take out short name support except with SLSHORTNAME
                    425:     sthakur    12/20/96 - fix a typepo in OCIOBjectArrayPin
                    426:     jboonleu   11/07/96 - modify comments
                    427:     cxcheng    10/28/96 - more beautification changes
                    428:     jboonleu   10/24/96 - add flag to OCIObjectFree
                    429:     jboonleu   10/22/96 - change interface of OCICacheFlush
                    430:     cxcheng    10/18/96 - rename OCIObjectPinArray to OCIObjectArrayPin
                    431:     cxcheng    10/14/96 - more renaming of types
                    432:     jboonleu   10/09/96 - add new interfaces
                    433:     cxcheng    10/09/96 - more lint fixes
                    434:     cxcheng    10/08/96 - more lint fixes
                    435:     jboonleu   09/27/96 - fix lint errors
                    436:     jboonleu   10/07/96 - beautify ori.h after conversion to long names
                    437:     cxcheng    10/04/96 - replace short names with long names
                    438:     sthakur    08/20/96 - add COR context to OCIObjectPin
                    439:     mluong     07/17/96 - add back orioglk, oriogdr, oriogiv, and oriocur.
                    440:     jboonleu   07/17/96 - rename refresh option to conherency option 
                    441:     jboonleu   07/16/96 - change comment for cache consistency
                    442:     jwijaya    07/03/96 - add ANSI prototypes
                    443:     jboonleu   06/12/96 - update comment
                    444:     jboonleu   05/08/96 -  change description of OCIDurationGetParent
                    445:     jboonleu   05/01/96 -  add OROOCOSFN
                    446:     skrishna   04/08/96 -  change ori*() to take OCIEnv* and OCIError* instead
                    447:                           of oroenv*
                    448:     jboonleu   01/04/96 -  interface change
                    449:     jboonleu   10/24/95 -  support of variable ref
                    450:     jboonleu   02/15/95 -  new interface
                    451:     sthakur    01/05/95 -  pass username to origrgc 
                    452:     skotsovo   12/07/94 -  update example 
                    453:     jwijaya    11/15/94 -  rename ORONSPTAB to ORONSPEXT 
                    454:     jwijaya    10/06/94 -  add namespace to oriopnm() 
                    455:     jwijaya    10/02/94 -  connection handle -> connection number 
                    456:     jboonleu   08/16/94 -  fix lint errors 
                    457:     jboonleu   07/20/94 -  change interface of OCICacheFlush 
                    458:     tanguyen   07/18/94 -  add oriocpe, change OCIObjectCopy to oriocps
                    459:     tcheng     07/15/94 -  add init param maximum_sga_heap_size 
                    460:     tcheng     07/13/94 -  change origini to get param string 
                    461:     jboonleu   07/05/94 -  change sccs string from sccid to a comment 
                    462:     jboonleu   07/01/94 -  Add examples to ORIO* and ORIC* functions 
                    463:     tanguyen   06/30/94 -  Fix the ORI_ORACLE ifdef
                    464:     skotsovo   06/27/94 -  include all public functions in public functions 
                    465:                            list at top of header file
                    466:     tcheng     06/27/94 -  modify comments according to new template 
                    467:     tanguyen   06/24/94 -  fix comments for OCIObjectCopy 
                    468:     tcheng     06/24/94 -  fix comments in origrgc()
                    469:     tanguyen   06/21/94 -  fix comments and format 
                    470:     tcheng     06/20/94 -  commenting origini/trm/err/rgc/urg() functions
                    471:     tanguyen   06/16/94 -  fix descriptions of ref operations 
                    472:     tanguyen   06/16/94 -  clarifies refs comparison 
                    473:     tanguyen   05/12/94 -  adds more interfaces (OCIObjectMarkUpdate)
                    474:     jwijaya    05/10/94 -  fix examples, add origurg, change origcon to origrgc
                    475:     tanguyen   05/03/94 -  remove unnecessary 'type' argument from 
                    476:                            'OCIObjectCopy'
                    477:     tanguyen   03/08/94 -  clarifies comments
                    478:     jwijaya    02/16/94 -  more questions
                    479:     jwijaya    02/11/94 -  more comments
                    480:     jwijaya    02/10/94 -  identify optional arguments
                    481:     jwijaya    02/07/94 -  Creation
                    482: */
                    483: 
                    484: 
                    485: #ifndef ORATYPES
                    486: #include <oratypes.h>
                    487: #endif
                    488: #ifndef ORO_ORACLE
                    489: #include <oro.h>
                    490: #endif
                    491: #ifndef OCI_ORACLE
                    492: #include <oci.h>
                    493: #endif
                    494: #ifndef ORT_ORACLE
                    495: #include <ort.h>
                    496: #endif
                    497: 
                    498: #ifndef ORI_ORACLE
                    499: #define ORI_ORACLE
                    500: 
                    501: /*---------------------------------------------------------------------------*/
                    502: /*                         SHORT NAMES SUPPORT SECTION                       */
                    503: /*---------------------------------------------------------------------------*/
                    504: 
                    505: #ifdef SLSHORTNAME
                    506: 
                    507: /* the following are short names that are only supported on IBM mainframes
                    508:    with the SLSHORTNAME defined.
                    509:    With this all subsequent long names will actually be substituted with
                    510:    the short names here */
                    511: 
                    512: #define OCIDurationBegin                 origbgu
                    513: #define OCIDurationEnd                   origedu
                    514: #define OCIDurationGetParent             origpdr
                    515: #define OCICacheFlushRefresh             oricfrh
                    516: #define OCICacheUnpin                    oricunp
                    517: #define OCICacheFree                     oricfre
                    518: #define OCICacheUnmark                   oricumk
                    519: #define OCICacheGetObjects               oricgpr
                    520: #define OCICacheRegister                 oricscb
                    521: #define OCIObjectUnpin                   oriounp
                    522: #define OCIObjectPinCountReset           orioupz
                    523: #define OCIObjectLock                    oriolck
                    524: #define OCIObjectLockNoWait              oriolnw
                    525: #define OCIObjectMarkUpdate              orioupd
                    526: #define OCIObjectUnmark                  orioumk
                    527: #define OCIObjectUnmarkByRef             orioumr
                    528: #define OCIObjectAlwaysLatest            oriomkl
                    529: #define OCIObjectNotAlwaysLatest         oriouml
                    530: #define OCIObjectMarkDeleteByRef         oriordl
                    531: #define OCIObjectMarkDelete              oriopdl
                    532: #define OCIObjectFlush                   oriofls
                    533: #define OCIObjectFlushRefresh            oriofrh
                    534: #define OCIObjectCopy                    oriocpy
                    535: #define OCIObjectGetTypeRef              oriogtr
                    536: #define OCIObjectGetObjectRef            oriogor
                    537: #define OCIObjectGetInd                  oriogns
                    538: #define OCIObjectExists                  oriogex
                    539: #define OCIObjectGetProperty             oriogpr
                    540: #define OCIObjectRefresh                 oriorfs
                    541: #define OCIObjectPinTable                oriogtb
                    542: #define OCIObjectGetPrimaryKeyTypeRef    oriogpf
                    543: #define OCIObjectMakeObjectRef           oriomrf
                    544: 
                    545: #define OCIObjectNew                     orionew
                    546: #define OCIObjectPin                     oriopin
                    547: #define OCIObjectFree                    oriofre
                    548: #define OCIObjectArrayPin                orioapn
                    549: #define OCIObjectIsDirty                 oriodrt
                    550: #define OCIObjectIsDirtied               oriodrd
                    551: #define OCIObjectIsLoaded                orioldd
                    552: #define OCICacheFlush                    oricfls
                    553: #define OCICacheRefresh                  oricrfs
                    554: 
                    555: #endif                                                        /* SLSHORTNAME */
                    556: 
                    557: /*---------------------------------------------------------------------------*/
                    558: /*                       PUBLIC TYPES AND CONSTANTS                          */
                    559: /*---------------------------------------------------------------------------*/
                    560: 
                    561: /* Also see oro.h. */
                    562: 
                    563: /*---------------------------------------------------------------------------*/
                    564: /*                           PUBLIC FUNCTIONS                                */
                    565: /*---------------------------------------------------------------------------*/
                    566: /*---------------------------------------------------------------------------*/
                    567: /*                       OBJECT/INSTANCE OPERATIONS                          */
                    568: /*---------------------------------------------------------------------------*/
                    569: 
                    570: /*--------------------------- OCIObjectNew ----------------------------------*/
                    571: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    572: sword OCIObjectNew(/*_ OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc,
                    573:                        OCITypeCode typecode, OCIType *tdo, dvoid *table, 
                    574:                        OCIDuration duration, boolean value, 
                    575:                        dvoid **instance _*/);
                    576: #else /* ANSI C */
                    577: sword OCIObjectNew(    OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc,
                    578:                        OCITypeCode typecode, OCIType *tdo, dvoid *table, 
                    579:                        OCIDuration duration, boolean value, 
                    580:                        dvoid **instance    );
                    581: #endif
                    582: /*
                    583:    NAME: OCIObjectNew - OCI new (create) a standalone instance
                    584:    PARAMETERS:
                    585:         env  (IN/OUT) - OCI environment handle initialized in object mode
                    586:         err  (IN/OUT) - error handle. If there is an error, it is
                    587:                        recorded in 'err' and this function returns OCI_ERROR.
                    588:                        The error recorded in 'err' can be retrieved by calling
                    589:                        OCIErrorGet().
                    590:         svc      (IN) - OCI service handle.  
                    591:         typecode (IN) - the typecode of the type of the instance. 
                    592:         tdo      (IN, optional) - pointer to the type descriptor object. The 
                    593:                         TDO describes the type of the instance that is to be 
                    594:                         created. Refer to OCITypeByName() for obtaining a TDO. 
                    595:                         The TDO is required for creating a named type (e.g. an
                    596:                         object or a collection).
                    597:         table (IN, optional) - pointer to a table object which specifies a 
                    598:                         table in the server.  This parameter can be set to NULL
                    599:                         if no table is given. See the description below to find
                    600:                         out how the table object and the TDO are used together
                    601:                         to determine the kind of instances (persistent, 
                    602:                         transient, value) to be created. Also see 
                    603:                         OCIObjectPinTable() for retrieving a table object.
                    604:         duration (IN) - this is an overloaded parameter. The use of this
                    605:                         parameter is based on the kind of the instance that is 
                    606:                         to be created.
                    607:                         a) persistent object. This parameter specifies the
                    608:                            pin duration.
                    609:                         b) transient object. This parameter specififes the 
                    610:                            allocation duration and pin duration. 
                    611:                         c) value. This parameter specifies the allocation
                    612:                            duration. 
                    613:         value    (IN)  - specifies whether the created object is a value.
                    614:                          If TRUE, then a value is created. Otherwise, a 
                    615:                          referenceable object is created.  If the instance is 
                    616:                          not an object, then this parameter is ignored.
                    617:         instance (OUT) - address of the newly created instance
                    618:                   
                    619:    REQUIRES:
                    620:         - a valid OCI environment handle must be given.
                    621:    DESCRIPTION:
                    622:         This function creates a new instance of the type specified by the 
                    623:         typecode or the TDO. Based on the parameters 'typecode' (or 'tdo'), 
                    624:         'value' and 'table', different kinds of instances can be created:
                    625:             
                    626:                                      The parameter 'table' is not NULL?
                    627: 
                    628:                                                yes              no
                    629:              ----------------------------------------------------------------
                    630:              | object type (value=TRUE)   |   value         |   value       |
                    631:              ----------------------------------------------------------------
                    632:              | object type (value=FALSE)  | persistent obj  | transient obj |
                    633:        type  ----------------------------------------------------------------
                    634:              | built-in type              |   value         |   value       |
                    635:              ----------------------------------------------------------------
                    636:              | collection type            |   value         |   value       |
                    637:              ----------------------------------------------------------------
                    638: 
                    639:         This function allocates the top level memory chunk of an OTS instance.
                    640:         The attributes in the top level memory are initialized (e.g. an 
                    641:         attribute of varchar2 is initialized to a vstring of 0 length). 
                    642: 
                    643:         If the instance is an object, the object is marked existed but is 
                    644:         atomically null. 
                    645: 
                    646:         FOR PERSISTENT OBJECTS:
                    647:         The object is marked dirty and existed.  The allocation duration for 
                    648:         the object is session. The object is pinned and the pin duration is 
                    649:         specified by the given parameter 'duration'.
                    650: 
                    651:         FOR TRANSIENT OBJECTS:
                    652:         The object is pinned. The allocation duration and the pin duration are 
                    653:         specified by the given parameter 'duration'.
                    654: 
                    655:         FOR VALUES:
                    656:         The allocation duration is specified by the given parameter 'duration'.
                    657: 
                    658:    RETURNS:
                    659:         if environment handle or error handle is null, return 
                    660:         OCI_INVALID_HANDLE.
                    661:         if operation suceeds, return OCI_SUCCESS. 
                    662:         if operation fails, return OCI_ERROR. 
                    663:  */
                    664: 
                    665: /*--------------------------- OCIObjectPin ----------------------------------*/
                    666: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    667: sword OCIObjectPin(/*_ OCIEnv *env, OCIError *err, OCIRef *object_ref, 
                    668:                       OCIComplexObject *corhdl, OCIPinOpt pin_option, 
                    669:                        OCIDuration pin_duration, OCILockOpt lock_option, 
                    670:                        dvoid **object _*/);
                    671: #else /* ANSI C */
                    672: sword OCIObjectPin(    OCIEnv *env, OCIError *err, OCIRef *object_ref, 
                    673:                        OCIComplexObject *corhdl, OCIPinOpt pin_option, 
                    674:                       OCIDuration pin_duration, 
                    675:                       OCILockOpt lock_option, dvoid **object    );
                    676: #endif
                    677: /*
                    678:    NAME: OCIObjectPin - OCI pin a referenceable object
                    679:    PARAMETERS:
                    680:         env        (IN/OUT) - OCI environment handle initialized in object mode
                    681:         err        (IN/OUT) - error handle. If there is an error, it is
                    682:                              recorded in 'err' and this function returns 
                    683:                               OCI_ERROR. The error recorded in 'err' can be 
                    684:                               retrieved by calling OCIErrorGet().
                    685:         object_ref     (IN) - the reference to the object. 
                    686:         corhdl         (IN) - handle for complex object retrieval. 
                    687:         pin_option     (IN) - See description below.
                    688:         pin_duration   (IN) - The duration of which the object is being accesed
                    689:                               by a client. The object is implicitly unpinned at
                    690:                               the end of the pin duration. 
                    691:                               If OCI_DURATION_NULL is passed, there is no pin 
                    692:                               promotion if the object is already loaded into 
                    693:                               the cache. If the object is not yet loaded, then 
                    694:                               the pin duration is set to OCI_DURATION_DEFAULT.  
                    695:         lock_option    (IN) - lock option (e.g., exclusive). If a lock option
                    696:                               is specified, the object is locked in the server.
                    697:                               See 'oro.h' for description about lock option. 
                    698:         object        (OUT) - the pointer to the pinned object.
                    699: 
                    700:    REQUIRES:
                    701:         - a valid OCI environment handle must be given.
                    702:    DESCRIPTION:
                    703: 
                    704:         This function pins a referenceable object instance given the object
                    705:         reference. The process of pinning serves three purposes:
                    706: 
                    707:         1) locate an object given its reference. This is done by the object
                    708:            cache which keeps track of the objects in the object heap.  
                    709: 
                    710:         2) notify the object cache that an object is being in use. An object 
                    711:            can be pinned many times. A pinned object will remain in memory 
                    712:            until it is completely unpinned (see OCIObjectUnpin()). 
                    713: 
                    714:         3) notify the object cache that a persistent object is being in use 
                    715:            such that the persistent object cannot be aged out.  Since a 
                    716:            persistent object can be loaded from the server whenever is needed, 
                    717:            the memory utilization can be increased if a completely unpinned 
                    718:            persistent object can be freed (aged out), even before the 
                    719:            allocation duration is expired.  
                    720: 
                    721:         Also see OCIObjectUnpin() for more information about unpinning.
                    722: 
                    723:         FOR PERSISTENT OBJECTS:
                    724: 
                    725:         When pinning a persistent object, if it is not in the cache, the object
                    726:         will be fetched from the persistent store. The allocation duration of
                    727:         the object is session. If the object is already in the cache, it is
                    728:         returned to the client.  The object will be locked in the server if a 
                    729:         lock option is specified. 
                    730: 
                    731:         This function will return an error for a non-existent object.  
                    732: 
                    733:         A pin option is used to specify the copy of the object that is to be 
                    734:         retrieved: 
                    735: 
                    736:         1) If option is OCI_PIN_ANY (pin any), if the object is already 
                    737:            in the environment heap, return this object. Otherwise, the object 
                    738:            is retrieved from the database.  This option is useful when the 
                    739:            client knows that he has the exclusive access to the data in a 
                    740:            session.
                    741: 
                    742:         2) If option is OCI_PIN_LATEST (pin latest), if the object is 
                    743:            not cached, it is retrieved from the database.  If the object is 
                    744:            cached, it is refreshed with the latest version. See 
                    745:            OCIObjectRefresh() for more information about refreshing.
                    746: 
                    747:         3) If option is OCI_PIN_RECENT (pin recent), if the object is loaded
                    748:            into the cache in the current transaction, the object is returned.
                    749:            If the object is not loaded in the current transaction, the object
                    750:            is refreshed from the server.
                    751: 
                    752:         FOR TRANSIENT OBJECTS:
                    753: 
                    754:         This function will return an error if the transient object has already 
                    755:         been freed. This function does not return an error if an exclusive 
                    756:         lock is specified in the lock option. 
                    757: 
                    758:    RETURNS:
                    759:         if environment handle or error handle is null, return 
                    760:         OCI_INVALID_HANDLE.
                    761:         if operation suceeds, return OCI_SUCCESS. 
                    762:         if operation fails, return OCI_ERROR. 
                    763:  */
                    764: 
                    765: /*------------------------------ OCIObjectUnpin -----------------------------*/
                    766: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    767: sword OCIObjectUnpin(/*_ OCIEnv *env, OCIError *err, dvoid *object _*/);
                    768: #else /* ANSI C */
                    769: sword OCIObjectUnpin(    OCIEnv *env, OCIError *err, dvoid *object    );
                    770: #endif
                    771: /*
                    772:    NAME: OCIObjectUnpin - OCI unpin a referenceable object
                    773:    PARAMETERS:
                    774:         env   (IN/OUT) - OCI environment handle initialized in object mode
                    775:         err   (IN/OUT) - error handle. If there is an error, it is
                    776:                         recorded in 'err' and this function returns OCI_ERROR.
                    777:                         The error recorded in 'err' can be retrieved by 
                    778:                          calling OCIErrorGet().
                    779:         object    (IN) - pointer to an object
                    780:    REQUIRES:
                    781:         - a valid OCI environment handle must be given.
                    782:         - The specified object must be pinned.
                    783:    DESCRIPTION:
                    784:         This function unpins an object.  An object is completely unpinned when 
                    785:           1) the object was unpinned N times after it has been pinned N times
                    786:              (by calling OCIObjectPin()).
                    787:           2) it is the end of the pin duration
                    788:           3) the function OCIObjectPinCountReset() is called 
                    789: 
                    790:         There is a pin count associated with each object which is incremented
                    791:         whenever an object is pinned. When the pin count of the object is zero,
                    792:         the object is said to be completely unpinned. An unpinned object can
                    793:         be freed without error.
                    794: 
                    795:         FOR PERSISTENT OBJECTS:
                    796:         When a persistent object is completely unpinned, it becomes a candidate
                    797:         for aging. The memory of an object is freed when it is aged out. Aging
                    798:         is used to maximize the utilization of memory.  An dirty object cannot 
                    799:         be aged out unless it is flushed.
                    800: 
                    801:         FOR TRANSIENT OBJECTS:
                    802:         The pin count of the object is decremented. A transient can be freed
                    803:         only at the end of its allocation duration or when it is explicitly
                    804:         deleted by calling OCIObjectFree().
                    805: 
                    806:         FOR VALUE:
                    807:         This function will return an error for value.
                    808: 
                    809:    RETURNS:
                    810:         if environment handle or error handle is null, return 
                    811:         OCI_INVALID_HANDLE.
                    812:         if operation suceeds, return OCI_SUCCESS. 
                    813:         if operation fails, return OCI_ERROR. 
                    814:  */
                    815: 
                    816: /*---------------------------- OCIObjectPinCountReset -----------------------*/
                    817: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    818: sword OCIObjectPinCountReset(/*_ OCIEnv *env,OCIError *err,dvoid *object _*/);
                    819: #else /* ANSI C */
                    820: sword OCIObjectPinCountReset(    OCIEnv *env, OCIError *err, dvoid *object   );
                    821: #endif
                    822: /*
                    823:    NAME: OCIObjectPinCountReset - OCI resets the pin count of a referenceable
                    824:                                   object
                    825:    PARAMETERS:
                    826:         env   (IN/OUT) - OCI environment handle initialized in object mode
                    827:         err   (IN/OUT) - error handle. If there is an error, it is
                    828:                         recorded in 'err' and this function returns OCI_ERROR.
                    829:                         The error recorded in 'err' can be retrieved by
                    830:                         calling OCIErrorGet().
                    831:         object    (IN) - pointer to an object
                    832:    REQUIRES:
                    833:         - a valid OCI environment handle must be given.
                    834:         - The specified object must be pinned.
                    835:    DESCRIPTION:
                    836:         This function completely unpins an object.  When an object is 
                    837:         completely unpinned, it can be freed without error.  
                    838: 
                    839:         FOR PERSISTENT OBJECTS:
                    840:         When a persistent object is completely unpinned, it becomes a candidate
                    841:         for aging. The memory of an object is freed when it is aged out. Aging
                    842:         is used to maximize the utilization of memory.  An dirty object cannot 
                    843:         be aged out unless it is flushed.
                    844: 
                    845:         FOR TRANSIENT OBJECTS:
                    846:         The pin count of the object is decremented. A transient can be freed
                    847:         only at the end of its allocation duration or when it is explicitly
                    848:         freed by calling OCIObjectFree().
                    849: 
                    850:         FOR VALUE:
                    851:         This function will return an error for value.
                    852: 
                    853:    RETURNS:
                    854:         if environment handle or error handle is null, return 
                    855:         OCI_INVALID_HANDLE.
                    856:         if operation suceeds, return OCI_SUCCESS. 
                    857:         if operation fails, return OCI_ERROR. 
                    858:  */
                    859: 
                    860: /*--------------------------- OCIObjectLock ---------------------------------*/
                    861: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    862: sword OCIObjectLock(/*_ OCIEnv *env, OCIError *err, dvoid *object _*/);
                    863: #else /* ANSI C */
                    864: sword OCIObjectLock(    OCIEnv *env, OCIError *err, dvoid *object    );
                    865: #endif
                    866: /*
                    867:    NAME: OCIObjectLock - OCI lock a persistent object
                    868:    PARAMETERS:
                    869:         env   (IN/OUT) - OCI environment handle initialized in object mode
                    870:         err   (IN/OUT) - error handle. If there is an error, it is
                    871:                         recorded in 'err' and this function returns OCI_ERROR.
                    872:                         The error recorded in 'err' can be retrieved by
                    873:                         calling OCIErrorGet().
                    874:         object    (IN) - pointer to the persistent object 
                    875:    REQUIRES:
                    876:         - a valid OCI environment handle must be given.
                    877:         - The specified object must be pinned.
                    878:    DESCRIPTION:
                    879:         This function locks a persistent object at the server. Unlike
                    880:         OCIObjectLockNoWait() this function waits if another user currently
                    881:         holds a lock on the desired object. This function
                    882:         returns an error if:
                    883:           1) the object is non-existent.
                    884: 
                    885:         This function will return an error for transient objects and values.
                    886:         The lock of an object is released at the end of a transaction.
                    887: 
                    888:    RETURNS:
                    889:         if environment handle or error handle is null, return 
                    890:         OCI_INVALID_HANDLE.
                    891:         if operation suceeds, return OCI_SUCCESS. 
                    892:         if operation fails, return OCI_ERROR. 
                    893: */
                    894: 
                    895: /*------------------------ OCIObjectLockNoWait ------------------------------*/
                    896: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    897: sword OCIObjectLockNoWait(/*_ OCIEnv *env, OCIError *err, dvoid *object _*/);
                    898: #else /* ANSI C */
                    899: sword OCIObjectLockNoWait(    OCIEnv *env, OCIError *err, dvoid *object    );
                    900: #endif
                    901: /*
                    902:    NAME: OCIObjectLockNoWait - OCI lock a persistent object, do not wait for
                    903:                               the lock, return error if lock not available
                    904:    PARAMETERS:
                    905:         env   (IN/OUT) - OCI environment handle initialized in object mode
                    906:         err   (IN/OUT) - error handle. If there is an error, it is
                    907:                         recorded in 'err' and this function returns OCI_ERROR.
                    908:                         The error recorded in 'err' can be retrieved by
                    909:                         calling OCIErrorGet().
                    910:         object    (IN) - pointer to the persistent object 
                    911:    REQUIRES:
                    912:         - a valid OCI environment handle must be given.
                    913:         - The specified object must be pinned.
                    914:    DESCRIPTION:
                    915:         This function locks a persistent object at the server. Unlike
                    916:         OCIObjectLock() this function will not wait if another user holds
                    917:         the lock on the desired object. This function returns an error if:
                    918:           1) the object is non-existent.
                    919:          2) the object is currently locked by another user in which
                    920:              case this function returns with an error.
                    921: 
                    922:         This function will return an error for transient objects and values.
                    923:         The lock of an object is released at the end of a transaction.
                    924: 
                    925:    RETURNS:
                    926:         if environment handle or error handle is null, return 
                    927:         OCI_INVALID_HANDLE.
                    928:         if operation suceeds, return OCI_SUCCESS. 
                    929:         if operation fails, return OCI_ERROR. 
                    930: */
                    931: 
                    932: /*--------------------------- OCIObjectMarkUpdate ----------------------------*/
                    933: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    934: sword OCIObjectMarkUpdate(/*_ OCIEnv *env, OCIError *err, dvoid *object _*/);
                    935: #else /* ANSI C */
                    936: sword OCIObjectMarkUpdate(    OCIEnv *env, OCIError *err, dvoid *object    );
                    937: #endif
                    938: /*
                    939:    NAME: OCIObjectMarkUpdate - OCI marks an object as updated
                    940:    PARAMETERS:
                    941:         env   (IN/OUT) - OCI environment handle initialized in object mode
                    942:         err   (IN/OUT) - error handle. If there is an error, it is
                    943:                         recorded in 'err' and this function returns OCI_ERROR.
                    944:                         The error recorded in 'err' can be retrieved by
                    945:                         calling OCIErrorGet().
                    946:         object    (IN) - pointer to the persistent object 
                    947:    REQUIRES:
                    948:         - a valid OCI environment handle must be given.
                    949:         - The specified object must be pinned.
                    950:    DESCRIPTION:
                    951:         FOR PERSISTENT OBJECTS:
                    952:         This function marks the specified persistent object as updated. The
                    953:         persistent objects will be written to the server when the object cache
                    954:         is flushed.  The object is not locked or flushed by this function. It
                    955:         is an error to update a deleted object.  
                    956: 
                    957:         After an object is marked updated and flushed, this function must be
                    958:         called again to mark the object as updated if it has been dirtied
                    959:         after it is being flushed.
                    960: 
                    961:         FOR TRANSIENT OBJECTS:
                    962:         This function marks the specified transient object as updated. The
                    963:         transient objects will NOT be written to the server. It is an error
                    964:         to update a deleted object.
                    965: 
                    966:         FOR VALUES:
                    967:         It is an no-op for values.
                    968: 
                    969:    RETURNS:
                    970:         if environment handle or error handle is null, return 
                    971:         OCI_INVALID_HANDLE.
                    972:         if operation suceeds, return OCI_SUCCESS. 
                    973:         if operation fails, return OCI_ERROR. 
                    974:  */
                    975: 
                    976: /*----------------------------- OCIObjectUnmark -----------------------------*/
                    977: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    978: sword OCIObjectUnmark(/*_ OCIEnv *env, OCIError *err, dvoid *object _*/);
                    979: #else /* ANSI C */
                    980: sword OCIObjectUnmark(    OCIEnv *env, OCIError *err, dvoid *object    );
                    981: #endif
                    982: /*
                    983:    NAME: OCIObjectUnmark - OCI unmarks an object 
                    984:    PARAMETERS:
                    985:         env   (IN/OUT) - OCI environment handle initialized in object mode
                    986:         err   (IN/OUT) - error handle. If there is an error, it is
                    987:                          recorded in 'err' and this function returns OCI_ERROR.
                    988:                          The error recorded in 'err' can be retrieved by
                    989:                          calling OCIErrorGet().
                    990:         object    (IN) - pointer to the persistent object
                    991:    REQUIRES:
                    992:         - a valid OCI environment handle must be given.
                    993:         - The specified object must be pinned.
                    994:    DESCRIPTION:
                    995:         FOR PERSISTENT OBJECTS AND TRANSIENT OBJECTS:
                    996:         This function unmarks the specified persistent object as dirty. Changes
                    997:         that are made to the object will not be written to the server. If the
                    998:         object is marked locked, it remains marked locked.  The changes that
                    999:         have already made to the object will not be undone implicitly. 
                   1000:  
                   1001:         FOR VALUES:
                   1002:         It is an no-op for values.
                   1003:  
                   1004:    RETURNS:
                   1005:         if environment handle or error handle is null, return
                   1006:         OCI_INVALID_HANDLE.
                   1007:         if operation suceeds, return OCI_SUCCESS.
                   1008:         if operation fails, return OCI_ERROR.
                   1009:  */
                   1010: 
                   1011: /*----------------------------- OCIObjectUnmarkByRef ------------------------*/
                   1012: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1013: sword OCIObjectUnmarkByRef(/*_ OCIEnv *env, OCIError *err, OCIRef *ref _*/);
                   1014: #else /* ANSI C */
                   1015: sword OCIObjectUnmarkByRef(    OCIEnv *env, OCIError *err, OCIRef *ref    );
                   1016: #endif
                   1017: /*
                   1018:    NAME: OCIObjectUnmarkByRef - OCI unmarks an object by Ref
                   1019:    PARAMETERS:
                   1020:         env   (IN/OUT) - OCI environment handle initialized in object mode
                   1021:         err   (IN/OUT) - error handle. If there is an error, it is
                   1022:                          recorded in 'err' and this function returns OCI_ERROR.
                   1023:                          The error recorded in 'err' can be retrieved by
                   1024:                          calling OCIErrorGet().
                   1025:         ref   (IN) - reference of the object
                   1026:    REQUIRES:
                   1027:         - a valid OCI environment handle must be given.
                   1028:         - The specified object must be pinned.
                   1029:    DESCRIPTION:
                   1030:         FOR PERSISTENT OBJECTS AND TRANSIENT OBJECTS:
                   1031:         This function unmarks the specified persistent object as dirty. Changes
                   1032:         that are made to the object will not be written to the server. If the
                   1033:         object is marked locked, it remains marked locked.  The changes that
                   1034:         have already made to the object will not be undone implicitly.
                   1035:  
                   1036:         FOR VALUES:
                   1037:         It is an no-op for values.
                   1038:  
                   1039:    RETURNS:
                   1040:         if environment handle or error handle is null, return
                   1041:         OCI_INVALID_HANDLE.
                   1042:         if operation suceeds, return OCI_SUCCESS.
                   1043:         if operation fails, return OCI_ERROR.
                   1044:  */
                   1045: 
                   1046: /*--------------------------- OCIObjectFree ---------------------------------*/
                   1047: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1048: sword OCIObjectFree(/*_ OCIEnv *env, OCIError *err, dvoid *instance, 
                   1049:                         ub2 flags _*/);
                   1050: #else /* ANSI C */
                   1051: sword OCIObjectFree(    OCIEnv *env, OCIError *err, dvoid *instance, 
                   1052:                         ub2 flags   );
                   1053: #endif
                   1054: /*
                   1055:    NAME: OCIObjectFree - OCI free (and unpin) an standalone instance 
                   1056:    PARAMETERS:
                   1057:         env    (IN/OUT) - OCI environment handle initialized in object mode
                   1058:         err    (IN/OUT) - error handle. If there is an error, it is
                   1059:                          recorded in 'err' and this function returns 
                   1060:                           OCI_ERROR.  The error recorded in 'err' can be 
                   1061:                           retrieved by calling OCIErrorGet().
                   1062:         instance   (IN) - pointer to a standalone instance.
                   1063:         flags      (IN) - If OCI_OBJECT_FREE_FORCE is set, free the object
                   1064:                           even if it is pinned or dirty.
                   1065:                           If OCI_OBJECT_FREE_NONULL is set, the null
                   1066:                           structure will not be freed. 
                   1067:    REQUIRES:
                   1068:         - a valid OCI environment handle must be given.
                   1069:         - The instance to be freed must be standalone.
                   1070:         - If the instance is a referenceable object, the object must be pinned. 
                   1071:    DESCRIPTION:
                   1072:         This function deallocates all the memory allocated for an OTS instance,
                   1073:         including the null structure.
                   1074: 
                   1075:         FOR PERSISTENT OBJECTS:
                   1076:         This function will return an error if the client is attempting to free 
                   1077:         a dirty persistent object that has not been flushed. The client should 
                   1078:         either flush the persistent object or set the parameter 'flag' to  
                   1079:         OCI_OBJECT_FREE_FORCE.
                   1080: 
                   1081:         This function will call OCIObjectUnpin() once to check if the object 
                   1082:         can be completely unpin. If it succeeds, the rest of the function will 
                   1083:         proceed to free the object.  If it fails, then an error is returned 
                   1084:         unless the parameter 'flag' is set to OCI_OBJECT_FREE_FORCE.
                   1085:  
                   1086:         Freeing a persistent object in memory will not change the persistent 
                   1087:         state of that object at the server.  For example, the object will 
                   1088:         remain locked after the object is freed.
                   1089: 
                   1090:         FOR TRANSIENT OBJECTS:
                   1091: 
                   1092:         This function will call OCIObjectUnpin() once to check if the object 
                   1093:         can be completely unpin. If it succeeds, the rest of the function will 
                   1094:         proceed to free the object.  If it fails, then an error is returned 
                   1095:         unless the parameter 'flag' is set to OCI_OBJECT_FREE_FORCE. 
                   1096: 
                   1097:         FOR VALUES:
                   1098:         The memory of the object is freed immediately. 
                   1099: 
                   1100:    RETURNS:
                   1101:         if environment handle or error handle is null, return 
                   1102:         OCI_INVALID_HANDLE.
                   1103:         if operation suceeds, return OCI_SUCCESS. 
                   1104:         if operation fails, return OCI_ERROR. 
                   1105: */
                   1106: 
                   1107: /*------------------------ OCIObjectMarkDeleteByRef --------------------------*/
                   1108: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1109: sword OCIObjectMarkDeleteByRef(/*_ OCIEnv *env,OCIError *err,
                   1110:                                    OCIRef *object_ref _*/);
                   1111: #else /* ANSI C */
                   1112: sword OCIObjectMarkDeleteByRef(    OCIEnv *env, OCIError *err, 
                   1113:                                    OCIRef *object_ref);
                   1114: #endif
                   1115: /*
                   1116:    NAME: OCIObjectMarkDeleteByRef - OCI "delete" (and unpin) an object given
                   1117:                                     a reference
                   1118:    PARAMETERS:
                   1119:         env     (IN/OUT) - OCI environment handle initialized in object mode
                   1120:         err     (IN/OUT) - error handle. If there is an error, it is
                   1121:                           recorded in 'err' and this function returns 
                   1122:                            OCI_ERROR.  The error recorded in 'err' can be 
                   1123:                            retrieved by calling OCIErrorGet().
                   1124:         object_ref  (IN) - ref of the object to be deleted
                   1125: 
                   1126:    REQUIRES:
                   1127:         - a valid OCI environment handle must be given.
                   1128:    DESCRIPTION:
                   1129:         This function marks the object designated by 'object_ref' as deleted.
                   1130: 
                   1131:         FOR PERSISTENT OBJECTS:
                   1132:         If the object is not loaded, then a temporary object is created and is 
                   1133:         marked deleted. Otherwise, the object is marked deleted.  
                   1134: 
                   1135:         The object is deleted in the server when the object is flushed.
                   1136: 
                   1137:         FOR TRANSIENT OBJECTS:
                   1138:         The object is marked deleted.  The object is not freed until it is
                   1139:         unpinned.
                   1140: 
                   1141:    RETURNS:
                   1142:         if environment handle or error handle is null, return 
                   1143:         OCI_INVALID_HANDLE.
                   1144:         if operation suceeds, return OCI_SUCCESS. 
                   1145:         if operation fails, return OCI_ERROR. 
                   1146:  */
                   1147: 
                   1148: /*---------------------------- OCIObjectMarkDelete ---------------------------*/
                   1149: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1150: sword OCIObjectMarkDelete(/*_ OCIEnv *env, OCIError *err, dvoid *instance _*/);
                   1151: #else /* ANSI C */
                   1152: sword OCIObjectMarkDelete(    OCIEnv *env, OCIError *err, dvoid *instance    );
                   1153: #endif
                   1154: /*
                   1155:    NAME: OCIObjectMarkDelete - OCI "delete" an instance given a Pointer 
                   1156:    PARAMETERS:
                   1157:         env    (IN/OUT) - OCI environment handle initialized in object mode
                   1158:         err    (IN/OUT) - error handle. If there is an error, it is
                   1159:                          recorded in 'err' and this function returns 
                   1160:                           OCI_ERROR.  The error recorded in 'err' can be 
                   1161:                           retrieved by calling OCIErrorGet().
                   1162:         instance   (IN) - pointer to the instance 
                   1163:    REQUIRES:
                   1164:         - a valid OCI environment handle must be given.
                   1165:         - The instance must be standalone.
                   1166:         - If the instance is a referenceable object, then it must be pinned.
                   1167:    DESCRIPTION:
                   1168: 
                   1169:         FOR PERSISTENT OBJECTS:
                   1170:         The object is marked deleted.  The memory of the object is not freed.
                   1171:         The object is deleted in the server when the object is flushed.
                   1172: 
                   1173:         FOR TRANSIENT OBJECTS:
                   1174:         The object is marked deleted.  The memory of the object is not freed.
                   1175: 
                   1176:         FOR VALUES: 
                   1177:         This function frees a value immediately. 
                   1178: 
                   1179:    RETURNS:
                   1180:         if environment handle or error handle is null, return 
                   1181:         OCI_INVALID_HANDLE.
                   1182:         if operation suceeds, return OCI_SUCCESS. 
                   1183:         if operation fails, return OCI_ERROR. 
                   1184:  */
                   1185: 
                   1186: /*---------------------------- OCIObjectFlush -------------------------------*/
                   1187: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1188: sword OCIObjectFlush(/*_ OCIEnv *env, OCIError *err, dvoid *object _*/);
                   1189: #else /* ANSI C */
                   1190: sword OCIObjectFlush(    OCIEnv *env, OCIError *err, dvoid *object    );
                   1191: #endif
                   1192: /*
                   1193:    NAME: OCIObjectFlush - OCI flush a persistent object
                   1194:    PARAMETERS:
                   1195:         env    (IN/OUT) - OCI environment handle initialized in object mode
                   1196:         err    (IN/OUT) - error handle. If there is an error, it is
                   1197:                          recorded in 'err' and this function returns 
                   1198:                           OCI_ERROR.  The error recorded in 'err' can be 
                   1199:                           retrieved by calling OCIErrorGet().
                   1200:         object     (IN) - pointer to the persistent object 
                   1201:    REQUIRES:
                   1202:         - a valid OCI environment handle must be given.
                   1203:         - The specified object must be pinned.
                   1204:    DESCRIPTION:
                   1205:         This function flushes a modified persistent object to the server.
                   1206:         An exclusive lock is obtained implicitly for the object when flushed.
                   1207: 
                   1208:         When the object is written to the server, triggers may be fired.
                   1209:         Objects can be modified by the triggers at the server.  To keep the  
                   1210:         objects in the object cache being coherent with the database, the
                   1211:         clients can free or refresh the objects in the cache. 
                   1212: 
                   1213:         This function will return an error for transient objects and values.
                   1214:         
                   1215:    RETURNS:
                   1216:         if environment handle or error handle is null, return 
                   1217:         OCI_INVALID_HANDLE.
                   1218:         if operation suceeds, return OCI_SUCCESS. 
                   1219:         if operation fails, return OCI_ERROR. 
                   1220:  */
                   1221: 
                   1222: /*------------------------ OCIObjectRefresh ---------------------------------*/
                   1223: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1224: sword OCIObjectRefresh(/*_ OCIEnv *env, OCIError *err, dvoid *object _*/);
                   1225: #else /* ANSI C */
                   1226: sword OCIObjectRefresh(    OCIEnv *env, OCIError *err, dvoid *object    );
                   1227: #endif
                   1228: /*
                   1229:    NAME: OCIObjectRefresh - OCI refresh a persistent object
                   1230:    PARAMETERS:
                   1231:         env    (IN/OUT) - OCI environment handle initialized in object mode
                   1232:         err    (IN/OUT) - error handle. If there is an error, it is
                   1233:                          recorded in 'err' and this function returns 
                   1234:                           OCI_ERROR.  The error recorded in 'err' can be 
                   1235:                           retrieved by calling OCIErrorGet().
                   1236:         object     (IN) - pointer to the persistent object 
                   1237:    REQUIRES:
                   1238:         - a valid OCI environment handle must be given.
                   1239:         - The specified object must be pinned.
                   1240:    DESCRIPTION:
                   1241:         This function refreshes an unmarked object with data retrieved from the
                   1242:         latest snapshot in the server. An object should be refreshed when the 
                   1243:         objects in the cache are inconsistent with the objects at 
                   1244:         the server:
                   1245:         1) When an object is flushed to the server, triggers can be fired to
                   1246:            modify more objects in the server.  The same objects (modified by 
                   1247:            the triggers) in the object cache become obsolete.
                   1248:         2) When the user issues a SQL or executes a PL/SQL procedure to modify
                   1249:            any object in the server, the same object in the cache becomes
                   1250:            obsolete.
                   1251: 
                   1252:         The object that is refreshed will be 'replaced-in-place'. When an
                   1253:         object is 'replaced-in-place', the top level memory of the object will 
                   1254:         be reused so that new data can be loaded into the same memory address. 
                   1255:         The top level memory of the null structre is also reused. Unlike the
                   1256:         top level memory chunk, the secondary memory chunks may be resized and
                   1257:         reallocated.  The client should be careful when holding onto a pointer 
                   1258:         to the secondary memory chunk (e.g. assigning the address of a 
                   1259:         secondary memory to a local variable), since this pointer can become 
                   1260:         invalid after the object is refreshed.
                   1261: 
                   1262:         The object state will be modified as followed after being refreshed: 
                   1263:           - existent : set to appropriate value
                   1264:           - pinned   : unchanged 
                   1265:           - allocation duration : unchanged 
                   1266:           - pin duration : unchanged 
                   1267:         
                   1268:         This function is an no-op for transient objects or values.
                   1269: 
                   1270:    RETURNS:
                   1271:         if environment handle or error handle is null, return 
                   1272:         OCI_INVALID_HANDLE.
                   1273:         if operation suceeds, return OCI_SUCCESS. 
                   1274:         if operation fails, return OCI_ERROR. 
                   1275:  */
                   1276: 
                   1277: /*---------------------------- OCIObjectCopy --------------------------------*/
                   1278: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1279: sword OCIObjectCopy(/*_ OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, 
                   1280:                         dvoid *source, dvoid *null_source,
                   1281:                         dvoid *target, dvoid *null_target, OCIType *tdo, 
                   1282:                         OCIDuration duration, ub1 option _*/);
                   1283: #else /* ANSI C */
                   1284: sword OCIObjectCopy(    OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, 
                   1285:                         dvoid *source, dvoid *null_source,
                   1286:                         dvoid *target, dvoid *null_target, OCIType *tdo, 
                   1287:                         OCIDuration duration, ub1 option    );
                   1288: #endif
                   1289: /*
                   1290:    NAME: OCIObjectCopy - OCI copy one instance to another
                   1291:    PARAMETERS:
                   1292:         env     (IN/OUT) - OCI environment handle initialized in object mode
                   1293:         err     (IN/OUT) - error handle. If there is an error, it is
                   1294:                           recorded in 'err' and this function returns 
                   1295:                            OCI_ERROR.  The error recorded in 'err' can be 
                   1296:                            retrieved by calling OCIErrorGet().
                   1297:         svc         (IN) - OCI service context handle
                   1298:         source      (IN) - pointer to the source instance 
                   1299:         null_source (IN) - pointer to the null structure of the source
                   1300:         target      (IN) - pointer to the target instance
                   1301:         null_target (IN) - pointer to the null structure of the target 
                   1302:         tdo         (IN) - the TDO for both source and target
                   1303:         duration    (IN) - allocation duration of the target memory
                   1304:         option      (IN) - specify the copy option:
                   1305:                         OROOCOSFN - Set Reference to Null. All references
                   1306:                         in the source will not be copied to the target. The
                   1307:                         references in the target are set to null. 
                   1308:    REQUIRES:
                   1309:         - a valid OCI environment handle must be given.
                   1310:         - If source or target is referenceable, it must be pinned.
                   1311:         - The target or the containing instance of the target must be already
                   1312:           be instantiated (e.g. created by OCIObjectNew()).
                   1313:         - The source and target instances must be of the same type. If the
                   1314:           source and target are located in a different databases, then the
                   1315:           same type must exist in both databases.
                   1316:    DESCRIPTION:
                   1317:         This function copies the contents of the 'source' instance to the
                   1318:         'target' instance. This function performs a deep-copy such that the 
                   1319:         data that is copied/duplicated include:
                   1320:         a) all the top level attributes (see the exceptions below)
                   1321:         b) all the secondary memory (of the source) that is reachable from the
                   1322:            top level attributes.
                   1323:         c) the null structure of the instance
                   1324: 
                   1325:         Memory is allocated with the specified allocation duration. 
                   1326: 
                   1327:         Certain data items are not copied: 
                   1328:         a) If the option OCI_OBJECTCOPY_NOREF is specified, then all references
                   1329:            in the source are not copied. Instead, the references in the target
                   1330:            are set to null.
                   1331:         b) If the attribute is a LOB, then it is set to null.
                   1332: 
                   1333:    RETURNS:
                   1334:         if environment handle or error handle is null, return 
                   1335:         OCI_INVALID_HANDLE.
                   1336:         if operation suceeds, return OCI_SUCCESS. 
                   1337:         if operation fails, return OCI_ERROR. 
                   1338:  */
                   1339: 
                   1340: /*---------------------------- OCIObjectGetTypeRef --------------------------*/
                   1341: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1342: sword OCIObjectGetTypeRef(/*_ OCIEnv *env, OCIError *err, dvoid *instance, 
                   1343:                               OCIRef *type_ref _*/);
                   1344: #else /* ANSI C */
                   1345: sword OCIObjectGetTypeRef(    OCIEnv *env, OCIError *err, dvoid *instance, 
                   1346:                               OCIRef *type_ref    );
                   1347: #endif
                   1348: /*
                   1349:    NAME: OCIObjectGetTypeRef - get the type reference of a standalone object
                   1350:    PARAMETERS:
                   1351:         env   (IN/OUT) - OCI environment handle initialized in object mode
                   1352:         err   (IN/OUT) - error handle. If there is an error, it is
                   1353:                         recorded in 'err' and this function returns 
                   1354:                          OCI_ERROR.  The error recorded in 'err' can be 
                   1355:                          retrieved by calling OCIErrorGet().
                   1356:         instance  (IN) - pointer to an standalone instance 
                   1357:         type_ref (OUT) - reference to the type of the object.  The reference 
                   1358:                          must already be allocated.
                   1359:    REQUIRES:
                   1360:         - a valid OCI environment handle must be given.
                   1361:         - The instance must be standalone.
                   1362:         - If the object is referenceable, the specified object must be pinned.
                   1363:         - The reference must already be allocated.
                   1364:    DESCRIPTION:
                   1365:         This function returns a reference to the TDO of a standalone instance. 
                   1366:    RETURNS:
                   1367:         if environment handle or error handle is null, return 
                   1368:         OCI_INVALID_HANDLE.
                   1369:         if operation suceeds, return OCI_SUCCESS. 
                   1370:         if operation fails, return OCI_ERROR. 
                   1371:  */
                   1372: 
                   1373: /*--------------------------- OCIObjectGetObjectRef -------------------------*/
                   1374: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1375: sword OCIObjectGetObjectRef(/*_ OCIEnv *env, OCIError *err, dvoid *object, 
                   1376:                                 OCIRef *object_ref _*/);
                   1377: #else /* ANSI C */
                   1378: sword OCIObjectGetObjectRef(    OCIEnv *env, OCIError *err, dvoid *object, 
                   1379:                                 OCIRef *object_ref    );
                   1380: #endif
                   1381: /*
                   1382:    NAME: OCIObjectGetObjectRef - OCI get the object reference of an 
                   1383:                                  referenceable object
                   1384:    PARAMETERS:
                   1385:         env     (IN/OUT) - OCI environment handle initialized in object mode
                   1386:         err     (IN/OUT) - error handle. If there is an error, it is
                   1387:                           recorded in 'err' and this function returns 
                   1388:                            OCI_ERROR.  The error recorded in 'err' can be 
                   1389:                            retrieved by calling OCIErrorGet().
                   1390:         object      (IN) - pointer to a persistent object
                   1391:         object_ref (OUT) - reference of the given object. The reference must 
                   1392:                            already be allocated.
                   1393:    REQUIRES:
                   1394:         - a valid OCI environment handle must be given.
                   1395:         - The specified object must be pinned.
                   1396:         - The reference must already be allocated.
                   1397:    DESCRIPTION:
                   1398:         This function returns a reference to the given object.  It returns an 
                   1399:         error for values. 
                   1400:    RETURNS:
                   1401:         if environment handle or error handle is null, return 
                   1402:         OCI_INVALID_HANDLE.
                   1403:         if operation suceeds, return OCI_SUCCESS. 
                   1404:         if operation fails, return OCI_ERROR. 
                   1405:  */
                   1406: 
                   1407: /*--------------------------- OCIObjectMakeObjectRef -----------------------*/
                   1408: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1409: sword OCIObjectMakeObjectRef(/*_ OCIEnv *env, OCIError *err,
                   1410:                                  CONST OCISvcCtx *svc, dvoid *table,
                   1411:                                  dvoid **attrlist, ub4 attrcnt, 
                   1412:                                  OCIRef *object_ref _*/);
                   1413: #else /* ANSI C */
                   1414: sword OCIObjectMakeObjectRef(    OCIEnv *env, OCIError *err, 
                   1415:                                  CONST OCISvcCtx *svc, dvoid * table,
                   1416:                                  dvoid **values, ub4 array_len, 
                   1417:                                  OCIRef *object_ref    );
                   1418: #endif
                   1419: /*
                   1420:    NAME: OCIObjectMakeObjectRef - OCI Create an object reference to a 
                   1421:                                  referenceable object.
                   1422:    PARAMETERS:
                   1423:         env     (IN/OUT) - OCI environment handle initialized in object mode
                   1424:         err     (IN/OUT) - error handle. If there is an error, it is
                   1425:                           recorded in 'err' and this function returns 
                   1426:                            OCI_ERROR.  The error recorded in 'err' can be 
                   1427:                            retrieved by calling OCIErrorGet().
                   1428:         svc         (IN) - the service context
                   1429:         table       (IN) - A pointer to the table object (must be pinned)
                   1430:         attrlist    (IN) - A list of values (OCI type values) from which
                   1431:                            the ref is to be created.
                   1432:         attrcnt     (IN)  - The length of the attrlist array. 
                   1433:         object_ref (OUT) - reference of the given object. The reference must 
                   1434:                            already be allocated. 
                   1435:    REQUIRES:
                   1436:         - a valid OCI environment handle must be given.
                   1437:         - The specified table object must be pinned.
                   1438:         - The reference must already be allocated.
                   1439:    DESCRIPTION:
                   1440:         This function creates a reference given the values that make up the 
                   1441:         reference and also a pointer to the table object. 
                   1442:         Based on the table's OID property, whether it is a pk based OID or
                   1443:         a system generated OID, the function creates a sys-generated REF or
                   1444:         a pk based REF.
                   1445:         In case of system generated REFs pass in a OCIRaw which is 16 bytes
                   1446:         long contatining the sys generated OID.
                   1447:         In case of PK refs pass in the OCI equivalent for numbers, chars etc..
                   1448:    RETURNS:
                   1449:         if environment handle or error handle is null, return 
                   1450:         OCI_INVALID_HANDLE.
                   1451:         if operation suceeds, return OCI_SUCCESS. 
                   1452:         if operation fails, return OCI_ERROR. 
                   1453:  */
                   1454: 
                   1455: /*--------------------------- OCIObjectGetPrimaryKeyTypeRef --------------- */ 
                   1456: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1457: sword OCIObjectGetPrimaryKeyTypeRef(/*_ OCIEnv *env, OCIError *err,
                   1458:                                         CONST OCISvcCtx *svc, dvoid *table, 
                   1459:                                         OCIRef *type_ref _*/);
                   1460: #else /* ANSI C */
                   1461: sword OCIObjectGetPrimaryKeyTypeRef( OCIEnv *env, OCIError *err,
                   1462:                                      CONST OCISvcCtx *svc, dvoid *table, 
                   1463:                                      OCIRef *type_ref );
                   1464: #endif
                   1465: /*
                   1466:    NAME: OCIObjectGetPrimaryKeyTypeRef - OCI get the REF to the pk OID type 
                   1467:    PARAMETERS:
                   1468:         env     (IN/OUT) - OCI environment handle initialized in object mode
                   1469:         err     (IN/OUT) - error handle. If there is an error, it is
                   1470:                           recorded in 'err' and this function returns 
                   1471:                            OCI_ERROR.  The error recorded in 'err' can be 
                   1472:                            retrieved by calling OCIErrorGet().
                   1473:         svc     (IN)     - the service context 
                   1474:         table   (IN)     - pointer to the table object
                   1475:         type_ref   (OUT) - reference of the pk type. The reference must 
                   1476:                            already be allocated.
                   1477:    REQUIRES:
                   1478:         - a valid OCI environment handle must be given.
                   1479:         - The specified table object must be pinned.
                   1480:         - The reference must already be allocated.
                   1481:    DESCRIPTION:
                   1482:         This function returns a reference to the pk type.  It returns an 
                   1483:         error for values.  If the table is not a Pk oid table/view, then
                   1484:         it returns error.
                   1485:    RETURNS:
                   1486:         if environment handle or error handle is null, return 
                   1487:         OCI_INVALID_HANDLE.
                   1488:         if operation suceeds, return OCI_SUCCESS. 
                   1489:         if operation fails, return OCI_ERROR. 
                   1490:  */
                   1491: 
                   1492: /*-------------------------- OCIObjectGetInd --------------------------------*/
                   1493: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1494: sword OCIObjectGetInd(/*_ OCIEnv *env, OCIError *err, dvoid *instance, 
                   1495:                           dvoid **null_struct _*/);
                   1496: #else /* ANSI C */
                   1497: sword OCIObjectGetInd(    OCIEnv *env, OCIError *err, dvoid *instance, 
                   1498:                           dvoid **null_struct    );
                   1499: #endif
                   1500: /*
                   1501:    NAME: OCIObjectGetInd - OCI get the null structure of a standalone object  
                   1502:    PARAMETERS:
                   1503:         env     (IN/OUT) - OCI environment handle initialized in object mode
                   1504:         err     (IN/OUT) - error handle. If there is an error, it is
                   1505:                           recorded in 'err' and this function returns 
                   1506:                            OCI_ERROR.  The error recorded in 'err' can be 
                   1507:                            retrieved by calling OCIErrorGet().
                   1508:         instance      (IN) - pointer to the instance 
                   1509:         null_struct (OUT) - null structure 
                   1510:    REQUIRES:
                   1511:         - a valid OCI environment handle must be given.
                   1512:         - The object must be standalone.
                   1513:         - If the object is referenceable, the specified object must be pinned.
                   1514:    DESCRIPTION:
                   1515:         This function returns the null structure of an instance. This function
                   1516:         will allocate the top level memory of the null structure if it is not
                   1517:         already allocated. If an null structure cannot be allocated for the 
                   1518:         instance, then an error is returned. This function only works for 
                   1519:         ADT or row type instance. 
                   1520:    RETURNS:
                   1521:         if environment handle or error handle is null, return 
                   1522:         OCI_INVALID_HANDLE.
                   1523:         if operation suceeds, return OCI_SUCCESS. 
                   1524:         if operation fails, return OCI_ERROR. 
                   1525:  */
                   1526: 
                   1527: /*--------------------------- OCIObjectExists --------------------------------*/
                   1528: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1529: sword OCIObjectExists(/*_ OCIEnv *env, OCIError *err, dvoid *ins, 
                   1530:                          boolean *exist _*/); 
                   1531: #else /* ANSI C */
                   1532: sword OCIObjectExists(OCIEnv *env, OCIError *err, dvoid *ins, boolean *exist); 
                   1533: #endif
                   1534: /*
                   1535:    NAME: OCIObjectExist - OCI checks if the object exists 
                   1536:    PARAMETERS:
                   1537:         env       (IN/OUT) - OCI environment handle initialized in object mode
                   1538:         err       (IN/OUT) - error handle. If there is an error, it is
                   1539:                             recorded in 'err' and this function returns 
                   1540:                              OCI_ERROR.  The error recorded in 'err' can be 
                   1541:                              retrieved by calling OCIErrorGet().
                   1542:         ins           (IN) - pointer to an instance 
                   1543:         exist        (OUT) - return TRUE if the object exists
                   1544:    REQUIRES:
                   1545:         - a valid OCI environment handle must be given.
                   1546:         - The object must be standalone.
                   1547:         - if object is a referenceable, it must be pinned.
                   1548:    DESCRIPTION:
                   1549:         This function returns the existence of an instance. If the instance
                   1550:         is a value, this function always returns TRUE.
                   1551:    RETURNS:
                   1552:         if environment handle or error handle is null, return 
                   1553:         OCI_INVALID_HANDLE.
                   1554:         if operation suceeds, return OCI_SUCCESS. 
                   1555:         if operation fails, return OCI_ERROR. 
                   1556:  */
                   1557: 
                   1558: /*--------------------------- OCIObjectGetProperty ---------------------------*/
                   1559: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1560: sword OCIObjectGetProperty(/*_ OCIEnv *envh, OCIError *errh, 
                   1561:                                CONST dvoid *obj, OCIObjectPropId propertyId,
                   1562:                               dvoid *property, ub4 *size _*/);
                   1563: #else /* ANSI C */
                   1564: sword OCIObjectGetProperty(OCIEnv *envh, OCIError *errh, CONST dvoid *obj, 
                   1565:                            OCIObjectPropId propertyId,
                   1566:                           dvoid *property, ub4 *size );
                   1567: #endif
                   1568: /*
                   1569:    NAME: OCIObjectGetProperty - OCIObject Get Property of given object
                   1570:    PARAMETERS:
                   1571:         env       (IN/OUT) - OCI environment handle initialized in object mode
                   1572:         err       (IN/OUT) - error handle. If there is an error, it is
                   1573:                              recorded in 'err' and this function returns
                   1574:                              OCI_ERROR.  The error recorded in 'err' can be
                   1575:                              retrieved by calling OCIErrorGet().
                   1576:         obj           (IN) - object whose property is returned
                   1577:        propertyId    (IN) - id which identifies the desired property
                   1578:         property     (OUT) - buffer into which the desired property is
                   1579:                             copied
                   1580:        size      (IN/OUT) - on input specifies the size of the property buffer
                   1581:                             passed by caller, on output will contain the 
                   1582:                             size in bytes of the property returned.
                   1583:                             This parameter is required for string type 
                   1584:                             properties only (e.g OCI_OBJECTPROP_SCHEMA,
                   1585:                             OCI_OBJECTPROP_TABLE). For non-string
                   1586:                              properties this parameter is ignored since
                   1587:                             the size is fixed.
                   1588:    DESCRIPTION:
                   1589:         This function returns the specified property of the object.
                   1590:        The desired property is identified by 'propertyId'. The property
                   1591:        value is copied into 'property' and for string typed properties
                   1592:        the string size is returned via 'size'. 
                   1593:        
                   1594:        Objects are classified as persistent, transient and value
                   1595:        depending upon the lifetime and referenceability of the object.
                   1596:        Some of the properties are applicable only to persistent
                   1597:        objects and some others only apply to persistent and 
                   1598:        transient objects. An error is returned if the user tries to 
                   1599:        get a property which in not applicable to the given object. 
                   1600:        To avoid such an error, the user should first check whether
                   1601:        the object is persistent or transient or value 
                   1602:        (OCI_OBJECTPROP_LIFETIME property) and then appropriately
                   1603:        query for other properties.
                   1604: 
                   1605:        The different property ids and the corresponding type of 
                   1606:        'property' argument is given below.
                   1607: 
                   1608:           OCI_OBJECTPROP_LIFETIME 
                   1609:            This identifies whether the given object is a persistent
                   1610:            object (OCI_OBJECT_PERSISTENT) or a 
                   1611:            transient object (OCI_OBJECT_TRANSIENT) or a
                   1612:            value instance (OCI_OBJECT_VALUE).
                   1613:            'property' argument must be a pointer to a variable of 
                   1614:            type OCIObjectLifetime.
                   1615:            
                   1616:          OCI_OBJECTPROP_SCHEMA
                   1617:            This returns the schema name of the table in which the 
                   1618:             object exists. An error is returned if the given object 
                   1619:            points to a transient instance or a value. If the input 
                   1620:            buffer is not big enough to hold the schema name an error 
                   1621:            is returned, the error message will communicate the 
                   1622:            required size. Upon success, the size of the returned 
                   1623:            schema name in bytes is returned via 'size'.
                   1624:            'property' argument must be an array of type text and 'size'
                   1625:            should be set to size of array in bytes by the caller.
                   1626: 
                   1627:           OCI_OBJECTPROP_TABLE
                   1628:            This returns the table name in which the object exists. An 
                   1629:            error is returned if the given object points to a 
                   1630:            transient instance or a value. If the input buffer is not 
                   1631:            big enough to hold the table name an error is returned, 
                   1632:            the error message will communicate the required size. Upon 
                   1633:            success, the size of the returned table name in bytes is 
                   1634:            returned via 'size'. 'property' argument must be an array 
                   1635:            of type text and 'size' should be set to size of array in 
                   1636:            bytes by the caller.
                   1637:            
                   1638:           OCI_OBJECTPROP_PIN_DURATION
                   1639:            This returns the pin duration of the object.
                   1640:            An error is returned if the given object points to a value 
                   1641:            instance. Valid pin durations are: OCI_DURATION_SESSION and
                   1642:            OCI_DURATION_TRANS.
                   1643:            'property' argument must be a pointer to a variable of type 
                   1644:            OCIDuration.
                   1645:            
                   1646:           OCI_OBJECTPROP_ALLOC_DURATION
                   1647:            This returns the allocation duration of the object.
                   1648:            Valid allocation durations are: OCI_DURATION_SESSION and
                   1649:            OCI_DURATION_TRANS.
                   1650:            'property' argument must be a pointer to a variable of type 
                   1651:            OCIDuration.
                   1652:            
                   1653:           OCI_OBJECTPROP_LOCK
                   1654:            This returns the lock status of the 
                   1655:            object. The possible lock status is enumerated by OCILockOpt.
                   1656:            An error is returned if the given object points to a transient
                   1657:            or value instance.
                   1658:            'property' argument must be a pointer to a variable of 
                   1659:            type OCILockOpt.
                   1660:            Note, the lock status of an object can also be retrieved by
                   1661:            calling OCIObjectIsLocked().
                   1662: 
                   1663:           OCI_OBJECTPROP_MARKSTATUS
                   1664:            This returns the status flag which indicates whether the
                   1665:            object is a new object, updated object and/or deleted object.
                   1666:            The following macros can be used to test the mark status
                   1667:            flag:
                   1668: 
                   1669:               OCI_OBJECT_IS_UPDATED(flag)
                   1670:               OCI_OBJECT_IS_DELETED(flag)
                   1671:               OCI_OBJECT_IS_NEW(flag)
                   1672:               OCI_OBJECT_IS_DIRTY(flag)
                   1673: 
                   1674:            An object is dirty if it is a new object or marked deleted or 
                   1675:             marked updated.
                   1676:            An error is returned if the given object points to a transient
                   1677:            or value instance. 'property' argument must be of type 
                   1678:            OCIObjectMarkStatus.
                   1679:            
                   1680:           OCI_OBJECTPROP_VIEW
                   1681:            This identifies whether the specified object is a view object
                   1682:            or not. If property value returned is TRUE, it indicates the
                   1683:            object is a view otherwise it is not.
                   1684:            'property' argument must be of type boolean.
                   1685: 
                   1686:    RETURNS:
                   1687:         if environment handle or error handle is null, return
                   1688:         OCI_INVALID_HANDLE.
                   1689:         if operation suceeds, return OCI_SUCCESS.
                   1690:         if operation fails, return OCI_ERROR. Possible errors are TBD
                   1691:  */
                   1692: 
                   1693: /*---------------------------- OCIObjectIsLocked --------------------------*/
                   1694: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1695: sword OCIObjectIsLocked(/*_ OCIEnv *env, OCIError *err, dvoid *ins,
                   1696:                               boolean *lock _*/);
                   1697: #else /* ANSI C */
                   1698: sword OCIObjectIsLocked(    OCIEnv *env, OCIError *err, dvoid *ins,
                   1699:                               boolean *lock);
                   1700: #endif
                   1701: /*
                   1702:    NAME: OCIObjectIsLocked - OCI get the lock status of a standalone object
                   1703:    PARAMETERS:
                   1704:         env       (IN/OUT) - OCI environment handle initialized in object mode
                   1705:         err       (IN/OUT) - error handle. If there is an error, it is
                   1706:                              recorded in 'err' and this function returns
                   1707:                              OCI_ERROR.  The error recorded in 'err' can be
                   1708:                              retrieved by calling OCIErrorGet().
                   1709:         ins           (IN) - pointer to an instance
                   1710:         lock         (OUT) - return value for the lock status.
                   1711:    REQUIRES:
                   1712:         - a valid OCI environment handle must be given.
                   1713:         - The instance must be standalone.
                   1714:         - If the object is referenceable, the specified object must be pinned.
                   1715:    DESCRIPTION:
                   1716:         This function returns the lock status of an instance. If the instance
                   1717:         is a value, this function always returns FALSE.
                   1718:    RETURNS:
                   1719:         if environment handle or error handle is null, return
                   1720:         OCI_INVALID_HANDLE.
                   1721:         if operation suceeds, return OCI_SUCCESS.
                   1722:         if operation fails, return OCI_ERROR.
                   1723:  */
                   1724: 
                   1725: /*--------------------------- OCIObjectIsDirty ------------------------------*/
                   1726: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1727: sword OCIObjectIsDirty(/*_ OCIEnv *env, OCIError *err, dvoid *ins,
                   1728:                            boolean *dirty _*/);
                   1729: #else /* ANSI C */
                   1730: sword OCIObjectIsDirty(    OCIEnv *env, OCIError *err, dvoid *ins,
                   1731:                            boolean *dirty);
                   1732: #endif
                   1733: /*
                   1734:    NAME: OCIObjectIsDirty - OCI get the dirty status of a standalone object
                   1735:    PARAMETERS:
                   1736:         env       (IN/OUT) - OCI environment handle initialized in object mode
                   1737:         err       (IN/OUT) - error handle. If there is an error, it is
                   1738:                              recorded in 'err' and this function returns
                   1739:                              OCI_ERROR.  The error recorded in 'err' can be
                   1740:                              retrieved by calling OCIErrorGet().
                   1741:         ins           (IN) - pointer to an instance
                   1742:         dirty        (OUT) - return value for the dirty status.
                   1743:    REQUIRES:
                   1744:         - a valid OCI environment handle must be given.
                   1745:         - The instance must be standalone.
                   1746:         - if instance is an object, the instance must be pinned.
                   1747:    DESCRIPTION:
                   1748:         This function returns the dirty status of an instance. If the instance
                   1749:         is a value, this function always returns FALSE.
                   1750:    RETURNS:
                   1751:         if environment handle or error handle is null, return
                   1752:         OCI_INVALID_HANDLE.
                   1753:         if operation suceeds, return OCI_SUCCESS.
                   1754:         if operation fails, return OCI_ERROR.
                   1755:  */
                   1756: 
                   1757: /*--------------------------- OCIObjectPinTable -----------------------------*/
                   1758: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1759: sword OCIObjectPinTable(/*_ OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, 
                   1760:                   CONST text *schema_name, 
                   1761:                   ub4 s_n_length, CONST text *object_name, ub4 o_n_length, 
                   1762:                   CONST OCIRef *scope_obj_ref, OCIDuration pin_duration, 
                   1763:                   dvoid** object _*/);
                   1764: #else /* ANSI C */
                   1765: sword OCIObjectPinTable(    OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, 
                   1766:                   CONST text *schema_name, 
                   1767:                   ub4 s_n_length, CONST text *object_name, ub4 o_n_length, 
                   1768:                   CONST OCIRef *scope_obj_ref, OCIDuration pin_duration, 
                   1769:                   dvoid** object    );
                   1770: #endif
                   1771: /*
                   1772:    NAME: OCIObjectPinTable - OCI get table object 
                   1773:    PARAMETERS:
                   1774:         env       (IN/OUT) - OCI environment handle initialized in object mode
                   1775:         err       (IN/OUT) - error handle. If there is an error, it is
                   1776:                             recorded in 'err' and this function returns 
                   1777:                              OCI_ERROR.  The error recorded in 'err' can be 
                   1778:                              retrieved by calling OCIErrorGet().
                   1779:         svc                     (IN) - OCI service context handle
                   1780:         schema_name   (IN, optional) - schema name of the table 
                   1781:         s_n_length    (IN, optional) - length of the schema name
                   1782:         object_name   (IN) - name of the table 
                   1783:         o_n_length    (IN) - length of the table name
                   1784:         scope_obj_ref (IN, optional) - reference of the scoping object
                   1785:         pin_duration  (IN) - pin duration. See description in OCIObjectPin(). 
                   1786:         object       (OUT) - the pinned table object
                   1787:    REQUIRES:
                   1788:         - a valid OCI environment handle must be given.
                   1789:    DESCRIPTION:
                   1790:         This function pin a table object with the specified pin duration. 
                   1791:         The client can unpin the object by calling OCIObjectUnpin(). See 
                   1792:         OCIObjectPin() and OCIObjectUnpin() for more information about pinning
                   1793:         and unpinning. 
                   1794:    RETURNS:
                   1795:         if environment handle or error handle is null, return 
                   1796:         OCI_INVALID_HANDLE.
                   1797:         if operation suceeds, return OCI_SUCCESS. 
                   1798:         if operation fails, return OCI_ERROR. 
                   1799:  */
                   1800: 
                   1801: /*------------------------- OCIObjectArrayPin -------------------------------*/
                   1802: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1803: sword OCIObjectArrayPin(/*_ OCIEnv *env, OCIError *err, OCIRef **ref_array, 
                   1804:                ub4 array_size, OCIComplexObject **cor_array, 
                   1805:                 ub4 cor_array_size, OCIPinOpt pin_option, 
                   1806:                OCIDuration pin_duration, OCILockOpt lock,  
                   1807:                 dvoid **obj_array, ub4 *pos _*/);
                   1808: #else /* ANSI C */
                   1809: sword OCIObjectArrayPin(OCIEnv *env, OCIError *err, OCIRef **ref_array, 
                   1810:                   ub4 array_size, OCIComplexObject **cor_array,
                   1811:                   ub4 cor_array_size, OCIPinOpt pin_option, 
                   1812:                   OCIDuration pin_duration, OCILockOpt lock, 
                   1813:                   dvoid **obj_array, ub4 *pos    );
                   1814: #endif
                   1815: /*
                   1816:    NAME: OCIObjectArrayPin - ORIO array pin 
                   1817:    PARAMETERS:
                   1818:         env       (IN/OUT) - OCI environment handle initialized in object mode
                   1819:         err       (IN/OUT) - error handle. If there is an error, it is
                   1820:                             recorded in 'err' and this function returns 
                   1821:                              OCI_ERROR.  The error recorded in 'err' can be 
                   1822:                              retrieved by calling OCIErrorGet().
                   1823:         ref_array     (IN) - array of references to be pinned 
                   1824:         array_size    (IN) - number of elements in the array of references 
                   1825:         pin_option    (IN) - pin option. See OCIObjectPin().
                   1826:         pin_duration  (IN) - pin duration. See OCIObjectPin(). 
                   1827:         lock_option   (IN) - lock option. See OCIObjectPin().
                   1828:         obj_array    (OUT) - If this argument is not NULL, the pinned objects 
                   1829:                              will be returned in the array. The user must 
                   1830:                              allocate this array with element type being 
                   1831:                              'dvoid *'. The size of this array is identical to
                   1832:                              'array'. 
                   1833:         pos          (OUT) - If there is an error, this argument will contain
                   1834:                             the element that is causing the error.  Note that
                   1835:                             this argument is set to 1 for the first element in
                   1836:                              the ref_array. 
                   1837:    REQUIRE:
                   1838:         - a valid OCI environment handle must be given.
                   1839:         - If 'obj_array' is not NULL, then it must already be allocated and
                   1840:              the size of 'obj_array' is 'array_size'. 
                   1841:    DESCRIPTION:
                   1842:         This function pin an array of references.  All the pinned objects are 
                   1843:         retrieved from the database in one network roundtrip.  If the user 
                   1844:         specifies an output array ('obj_array'), then the address of the 
                   1845:         pinned objects will be assigned to the elements in the array. See
                   1846:         OCIObjectPin() for more information about pinning.
                   1847:    RETURNS:
                   1848:         if environment handle or error handle is null, return 
                   1849:         OCI_INVALID_HANDLE.
                   1850:         if operation suceeds, return OCI_SUCCESS. 
                   1851:         if operation fails, return OCI_ERROR. 
                   1852:  */
                   1853: 
                   1854: /*---------------------------------------------------------------------------*/
                   1855: /*                           HEAP/CACHE OPERATIONS                           */
                   1856: /*---------------------------------------------------------------------------*/
                   1857: 
                   1858: /*--------------------------- OCICacheFlush ---------------------------------*/
                   1859: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1860: sword OCICacheFlush(/*_ OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, 
                   1861:                   dvoid *context, OCIRef *(*get)(dvoid *context, ub1 *last),
                   1862:                   OCIRef **ref _*/);
                   1863: #else /* ANSI C */
                   1864: sword OCICacheFlush(    OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, 
                   1865:                   dvoid *context, OCIRef *(*get)(dvoid *context, ub1 *last),
                   1866:                   OCIRef **ref  );
                   1867: #endif
                   1868: /*
                   1869:    NAME: OCICacheFlush - OCI flush persistent objects 
                   1870:    PARAMETERS:
                   1871:         env (IN/OUT) - OCI environment handle initialized in object mode
                   1872:         err (IN/OUT) - error handle. If there is an error, it is
                   1873:                       recorded in 'err' and this function returns 
                   1874:                       OCI_ERROR.  The error recorded in 'err' can be 
                   1875:                       retrieved by calling OCIErrorGet().
                   1876:         svc      (IN) [optional] - OCI service context.  If null pointer is
                   1877:                       specified, then the dirty objects in all connections
                   1878:                       will be flushed.
                   1879:         context  (IN) [optional] - specifies an user context that is an 
                   1880:                       argument to the client callback function 'get'. This 
                   1881:                       parameter is set to NULL if there is no user context.
                   1882:         get      (IN) [optional] - an client-defined function which acts an 
                   1883:                       iterator to retrieve a batch of dirty objects that need 
                   1884:                       to be flushed. If the function is not NULL, this function
                   1885:                       will be called to get a reference of a dirty object.  
                   1886:                       This is repeated until a null reference is returned by 
                   1887:                       the client function or the parameter 'last' is set to 
                   1888:                       TRUE. The parameter 'context' is passed to get() 
                   1889:                       for each invocation of the client function.  This 
                   1890:                       parameter should be NULL if user callback is not given.
                   1891:                       If the object that is returned by the client function is
                   1892:                       not a dirtied persistent object, the object is ignored.
                   1893:                       All the objects that are returned from the client
                   1894:                       function must be from newed or pinned the same service 
                   1895:                       context, otherwise, an error is signalled. Note that the 
                   1896:                       returned objects are flushed in the order in which they
                   1897:                       are marked dirty.
                   1898:         ref     (OUT) [optional] - if there is an error in flushing the 
                   1899:                       objects, (*ref) will point to the object that
                   1900:                       is causing the error.  If 'ref' is NULL, then the object 
                   1901:                       will not be returned.  If '*ref' is NULL, then a 
                   1902:                       reference will be allocated and set to point to the 
                   1903:                       object.  If '*ref' is not NULL, then the reference of
                   1904:                       the object is copied into the given space. If the
                   1905:                       error is not caused by any of the dirtied object,
                   1906:                       the given ref is initalized to be a NULL reference
                   1907:                       (OCIRefIsNull(*ref) is TRUE).
                   1908:    REQUIRES:
                   1909:         - a valid OCI environment handle must be given.
                   1910:    DESCRIPTION:
                   1911:         This function flushes the modified persistent objects from the 
                   1912:         environment heap to the server. The objects are flushed in the order 
                   1913:         that they are marked updated or deleted. 
                   1914: 
                   1915:         See OCIObjectFlush() for more information about flushing.
                   1916: 
                   1917:    RETURNS:
                   1918:         if environment handle or error handle is null, return 
                   1919:         OCI_INVALID_HANDLE.
                   1920:         if operation suceeds, return OCI_SUCCESS. 
                   1921:         if operation fails, return OCI_ERROR. 
                   1922:  */
                   1923: 
                   1924: /*--------------------------- OCICacheRefresh -------------------------------*/
                   1925: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1926: sword OCICacheRefresh(/*_ OCIEnv *env,OCIError *err,CONST OCISvcCtx *svc,
                   1927:                   OCIRefreshOpt option, dvoid *context,
                   1928:                   OCIRef *(*get)(dvoid *context), OCIRef **ref _*/);
                   1929: #else /* ANSI C */
                   1930: sword OCICacheRefresh(OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc,
                   1931:                   OCIRefreshOpt option, dvoid *context,
                   1932:                   OCIRef *(*get)(dvoid *context), OCIRef **ref);
                   1933: #endif
                   1934: /*
                   1935:    NAME: OCICacheRefresh - OCI ReFreSh persistent objects 
                   1936:    PARAMETERS:
                   1937:         env (IN/OUT) - OCI environment handle initialized in object mode
                   1938:         err (IN/OUT) - error handle. If there is an error, it is
                   1939:                        recorded in 'err' and this function returns 
                   1940:                        OCI_ERROR.  The error recorded in 'err' can be 
                   1941:                        retrieved by calling OCIErrorGet().
                   1942:         svc     (IN) [optional] - OCI service context.  If null pointer is
                   1943:                       specified, then the persistent objects in all connections
                   1944:                       will be refreshed. 
                   1945:         option   (IN) [optional] - if OCI_REFRESH_LOAD is specified, all
                   1946:                       objects that is loaded within the transaction are
                   1947:                       refreshed. If the option is OCI_REFERSH_LOAD and the
                   1948:                       parameter 'get' is not NULL, this function will ignore
                   1949:                       the parameter. 
                   1950:         context  (IN) [optional] - specifies an user context that is an 
                   1951:                       argument to the client callback function 'get'. This 
                   1952:                       parameter is set to NULL if there is no user context.
                   1953:         get      (IN) [optional] - an client-defined function which acts an 
                   1954:                       iterator to retrieve a batch of objects that need to be
                   1955:                       refreshed. If the function is not NULL, this function
                   1956:                       will be called to get a reference of an object.  If 
                   1957:                       the reference is not NULL, then the object will be 
                   1958:                       refreshed.  These steps are repeated until a null 
                   1959:                       reference is returned by this function.  The parameter
                   1960:                       'context' is passed to get() for each invocation of the
                   1961:                       client function.  This parameter should be NULL if user 
                   1962:                       callback is not given.
                   1963:         ref     (OUT) [optional] - if there is an error in refreshing the
                   1964:                       objects, (*ref) will point to the object that
                   1965:                       is causing the error.  If 'ref' is NULL, then the object
                   1966:                       will not be returned.  If '*ref' is NULL, then a
                   1967:                       reference will be allocated and set to point to the
                   1968:                       object.  If '*ref' is not NULL, then the reference of
                   1969:                       the object is copied into the given space. If the
                   1970:                       error is not caused by any of the object,
                   1971:                       the given ref is initalized to be a NULL reference
                   1972:                       (OCIRefIsNull(*ref) is TRUE).
                   1973:    REQUIRES:
                   1974:         - a valid OCI environment handle must be given.
                   1975:    DESCRIPTION:
                   1976:         This function refreshes all pinned persistent objects. All unpinned 
                   1977:         persistent objects are freed.  See OCIObjectRefresh() for more 
                   1978:         information about refreshing.
                   1979:    RETURNS:
                   1980:         if environment handle or error handle is null, return 
                   1981:         OCI_INVALID_HANDLE.
                   1982:         if operation suceeds, return OCI_SUCCESS. 
                   1983:         if operation fails, return OCI_ERROR. 
                   1984:  */
                   1985: 
                   1986: /*---------------------------- OCICacheUnpin --------------------------------*/
                   1987: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1988: sword OCICacheUnpin(/*_ OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc _*/);
                   1989: #else /* ANSI C */
                   1990: sword OCICacheUnpin(    OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc    );
                   1991: #endif
                   1992: /*
                   1993:    NAME: OCICacheUnpin - OCI UNPin objects 
                   1994:    PARAMETERS:
                   1995:         env (IN/OUT) - OCI environment handle initialized in object mode
                   1996:         err (IN/OUT) - error handle. If there is an error, it is
                   1997:                        recorded in 'err' and this function returns 
                   1998:                        OCI_ERROR.  The error recorded in 'err' can be 
                   1999:                        retrieved by calling OCIErrorGet().
                   2000:         svc     (IN) [optional] - OCI service context. If null pointer is
                   2001:                        specified, then the objects in all connections
                   2002:                        will be unpinned.
                   2003:    REQUIRES:
                   2004:         - a valid OCI environment handle must be given.
                   2005:    DESCRIPTION:
                   2006:         If a connection is specified, this function completely unpins the 
                   2007:         persistent objects in that connection. Otherwise, all persistent 
                   2008:         objects in the heap are completely unpinned. All transient objects in 
                   2009:         the heap are also completely unpinned. See OCIObjectUnpin() for more 
                   2010:         information about unpinning.
                   2011:    RETURNS:
                   2012:         if environment handle or error handle is null, return 
                   2013:         OCI_INVALID_HANDLE.
                   2014:         if operation suceeds, return OCI_SUCCESS. 
                   2015:         if operation fails, return OCI_ERROR. 
                   2016:  */
                   2017: 
                   2018: /*----------------------------- OCICacheFree --------------------------------*/
                   2019: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2020: sword OCICacheFree(/*_ OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc _*/); 
                   2021: #else /* ANSI C */
                   2022: sword OCICacheFree(    OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc    ); 
                   2023: #endif
                   2024: /*
                   2025:    NAME: OCICacheFree - OCI FREe instances 
                   2026:    PARAMETERS:
                   2027:         env (IN/OUT) - OCI environment handle initialized in object mode
                   2028:         err (IN/OUT) - error handle. If there is an error, it is
                   2029:                        recorded in 'err' and this function returns 
                   2030:                        OCI_ERROR.  The error recorded in 'err' can be 
                   2031:                        retrieved by calling OCIErrorGet().
                   2032:         svc     (IN) [optional] - OCI service context. If null pointer is
                   2033:                        specified, then the objects in all connections
                   2034:                        will be freed.
                   2035:    REQUIRES:
                   2036:         - a valid OCI environment handle must be given.
                   2037:    DESCRIPTION:
                   2038:         If a connection is specified, this function frees the persistent 
                   2039:         objects, transient objects and values allocated for that connection.  
                   2040:         Otherwise, all persistent objects, transient objects and values in the 
                   2041:         heap are freed. Objects are freed regardless of their pin count.  See 
                   2042:         OCIObjectFree() for more information about freeing an instance.
                   2043:    RETURNS:
                   2044:         if environment handle or error handle is null, return 
                   2045:         OCI_INVALID_HANDLE.
                   2046:         if operation suceeds, return OCI_SUCCESS. 
                   2047:         if operation fails, return OCI_ERROR. 
                   2048: */
                   2049: 
                   2050: /*---------------------------- OCICacheUnmark -------------------------------*/
                   2051: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2052: sword OCICacheUnmark(/*_ OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc _*/);
                   2053: #else /* ANSI C */
                   2054: sword OCICacheUnmark(    OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc    );
                   2055: #endif
                   2056: /*
                   2057:    NAME: OCICacheUnmark - OCI Unmark all dirty objects
                   2058:    PARAMETERS:
                   2059:         env (IN/OUT) - OCI environment handle initialized in object mode
                   2060:         err (IN/OUT) - error handle. If there is an error, it is
                   2061:                        recorded in 'err' and this function returns
                   2062:                        OCI_ERROR.  The error recorded in 'err' can be
                   2063:                        retrieved by calling OCIErrorGet().
                   2064:         svc     (IN) [optional] - OCI service context. If null pointer is
                   2065:                        specified, then the objects in all connections
                   2066:                        will be unmarked. 
                   2067:    REQUIRES:
                   2068:         - a valid OCI environment handle must be given.
                   2069:    DESCRIPTION:
                   2070:         If a connection is specified, this function unmarks all dirty objects 
                   2071:         in that connection.  Otherwise, all dirty objects in the cache are
                   2072:         unmarked. See OCIObjectUnmark() for more information about unmarking
                   2073:         an object.
                   2074:    RETURNS:
                   2075:         if environment handle or error handle is null, return
                   2076:         OCI_INVALID_HANDLE.
                   2077:         if operation suceeds, return OCI_SUCCESS.
                   2078:         if operation fails, return OCI_ERROR.
                   2079:  */
                   2080: 
                   2081: 
                   2082: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2083: sword OCIDurationBegin(/*_ OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, 
                   2084:                            OCIDuration parent, OCIDuration *dur _*/);
                   2085: #else /* ANSI C */ 
                   2086: sword OCIDurationBegin(    OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, 
                   2087:                            OCIDuration parent, OCIDuration *dur    );
                   2088: #endif
                   2089: /*
                   2090:    NAME: OCIDurationBegin - OCI DURATION BEGIN
                   2091:    PARAMETERS:
                   2092:         env  (IN/OUT) - OCI environment handle initialized in object mode
                   2093:                        This should be passed NULL, when cartridge services
                   2094:                        are to be used.
                   2095:         err  (IN/OUT) - error handle. If there is an error, it is
                   2096:                         recorded in 'err' and this function returns OCI_ERROR.
                   2097:                         The error recorded in 'err' can be retrieved by calling
                   2098:                        OCIErrorGet().
                   2099:         svc  (IN/OUT) - OCI service handle.  
                   2100:        parent   (IN) - parent for the duration to be started.
                   2101:        dur     (OUT) - newly created user duration 
                   2102:    REQUIRES:
                   2103:         - a valid OCI environment handle must be given for non-cartridge
                   2104:          services.
                   2105:        - For cartridge services, NULL should be given for environment handle
                   2106:        - A valid service handle must be given in all cases.
                   2107:    DESCRIPTION:
                   2108:         This function starts a new user duration.  A user can have multiple
                   2109:         active user durations simultaneously. The user durations do not have
                   2110:         to be nested.
                   2111:  
                   2112:         The object subsystem predefines 3 durations :
                   2113:           1) session     - memory allocated with session duration comes from
                   2114:                            the UGA heap (OCI_DURATION_SESSION). A session 
                   2115:                           duration terminates at the end of the user session.
                   2116:           2) transaction - memory allocated with transaction duration comes
                   2117:                            from the UGA heap (OCI_DURATION_TRANS). A trans-
                   2118:                           action duration terminates at the end of the user
                   2119:                            transaction.
                   2120:           3) call        - memory allocated with call duration comes from PGA
                   2121:                            heap (OCI_DURATION_CALL). A call duration terminates
                   2122:                           at the end of the user call.
                   2123:  
                   2124:         Each user duration has a parent duration.  A parent duration can be a
                   2125:         predefined duration or another user duration.  The relationship between
                   2126:         a user duration and its parent duration (child duration) are:
                   2127:  
                   2128:          1) An user duration is nested within the parent duration. When its
                   2129:              parent duration terminates, the user duration will also terminate.
                   2130:          2) The memory allocated with an user duration comes from the heap of
                   2131:              its parent duration. For example, if the parent duration of an
                   2132:              user duration is call, then the memory allocated with the user
                   2133:              duration will also come from the PGA heap.
                   2134: 
                   2135:        This function can be used as both part of cartridge services as well 
                   2136:        as without cartridge services.
                   2137:        The difference in the function in the case of cartridge and 
                   2138:        non-cartridge services is:
                   2139:                In case of cartridge services, as descibed above a new user
                   2140:        duration is created as a child of the "parent" duration.
                   2141:                But when used for non-cartridge purposes, when a pre-defined
                   2142:        duration is passed in as parent, it is mapped to the cache duration
                   2143:        for that connection (which is created if not already present) and 
                   2144:        the new user duration will be child of the cache duration.
                   2145: 
                   2146:    RETURNS:
                   2147:         if environment handle and service handle is null or if error 
                   2148:        handle is null return OCI_INVALID_HANDLE.
                   2149:         if operation suceeds, return OCI_SUCCESS.
                   2150:         if operation fails, return OCI_ERROR.
                   2151:  */
                   2152: 
                   2153: 
                   2154: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2155: sword OCIDurationEnd(/*_ OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, 
                   2156:                          OCIDuration duration _*/);
                   2157: #else /* ANSI C */
                   2158: sword OCIDurationEnd(    OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, 
                   2159:                          OCIDuration duration    );
                   2160: #endif
                   2161: /*
                   2162:    NAME: OCIDurationEnd - OCI DURATION END
                   2163:    PARAMETERS:
                   2164:         env  (IN/OUT) - OCI environment handle initialized in object mode
                   2165:                        This should be passed NULL, when cartridge services
                   2166:                        are to be used.
                   2167:         err  (IN/OUT) - error handle. If there is an error, it is
                   2168:                         recorded in 'err' and this function returns OCI_ERROR.
                   2169:                         The error recorded in 'err' can be retrieved by calling
                   2170:                        OCIErrorGet().
                   2171:         svc  (IN/OUT) - OCI service handle.  
                   2172:        dur     (OUT) - a previously created user duration using 
                   2173:                        OCIDurationBegin()
                   2174:    REQUIRES:
                   2175:         - a valid OCI environment handle must be given for non-cartridge
                   2176:          services.
                   2177:        - For cartridge services, NULL should be given for environment handle
                   2178:        - A valid service handle must be given in all cases.
                   2179:    DESCRIPTION:
                   2180:         This function terminates a user duration.  All memory allocated for
                   2181:        this duration is freed.
                   2182: 
                   2183:        This function can be used as both part of cartridge services as well 
                   2184:        as without cartridge services.  In both cased, the heap duration
                   2185:        is freed and all the allocated memory for that duration is freed.
                   2186:        The difference in the function in the case of cartridge and 
                   2187:        non-cartridge services is:
                   2188:                In case of non-cartridge services, if the duration is pre-
                   2189:        defined, the associated cache duration (see OCIDurationBegin())
                   2190:        is also terminated and the following is done.
                   2191:           1) The child durations are terminated.
                   2192:           2) All objects pinned for this duration are unpinned.
                   2193:           3) All instances allocated for this duration are freed.
                   2194: 
                   2195:                In case of cartridge services, only the heap duration is
                   2196:        freed.  All the context entries allocated for that duration are 
                   2197:        freed from the context hash table..
                   2198: 
                   2199:    RETURNS:
                   2200:         if environment handle and service handle is null or if error 
                   2201:        handle is null return OCI_INVALID_HANDLE.
                   2202:         if operation suceeds, return OCI_SUCCESS.
                   2203:         if operation fails, return OCI_ERROR.
                   2204:  */
                   2205: 
                   2206: /******************************************************************************
                   2207: **          DO  NOT  USE  THE  FUNCTIONS  BELOW!                             **
                   2208: **          UNSUPPORTED INTERFACE                                            **
                   2209: **          WILL BE REMOVED/CHANGED IN A FUTURE RELEASE                      **
                   2210: ******************************************************************************/
                   2211: 
                   2212: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2213: sword OCIDurationGetParent(/*_ OCIEnv *env, OCIError *err, 
                   2214:                                OCIDuration duration, OCIDuration *parent _*/);
                   2215: #else /* ANSI C */
                   2216: sword OCIDurationGetParent(    OCIEnv *env, OCIError *err, 
                   2217:                                OCIDuration duration, OCIDuration *parent    );
                   2218: #endif
                   2219: 
                   2220: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2221: sword OCIObjectAlwaysLatest(/*_ OCIEnv *env, OCIError *err, dvoid *object _*/);
                   2222: #else /* ANSI C */
                   2223: sword OCIObjectAlwaysLatest(    OCIEnv *env, OCIError *err, dvoid *object    );
                   2224: #endif
                   2225: 
                   2226: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2227: sword OCIObjectNotAlwaysLatest(/*_ OCIEnv *env, OCIError *err,
                   2228:                                    dvoid *object _*/);
                   2229: #else /* ANSI C */
                   2230: sword OCIObjectNotAlwaysLatest(    OCIEnv *env, OCIError *err, 
                   2231:                                    dvoid *object    );
                   2232: #endif
                   2233: 
                   2234: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2235: sword OCIObjectFlushRefresh(/*_ OCIEnv *env, OCIError *err, dvoid *object _*/);
                   2236: #else /* ANSI C */
                   2237: sword OCIObjectFlushRefresh(    OCIEnv *env, OCIError *err, dvoid *object);
                   2238: #endif
                   2239: 
                   2240: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2241: sword OCIObjectIsLoaded(/*_ OCIEnv *env, OCIError *err, dvoid *ins,
                   2242:                               boolean *load _*/);
                   2243: #else /* ANSI C */
                   2244: sword OCIObjectIsLoaded(    OCIEnv *env, OCIError *err, dvoid *ins, 
                   2245:                               boolean *load);
                   2246: #endif
                   2247: 
                   2248: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2249: sword OCIObjectIsDirtied(/*_ OCIEnv *env, OCIError *err, dvoid *ins,
                   2250:                               boolean *dirty _*/);
                   2251: #else /* ANSI C */
                   2252: sword OCIObjectIsDirtied(    OCIEnv *env, OCIError *err, dvoid *ins,
                   2253:                               boolean *dirty);
                   2254: #endif
                   2255: 
                   2256: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2257: sword OCICacheGetObjects(/*_    OCIEnv *env, OCIError *err,
                   2258:                                 CONST OCISvcCtx *svc,
                   2259:                                 OCIObjectProperty property,
                   2260:                                 dvoid *client_context,
                   2261:                                 void (*client_callback)(
                   2262:                                     dvoid *client_context,
                   2263:                                     dvoid *object ) _*/);
                   2264: #else /* ANSI C */
                   2265: sword OCICacheGetObjects(       OCIEnv *env, OCIError *err,
                   2266:                                 CONST OCISvcCtx *svc,
                   2267:                                 OCIObjectProperty property,
                   2268:                                 dvoid *client_context,
                   2269:                                 void (*client_callback)(
                   2270:                                     dvoid *client_context,
                   2271:                                     dvoid *object  ));
                   2272: #endif
                   2273: 
                   2274: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2275: sword OCICacheRegister(/*_   OCIEnv *env, OCIError *err,
                   2276:                              OCIObjectEvent event,
                   2277:                              dvoid *client_context,
                   2278:                              void (*client_callback)(
                   2279:                                     dvoid *client_context,
                   2280:                                     OCIObjectEvent event,
                   2281:                                     dvoid *object ) _*/);
                   2282: #else /* ANSI C */
                   2283: sword OCICacheRegister(      OCIEnv *env, OCIError *err,
                   2284:                              OCIObjectEvent event,
                   2285:                              dvoid *client_context,
                   2286:                              void (*client_callback)(
                   2287:                                     dvoid *client_context,
                   2288:                                     OCIObjectEvent event,
                   2289:                                     dvoid *object));
                   2290: #endif
                   2291: 
                   2292: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2293: sword OCICacheFlushRefresh(/*_ OCIEnv *env, OCIError *err, 
                   2294:                                CONST OCISvcCtx *svc, dvoid *context,
                   2295:                                OCIRef *(*get)(dvoid *context, ub1 *last),
                   2296:                                OCIRef **ref _*/);
                   2297: #else /* ANSI C */
                   2298: sword OCICacheFlushRefresh(    OCIEnv *env, OCIError *err, 
                   2299:                                CONST OCISvcCtx *svc, dvoid *context,
                   2300:                                OCIRef *(*get)(dvoid *context, ub1 *last),
                   2301:                                OCIRef **ref    );
                   2302: #endif
                   2303: 
                   2304: #endif /* ORI_ORACLE */

E-mail: