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