Annotation of win32/sql/oracle/include/oci/oro.h, revision 1.1.1.1
1.1 parser 1: /* Copyright (c) Oracle Corporation 1994, 1995, 1996, 1997, 1998, 1999. All Rights Reserved. */
2:
3: /*
4: NAME
5: OCI - Oracle Object Interface for External/Internal/Kernel Clients
6:
7: DESCRIPTION
8: This header file contains Oracle object interface definitions which
9: can be included by external user applications, tools, as well as
10: the kernel. It defines types and constants that are common to all
11: object interface which is being defined in several other header files
12: (e.g., ori.h, ort.h, and orl.h).
13:
14: RELATED DOCUMENTS
15: TBD
16:
17: INSPECTION STATUS [[ deletable if no inspection ]]
18: Inspection date: [[ date of the last logging meeting ]]
19: Inspection status: [[ exited, not exited, or N/A if exit is not a goal ]]
20: Estimated increasing cost defects per page:
21: Rule sets: [[ rule sets inspected against or planned to be
22: inspected against ]]
23:
24: ACCEPTANCE REVIEW STATUS [[ deletable if no approval review ]]
25: Review date: [[ date of the meeting where issues were logged and the
26: approval status was decided ]]
27: Review status: [[ current status: accepted, conditionally accepted,
28: major revision required, rejected ]]
29: Reviewers: [[ names of the members on the review team ]]
30:
31: PUBLIC FUNCTIONS
32:
33: EXAMPLES
34: Examples are given in the description of each function or macro where
35: relevant.
36:
37: MODIFIED
38: tnbui 07/28/99 - Remove OCI_TYPECODE_TIMESTAMP_ITZ
39: tnbui 07/21/99 - TS LOCAL TZ
40: thoang 06/21/99 - Add OCI_TYPECODE_TIMESTAMP_ITZ
41: thoang 03/04/99 - Add datetime datatypes
42: rkasamse 10/20/98 - add OCI_ATTR_CACHE_ARRAYFLUSH
43: rkasamse 10/29/98 - add OCI_DURATION_CALLOUT
44: rkasamse 04/28/98 - OCI_OBJECT_DETECTCHANGE -> OCI_ATTR_OBJECT_DETECTCHAN
45: rkasamse 04/28/98 - OCI_OBJECT_NEWNOTNULL -> OCI_ATTR_OBJECT_NEWNOTNULL
46: rkasamse 04/23/98 - add OCI_OBJECT_DETECTCHANGE
47: rkasamse 04/03/98 - add OCI_OBJECT_NEWNOTNULL
48: pmitra 04/01/98 - OCI_LOCK_X_NOWAIT added
49: rxgovind 02/18/98 - add OCI_TYPECODE_OPAQUE
50: rkasamse 02/13/98 - Add OCI_DURATION_PROCESS
51: rkasamse 12/02/97 -
52: cxcheng 07/28/97 - fix compile with SLSHORTNAME
53: skrishna 07/14/97 - add OCIObjectGetProperty
54: cxcheng 04/30/97 - make OCITypeParamMode values consistent with PL/SQL
55: skrishna 04/28/97 - undocument OCIObjectProperty & OCIObjectEvent
56: cxcheng 03/29/97 - remove all remaining short names
57: sthakur 03/20/97 - add casts to constants
58: cxcheng 02/21/97 - temporarily put SLSHORTNAME for PL/SQL
59: cxcheng 02/06/97 - take out short name support except with SLSHORTNAME
60: lchidamb 01/20/97 - update OCIRef comments
61: sgollapu 11/19/96 - Add OCI type codes for BOOL,REC,and TAB
62: cxcheng 11/19/96 - more typecode changes
63: cxcheng 11/13/96 - add #include for ocidfn.h
64: cxcheng 11/13/96 - add OCI_TYPECODE_ADT for compatibility
65: cxcheng 11/12/96 - add SQLT_NCO for named collection
66: cxcheng 11/11/96 - more changes to typecodes
67: cxcheng 11/07/96 - #define OCI_TYPECODE_MLSLABEL to SQLT_LAB
68: cxcheng 11/06/96 - fix #define omission for OROTCNAT
69: cxcheng 10/30/96 - move OCI_TYPECODE_* to ocidfn.h as SQLT_*
70: cxcheng 10/28/96 - more beautification changes
71: jboonleu 10/29/96 - add flags for freeing object
72: dchatter 10/26/96 - delete redef of OCISvcCtx, OCIError, OCIEnv
73: cxcheng 10/15/96 - more changes
74: cxcheng 10/14/96 - more final fixes to constants
75: mluong 10/11/96 -
76: mluong 10/11/96 - KOCON and KONSP are in lowercase
77: mluong 10/11/96 - add some define per Calvin
78: cxcheng 10/09/96 - add #define for OROOCOSFN to OCI_COPY_NOREF
79: jboonleu 10/08/96 - change OROOCOSFN to OCICopyFlag
80: jboonleu 10/07/96 - use new OCI names for cache options
81: cxcheng 10/07/96 - add OROTCS02 for KOTTCBRI and OROTCS03 as spare
82: cxcheng 10/07/96 - more lint fixes
83: cxcheng 10/02/96 - move oronsp to ko.h as konsp
84: cxcheng 10/01/96 - add long names for readability
85: cxcheng 10/01/96 - remove orotty and orotal
86: rjenkins 09/28/96 - 2k char 4k varchar2
87: jboonleu 09/27/96 - add macro used only in beta2
88: cxcheng 09/27/96 - move oroenv to oroenv.h
89: cxcheng 09/24/96 - remove unnecessary orotyp
90: cxcheng 09/25/96 - add typecode OROTCS01 as placeholder for lob pointer
91: cxcheng 09/20/96 - add TDO load option orotgo
92: jboonleu 09/18/96 - add OROOPOREC
93: jboonleu 09/10/96 - add OROOPODFL
94: jweisz 08/27/96 - add SQL internal typecode OROTCS00
95: cxcheng 08/02/96 - add PLSQL internal typecodes OROTCP..
96: cxcheng 08/01/96 - add OROTCFAR to fill up space left by OROTCCAR
97: jboonleu 07/16/96 - new pin option
98: cxcheng 06/18/96 - add casts to OROTNOPRE and OROTNOSCL
99: cxcheng 05/29/96 - change OROTCNPT back to OROTCDOM
100: vkrishna 05/27/96 - add OROTCCAR
101: cxcheng 05/17/96 - replace OROTCFAR with OROTCCAR
102: cxcheng 05/08/96 - change orotmf from ub1 to ub2
103: cxcheng 05/07/96 - fix public defines for method types
104: cxcheng 04/30/96 - change OROTCDOM to OROTCNPT
105: cxcheng 04/15/96 - remove obsolete OROTTYICT
106: jboonleu 04/12/96 - add new pin option
107: sthakur 04/12/96 - add indicator type and indicator status
108: cxcheng 04/10/96 - add function parameter codes for ORT/KOT
109: cxcheng 04/03/96 - replace OROTCFAR as OROTCCAR
110: jwijaya 03/29/96 - add OROTTCCAR
111: jwijaya 03/27/96 - better comments for orotc
112: cxcheng 02/23/96 - add typecodes for SMALLINT and VARCHAR2
113: skrishna 02/22/96 - add oroind - null indicator type
114: cxcheng 02/21/96 - change lob character codes to OROTCCLB, OROTCBLB...
115: jboonleu 02/06/96 - new value for predefined duration
116: cxcheng 01/12/96 - add OROTCCLO, OROTCBLO, OROTCFIL to orotc
117: cxcheng 12/05/95 - add OROTCDOM and OROTCAAT to orotc
118: skotsovo 10/30/95 - reserve space for internal 'oid' type
119: jwijaya 10/20/95 - support variable-length ref
120: cxcheng 10/03/95 - add OROTMFOR for ordering function to orotmf
121: cxcheng 10/03/95 - Adding the ordering function type to orotmf
122: jboonleu 09/28/95 - set OROODTPRE
123: jboonleu 09/25/95 - add oroodt
124: skotsovo 03/10/95 - update to only include release 1
125: jboonleu 02/15/95 - add OROOPOREC, remove orocro, oroolo
126: skotsovo 01/30/95 - add default max lengths for varrays and vstrings
127: skotsovo 01/24/95 - categorize sint32, double, and real as number types
128: (with precision and scale) instead of scalar types.
129: skotsovo 12/20/94 - add release 1 types
130: skotsovo 12/12/94 - update according to new ots doc
131: skotsovo 12/01/94 - add default precision and scale
132: jwijaya 11/15/94 - rename ORONSPTAB to ORONSPEXT
133: jwijaya 10/25/94 - tint
134: jwijaya 10/06/94 - add namespace
135: jwijaya 10/02/94 - connection handle -> connection number
136: skotsovo 09/12/94 - keep 0 as uninitialized value for ORT consts
137: skotsovo 08/24/94 - fix orotec
138: skotsovo 08/17/94 - modify type code names
139: skotsovo 08/12/94 - fix 141 lint errors
140: skotsovo 07/25/94 - modify categorization of complex types (orotc)
141: skotsovo 07/07/94 - change typecode enum values & add decimal type
142: skotsovo 07/01/94 - change order of typecodes
143: jwijaya 06/15/94 - review
144: jboonleu 06/13/94 - add comments for the object cache options
145: jwijaya 06/13/94 - adhere to the header file template
146: skotsovo 06/09/94 - make ots scalar type names consistent with the ots
147: document
148: jwijaya 06/07/94 - include oratypes.h instead of s.h
149: skotsovo 05/24/94 - change typecodes
150: jwijaya 05/23/94 - fix comments of ororef
151: skotsovo 05/19/94 - remove type composition
152: skotsovo 05/09/94 - modified orotc according to new OTS document
153: jwijaya 05/03/94 - oroid and ororef
154: jwijaya 01/26/94 - Creation
155: */
156:
157:
158: #ifndef ORATYPES
159: #include <oratypes.h>
160: #endif
161:
162: #ifndef OCIDFN_ORACLE
163: #include <ocidfn.h>
164: #endif
165:
166: #ifndef ORO_ORACLE
167: #define ORO_ORACLE
168:
169: /*---------------------------------------------------------------------------*/
170: /* SHORT NAMES SUPPORT SECTION */
171: /*---------------------------------------------------------------------------*/
172:
173: #ifdef SLSHORTNAME
174:
175: /* the following are short names that are only supported on IBM mainframes
176: with the SLSHORTNAME defined.
177: With this all subsequent long names will actually be substituted with
178: the short names here */
179:
180: #define OCIDuration oroodt
181: #define OCIInd oroind
182: #define OCILockOpt oroolm
183: #define OCIMarkOpt oroomo
184: #define OCIObjectEvent orocev
185: #define OCIObjectProperty oroopr
186: #define OCIPinOpt oroopo
187: #define OCIRef ororef
188: #define OCIRefreshOpt orooro
189: #define OCITypeCode orotc
190: #define OCITypeEncap orotec
191: #define OCITypeGetOpt orotgo
192: #define OCITypeMethodFlag orotmf
193: #define OCITypeParamMode orotpm
194: #define OCIObjectPropId oroopi
195: #define OCIObjectLifetime oroolft
196: #define OCIObjectMarkstatus oroomst
197: #define OCI_LOCK_NONE OROOLMNUL
198: #define OCI_LOCK_X OROOLMX
199: #define OCI_LOCK_X_NOWAIT OROOLMXNW
200: #define OCI_MARK_DEFAULT OROOMODFL
201: #define OCI_MARK_NONE OROOMONON
202: #define OCI_MARK_UPDATE OROOMOUPD
203: #define OCI_OBJECTEVENT_AFTER_FLUSH OROCEVAFL
204: #define OCI_OBJECTEVENT_AFTER_REFRESH OROCEVARF
205: #define OCI_OBJECTEVENT_BEFORE_FLUSH OROCEVBFL
206: #define OCI_OBJECTEVENT_BEFORE_REFRESH OROCEVBRF
207: #define OCI_OBJECTEVENT_WHEN_LOCK OROCEVWLK
208: #define OCI_OBJECTEVENT_WHEN_MARK_DELETED OROCEVWDL
209: #define OCI_OBJECTEVENT_WHEN_MARK_UPDATED OROCEVWUP
210: #define OCI_OBJECTEVENT_WHEN_UNMARK OROCEVWUM
211: #define OCI_OBJECTPROP_DIRTIED OROOPRDRT
212: #define OCI_OBJECTPROP_LOADED OROOPRLOD
213: #define OCI_OBJECTPROP_LOCKED OROOPRLCK
214: #define OCI_PIN_ANY OROOPOANY
215: #define OCI_PIN_DEFAULT OROOPODFL
216: #define OCI_PIN_LATEST OROOPOLST
217: #define OCI_PIN_RECENT OROOPOREC
218: #define OCI_REFRESH_LOADED OROOROLOD
219: #define OCI_TYPEENCAP_PRIVATE OROTECPVT
220: #define OCI_TYPEENCAP_PUBLIC OROTECPUB
221: #define OCI_TYPEGET_ALL OROTGOALL
222: #define OCI_TYPEGET_HEADER OROTGOHDR
223: #define OCI_TYPEMETHOD_CONSTANT OROTMFCON
224: #define OCI_TYPEMETHOD_CONSTRUCTOR OROTMFCSTR
225: #define OCI_TYPEMETHOD_DESTRUCTOR OROTMFDSTR
226: #define OCI_TYPEMETHOD_INLINE OROTMFINL
227: #define OCI_TYPEMETHOD_MAP OROTMFMAP
228: #define OCI_TYPEMETHOD_OPERATOR OROTMFOP
229: #define OCI_TYPEMETHOD_ORDER OROTMFOR
230: #define OCI_TYPEMETHOD_RNDS OROTMFRDS
231: #define OCI_TYPEMETHOD_RNPS OROTMFRPS
232: #define OCI_TYPEMETHOD_SELFISH OROTMFSLF
233: #define OCI_TYPEMETHOD_VIRTUAL OROTMFVRT
234: #define OCI_TYPEMETHOD_WNDS OROTMFWDS
235: #define OCI_TYPEMETHOD_WNPS OROTMFWPS
236: #define OCI_TYPEPARAM_BYREF OROTPMREF
237: #define OCI_TYPEPARAM_IN OROTPMIN
238: #define OCI_TYPEPARAM_INOUT OROTPMIO
239: #define OCI_TYPEPARAM_OUT OROTPMOUT
240:
241: #endif /* SLSHORTNAME */
242:
243:
244: /*---------------------------------------------------------------------------*/
245: /* PUBLIC TYPES, CONSTANTS AND MACROS */
246: /*---------------------------------------------------------------------------*/
247:
248: /*---------------------------------------------------------------------------*/
249: /* GENERAL OBJECT TYPES, CONSTANTS, MACROS */
250: /*---------------------------------------------------------------------------*/
251:
252: /*------------------------- OBJECT REFERENCE (REF) --------------------------*/
253:
254: typedef struct OCIRef OCIRef;
255: /*
256: * OCIRef - OCI object REFerence
257: *
258: * In the Oracle object runtime environment, an object is identified by an
259: * object reference (ref) which contains the object identifier plus other
260: * runtime information. The contents of a ref is opaque to clients. Use
261: * OCIObjectNew() to construct a ref.
262: */
263:
264:
265: /*--------------------------- OBJECT INDICATOR ------------------------------*/
266:
267: typedef sb2 OCIInd;
268: /*
269: * OCIInd -- a variable of this type contains (null) indicator information
270: */
271:
272: #define OCI_IND_NOTNULL (OCIInd)0 /* not NULL */
273: #define OCI_IND_NULL (OCIInd)(-1) /* NULL */
274: #define OCI_IND_BADNULL (OCIInd)(-2) /* BAD NULL */
275: #define OCI_IND_NOTNULLABLE (OCIInd)(-3) /* not NULLable */
276:
277: /*---------------------------------------------------------------------------*/
278: /* OBJECT CACHE */
279: /*---------------------------------------------------------------------------*/
280:
281: /* To enable object change detection mode, set this to TRUE */
282: #define OCI_ATTR_OBJECT_DETECTCHANGE 0x00000020
283:
284: /* To enable object creation with non-NULL attributes by default, set the
285: following to TRUE.
286: By default, object is created with NULL attributes
287: */
288: #define OCI_ATTR_OBJECT_NEWNOTNULL 0x00000010
289:
290: /* To enable sorting of the objects that belong to the same table
291: before being flushed through OCICacheFlush.
292: Please note that by enabling this object cache will not be flushing
293: the objects in the same order they were dirtied */
294: #define OCI_ATTR_CACHE_ARRAYFLUSH 0x00000040
295:
296: /*--------------------------- OBJECT PIN OPTION -----------------------------*/
297:
298: enum OCIPinOpt
299: {
300: /* 0 = uninitialized */
301: OCI_PIN_DEFAULT = 1, /* default pin option */
302: OCI_PIN_ANY = 3, /* pin any copy of the object */
303: OCI_PIN_RECENT = 4, /* pin recent copy of the object */
304: OCI_PIN_LATEST = 5 /* pin latest copy of the object */
305: };
306: typedef enum OCIPinOpt OCIPinOpt;
307:
308: /*
309: * OCIPinOpt - OCI object Pin Option
310: *
311: * In the Oracle object runtime environment, the program has the option to
312: * specify which copy of the object to pin.
313: *
314: * OCI_PINOPT_DEFAULT pins an object using the default pin option. The default
315: * pin option can be set as an attribute of the OCI environment handle
316: * (OCI_ATTR_PINTOPTION). The value of the default pin option can be
317: * OCI_PINOPT_ANY, OCI_PINOPT_RECENT, or OCI_PIN_LATEST. The default option
318: * is initialized to OCI_PINOPT_ANY.
319: *
320: * OCI_PIN_ANY pins any copy of the object. The object is pinned
321: * using the following criteria:
322: * If the object copy is not loaded, load it from the persistent store.
323: * Otherwise, the loaded object copy is returned to the program.
324: *
325: * OCI_PIN_RECENT pins the latest copy of an object. The object is
326: * pinned using the following criteria:
327: * If the object is not loaded, load the object from the persistent store
328: * from the latest version.
329: * If the object is not loaded in the current transaction and it is not
330: * dirtied, the object is refreshed from the latest version.
331: * Otherwise, the loaded object copy is returned to the program.
332: *
333: * OCI_PINOPT_LATEST pins the latest copy of an object. The object copy is
334: * pinned using the following criteria:
335: * If the object copy is not loaded, load it from the persistent store.
336: * If the object copy is loaded and dirtied, it is returned to the program.
337: * Otherwise, the loaded object copy is refreshed from the persistent store.
338: */
339:
340:
341:
342: /*--------------------------- OBJECT LOCK OPTION ----------------------------*/
343:
344: enum OCILockOpt
345: {
346: /* 0 = uninitialized */
347: OCI_LOCK_NONE = 1, /* null (same as no lock) */
348: OCI_LOCK_X = 2, /* exclusive lock */
349: OCI_LOCK_X_NOWAIT = 3 /* exclusive lock, do not wait */
350: };
351: typedef enum OCILockOpt OCILockOpt;
352: /*
353: * OCILockOpt - OCI object LOCK Option
354: *
355: * This option is used to specify the locking preferences when an object is
356: * loaded from the server.
357: */
358:
359:
360: /*------------------------- OBJECT MODIFYING OPTION -------------------------*/
361:
362: enum OCIMarkOpt
363: {
364: /* 0 = uninitialized */
365: OCI_MARK_DEFAULT = 1, /* default (the same as OCI_MARK_NONE) */
366: OCI_MARK_NONE = OCI_MARK_DEFAULT, /* object has not been modified */
367: OCI_MARK_UPDATE /* object is to be updated */
368: };
369: typedef enum OCIMarkOpt OCIMarkOpt;
370: /*
371: * OCIMarkOpt - OCI object Mark option
372: *
373: * When the object is marked updated, the client has to specify how the
374: * object is intended to be changed.
375: */
376:
377: /*-------------------------- OBJECT Duration --------------------------------*/
378:
379: typedef ub2 OCIDuration;
380:
381: #define OCI_DURATION_BEGIN (OCIDuration)10
382: /* beginning sequence of duration */
383: #define OCI_DURATION_NULL (OCIDuration)(OCI_DURATION_BEGIN-1)
384: /* null duration */
385: #define OCI_DURATION_DEFAULT (OCIDuration)(OCI_DURATION_BEGIN-2) /* default */
386: #define OCI_DURATION_NEXT (OCIDuration)(OCI_DURATION_BEGIN-3)
387: /* next special duration */
388: #define OCI_DURATION_SESSION (OCIDuration)(OCI_DURATION_BEGIN)
389: /* the end of user session */
390: #define OCI_DURATION_TRANS (OCIDuration)(OCI_DURATION_BEGIN+1)
391: /* the end of user transaction */
392: /******************************************************************************
393: ** DO NOT USE OCI_DURATION_CALL. IT IS UNSUPPORTED **
394: ** WILL BE REMOVED/CHANGED IN A FUTURE RELEASE **
395: ******************************************************************************/
396: #define OCI_DURATION_CALL (OCIDuration)(OCI_DURATION_BEGIN+2)
397: /* the end of user client/server call */
398: #define OCI_DURATION_STATEMENT (OCIDuration)(OCI_DURATION_BEGIN+3)
399:
400: /* This is to be used only during callouts. It is similar to that
401: of OCI_DURATION_CALL, but lasts only for the duration of a callout.
402: Its heap is from PGA */
403: #define OCI_DURATION_CALLOUT (OCIDuration)(OCI_DURATION_BEGIN+4)
404:
405: #define OCI_DURATION_LAST OCI_DURATION_CALLOUT /* last of predefined durations */
406:
407: /* This is not being treated as other predefined durations such as
408: SESSION, CALL etc, because this would not have an entry in the duration
409: table and its functionality is primitive such that only allocate, free,
410: resize memory are allowed, but one cannot create subduration out of this
411: */
412: #define OCI_DURATION_PROCESS (OCIDuration)(OCI_DURATION_BEGIN-4)
413:
414: /*
415: * OCIDuration - OCI object duration
416: *
417: * A client can specify the duration of which an object is pinned (pin
418: * duration) and the duration of which the object is in memory (allocation
419: * duration). If the objects are still pinned at the end of the pin duration,
420: * the object cache manager will automatically unpin the objects for the
421: * client. If the objects still exist at the end of the allocation duration,
422: * the object cache manager will automatically free the objects for the client.
423: *
424: * Objects that are pinned with the option OCI_DURATION_TRANS will get unpinned
425: * automatically at the end of the current transaction.
426: *
427: * Objects that are pinned with the option OCI_DURATION_SESSION will get
428: * unpinned automatically at the end of the current session (connection).
429: *
430: * The option OCI_DURATION_NULL is used when the client does not want to set
431: * the pin duration. If the object is already loaded into the cache, then the
432: * pin duration will remain the same. If the object is not yet loaded, the
433: * pin duration of the object will be set to OCI_DURATION_DEFAULT.
434: */
435:
436: /*----------------------------- OBJECT PROPERTY -----------------------------*/
437:
438: /******************************************************************************
439: ** DO NOT USE OCIObjectProperty. IT IS UNSUPPORTED **
440: ** WILL BE REMOVED/CHANGED IN A FUTURE RELEASE **
441: ******************************************************************************/
442: enum OCIObjectProperty
443: {
444: /* 0 = uninitialized */
445: OCI_OBJECTPROP_DIRTIED = 1, /* dirty objects */
446: OCI_OBJECTPROP_LOADED, /* objects loaded in the transaction */
447: OCI_OBJECTPROP_LOCKED /* locked objects */
448: };
449: typedef enum OCIObjectProperty OCIObjectProperty;
450: /*
451: * OCIObjectProperty -- OCI Object Property
452: * This specifies the properties of objects in the object cache.
453: */
454:
455: /*------------------------- CACHE REFRESH OPTION ---------------------------*/
456:
457: enum OCIRefreshOpt
458: {
459: /* 0 = uninitialized */
460: OCI_REFRESH_LOADED = 1 /* refresh objects loaded in the transaction */
461: };
462: typedef enum OCIRefreshOpt OCIRefreshOpt;
463: /*
464: * OCIRefreshOpt - OCI cache Refresh Option
465: * This option is used to specify the set of objects to be refreshed.
466: *
467: * OCI_REFRESH_LOAD refreshes the objects that are loaded in the current
468: * transaction.
469: */
470:
471: /*-------------------------------- OBJECT EVENT -----------------------------*/
472:
473: /******************************************************************************
474: ** DO NOT USE OCIObjectEvent. IT IS UNSUPPORTED **
475: ** WILL BE REMOVED/CHANGED IN A FUTURE RELEASE **
476: ******************************************************************************/
477: enum OCIObjectEvent
478: {
479: /* 0 = uninitialized */
480: OCI_OBJECTEVENT_BEFORE_FLUSH = 1, /* before flushing the cache */
481: OCI_OBJECTEVENT_AFTER_FLUSH, /* after flushing the cache */
482: OCI_OBJECTEVENT_BEFORE_REFRESH, /* before refreshing the cache */
483: OCI_OBJECTEVENT_AFTER_REFRESH, /* after refreshing the cache */
484: OCI_OBJECTEVENT_WHEN_MARK_UPDATED, /* when an object is marked updated */
485: OCI_OBJECTEVENT_WHEN_MARK_DELETED, /* when an object is marked deleted */
486: OCI_OBJECTEVENT_WHEN_UNMARK, /* when an object is being unmarked */
487: OCI_OBJECTEVENT_WHEN_LOCK /* when an object is being locked */
488: };
489: typedef enum OCIObjectEvent OCIObjectEvent;
490: /*
491: * OCIObjectEvent -- OCI Object Event
492: * This specifies the kind of event that is supported by the object
493: * cache. The program can register a callback that is invoked when the
494: * specified event occurs.
495: */
496:
497: /*----------------------------- OBJECT COPY OPTION --------------------------*/
498: #define OCI_OBJECTCOPY_NOREF (ub1)0x01
499: /*
500: * OCIObjectCopyFlag - Object copy flag
501: *
502: * If OCI_OBJECTCOPY_NOREF is specified when copying an instance, the
503: * reference and lob will not be copied to the target instance.
504: */
505:
506: /*----------------------------- OBJECT FREE OPTION --------------------------*/
507: #define OCI_OBJECTFREE_FORCE (ub2)0x0001
508: #define OCI_OBJECTFREE_NONULL (ub2)0x0002
509: /*
510: * OCIObjectFreeFlag - Object free flag
511: *
512: * If OCI_OBJECTCOPY_FORCE is specified when freeing an instance, the instance
513: * is freed regardless it is pinned or diritied.
514: * If OCI_OBJECTCOPY_NONULL is specified when freeing an instance, the null
515: * structure is not freed.
516: */
517:
518: /*----------------------- OBJECT PROPERTY ID -------------------------------*/
519:
520: typedef ub1 OCIObjectPropId;
521: #define OCI_OBJECTPROP_LIFETIME 1 /* persistent or transient or value */
522: #define OCI_OBJECTPROP_SCHEMA 2 /* schema name of table containing object */
523: #define OCI_OBJECTPROP_TABLE 3 /* table name of table containing object */
524: #define OCI_OBJECTPROP_PIN_DURATION 4 /* pin duartion of object */
525: #define OCI_OBJECTPROP_ALLOC_DURATION 5 /* alloc duartion of object */
526: #define OCI_OBJECTPROP_LOCK 6 /* lock status of object */
527: #define OCI_OBJECTPROP_MARKSTATUS 7 /* mark status of object */
528: #define OCI_OBJECTPROP_VIEW 8 /* is object a view object or not? */
529:
530: /*
531: * OCIObjectPropId - OCI Object Property Id
532: * Identifies the different properties of objects.
533: */
534:
535: /*----------------------- OBJECT LIFETIME ----------------------------------*/
536:
537: enum OCIObjectLifetime
538: {
539: /* 0 = uninitialized */
540: OCI_OBJECT_PERSISTENT = 1, /* persistent object */
541: OCI_OBJECT_TRANSIENT, /* transient object */
542: OCI_OBJECT_VALUE /* value object */
543: };
544: typedef enum OCIObjectLifetime OCIObjectLifetime;
545: /*
546: * OCIObjectLifetime - OCI Object Lifetime
547: * Classifies objects depending upon the lifetime and referenceability
548: * of the object.
549: */
550:
551: /*----------------------- OBJECT MARK STATUS -------------------------------*/
552:
553: typedef uword OCIObjectMarkStatus;
554: #define OCI_OBJECT_NEW 0x0001 /* new object */
555: #define OCI_OBJECT_DELETED 0x0002 /* object marked deleted */
556: #define OCI_OBJECT_UPDATED 0x0004 /* object marked updated */
557: /*
558: * OCIObjectMarkStatus - OCI Object Mark Status
559: * Status of the object - new or updated or deleted
560: */
561:
562: /* macros to test the object mark status */
563: #define OCI_OBJECT_IS_UPDATED(flag) bit((flag), OCI_OBJECT_UPDATED)
564: #define OCI_OBJECT_IS_DELETED(flag) bit((flag), OCI_OBJECT_DELETED)
565: #define OCI_OBJECT_IS_NEW(flag) bit((flag), OCI_OBJECT_NEW)
566: #define OCI_OBJECT_IS_DIRTY(flag) \
567: bit((flag), OCI_OBJECT_UPDATED|OCI_OBJECT_NEW|OCI_OBJECT_DELETED)
568:
569: /*---------------------------------------------------------------------------*/
570: /* TYPE MANAGER */
571: /*---------------------------------------------------------------------------*/
572:
573: /*------------------------------ TYPE CODE ----------------------------------*/
574:
575: /*
576: * Type manager typecodes
577: *
578: * These are typecodes designed to be used with the type manager;
579: * they also include longer, more readable versions of existing SQLT names.
580: * Those types that are directly related to existing SQLT types are #define'd
581: * to their SQLT equivalents.
582: *
583: * The type manager typecodes are designed to be useable for all OCI calls.
584: * They are in the range from 192 to 320 for typecodes, so as not to conflict
585: * with existing OCI SQLT typecodes (see ocidfn.h).
586: */
587:
588: #define OCI_TYPECODE_REF SQLT_REF /* SQL/OTS OBJECT REFERENCE */
589: #define OCI_TYPECODE_DATE SQLT_DAT /* SQL DATE OTS DATE */
590: #define OCI_TYPECODE_SIGNED8 27 /* SQL SIGNED INTEGER(8) OTS SINT8 */
591: #define OCI_TYPECODE_SIGNED16 28 /* SQL SIGNED INTEGER(16) OTS SINT16 */
592: #define OCI_TYPECODE_SIGNED32 29 /* SQL SIGNED INTEGER(32) OTS SINT32 */
593: #define OCI_TYPECODE_REAL 21 /* SQL REAL OTS SQL_REAL */
594: #define OCI_TYPECODE_DOUBLE 22 /* SQL DOUBLE PRECISION OTS SQL_DOUBLE */
595: #define OCI_TYPECODE_FLOAT SQLT_FLT /* SQL FLOAT(P) OTS FLOAT(P) */
596: #define OCI_TYPECODE_NUMBER SQLT_NUM/* SQL NUMBER(P S) OTS NUMBER(P S) */
597: #define OCI_TYPECODE_DECIMAL SQLT_PDN
598: /* SQL DECIMAL(P S) OTS DECIMAL(P S) */
599: #define OCI_TYPECODE_UNSIGNED8 SQLT_BIN
600: /* SQL UNSIGNED INTEGER(8) OTS UINT8 */
601: #define OCI_TYPECODE_UNSIGNED16 25 /* SQL UNSIGNED INTEGER(16) OTS UINT16 */
602: #define OCI_TYPECODE_UNSIGNED32 26 /* SQL UNSIGNED INTEGER(32) OTS UINT32 */
603: #define OCI_TYPECODE_OCTET 245 /* SQL ??? OTS OCTET */
604: #define OCI_TYPECODE_SMALLINT 246 /* SQL SMALLINT OTS SMALLINT */
605: #define OCI_TYPECODE_INTEGER SQLT_INT /* SQL INTEGER OTS INTEGER */
606: #define OCI_TYPECODE_RAW SQLT_LVB /* SQL RAW(N) OTS RAW(N) */
607: #define OCI_TYPECODE_PTR 32 /* SQL POINTER OTS POINTER */
608: #define OCI_TYPECODE_VARCHAR2 SQLT_VCS
609: /* SQL VARCHAR2(N) OTS SQL_VARCHAR2(N) */
610: #define OCI_TYPECODE_CHAR SQLT_AFC /* SQL CHAR(N) OTS SQL_CHAR(N) */
611: #define OCI_TYPECODE_VARCHAR SQLT_CHR
612: /* SQL VARCHAR(N) OTS SQL_VARCHAR(N) */
613: #define OCI_TYPECODE_MLSLABEL SQLT_LAB /* OTS MLSLABEL */
614: #define OCI_TYPECODE_VARRAY 247 /* SQL VARRAY OTS PAGED VARRAY */
615: #define OCI_TYPECODE_TABLE 248 /* SQL TABLE OTS MULTISET */
616: #define OCI_TYPECODE_OBJECT SQLT_NTY /* SQL/OTS NAMED OBJECT TYPE */
617: #define OCI_TYPECODE_OPAQUE 58 /* SQL/OTS Opaque Types */
618: #define OCI_TYPECODE_NAMEDCOLLECTION SQLT_NCO
619: /* SQL/OTS NAMED COLLECTION TYPE */
620: #define OCI_TYPECODE_BLOB SQLT_BLOB /* SQL/OTS BINARY LARGE OBJECT */
621: #define OCI_TYPECODE_BFILE SQLT_BFILE /* SQL/OTS BINARY FILE OBJECT */
622: #define OCI_TYPECODE_CLOB SQLT_CLOB /* SQL/OTS CHARACTER LARGE OBJECT */
623: #define OCI_TYPECODE_CFILE SQLT_CFILE /* SQL/OTS CHARACTER FILE OBJECT */
624:
625: /* the following are ANSI datetime datatypes added in 8.1 */
626: #define OCI_TYPECODE_TIME SQLT_TIME /* SQL/OTS TIME */
627: #define OCI_TYPECODE_TIME_TZ SQLT_TIME_TZ /* SQL/OTS TIME_TZ */
628: #define OCI_TYPECODE_TIMESTAMP SQLT_TIMESTAMP /* SQL/OTS TIMESTAMP */
629: #define OCI_TYPECODE_TIMESTAMP_TZ SQLT_TIMESTAMP_TZ /* SQL/OTS TIMESTAMP_TZ */
630:
631: #define OCI_TYPECODE_TIMESTAMP_LTZ SQLT_TIMESTAMP_LTZ /* TIMESTAMP_LTZ */
632:
633: #define OCI_TYPECODE_INTERVAL_YM SQLT_INTERVAL_YM /* SQL/OTS INTRVL YR-MON */
634: #define OCI_TYPECODE_INTERVAL_DS SQLT_INTERVAL_DS /* SQL/OTS INTRVL DAY-SEC */
635:
636: #define OCI_TYPECODE_OTMFIRST 228 /* first Open Type Manager typecode */
637: #define OCI_TYPECODE_OTMLAST 320 /* last OTM typecode */
638: #define OCI_TYPECODE_SYSFIRST 228 /* first OTM system type (internal) */
639: #define OCI_TYPECODE_SYSLAST 235 /* last OTM system type (internal) */
640:
641: /* the following are PL/SQL-only internal. They should not be used */
642: #define OCI_TYPECODE_ITABLE SQLT_TAB /* PLSQL indexed table */
643: #define OCI_TYPECODE_RECORD SQLT_REC /* PLSQL record */
644: #define OCI_TYPECODE_BOOLEAN SQLT_BOL /* PLSQL boolean */
645:
646: /* The OCITypeCode type is interchangeable with the existing SQLT type
647: which is a ub2 */
648: typedef ub2 OCITypeCode;
649:
650:
651: /*----------------------- GET OPTIONS FOR TDO ------------------------------*/
652:
653: enum OCITypeGetOpt
654: {
655: OCI_TYPEGET_HEADER,
656: /* load only the header portion of the TDO when getting type */
657: OCI_TYPEGET_ALL /* load all attribute and method descriptors as well */
658: };
659: typedef enum OCITypeGetOpt OCITypeGetOpt;
660:
661: /*
662: * OCITypeGetOpt
663: *
664: * This is the flag passed to OCIGetTypeArray() to indicate how the TDO is
665: * going to be loaded into the object cache.
666: * OCI_TYPEGET_HEADER implies that only the header portion is to be loaded
667: * initially, with the rest loaded in on a 'lazy' basis. Only the header is
668: * needed for PL/SQL and OCI operations. OCI_TYPEGET_ALL implies that ALL
669: * the attributes and methods belonging to a TDO will be loaded into the
670: * object cache in one round trip. Hence it will take much longer to execute,
671: * but will ensure that no more loading needs to be done when pinning ADOs
672: * etc. This is only needed if your code needs to examine and manipulate
673: * attribute and method information.
674: *
675: * The default is OCI_TYPEGET_HEADER.
676: */
677:
678:
679: /*------------------------ TYPE ENCAPSULTATION LEVEL ------------------------*/
680:
681: enum OCITypeEncap
682: {
683: /* 0 = uninitialized */
684: OCI_TYPEENCAP_PRIVATE, /* private: only internally visible */
685: OCI_TYPEENCAP_PUBLIC /* public: visible to both internally and externally */
686: };
687: typedef enum OCITypeEncap OCITypeEncap;
688: /*
689: * OCITypeEncap - OCI Encapsulation Level
690: */
691:
692:
693: /*---------------------------- TYPE METHOD FLAGS ----------------------------*/
694:
695: enum OCITypeMethodFlag
696: {
697: OCI_TYPEMETHOD_INLINE = 0x0001, /* inline */
698: OCI_TYPEMETHOD_CONSTANT = 0x0002, /* constant */
699: OCI_TYPEMETHOD_VIRTUAL = 0x0004, /* virtual */
700: OCI_TYPEMETHOD_CONSTRUCTOR = 0x0008, /* constructor */
701: OCI_TYPEMETHOD_DESTRUCTOR = 0x0010, /* destructor */
702: OCI_TYPEMETHOD_OPERATOR = 0x0020, /* operator */
703: OCI_TYPEMETHOD_SELFISH = 0x0040, /* selfish method (generic otherwise) */
704:
705: OCI_TYPEMETHOD_MAP = 0x0080, /* map (relative ordering) */
706: OCI_TYPEMETHOD_ORDER = 0x0100, /* order (relative ordering) */
707: /* OCI_TYPEMETHOD_MAP and OCI_TYPEMETHOD_ORDER are mutually exclusive */
708:
709: OCI_TYPEMETHOD_RNDS= 0x0200, /* Read no Data State (default) */
710: OCI_TYPEMETHOD_WNDS= 0x0400, /* Write no Data State */
711: OCI_TYPEMETHOD_RNPS= 0x0800, /* Read no Process State */
712: OCI_TYPEMETHOD_WNPS= 0x1000 /* Write no Process State */
713: };
714: typedef enum OCITypeMethodFlag OCITypeMethodFlag;
715:
716: /* macros to test the type method flags */
717: #define OCI_METHOD_IS_INLINE(flag) bit((flag), OCI_TYPEMETHOD_INLINE)
718: #define OCI_METHOD_IS_CONSTANT(flag) bit((flag), OCI_TYPEMETHOD_CONSTANT)
719: #define OCI_METHOD_IS_VIRTUAL(flag) bit((flag), OCI_TYPEMETHOD_VIRTUAL)
720: #define OCI_METHOD_IS_CONSTRUCTOR(flag) bit((flag), OCI_TYPEMETHOD_CONSTRUCTOR)
721: #define OCI_METHOD_IS_DESTRUCTOR(flag) bit((flag), OCI_TYPEMETHOD_DESTRUCTOR)
722: #define OCI_METHOD_IS_OPERATOR(flag) bit((flag), OCI_TYPEMETHOD_OPERATOR)
723: #define OCI_METHOD_IS_SELFISH(flag) bit((flag), OCI_TYPEMETHOD_SELFISH)
724: #define OCI_METHOD_IS_MAP(flag) bit((flag), OCI_TYPEMETHOD_MAP)
725: #define OCI_METHOD_IS_ORDER(flag) bit((flag), OCI_TYPEMETHOD_ORDER)
726: #define OCI_METHOD_IS_RNDS(flag) bit((flag), OCI_TYPEMETHOD_RNDS)
727: #define OCI_METHOD_IS_WNDS(flag) bit((flag), OCI_TYPEMETHOD_WNDS)
728: #define OCI_METHOD_IS_RNPS(flag) bit((flag), OCI_TYPEMETHOD_RNPS)
729: #define OCI_METHOD_IS_WNPS(flag) bit((flag), OCI_TYPEMETHOD_WNPS)
730: #define OCI_TYPEMETHOD_IS_INLINE(flag) bit((flag), OCI_TYPEMETHOD_INLINE)
731: #define OCI_TYPEMETHOD_IS_CONSTANT(flag) bit((flag), OCI_TYPEMETHOD_CONSTANT)
732: #define OCI_TYPEMETHOD_IS_VIRTUAL(flag) bit((flag), OCI_TYPEMETHOD_VIRTUAL)
733: #define OCI_TYPEMETHOD_IS_CONSTRUCTOR(flag) \
734: bit((flag), OCI_TYPEMETHOD_CONSTRUCTOR)
735: #define OCI_TYPEMETHOD_IS_DESTRUCTOR(flag) \
736: bit((flag), OCI_TYPEMETHOD_DESTRUCTOR)
737: #define OCI_TYPEMETHOD_IS_OPERATOR(flag) bit((flag), OCI_TYPEMETHOD_OPERATOR)
738: #define OCI_TYPEMETHOD_IS_SELFISH(flag) bit((flag), OCI_TYPEMETHOD_SELFISH)
739: #define OCI_TYPEMETHOD_IS_MAP(flag) bit((flag), OCI_TYPEMETHOD_MAP)
740: #define OCI_TYPEMETHOD_IS_ORDER(flag) bit((flag), OCI_TYPEMETHOD_ORDER)
741: #define OCI_TYPEMETHOD_IS_RNDS(flag) bit((flag), OCI_TYPEMETHOD_RNDS)
742: #define OCI_TYPEMETHOD_IS_WNDS(flag) bit((flag), OCI_TYPEMETHOD_WNDS)
743: #define OCI_TYPEMETHOD_IS_RNPS(flag) bit((flag), OCI_TYPEMETHOD_RNPS)
744: #define OCI_TYPEMETHOD_IS_WNPS(flag) bit((flag), OCI_TYPEMETHOD_WNPS)
745:
746: /* macros to set the type method flags */
747: #define OCI_TYPEMETHOD_SET_INLINE(flag) bis((flag), OCI_TYPEMETHOD_INLINE)
748: #define OCI_TYPEMETHOD_SET_CONSTANT(flag) bis((flag), OCI_TYPEMETHOD_CONSTANT)
749: #define OCI_TYPEMETHOD_SET_VIRTUAL(flag) bis((flag), OCI_TYPEMETHOD_VIRTUAL)
750: #define OCI_TYPEMETHOD_SET_CONSTRUCTOR(flag) \
751: bis((flag), OCI_TYPEMETHOD_CONSTRUCTOR)
752: #define OCI_TYPEMETHOD_SET_DESTRUCTOR(flag) \
753: bis((flag), OCI_TYPEMETHOD_DESTRUCTOR)
754: #define OCI_TYPEMETHOD_SET_OPERATOR(flag) bis((flag), OCI_TYPEMETHOD_OPERATOR)
755: #define OCI_TYPEMETHOD_SET_SELFISH(flag) bis((flag), OCI_TYPEMETHOD_SELFISH)
756: #define OCI_TYPEMETHOD_SET_MAP(flag) bis((flag), OCI_TYPEMETHOD_MAP)
757: #define OCI_TYPEMETHOD_SET_ORDER(flag) bis((flag), OCI_TYPEMETHOD_ORDER)
758: #define OCI_TYPEMETHOD_SET_RNDS(flag) bis((flag), OCI_TYPEMETHOD_RNDS)
759: #define OCI_TYPEMETHOD_SET_WNDS(flag) bis((flag), OCI_TYPEMETHOD_WNDS)
760: #define OCI_TYPEMETHOD_SET_RNPS(flag) bis((flag), OCI_TYPEMETHOD_RNPS)
761: #define OCI_TYPEMETHOD_SET_WNPS(flag) bis((flag), OCI_TYPEMETHOD_WNPS)
762:
763: /* macros to clear the type method flags */
764: #define OCI_TYPEMETHOD_CLEAR_INLINE(flag) bic((flag), OCI_TYPEMETHOD_INLINE)
765: #define OCI_TYPEMETHOD_CLEAR_CONSTANT(flag) \
766: bic((flag), OCI_TYPEMETHOD_CONSTANT)
767: #define OCI_TYPEMETHOD_CLEAR_VIRTUAL(flag) bic((flag), OCI_TYPEMETHOD_VIRTUAL)
768: #define OCI_TYPEMETHOD_CLEAR_CONSTRUCTOR(flag) \
769: bic((flag), OCI_TYPEMETHOD_CONSTRUCTOR)
770: #define OCI_TYPEMETHOD_CLEAR_DESTRUCTOR(flag) \
771: bic((flag), OCI_TYPEMETHOD_DESTRUCTOR)
772: #define OCI_TYPEMETHOD_CLEAR_OPERATOR(flag) \
773: bic((flag), OCI_TYPEMETHOD_OPERATOR)
774: #define OCI_TYPEMETHOD_CLEAR_SELFISH(flag) bic((flag), OCI_TYPEMETHOD_SELFISH)
775: #define OCI_TYPEMETHOD_CLEAR_MAP(flag) bic((flag), OCI_TYPEMETHOD_MAP)
776: #define OCI_TYPEMETHOD_CLEAR_ORDER(flag) bic((flag), OCI_TYPEMETHOD_ORDER)
777: #define OCI_TYPEMETHOD_CLEAR_RNDS(flag) bic((flag), OCI_TYPEMETHOD_RNDS)
778: #define OCI_TYPEMETHOD_CLEAR_WNDS(flag) bic((flag), OCI_TYPEMETHOD_WNDS)
779: #define OCI_TYPEMETHOD_CLEAR_RNPS(flag) bic((flag), OCI_TYPEMETHOD_RNPS)
780: #define OCI_TYPEMETHOD_CLEAR_WNPS(flag) bic((flag), OCI_TYPEMETHOD_WNPS)
781:
782: /*--------------------------- TYPE PARAMETER MODE ---------------------------*/
783:
784: enum OCITypeParamMode
785: {
786: /* PL/SQL starts this from 0 */
787: OCI_TYPEPARAM_IN = 0, /* in */
788: OCI_TYPEPARAM_OUT, /* out */
789: OCI_TYPEPARAM_INOUT, /* in-out */
790: OCI_TYPEPARAM_BYREF /* call by reference (implicitly in-out) */
791: };
792: typedef enum OCITypeParamMode OCITypeParamMode;
793:
794:
795: /*-------------------------------- DEFAULTS ---------------------------------*/
796:
797: /* default binary and decimal precision and scale */
798:
799: #define OCI_NUMBER_DEFAULTPREC ((ub1)0) /* no precision specified */
800: #define OCI_NUMBER_DEFAULTSCALE ((sb1)MAXSB1MINVAL)
801: /* no binary/decimal scale specified */
802:
803: /* default maximum length for varrays and vstrings (used in sql.bsq) */
804:
805: #define OCI_VARRAY_MAXSIZE 4000
806: /* default maximum number of elements for a varray */
807: #define OCI_STRING_MAXLEN 4000 /* default maximum length of a vstring */
808:
809: /*---------------------------------------------------------------------------*/
810: /* This set of macro is used only in beta2. They should be removed as soon as
811: * PLSQL has made the changes of not using these macros.
812: */
813:
814: /* Special duration for allocating memory only. No instance can be allocated
815: * given these durations.
816: */
817: #define OCICoherency OCIRefreshOpt
818: #define OCI_COHERENCY_NONE (OCIRefreshOpt)2
819: #define OCI_COHERENCY_NULL (OCIRefreshOpt)4
820: #define OCI_COHERENCY_ALWAYS (OCIRefreshOpt)5
821:
822:
823: #endif /* ORO_ORACLE */
824:
E-mail: