Annotation of win32/sql/oracle/include/oci/ori.h, revision 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: