Annotation of win32/sql/oracle/include/oci/orid.h, revision 1.1

1.1     ! parser      1: /* Copyright (c) Oracle Corporation 1994, 1996, 1997, 1999.  All Rights Reserved. */
        !             2: 
        !             3: /*
        !             4:   Author:             Tin Nguyen
        !             5:   Date:               02/07/94
        !             6:   Source documents:   "Functional Specification for C Object Interface, Object
        !             7:                        Management Subsystem", "Oracle C Coding Standards
        !             8:                       version 2.2", and the header file template
        !             9:   Rule sets:          the generic and .h file rule sets
        !            10:   Quality status:     not exited
        !            11:   Identification tag: [ one or more letters to identify the .h file ] 
        !            12:   Revision code:      [ date of the last revision of the .h file ]
        !            13: 
        !            14:   Note to the user of this header file:
        !            15: 
        !            16:     Anything in this header file that is marked private is not supported and
        !            17:     must not be used.  Private sections are included in the header file to 
        !            18:     improve internal maintenance.
        !            19: 
        !            20:   NAME
        !            21: 
        !            22:     ORID - Oracle Object Interface for Dynamic Data Access
        !            23: 
        !            24:   DESCRIPTION
        !            25: 
        !            26:     This file contains declarations for C object interface functions including
        !            27:     the dynamic object data access operations that allow callers to dynamically
        !            28:     access and manipulate objects; these operations include getting and setting
        !            29:     attributes of an object.  These dynamic object operations are for accessing
        !            30:     and manipulation objects whose types are not known at compile-time.
        !            31: 
        !            32:   RELATED DOCUMENTS
        !            33:   
        !            34:      Functional Specification for C Object Interface / Object Management System
        !            35: 
        !            36:   PUBLIC FUNCTIONS
        !            37: 
        !            38:     OCIObjectSetAttr - ORID SET attribute value
        !            39:     OCIObjectGetAttr - ORID GET attribute value
        !            40: 
        !            41:   PRIVATE FUNCTIONS
        !            42: 
        !            43:     None
        !            44: 
        !            45:   EXAMPLES 
        !            46: 
        !            47:     EXAMPLE 1
        !            48: 
        !            49:     /o
        !            50:      o This example illustrates how an interative program can use the dynamic
        !            51:      o attribute access to display and modify attributes of an ADT instance.
        !            52:      o The interactive program does not know the type of the object at 
        !            53:      o compile time.
        !            54:      o/
        !            55: 
        !            56:     void display(adt_ref, object, null_struct, names, names_count, 
        !            57:                           names_length, indexes, indexes_count)
        !            58:     {
        !            59:       /o Pin the ADT o/
        !            60:       if (OCIObjectPin(env, &adt_ref, OROOPOCUR, OROOPDTRA, OROOLMNON, &adt) 
        !            61:             != OROSTASUC)
        !            62:          /o error handling code o/ 
        !            63: 
        !            64:       /o 
        !            65:        o Call the type manager to obtain all the attributes in the object.
        !            66:        o Display the content of each attribute in the ADT instance. If the 
        !            67:        o attribute is an array, display each element of the array. If the
        !            68:        o attribute is an ADT instance, recursively call this routine to
        !            69:        o display the embedded ADT instance.
        !            70:        o/ 
        !            71:       numAttrs = OCITypeAttrs(env, adt);
        !            72:       for (i= 1; i <= numAttrs; i++)
        !            73:       {
        !            74:          /o get attribute descriptor o/
        !            75:          if (ortgabp(env, adt, i, &ado_ref, &ado) != OROSTASUC)
        !            76:            /o error handling code o/ 
        !            77: 
        !            78:          /o get attribute name o/
        !            79:          names[names_count] = OCITypeElemName(env, ado, 
        !            80:                    &names_length[names_count]);
        !            81:       
        !            82:          /o dynamically get the attr o/
        !            83:          if (OCIObjectGetAttr(env, object, null_struct, 0, adt_ref, names, 
        !            84:                      names_length, names_count+1, indexes, indexes_count, 0, 
        !            85:                      &null, &null_info, &attr) != OROSTASUC)
        !            86:             /o error handling code o/  
        !            87: 
        !            88:          /o check if attribute is null o/
        !            89:          if (null) continue;
        !            90: 
        !            91:          /o get typecode of attribute o/
        !            92:          typecode = OCITypeElemTypeCode(env, ado);
        !            93: 
        !            94:          /o if attribute is a varray, display each element in varray o/
        !            95:          if (typecode == OCI_TYPECODE_VARRAY)
        !            96:          {
        !            97:             /o get the reference to the type of the element of the array o/ 
        !            98:             if (OCITypeElemParameterizedTyper(env, ado, &attr_type_ref) 
        !            99:                != OROSTASUC)
        !           100:                /o error handling code o/ 
        !           101: 
        !           102:             /o get the size of array o/
        !           103:             if (orlasiz(env, &attr_type_ref, (orlva *)attr,  
        !           104:                          &numElm) != OROSTASUC)
        !           105:                /o error handling code o/  
        !           106: 
        !           107:             /o get the typecode of the element of the array o/
        !           108:             if (ortty2r(env, attr_type_ref, &typecode) != OROSTASUC)
        !           109:                /o error handling code o/  
        !           110: 
        !           111:             /o iterate the array o/
        !           112:             for (j=0; j < numElm; j++)
        !           113:             {
        !           114:               /o get an element in the array o/
        !           115:               if (OCIObjectGetAttr(env, attr, null_info, j+1, attr_type_ref,
        !           116:                   names, names_length, 0, indexes, 0, 0, &null, &null_info, 
        !           117:                   &element) != OROSTASUC)
        !           118:                   /o error handling code o/  
        !           119: 
        !           120:               /o check if element is null o/
        !           121:               if (null) continue;
        !           122: 
        !           123:               /o if attr is an ADT instance, recursively call this routine o/
        !           124:               if (typecode == OCI_TYPECODE_ADT || typecode == 
        !           125:                   OCI_TYPECODE_UNNAMEDADT) 
        !           126:               {
        !           127:                 /o display the element as an adt o/
        !           128:                 display(attr_type_ref, element, null_info, names, lengths, 
        !           129:                    0, indexes, 0);
        !           130:               }
        !           131:       
        !           132:               /o if attribute is scalar, print the value to the screen o/
        !           133:               else output_to_screen(element, typecode);
        !           134:             }
        !           135:          }
        !           136: 
        !           137:          /o if attribute is an ADT instance, recursively call this routine o/
        !           138:          else if (typecode == OCI_TYPECODE_ADT || typecode == 
        !           139:               OCI_TYPECODE_UNNAMEDADT)
        !           140:          {
        !           141:             /o get the type ref of the attribute o/
        !           142:             if (ortgarf(env, ado, &attr_type_ref) != OROSTASUC)
        !           143:                /o error handling code o/ 
        !           144: 
        !           145:              display(attr_type_ref, attr, null_info, 0, names, 0, names_length,
        !           146:                       indexes, 0);
        !           147:          }
        !           148: 
        !           149:          /o if attribute is scalar, print the value to the screen o/
        !           150:          else output_to_screen(attr, typecode);
        !           151:       }
        !           152:     }
        !           153: 
        !           154:     /o ******** main routine *********** o/
        !           155:     .... 
        !           156: 
        !           157:     /o 
        !           158:      o Allocate the arrays for storing the path expression 
        !           159:      o/
        !           160: 
        !           161:     /o get the tdo of type 'long' o/
        !           162:     if (orttypget(&env, con, "SYS", sizeof("SYS"), "SINT32", sizeof("SINT32"), 
        !           163:           OROOPDSES, &long_ref, &long_tdo) != OROSTASUC)
        !           164:           /o error handling code o/
        !           165: 
        !           166:     /o get the tdo of type 'varchar' o/
        !           167:     if (orttypget(&env, con, "SYS", sizeof("SYS"), "SQL_VARCHAR2", 
        !           168:           sizeof("SQL_VARCHAR2"), OROOPDSES, &vchar_ref, &vchar_tdo) 
        !           169:           != OROSTASUC)
        !           170:           /o error handling code o/
        !           171: 
        !           172:     /o allocate the varrays for the path expression o/ 
        !           173:     if (orlalloc(env, &vchar_ref, MAX_ARR_SIZE, &attr_names) != OROSTASUC)
        !           174:        /o error handling code o/ 
        !           175: 
        !           176:     if (orlalloc(env, &long_ref, MAX_ARR_SIZE, &attr_name_lengths) 
        !           177:                 != OROSTASUC)
        !           178:        /o error handling code o/ 
        !           179: 
        !           180:     if (orlalloc(env, &long_ref, MAX_ARR_SIZE, &attr_name_indexes) 
        !           181:                 != OROSTASUC)
        !           182:        /o error handling code o/ 
        !           183: 
        !           184:     /o 
        !           185:      o Get an ADT instance. The ref to the ADT instance can be obtained
        !           186:      o by through ORI or OSCI. 
        !           187:      o/
        !           188:     if (OCIObjectPin(env, &obj_ref, OROOPOCUR, OROOPDTRA, OROOLMUPD, &object) 
        !           189:           != OROSTASUC)
        !           190:        /o error handling code o/ 
        !           191: 
        !           192:     /o get the null structure of the ADT instance o/
        !           193:     if (OCIObjectGetInd(gp, object, &null_struct) != OROSTASUC)
        !           194:        /o error handling code o/ 
        !           195: 
        !           196:     /o 
        !           197:      o Get the type of the ADT instance
        !           198:      o/
        !           199: 
        !           200:     /o find out the type of the ADT instance o/
        !           201:     if (oriogto(env, object, &adt_ref) != OROSTASUC)
        !           202:        /o error handling code o/ 
        !           203: 
        !           204:     /o display the object o/
        !           205:     display(adt_ref, object, null_struct, attr_names, 0, attr_names_lengths,
        !           206:                      attr_names_indexes, 0);
        !           207: 
        !           208:     /o After the object is displayed, the program waits for the user to 
        !           209:      o respond.  The user modifies the values of an attribute and the
        !           210:      o program generates a path expression for the attribute and calls 
        !           211:      o OCIObjectSetAttr() to set the value. 
        !           212:      o/
        !           213: 
        !           214:     if (OCIObjectSetAttr(env, object, null_struct, adt_ref, 
        !           215:                 (text **)attr_names, (ub4 *)attr_name_lengths, 
        !           216:                 attr_names_count, (ub4 *)attr_array_indexes, 
        !           217:                 attr_array_indexes_count, 
        !           218:                 (dvoid *)0, FALSE, (dvoid *)value) != OROSTASUC)
        !           219:        /o error handling code o/ 
        !           220: 
        !           221:     END OF EXAMPLE 1
        !           222: 
        !           223:   NOTES
        !           224: 
        !           225:     This file has been subsetted to contain only the routines that will
        !           226:     be in the first release.
        !           227: 
        !           228:   MODIFIED
        !           229:     whe        09/01/99 -  976457:check __cplusplus for C++ code
        !           230:     sthakur    09/18/97 -  collection indexing not supported
        !           231:     cxcheng    08/05/97 -  fix compile with short names
        !           232:     skrishna   03/18/97 -  fix ifdef for supporting ansi and k&r proto-types
        !           233:     cxcheng    02/06/97 -  take out short name support except with SLSHORTNAME
        !           234:     cxcheng    10/17/96 -  final renaming of functions
        !           235:     jboonleu   10/07/96 -  beautify with OCI long names
        !           236:     cxcheng    10/07/96 -  change short names to long names for readability
        !           237:     jboonleu   09/27/96 -  fix lint
        !           238:     jwijaya    07/03/96 -  add ANSI prototypes
        !           239:     jboonleu   04/13/95 -  new interface
        !           240:     jwijaya    10/11/94 -  fix the sccs header and add namespace
        !           241:     tanguyen   08/22/94 -  fix example 
        !           242:     tanguyen   08/09/94 -  remove Sccsid declaration 
        !           243:     tanguyen   07/20/94 -  fix OCIObjectSetAttr and OCIObjectGetAttr to 
        !           244:                            use position descriptor 
        !           245:     tanguyen   07/18/94 -  change 'object' type to become ptr to object 
        !           246:     tanguyen   06/30/94 -  Fix the ORID_ORACLE ifdef 
        !           247:     tanguyen   06/27/94 -  update to template format 
        !           248:     skotsovo   05/12/94 -  replace ado with attribute position 
        !           249:     jweisz     05/11/94 -  test new checkin facility 
        !           250:     jwijaya    05/05/94 - orienv/ref/typ -> oroenv/ref/typ
        !           251:     jwijaya    02/07/94 - Creation
        !           252: 
        !           253: */
        !           254: 
        !           255: #ifndef ORATYPES
        !           256: #include <oratypes.h>
        !           257: #endif
        !           258: #ifndef ORO_ORACLE
        !           259: #include <oro.h>
        !           260: #endif
        !           261: #ifndef OCI_ORACLE
        !           262: #include <oci.h>
        !           263: #endif
        !           264: 
        !           265: #ifndef ORID_ORACLE
        !           266: #define ORID_ORACLE
        !           267: 
        !           268: #ifdef SLSHORTNAME
        !           269: 
        !           270: #define OCIObjectSetAttr oridset
        !           271: #define OCIObjectGetAttr oridget
        !           272: 
        !           273: #endif /* SLSHORTNAME */
        !           274: 
        !           275: /*---------------------------------------------------------------------------*/
        !           276: /*                           PUBLIC FUNCTIONS                                */
        !           277: /*---------------------------------------------------------------------------*/
        !           278: 
        !           279: /*-------------------------- OCIObjectSetAttr ----------------------------*/
        !           280: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
        !           281: sword OCIObjectSetAttr(/*_ OCIEnv *env, OCIError *err, dvoid *instance, 
        !           282:                   dvoid *null_struct, struct OCIType *tdo, 
        !           283:                   CONST text **names, CONST ub4 *lengths, CONST ub4 name_count,
        !           284:                   CONST ub4 *indexes, CONST ub4 index_count, 
        !           285:                   CONST OCIInd null_status, CONST dvoid *attr_null_struct,
        !           286:                   CONST dvoid *attr_value _*/);
        !           287: #else /* ANSI C */
        !           288: sword OCIObjectSetAttr(    OCIEnv *env, OCIError *err, dvoid *instance, 
        !           289:                   dvoid *null_struct, struct OCIType *tdo, 
        !           290:                   CONST text **names, CONST ub4 *lengths, CONST ub4 name_count,
        !           291:                   CONST ub4 *indexes, CONST ub4 index_count, 
        !           292:                   CONST OCIInd null_status, CONST dvoid *attr_null_struct,
        !           293:                   CONST dvoid *attr_value    );
        !           294: #endif
        !           295: /*
        !           296:    NAME: OCIObjectSetAttr - ORID SET value
        !           297:    PARAMETERS:
        !           298:         env  (IN) - OCI environment handle initialized in object mode
        !           299:         err  (IN) - error handle. If there is an error, it is
        !           300:                         recorded in 'err' and this function returns OCI_ERROR.
        !           301:                         The error recorded in 'err' can be retrieved by calling
        !           302:                         OCIErrorGet().
        !           303:         instance    (IN) - pointer to an ADT instance
        !           304:         null_struct (IN) - the null structure of the ADT instance or array
        !           305:         tdo         (IN) - pointer to the TDO
        !           306:         names       (IN) - array of attribute names. This is used to specify
        !           307:                            the names of the attributes in the path expression.
        !           308:         lengths     (IN) - array of lengths of attribute names.
        !           309:         name_count  (IN) - number of element in the array 'names'.
        !           310:         indexes     (IN) [OPTIONAL] - currently NOT SUPPORTED, pass (ub4 *)0.
        !           311:         index_count (IN) [OPTIONAL] - currently NOT SUPPORTED, pass (ub4)0.
        !           312:         attr_null_status (IN) - the null status of the attribute if the type of
        !           313:                                  attribute is primitive.
        !           314:         attr_null_struct (IN) - the null structure of an ADT or collection
        !           315:                                  attribute.
        !           316:         attr_value       (IN) - pointer to the attribute value.
        !           317:    REQUIRES:
        !           318:    DESCRIPTION:
        !           319:         This function set the attribute of the given object with the given 
        !           320:         value.  The position of the attribute is specified as a path 
        !           321:         expression which is an array of names and an array of indexes. 
        !           322:    RETURNS:
        !           323:         one of OROSTA*
        !           324:    EXAMPLES:
        !           325:         For path expression stanford.cs.stu[5].addr, the arrays will look like
        !           326:           names = {"stanford", "cs", "stu", "addr"} 
        !           327:           lengths = {8, 2, 3, 4}
        !           328:           indexes = {5}
        !           329:         
        !           330:         Also see the above example.
        !           331:  */
        !           332: 
        !           333: /*-------------------------- OCIObjectGetAttr ----------------------------*/
        !           334: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
        !           335: sword OCIObjectGetAttr(/*_ OCIEnv *env, OCIError *err, dvoid *instance, 
        !           336:                   dvoid *null_struct, struct OCIType *tdo, CONST text **names, 
        !           337:                   CONST ub4 *lengths, CONST ub4 name_count, 
        !           338:                   CONST ub4 *indexes, CONST ub4 index_count, 
        !           339:                   OCIInd *attr_null_status, dvoid **attr_null_struct, 
        !           340:                   dvoid **attr_value, struct OCIType **attr_tdo _*/);
        !           341: #else /* ANSI C */
        !           342: sword OCIObjectGetAttr(    OCIEnv *env, OCIError *err, dvoid *instance, 
        !           343:                   dvoid *null_struct, struct OCIType *tdo, CONST text **names, 
        !           344:                   CONST ub4 *lengths, CONST ub4 name_count, 
        !           345:                   CONST ub4 *indexes, CONST ub4 index_count, 
        !           346:                   OCIInd *attr_null_status, dvoid **attr_null_struct, 
        !           347:                   dvoid **attr_value, struct OCIType **attr_tdo    );
        !           348: #endif
        !           349: /*
        !           350:    NAME: OCIObjectGetAttr - ORID GET value
        !           351:    PARAMETERS:
        !           352:         env  (IN) - OCI environment handle initialized in object mode
        !           353:         err  (IN) - error handle. If there is an error, it is
        !           354:                         recorded in 'err' and this function returns OCI_ERROR.
        !           355:                         The error recorded in 'err' can be retrieved by calling
        !           356:                         OCIErrorGet().
        !           357:         instance    (IN) - pointer to an ADT instance 
        !           358:         null_struct (IN) - the null structure of the ADT instance or array
        !           359:         tdo         (IN) - pointer to the TDO 
        !           360:         names       (IN) - array of attribute names. This is used to specify
        !           361:                            the names of the attributes in the path expression.
        !           362:         lengths     (IN) - array of lengths of attribute names. 
        !           363:         name_count  (IN) - number of element in the array 'names'.
        !           364:         indexes     (IN) [OPTIONAL] - currently NOT SUPPORTED, pass (ub4 *)0.
        !           365:         index_count (IN) [OPTIONAL] - currently NOT SUPPORTED, pass (ub4)0.
        !           366:         attr_null_status (OUT) - the null status of the attribute if the type 
        !           367:                                  of attribute is primitive. 
        !           368:         attr_null_struct (OUT) - the null structure of an ADT or collection
        !           369:                                  attribute.
        !           370:         attr_value       (OUT) - pointer to the attribute value.
        !           371:         attr_tdo         (OUT) - pointer to the TDO of the attribute.
        !           372:    REQUIRES:
        !           373:       - a valid OCI environment handle must be given.
        !           374:    DESCRIPTION:
        !           375:         This function gets a value from an ADT instance or from an array.
        !           376:         If the parameter 'instance' points to an ADT instance, then the path
        !           377:         expression specifies the location of the attribute in the ADT. 
        !           378:         It is assumed that the object is pinned and that the value returned 
        !           379:         is valid until the object is unpinned.
        !           380:    RETURNS:
        !           381:         one of OROSTA*
        !           382:    EXAMPLES:
        !           383:         See example in OCIObjectSetAttr(). Also see the above example.
        !           384:  */
        !           385: 
        !           386: #endif /* ORID_ORACLE */

E-mail: