Files correlati : Commento : - Creazione nuova cartella per contenere tutte le librerie esterne - Aggiunta nuova libreria sqlapi per interfacciare campo a vari DB git-svn-id: svn://10.65.10.50/branches/R_10_00@24149 c028cbd2-c16b-5b4b-a496-9718f37d4682
2096 lines
102 KiB
C
2096 lines
102 KiB
C
/* Copyright (c) 1994, 2006, Oracle. All rights reserved. */
|
|
|
|
/*
|
|
NAME
|
|
ORI - OCI navigational interface
|
|
|
|
DESCRIPTION
|
|
|
|
This section is intended to give a brief introduction to the navigational
|
|
interfaces. Readers can refer to the documents listed in the section
|
|
'RELATED DOCUMENTS' for more information.
|
|
|
|
PURPOSE
|
|
The Oracle Call Interface (OCI) supports navigational access of objects.
|
|
In the navigational paradigm, data is represented as a graph of objects
|
|
connected by references. Objects in the graph are reached by following
|
|
the references.
|
|
|
|
OBJECT ENVIRONMENT
|
|
|
|
The object environment is initialized when the OCI environment handle is
|
|
initialized with the object option. An object environment contains a
|
|
heap which buffers type instances in memory. The object environment also
|
|
contains an object cache which keeps track of the objects in the object
|
|
environment. Readers can refer to the "Functional Specification for
|
|
Programmatic Interface" for more information about the object
|
|
environment.
|
|
|
|
INSTANCE, OBJECT AND VALUE
|
|
|
|
An OTS instance is an occurence of a type specified by the Oracle Type
|
|
System (OTS). This section describes how an OTS instance can be
|
|
represented in OCI. In OCI, an OTS instance can be classified based on
|
|
the type, the lifetime and referencability (see the figure below):
|
|
|
|
1) A persistent object is an instance of an object type. A persistent
|
|
object resides in a row of a table in the server and can exist longer
|
|
than the duration of a session (connection). Persistent objects can be
|
|
identified by object references which contain the object identifiers.
|
|
A persistent object is obtained by pinning its object reference.
|
|
|
|
2) A transient object is an instance of an object type. A transient
|
|
object cannot exist longer than the duration of a session, and it is
|
|
used to contain temporary computing results. Transient objects can
|
|
also be identified by references which contain transient object
|
|
identifiers.
|
|
|
|
3) A value is an instance of an user-defined type (object type or
|
|
collection type) or any built-in OTS type. Unlike objects, values of
|
|
object types are identified by memory pointers, rather than by
|
|
references.
|
|
|
|
A value can be standalone or embbeded. A standalone value is usually
|
|
obtained by issuing a select statement. OCI also allows the client
|
|
program to select a row of object table into a value by issuing a SQL
|
|
statement. Thus, a referenceable object (in the database) can be
|
|
represented as a value (which cannot be identified by a reference).
|
|
A standalone value can also be an out-of-line attribute in an object
|
|
(e.g varchar, raw) or an out-of-line element in a collection (e.g.
|
|
varchar, raw, object).
|
|
|
|
An embedded value is phyiscally included in a containing instance.
|
|
An embedded value can be an in-line attribute in an object (e.g.
|
|
number, nested object) or an in-line element in a collection.
|
|
|
|
All values are considered to be transient by OCI, e.g. OCI does not
|
|
support automatic flushing a value to the database, and the client has
|
|
to explicitly execute a SQL statement to store a value into the
|
|
database. For embedded values, they are flushed when their containing
|
|
instance are flushed.
|
|
|
|
|
|
OTS instance
|
|
| |
|
|
v v
|
|
object value (type)
|
|
| |
|
|
v v
|
|
persistent transient (lifetime)
|
|
|
|
|
|
persistent obj transient obj value
|
|
---------------------------------------------------------------
|
|
| | | | object type, |
|
|
| type | object type | object type | built-in, |
|
|
| | | | collection |
|
|
---------------------------------------------------------------
|
|
| maximum | until object | session | session |
|
|
| lifetime | is deleted | | |
|
|
---------------------------------------------------------------
|
|
| referencable | yes | yes | no |
|
|
---------------------------------------------------------------
|
|
| embeddable | no | no | yes |
|
|
---------------------------------------------------------------
|
|
|
|
REFERENCEABLE OBJECT, STANDALONE OBJECT, EMBEDDED OBJECT
|
|
|
|
In the reminding of this include file, the following term will be used:
|
|
1) The term 'object' can be generally referred to a persistent object,
|
|
a transient object, a standalone value of object type, or an embedded
|
|
value of object type.
|
|
2) The term 'referenceable object' refers to a persistent object or a
|
|
transient object.
|
|
3) The term 'standalone object' refers to a persistent object, a
|
|
transient object or a standalone value of object type.
|
|
4) The term 'embedded object' referes to a embbeded value of object
|
|
type.
|
|
|
|
META ATTRIBUTES
|
|
|
|
There is a set of meta-attributes that are defined for standalone
|
|
objects. A meta-attribute can be transient or persistent. A
|
|
transient meta-attribute is applicable to an instance only when it is
|
|
in memory. A persistent meta-attribute can be applicable to an instance
|
|
that is in the disk.
|
|
|
|
The set of user visible meta-attributes for persistent objects are:
|
|
1) existent (persistent) : Does the object exist?
|
|
2) nullness (persistent) : Null information of the instance
|
|
3) locked (persistent) : Is the object locked?
|
|
4) pinned (transient) : Is the object being accessed by the client?
|
|
5) dirty (transient) : Has the object been modified?
|
|
6) allocation duration (transient) : see below
|
|
7) pin duration (transient) : see below
|
|
|
|
The set of user visible meta-attributes for transient objects are:
|
|
1) existent (transient) : Does the object exist?
|
|
2) nullness (transient) : Null information of the instance
|
|
3) pinned (transient) : Is the object being accessed by the client?
|
|
4) dirty (transient) : Has the object been modified?
|
|
4) allocation duration (transient) : see below
|
|
5) pin duration (transient) : see below
|
|
|
|
The set of user visible meta-attributes for standalone values of object
|
|
type or collections are:
|
|
1) allocation duration (transient) : see below
|
|
2) nullness (transient) : Null information of the instance
|
|
(of an object type)
|
|
|
|
NULLNESS OF AN INSTANCE
|
|
|
|
Each standalone object is associated with a null structure which keeps
|
|
the null information about the object. A null indicates the absence of
|
|
data. The null structure itself contains null indicators that represent:
|
|
1) atomic nullness : a null value that pertains to the whole object
|
|
2) null status of the individual attribute in the object
|
|
|
|
The layout of a null structure in memory resembles that of the object,
|
|
except that the null structure has additional indicators to represent
|
|
the atomic nullness for each object.
|
|
|
|
An non-existent object is different than an object that is atomically
|
|
null. A atomically null object is an existing object that has no data.
|
|
|
|
MEMORY LAYOUT OF AN OBJECT
|
|
|
|
A standalone object in memory is composed of a top level memory chunk,
|
|
a null structure and optionally, a number of secondary memory chunks.
|
|
For a DEPARTMENT object type,
|
|
|
|
OBJECT TYPE department
|
|
{
|
|
dep_name varchar2(20),
|
|
budget number,
|
|
manager person, /o person is an object type o/
|
|
employees collection of person
|
|
}
|
|
|
|
Each instance of DEPARTMENT will has a top level memory chunk which
|
|
contains the top level attributes such as dep_name, budget, manager and
|
|
employees. The attributes dep_name and employees are themselves pointers
|
|
to the additional memory (the secondary memory chunks). The secondary
|
|
memory is for the out-of-line attribute (e.g. varray).
|
|
|
|
CONSISTENCY MODEL
|
|
|
|
Each pin operation behaves like a distinct SQL select. Thus, the object
|
|
cache does not guarantee consistency for a graph of objects. In order to
|
|
retrieve a consistent graph of objects, the user has to explicitly start
|
|
a serializable transaction or a read-only transaction.
|
|
|
|
DURATION
|
|
In OCI, a duration is used to specify
|
|
|
|
1) the length of memory allocation of an instance
|
|
When each instance is allocated, it is associate with an allocation
|
|
duration. The memory occupied by the object is freed automatically
|
|
at the end of its allocation duration. The allocation duration of an
|
|
instance cannot be changed.
|
|
|
|
2) the length of pinning of an object
|
|
When each object is pinned, the client has to give a pin duration
|
|
which specify the length of time that the object is intended to be
|
|
used. It is an user error to specify a pin duration longer than an
|
|
allocation duration of the object. An object is completely unpinned
|
|
at the end of its pin duration (see OCIObjectUnpin()).
|
|
|
|
An OCI program can use the allocation duration and the pin duration to
|
|
automatically free the memory of the instances:
|
|
1) Transient objects and values are freed at the end of the allocation
|
|
duration.
|
|
2) Persistent objects ARE freed at the end of the allocation duration.
|
|
Persistent objects CAN be freed at the end of the pin duration when
|
|
the objects are completely unpinned. The persistent objects are said
|
|
to be aged out. See OCIObjectUnpin() for more details.
|
|
|
|
There are 3 predefined duration: session, transaction, call. The time
|
|
spans of these durations are defined based on the programming model
|
|
presented by OCI. The call duration is mapped to the transaction
|
|
duration in the client-side environment. See oro.h for the macros defined
|
|
for these 3 durations.
|
|
|
|
A pin duration can be promoted. For example, if an object is pinned with
|
|
duration 1, and the object is later pinned with duration 2, the pin
|
|
routine will try to find a duration that is longer or equal to the
|
|
length of both duration 1 and duration 2. The pin duration of the object
|
|
is set to the that duration. The object is automatically unpinned only
|
|
after both duration 1 and duration 2 are terminated.
|
|
|
|
RELATED DOCUMENTS
|
|
"Functional Specification for Oracle Object RDBMS"
|
|
"Functional Specification for Programmatic Interfaces"
|
|
"Functional Specification for the Oracle Type System (OTS)"
|
|
|
|
INSPECTION STATUS
|
|
Inspection date:
|
|
Inspection status:
|
|
Estimated increasing cost defects per page:
|
|
Rule sets:
|
|
|
|
ACCEPTANCE REVIEW STATUS
|
|
Review date:
|
|
Review status:
|
|
Reviewers:
|
|
|
|
PUBLIC FUNCTIONS
|
|
OCIObjectNew - OCI new a standalone instance
|
|
OCIObjectPin - OCI pin an object by reference
|
|
OCIObjectUnpin - OCI unpin a referenceable object
|
|
OCIObjectPinCountReset - OCI reset the pin count of a referenceable object
|
|
OCIObjectLock - OCI lock a persistent object
|
|
OCIObjectLockNoWait - OCI lock a persistent object
|
|
OCIObjectMarkUpdate - OCI mark a referenceable object as updated
|
|
OCIObjectUnmark - OCI unmark a dirtied referenceable object
|
|
OCIObjectUnmarkByRef - OCI unmark a dirtied object by reference
|
|
OCIObjectFree - OCI free a standalone instance
|
|
OCIObjectMarkDelete - OCI mark a referenceable object as deleted
|
|
OCIObjectMarkDeleteByRef - OCI mark a referenceable object as deleted by
|
|
giving a reference
|
|
OCIObjectFlush - OCI flush a persistent object
|
|
OCIObjectRefresh - OCI refresh a persistent object
|
|
OCIObjectCopy - OCI CoPy one object to another
|
|
OCIObjectGetTypeRef - OCI get the Type Reference of a standalone object
|
|
OCIObjectGetObjectRef - OCI get the Object's Reference
|
|
OCIObjectGetInd - OCI get Null Structure of an standalone object
|
|
OCIObjectExists - OCI get the existence of a referenceable object
|
|
OCIObjectGetProperty - get object property
|
|
OCIObjectIsLocked - OCI get the lock status of a referenceable object
|
|
OCIObjectIsDirty - OCI get the dirty status of a referenceable object
|
|
OCIObjectPinTable - OCI get Table object
|
|
OCIObjectArrayPin - OCI pin array of objects
|
|
OCIObjectGetPrimayKeyTypeRef - OCI get the Ref for the primary key OID's
|
|
type
|
|
OCIObjectMakeObjectRef - OCI Create a pk or sys generated REF
|
|
|
|
OCIObjectGetNewOID - OCI Create a new Object ID
|
|
|
|
OCICacheFlush - OCI flsuh the modified persistent objects in the cache
|
|
OCICacheRefresh - OCI refresh persistent objects in the cache
|
|
OCICacheUnpin - OCI unpin referenceable objects in the cache
|
|
OCICacheFree - OCI free all instances in the environment
|
|
OCICacheUnmark - OCI unmark all dirty referenceable objects in the cache
|
|
|
|
PRIVATE FUNCTIONS
|
|
None
|
|
|
|
EXAMPLES
|
|
|
|
The following types will be used in the examples in this section:
|
|
|
|
OBJECT TYPE professor
|
|
(
|
|
varchar2 name;
|
|
number department;
|
|
number num_of_students;
|
|
);
|
|
|
|
OBJECT TYPE course
|
|
(
|
|
varchar2 name;
|
|
number grade;
|
|
);
|
|
|
|
OBJECT TYPE student
|
|
(
|
|
vstring name;
|
|
number department;
|
|
ref advisor; /o advisor is a professor o/
|
|
collection courses;
|
|
);
|
|
|
|
EXAMPLE 1
|
|
|
|
Here is a set of examples to illustrate the usages of some of the
|
|
orio and oric functions.
|
|
|
|
OCIenv *env; /o OCI environment handle o/
|
|
OCIError *err; /o OCI error handle o/
|
|
OCISvcCtx *svc; /o OCI service handle o/
|
|
|
|
void *stu_tbl; /o pointer to the student table o/
|
|
OCIType *stu_tdo; /o student type tdo o/
|
|
|
|
OCIRef *stu2_ref; /o object reference to student object o/
|
|
student *stu1; /o pointer to the student object o/
|
|
student *stu2; /o pointer to the student object o/
|
|
professor *pro; /o pointer to the professor object o/
|
|
|
|
/o Initialize the OCI environment handle, error handle and service
|
|
handle and login to the database o/
|
|
...
|
|
|
|
/o CREATE A PERSISTENT OBJECT o/
|
|
|
|
/o get the table object of student o/
|
|
if (OCIObjectPinTable(env, err, svc, "ORACLEU", sizeof("ORACLEU"),
|
|
"STUDENT_TABLE", sizeof("STUDENT_TABLE"), (OCIRef *)0,
|
|
OCI_DURATION_NULL, &stu_tbl) != OCI_SUCCESS)
|
|
/o error handling code o/
|
|
|
|
/o get type object of student o/
|
|
if (OCITypeByName(env, err, svc, "ORACLEU", sizeof("ORACLEU"),
|
|
"STUDENT", sizeof("STUDENT"), OCI_DURATION_NULL, OCI_TYPEGET_HEADER,
|
|
&stu_tdo) != OCI_SUCCESS)
|
|
/o error handling code o/
|
|
|
|
/o create a persistent object 'mark' (of type student) o/
|
|
if (OCIObjectNew(env, err, svc, OCI_TYPECODE_ADT, stu_tdo, stu_tbl,
|
|
OCI_DURATION_TRANS, (ub1)FALSE, (void **)&stu1) != OCI_SUCCESS)
|
|
/o error handling code o/
|
|
|
|
/o RETRIEVE OBJECTS IN PERSISTENT STORES o/
|
|
|
|
/o Use OCI to retrieve a reference to student object 'joe'.
|
|
o The retrieved reference is bound to the variable stu2_ref.
|
|
o/
|
|
|
|
/o pin/retrieve the student "joe" by reference o/
|
|
if (OCIObjectPin(env, err, &stu2_ref, (OCIComplexObject *)0, OCI_PIN_ANY,
|
|
OCI_DURATION_TRANS, OCI_LOCK_X, &stu2) != OCI_SUCCESS)
|
|
/o error handling code o/
|
|
|
|
/o pin/retrieve the advisor of student "joe" by reference o/
|
|
if (OCIObjectPin(env, err, &stu2->advisor, (OCIComplexObject *)0,
|
|
OCI_PIN_ANY, OCI_DURATION_TRANS, OCI_LOCK_X, &pro) != OCI_SUCCESS)
|
|
/o error handling code o/
|
|
|
|
/o MODIFY OBJECTS o/
|
|
|
|
/o initialize the newly created object "mark" o/
|
|
DISCARD OCIStringAssignText(env, err, "mark", sizeof("mark"),
|
|
&stu1->name);
|
|
department = 522;
|
|
DISCARD OCINumberFromInt(err, &department, sizeof(department),
|
|
OCI_NUMBER_UNSIGNED, &stu1->department);
|
|
|
|
/o assign advisor to student "mark" o/
|
|
DISCARD OCIRefAssign(env, err, &stu2->advisor, &stu1->advisor);
|
|
|
|
/o update student "joe". o/
|
|
department = 533;
|
|
DISCARD OCINumberFromInt(err, &department, sizeof(department),
|
|
OCI_NUMBER_UNSIGNED, &stu2->department);
|
|
DISCARD OCIObjectMarkUpdate(env, err, stu2);
|
|
|
|
/o UNPIN OBJECTS AFTER FINSIHED PROCESSING THEM o/
|
|
|
|
/o unpin the student object "mark" o/
|
|
if (OCIObjectUnpin(env, err, stu1) != OCI_SUCCESS)
|
|
/o error handling code o/
|
|
|
|
/o unpin the student object "joe" o/
|
|
if (OCIObjectUnpin(env, err, stu2) != OCI_SUCCESS)
|
|
/o error handling code o/
|
|
|
|
/o unpin the professor object o/
|
|
if (OCIObjectUnpin(env, err, pro) != OCI_SUCCESS)
|
|
/o error handling code o/
|
|
|
|
/o unpin the type object o/
|
|
if (OCIObjectUnpin(env, err, stu_tdo) != OCI_SUCCESS)
|
|
/o error handling code o/
|
|
|
|
/o unpin the table object o/
|
|
if (OCIObjectUnpin(env, err, stu_tbl) != OCI_SUCCESS)
|
|
/o error handling code o/
|
|
|
|
/o FLUSH MODIFIED OBJECTS BACK TO PERSISTENT STORE o/
|
|
|
|
if (OCICacheFlush(env, err, svc, (void *)0, ((OCIRef*)(*)())0,
|
|
(OCIRef *)0) != OCI_SUCCESS)
|
|
/o error handling code o/
|
|
|
|
/o commit transaction o/
|
|
|
|
END OF EXAMPLE 1
|
|
|
|
NOTES
|
|
This file has been subsetted to contain only the routines that will
|
|
be in the first release.
|
|
|
|
MODIFIED
|
|
dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
|
|
srseshad 03/12/03 - convert oci public api to ansi
|
|
aahluwal 06/03/02 - bug 2360115
|
|
bpalaval 02/09/01 - Change text to oratext.
|
|
rkasamse 06/21/00 - add ociobjectgetnewoid
|
|
rkasamse 05/24/00 - add OCIObjectSetData
|
|
whe 09/01/99 - 976457:check __cplusplus for C++ code
|
|
smuralid 10/29/98 - add comments for OCIObjectMakeObjectRef
|
|
mkrishna 08/19/98 - change OCIGetPkTypeRef to OCIObjectGetPrimaryKeyTypeR
|
|
mkrishna 08/10/98 - add OCIObjectMakeObjectRef & OCIObjectGetPkTypeRef
|
|
rkasamse 06/22/98 - add comments for OCIDurationBegin(End)
|
|
pmitra 04/01/98 - OCIObjectLockNoWait added
|
|
pmitra 11/05/97 - [573769] OCIObjectArrayPin pos parameter cannot be NU
|
|
cxcheng 07/29/97 - fix compile for short names
|
|
skrishna 07/14/97 - add OCIObjectGetProperty
|
|
skrishna 04/30/97 - OCIObjectFlushRefresh: remove duplicate declaration
|
|
skrishna 04/24/97 - flag unsupported functions
|
|
sthakur 03/20/97 - modify flag argument to OCIObjectFree
|
|
skrishna 03/18/97 - fix ifdef for supporting ansi and k&r proto-types
|
|
cxcheng 02/19/97 - remove short names support
|
|
cxcheng 02/06/97 - take out short name support except with SLSHORTNAME
|
|
sthakur 12/20/96 - fix a typepo in OCIOBjectArrayPin
|
|
jboonleu 11/07/96 - modify comments
|
|
cxcheng 10/28/96 - more beautification changes
|
|
jboonleu 10/24/96 - add flag to OCIObjectFree
|
|
jboonleu 10/22/96 - change interface of OCICacheFlush
|
|
cxcheng 10/18/96 - rename OCIObjectPinArray to OCIObjectArrayPin
|
|
cxcheng 10/14/96 - more renaming of types
|
|
jboonleu 10/09/96 - add new interfaces
|
|
cxcheng 10/09/96 - more lint fixes
|
|
cxcheng 10/08/96 - more lint fixes
|
|
jboonleu 09/27/96 - fix lint errors
|
|
jboonleu 10/07/96 - beautify ori.h after conversion to long names
|
|
cxcheng 10/04/96 - replace short names with long names
|
|
sthakur 08/20/96 - add COR context to OCIObjectPin
|
|
mluong 07/17/96 - add back orioglk, oriogdr, oriogiv, and oriocur.
|
|
jboonleu 07/17/96 - rename refresh option to conherency option
|
|
jboonleu 07/16/96 - change comment for cache consistency
|
|
jwijaya 07/03/96 - add ANSI prototypes
|
|
jboonleu 06/12/96 - update comment
|
|
jboonleu 05/08/96 - change description of OCIDurationGetParent
|
|
jboonleu 05/01/96 - add OROOCOSFN
|
|
skrishna 04/08/96 - change ori*() to take OCIEnv* and OCIError* instead
|
|
of oroenv*
|
|
jboonleu 01/04/96 - interface change
|
|
jboonleu 10/24/95 - support of variable ref
|
|
jboonleu 02/15/95 - new interface
|
|
sthakur 01/05/95 - pass username to origrgc
|
|
skotsovo 12/07/94 - update example
|
|
jwijaya 11/15/94 - rename ORONSPTAB to ORONSPEXT
|
|
jwijaya 10/06/94 - add namespace to oriopnm()
|
|
jwijaya 10/02/94 - connection handle -> connection number
|
|
jboonleu 08/16/94 - fix lint errors
|
|
jboonleu 07/20/94 - change interface of OCICacheFlush
|
|
tanguyen 07/18/94 - add oriocpe, change OCIObjectCopy to oriocps
|
|
tcheng 07/15/94 - add init param maximum_sga_heap_size
|
|
tcheng 07/13/94 - change origini to get param string
|
|
jboonleu 07/05/94 - change sccs string from sccid to a comment
|
|
jboonleu 07/01/94 - Add examples to ORIO* and ORIC* functions
|
|
tanguyen 06/30/94 - Fix the ORI_ORACLE ifdef
|
|
skotsovo 06/27/94 - include all public functions in public functions
|
|
list at top of header file
|
|
tcheng 06/27/94 - modify comments according to new template
|
|
tanguyen 06/24/94 - fix comments for OCIObjectCopy
|
|
tcheng 06/24/94 - fix comments in origrgc()
|
|
tanguyen 06/21/94 - fix comments and format
|
|
tcheng 06/20/94 - commenting origini/trm/err/rgc/urg() functions
|
|
tanguyen 06/16/94 - fix descriptions of ref operations
|
|
tanguyen 06/16/94 - clarifies refs comparison
|
|
tanguyen 05/12/94 - adds more interfaces (OCIObjectMarkUpdate)
|
|
jwijaya 05/10/94 - fix examples, add origurg, change origcon to origrgc
|
|
tanguyen 05/03/94 - remove unnecessary 'type' argument from
|
|
'OCIObjectCopy'
|
|
tanguyen 03/08/94 - clarifies comments
|
|
jwijaya 02/16/94 - more questions
|
|
jwijaya 02/11/94 - more comments
|
|
jwijaya 02/10/94 - identify optional arguments
|
|
jwijaya 02/07/94 - Creation
|
|
*/
|
|
|
|
|
|
#ifndef ORATYPES
|
|
#include <oratypes.h>
|
|
#endif
|
|
#ifndef ORO_ORACLE
|
|
#include <oro.h>
|
|
#endif
|
|
#ifndef OCI_ORACLE
|
|
#include <oci.h>
|
|
#endif
|
|
#ifndef ORT_ORACLE
|
|
#include <ort.h>
|
|
#endif
|
|
|
|
#ifndef ORI_ORACLE
|
|
#define ORI_ORACLE
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* SHORT NAMES SUPPORT SECTION */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
#ifdef SLSHORTNAME
|
|
|
|
/* the following are short names that are only supported on IBM mainframes
|
|
with the SLSHORTNAME defined.
|
|
With this all subsequent long names will actually be substituted with
|
|
the short names here */
|
|
|
|
#define OCIDurationBegin origbgu
|
|
#define OCIDurationEnd origedu
|
|
#define OCIDurationGetParent origpdr
|
|
#define OCICacheFlushRefresh oricfrh
|
|
#define OCICacheUnpin oricunp
|
|
#define OCICacheFree oricfre
|
|
#define OCICacheUnmark oricumk
|
|
#define OCICacheGetObjects oricgpr
|
|
#define OCICacheRegister oricscb
|
|
#define OCIObjectUnpin oriounp
|
|
#define OCIObjectPinCountReset orioupz
|
|
#define OCIObjectLock oriolck
|
|
#define OCIObjectLockNoWait oriolnw
|
|
#define OCIObjectMarkUpdate orioupd
|
|
#define OCIObjectUnmark orioumk
|
|
#define OCIObjectUnmarkByRef orioumr
|
|
#define OCIObjectAlwaysLatest oriomkl
|
|
#define OCIObjectNotAlwaysLatest oriouml
|
|
#define OCIObjectMarkDeleteByRef oriordl
|
|
#define OCIObjectMarkDelete oriopdl
|
|
#define OCIObjectFlush oriofls
|
|
#define OCIObjectFlushRefresh oriofrh
|
|
#define OCIObjectCopy oriocpy
|
|
#define OCIObjectGetTypeRef oriogtr
|
|
#define OCIObjectGetObjectRef oriogor
|
|
#define OCIObjectGetInd oriogns
|
|
#define OCIObjectExists oriogex
|
|
#define OCIObjectGetProperty oriogpr
|
|
#define OCIObjectRefresh oriorfs
|
|
#define OCIObjectPinTable oriogtb
|
|
#define OCIObjectGetPrimaryKeyTypeRef oriogpf
|
|
#define OCIObjectMakeObjectRef oriomrf
|
|
|
|
#define OCIObjectNew orionew
|
|
#define OCIObjectPin oriopin
|
|
#define OCIObjectFree oriofre
|
|
#define OCIObjectArrayPin orioapn
|
|
#define OCIObjectIsDirty oriodrt
|
|
#define OCIObjectIsDirtied oriodrd
|
|
#define OCIObjectIsLoaded orioldd
|
|
#define OCICacheFlush oricfls
|
|
#define OCICacheRefresh oricrfs
|
|
|
|
#endif /* SLSHORTNAME */
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* PUBLIC TYPES AND CONSTANTS */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
/* Also see oro.h. */
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* PUBLIC FUNCTIONS */
|
|
/*---------------------------------------------------------------------------*/
|
|
/*---------------------------------------------------------------------------*/
|
|
/* OBJECT/INSTANCE OPERATIONS */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
/*--------------------------- OCIObjectNew ----------------------------------*/
|
|
sword OCIObjectNew( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
|
|
OCITypeCode typecode, OCIType *tdo, void *table,
|
|
OCIDuration duration, boolean value,
|
|
void **instance );
|
|
/*
|
|
NAME: OCIObjectNew - OCI new (create) a standalone instance
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns OCI_ERROR.
|
|
The error recorded in 'err' can be retrieved by calling
|
|
OCIErrorGet().
|
|
svc (IN) - OCI service handle.
|
|
typecode (IN) - the typecode of the type of the instance.
|
|
tdo (IN, optional) - pointer to the type descriptor object. The
|
|
TDO describes the type of the instance that is to be
|
|
created. Refer to OCITypeByName() for obtaining a TDO.
|
|
The TDO is required for creating a named type (e.g. an
|
|
object or a collection).
|
|
table (IN, optional) - pointer to a table object which specifies a
|
|
table in the server. This parameter can be set to NULL
|
|
if no table is given. See the description below to find
|
|
out how the table object and the TDO are used together
|
|
to determine the kind of instances (persistent,
|
|
transient, value) to be created. Also see
|
|
OCIObjectPinTable() for retrieving a table object.
|
|
duration (IN) - this is an overloaded parameter. The use of this
|
|
parameter is based on the kind of the instance that is
|
|
to be created.
|
|
a) persistent object. This parameter specifies the
|
|
pin duration.
|
|
b) transient object. This parameter specififes the
|
|
allocation duration and pin duration.
|
|
c) value. This parameter specifies the allocation
|
|
duration.
|
|
value (IN) - specifies whether the created object is a value.
|
|
If TRUE, then a value is created. Otherwise, a
|
|
referenceable object is created. If the instance is
|
|
not an object, then this parameter is ignored.
|
|
instance (OUT) - address of the newly created instance
|
|
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
DESCRIPTION:
|
|
This function creates a new instance of the type specified by the
|
|
typecode or the TDO. Based on the parameters 'typecode' (or 'tdo'),
|
|
'value' and 'table', different kinds of instances can be created:
|
|
|
|
The parameter 'table' is not NULL?
|
|
|
|
yes no
|
|
----------------------------------------------------------------
|
|
| object type (value=TRUE) | value | value |
|
|
----------------------------------------------------------------
|
|
| object type (value=FALSE) | persistent obj | transient obj |
|
|
type ----------------------------------------------------------------
|
|
| built-in type | value | value |
|
|
----------------------------------------------------------------
|
|
| collection type | value | value |
|
|
----------------------------------------------------------------
|
|
|
|
This function allocates the top level memory chunk of an OTS instance.
|
|
The attributes in the top level memory are initialized (e.g. an
|
|
attribute of varchar2 is initialized to a vstring of 0 length).
|
|
|
|
If the instance is an object, the object is marked existed but is
|
|
atomically null.
|
|
|
|
FOR PERSISTENT OBJECTS:
|
|
The object is marked dirty and existed. The allocation duration for
|
|
the object is session. The object is pinned and the pin duration is
|
|
specified by the given parameter 'duration'.
|
|
|
|
FOR TRANSIENT OBJECTS:
|
|
The object is pinned. The allocation duration and the pin duration are
|
|
specified by the given parameter 'duration'.
|
|
|
|
FOR VALUES:
|
|
The allocation duration is specified by the given parameter 'duration'.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*--------------------------- OCIObjectPin ----------------------------------*/
|
|
sword OCIObjectPin( OCIEnv *env, OCIError *err, OCIRef *object_ref,
|
|
OCIComplexObject *corhdl, OCIPinOpt pin_option,
|
|
OCIDuration pin_duration,
|
|
OCILockOpt lock_option, void **object );
|
|
/*
|
|
NAME: OCIObjectPin - OCI pin a referenceable object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
object_ref (IN) - the reference to the object.
|
|
corhdl (IN) - handle for complex object retrieval.
|
|
pin_option (IN) - See description below.
|
|
pin_duration (IN) - The duration of which the object is being accesed
|
|
by a client. The object is implicitly unpinned at
|
|
the end of the pin duration.
|
|
If OCI_DURATION_NULL is passed, there is no pin
|
|
promotion if the object is already loaded into
|
|
the cache. If the object is not yet loaded, then
|
|
the pin duration is set to OCI_DURATION_DEFAULT.
|
|
lock_option (IN) - lock option (e.g., exclusive). If a lock option
|
|
is specified, the object is locked in the server.
|
|
See 'oro.h' for description about lock option.
|
|
object (OUT) - the pointer to the pinned object.
|
|
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
DESCRIPTION:
|
|
|
|
This function pins a referenceable object instance given the object
|
|
reference. The process of pinning serves three purposes:
|
|
|
|
1) locate an object given its reference. This is done by the object
|
|
cache which keeps track of the objects in the object heap.
|
|
|
|
2) notify the object cache that an object is being in use. An object
|
|
can be pinned many times. A pinned object will remain in memory
|
|
until it is completely unpinned (see OCIObjectUnpin()).
|
|
|
|
3) notify the object cache that a persistent object is being in use
|
|
such that the persistent object cannot be aged out. Since a
|
|
persistent object can be loaded from the server whenever is needed,
|
|
the memory utilization can be increased if a completely unpinned
|
|
persistent object can be freed (aged out), even before the
|
|
allocation duration is expired.
|
|
|
|
Also see OCIObjectUnpin() for more information about unpinning.
|
|
|
|
FOR PERSISTENT OBJECTS:
|
|
|
|
When pinning a persistent object, if it is not in the cache, the object
|
|
will be fetched from the persistent store. The allocation duration of
|
|
the object is session. If the object is already in the cache, it is
|
|
returned to the client. The object will be locked in the server if a
|
|
lock option is specified.
|
|
|
|
This function will return an error for a non-existent object.
|
|
|
|
A pin option is used to specify the copy of the object that is to be
|
|
retrieved:
|
|
|
|
1) If option is OCI_PIN_ANY (pin any), if the object is already
|
|
in the environment heap, return this object. Otherwise, the object
|
|
is retrieved from the database. This option is useful when the
|
|
client knows that he has the exclusive access to the data in a
|
|
session.
|
|
|
|
2) If option is OCI_PIN_LATEST (pin latest), if the object is
|
|
not cached, it is retrieved from the database. If the object is
|
|
cached, it is refreshed with the latest version. See
|
|
OCIObjectRefresh() for more information about refreshing.
|
|
|
|
3) If option is OCI_PIN_RECENT (pin recent), if the object is loaded
|
|
into the cache in the current transaction, the object is returned.
|
|
If the object is not loaded in the current transaction, the object
|
|
is refreshed from the server.
|
|
|
|
FOR TRANSIENT OBJECTS:
|
|
|
|
This function will return an error if the transient object has already
|
|
been freed. This function does not return an error if an exclusive
|
|
lock is specified in the lock option.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*------------------------------ OCIObjectUnpin -----------------------------*/
|
|
sword OCIObjectUnpin( OCIEnv *env, OCIError *err, void *object );
|
|
/*
|
|
NAME: OCIObjectUnpin - OCI unpin a referenceable object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns OCI_ERROR.
|
|
The error recorded in 'err' can be retrieved by
|
|
calling OCIErrorGet().
|
|
object (IN) - pointer to an object
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The specified object must be pinned.
|
|
DESCRIPTION:
|
|
This function unpins an object. An object is completely unpinned when
|
|
1) the object was unpinned N times after it has been pinned N times
|
|
(by calling OCIObjectPin()).
|
|
2) it is the end of the pin duration
|
|
3) the function OCIObjectPinCountReset() is called
|
|
|
|
There is a pin count associated with each object which is incremented
|
|
whenever an object is pinned. When the pin count of the object is zero,
|
|
the object is said to be completely unpinned. An unpinned object can
|
|
be freed without error.
|
|
|
|
FOR PERSISTENT OBJECTS:
|
|
When a persistent object is completely unpinned, it becomes a candidate
|
|
for aging. The memory of an object is freed when it is aged out. Aging
|
|
is used to maximize the utilization of memory. An dirty object cannot
|
|
be aged out unless it is flushed.
|
|
|
|
FOR TRANSIENT OBJECTS:
|
|
The pin count of the object is decremented. A transient can be freed
|
|
only at the end of its allocation duration or when it is explicitly
|
|
deleted by calling OCIObjectFree().
|
|
|
|
FOR VALUE:
|
|
This function will return an error for value.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*---------------------------- OCIObjectPinCountReset -----------------------*/
|
|
sword OCIObjectPinCountReset( OCIEnv *env, OCIError *err, void *object );
|
|
/*
|
|
NAME: OCIObjectPinCountReset - OCI resets the pin count of a referenceable
|
|
object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns OCI_ERROR.
|
|
The error recorded in 'err' can be retrieved by
|
|
calling OCIErrorGet().
|
|
object (IN) - pointer to an object
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The specified object must be pinned.
|
|
DESCRIPTION:
|
|
This function completely unpins an object. When an object is
|
|
completely unpinned, it can be freed without error.
|
|
|
|
FOR PERSISTENT OBJECTS:
|
|
When a persistent object is completely unpinned, it becomes a candidate
|
|
for aging. The memory of an object is freed when it is aged out. Aging
|
|
is used to maximize the utilization of memory. An dirty object cannot
|
|
be aged out unless it is flushed.
|
|
|
|
FOR TRANSIENT OBJECTS:
|
|
The pin count of the object is decremented. A transient can be freed
|
|
only at the end of its allocation duration or when it is explicitly
|
|
freed by calling OCIObjectFree().
|
|
|
|
FOR VALUE:
|
|
This function will return an error for value.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*--------------------------- OCIObjectLock ---------------------------------*/
|
|
sword OCIObjectLock( OCIEnv *env, OCIError *err, void *object );
|
|
/*
|
|
NAME: OCIObjectLock - OCI lock a persistent object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns OCI_ERROR.
|
|
The error recorded in 'err' can be retrieved by
|
|
calling OCIErrorGet().
|
|
object (IN) - pointer to the persistent object
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The specified object must be pinned.
|
|
DESCRIPTION:
|
|
This function locks a persistent object at the server. Unlike
|
|
OCIObjectLockNoWait() this function waits if another user currently
|
|
holds a lock on the desired object. This function
|
|
returns an error if:
|
|
1) the object is non-existent.
|
|
|
|
This function will return an error for transient objects and values.
|
|
The lock of an object is released at the end of a transaction.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*------------------------ OCIObjectLockNoWait ------------------------------*/
|
|
sword OCIObjectLockNoWait( OCIEnv *env, OCIError *err, void *object );
|
|
/*
|
|
NAME: OCIObjectLockNoWait - OCI lock a persistent object, do not wait for
|
|
the lock, return error if lock not available
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns OCI_ERROR.
|
|
The error recorded in 'err' can be retrieved by
|
|
calling OCIErrorGet().
|
|
object (IN) - pointer to the persistent object
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The specified object must be pinned.
|
|
DESCRIPTION:
|
|
This function locks a persistent object at the server. Unlike
|
|
OCIObjectLock() this function will not wait if another user holds
|
|
the lock on the desired object. This function returns an error if:
|
|
1) the object is non-existent.
|
|
2) the object is currently locked by another user in which
|
|
case this function returns with an error.
|
|
|
|
This function will return an error for transient objects and values.
|
|
The lock of an object is released at the end of a transaction.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*--------------------------- OCIObjectMarkUpdate ---------------------------*/
|
|
sword OCIObjectMarkUpdate( OCIEnv *env, OCIError *err, void *object );
|
|
/*
|
|
NAME: OCIObjectMarkUpdate - OCI marks an object as updated
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns OCI_ERROR.
|
|
The error recorded in 'err' can be retrieved by
|
|
calling OCIErrorGet().
|
|
object (IN) - pointer to the persistent object
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The specified object must be pinned.
|
|
DESCRIPTION:
|
|
FOR PERSISTENT OBJECTS:
|
|
This function marks the specified persistent object as updated. The
|
|
persistent objects will be written to the server when the object cache
|
|
is flushed. The object is not locked or flushed by this function. It
|
|
is an error to update a deleted object.
|
|
|
|
After an object is marked updated and flushed, this function must be
|
|
called again to mark the object as updated if it has been dirtied
|
|
after it is being flushed.
|
|
|
|
FOR TRANSIENT OBJECTS:
|
|
This function marks the specified transient object as updated. The
|
|
transient objects will NOT be written to the server. It is an error
|
|
to update a deleted object.
|
|
|
|
FOR VALUES:
|
|
It is an no-op for values.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*----------------------------- OCIObjectUnmark -----------------------------*/
|
|
sword OCIObjectUnmark( OCIEnv *env, OCIError *err, void *object );
|
|
/*
|
|
NAME: OCIObjectUnmark - OCI unmarks an object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns OCI_ERROR.
|
|
The error recorded in 'err' can be retrieved by
|
|
calling OCIErrorGet().
|
|
object (IN) - pointer to the persistent object
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The specified object must be pinned.
|
|
DESCRIPTION:
|
|
FOR PERSISTENT OBJECTS AND TRANSIENT OBJECTS:
|
|
This function unmarks the specified persistent object as dirty. Changes
|
|
that are made to the object will not be written to the server. If the
|
|
object is marked locked, it remains marked locked. The changes that
|
|
have already made to the object will not be undone implicitly.
|
|
|
|
FOR VALUES:
|
|
It is an no-op for values.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*----------------------------- OCIObjectUnmarkByRef ------------------------*/
|
|
sword OCIObjectUnmarkByRef( OCIEnv *env, OCIError *err, OCIRef *ref );
|
|
/*
|
|
NAME: OCIObjectUnmarkByRef - OCI unmarks an object by Ref
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns OCI_ERROR.
|
|
The error recorded in 'err' can be retrieved by
|
|
calling OCIErrorGet().
|
|
ref (IN) - reference of the object
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The specified object must be pinned.
|
|
DESCRIPTION:
|
|
FOR PERSISTENT OBJECTS AND TRANSIENT OBJECTS:
|
|
This function unmarks the specified persistent object as dirty. Changes
|
|
that are made to the object will not be written to the server. If the
|
|
object is marked locked, it remains marked locked. The changes that
|
|
have already made to the object will not be undone implicitly.
|
|
|
|
FOR VALUES:
|
|
It is an no-op for values.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*--------------------------- OCIObjectFree ---------------------------------*/
|
|
sword OCIObjectFree( OCIEnv *env, OCIError *err, void *instance,
|
|
ub2 flags );
|
|
/*
|
|
NAME: OCIObjectFree - OCI free (and unpin) an standalone instance
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
instance (IN) - pointer to a standalone instance.
|
|
flags (IN) - If OCI_OBJECT_FREE_FORCE is set, free the object
|
|
even if it is pinned or dirty.
|
|
If OCI_OBJECT_FREE_NONULL is set, the null
|
|
structure will not be freed.
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The instance to be freed must be standalone.
|
|
- If the instance is a referenceable object, the object must be pinned.
|
|
DESCRIPTION:
|
|
This function deallocates all the memory allocated for an OTS instance,
|
|
including the null structure.
|
|
|
|
FOR PERSISTENT OBJECTS:
|
|
This function will return an error if the client is attempting to free
|
|
a dirty persistent object that has not been flushed. The client should
|
|
either flush the persistent object or set the parameter 'flag' to
|
|
OCI_OBJECT_FREE_FORCE.
|
|
|
|
This function will call OCIObjectUnpin() once to check if the object
|
|
can be completely unpin. If it succeeds, the rest of the function will
|
|
proceed to free the object. If it fails, then an error is returned
|
|
unless the parameter 'flag' is set to OCI_OBJECT_FREE_FORCE.
|
|
|
|
Freeing a persistent object in memory will not change the persistent
|
|
state of that object at the server. For example, the object will
|
|
remain locked after the object is freed.
|
|
|
|
FOR TRANSIENT OBJECTS:
|
|
|
|
This function will call OCIObjectUnpin() once to check if the object
|
|
can be completely unpin. If it succeeds, the rest of the function will
|
|
proceed to free the object. If it fails, then an error is returned
|
|
unless the parameter 'flag' is set to OCI_OBJECT_FREE_FORCE.
|
|
|
|
FOR VALUES:
|
|
The memory of the object is freed immediately.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*----------------------- OCIObjectMarkDeleteByRef --------------------------*/
|
|
sword OCIObjectMarkDeleteByRef( OCIEnv *env, OCIError *err,
|
|
OCIRef *object_ref);
|
|
/*
|
|
NAME: OCIObjectMarkDeleteByRef - OCI "delete" (and unpin) an object given
|
|
a reference
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
object_ref (IN) - ref of the object to be deleted
|
|
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
DESCRIPTION:
|
|
This function marks the object designated by 'object_ref' as deleted.
|
|
|
|
FOR PERSISTENT OBJECTS:
|
|
If the object is not loaded, then a temporary object is created and is
|
|
marked deleted. Otherwise, the object is marked deleted.
|
|
|
|
The object is deleted in the server when the object is flushed.
|
|
|
|
FOR TRANSIENT OBJECTS:
|
|
The object is marked deleted. The object is not freed until it is
|
|
unpinned.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*--------------------------- OCIObjectMarkDelete ---------------------------*/
|
|
sword OCIObjectMarkDelete( OCIEnv *env, OCIError *err, void *instance );
|
|
/*
|
|
NAME: OCIObjectMarkDelete - OCI "delete" an instance given a Pointer
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
instance (IN) - pointer to the instance
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The instance must be standalone.
|
|
- If the instance is a referenceable object, then it must be pinned.
|
|
DESCRIPTION:
|
|
|
|
FOR PERSISTENT OBJECTS:
|
|
The object is marked deleted. The memory of the object is not freed.
|
|
The object is deleted in the server when the object is flushed.
|
|
|
|
FOR TRANSIENT OBJECTS:
|
|
The object is marked deleted. The memory of the object is not freed.
|
|
|
|
FOR VALUES:
|
|
This function frees a value immediately.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*---------------------------- OCIObjectFlush -------------------------------*/
|
|
sword OCIObjectFlush( OCIEnv *env, OCIError *err, void *object );
|
|
/*
|
|
NAME: OCIObjectFlush - OCI flush a persistent object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
object (IN) - pointer to the persistent object
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The specified object must be pinned.
|
|
DESCRIPTION:
|
|
This function flushes a modified persistent object to the server.
|
|
An exclusive lock is obtained implicitly for the object when flushed.
|
|
|
|
When the object is written to the server, triggers may be fired.
|
|
Objects can be modified by the triggers at the server. To keep the
|
|
objects in the object cache being coherent with the database, the
|
|
clients can free or refresh the objects in the cache.
|
|
|
|
This function will return an error for transient objects and values.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*------------------------ OCIObjectRefresh ---------------------------------*/
|
|
sword OCIObjectRefresh( OCIEnv *env, OCIError *err, void *object );
|
|
/*
|
|
NAME: OCIObjectRefresh - OCI refresh a persistent object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
object (IN) - pointer to the persistent object
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The specified object must be pinned.
|
|
DESCRIPTION:
|
|
This function refreshes an unmarked object with data retrieved from the
|
|
latest snapshot in the server. An object should be refreshed when the
|
|
objects in the cache are inconsistent with the objects at
|
|
the server:
|
|
1) When an object is flushed to the server, triggers can be fired to
|
|
modify more objects in the server. The same objects (modified by
|
|
the triggers) in the object cache become obsolete.
|
|
2) When the user issues a SQL or executes a PL/SQL procedure to modify
|
|
any object in the server, the same object in the cache becomes
|
|
obsolete.
|
|
|
|
The object that is refreshed will be 'replaced-in-place'. When an
|
|
object is 'replaced-in-place', the top level memory of the object will
|
|
be reused so that new data can be loaded into the same memory address.
|
|
The top level memory of the null structre is also reused. Unlike the
|
|
top level memory chunk, the secondary memory chunks may be resized and
|
|
reallocated. The client should be careful when holding onto a pointer
|
|
to the secondary memory chunk (e.g. assigning the address of a
|
|
secondary memory to a local variable), since this pointer can become
|
|
invalid after the object is refreshed.
|
|
|
|
The object state will be modified as followed after being refreshed:
|
|
- existent : set to appropriate value
|
|
- pinned : unchanged
|
|
- allocation duration : unchanged
|
|
- pin duration : unchanged
|
|
|
|
This function is an no-op for transient objects or values.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*---------------------------- OCIObjectCopy --------------------------------*/
|
|
sword OCIObjectCopy( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
|
|
void *source, void *null_source,
|
|
void *target, void *null_target, OCIType *tdo,
|
|
OCIDuration duration, ub1 option );
|
|
/*
|
|
NAME: OCIObjectCopy - OCI copy one instance to another
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
svc (IN) - OCI service context handle
|
|
source (IN) - pointer to the source instance
|
|
null_source (IN) - pointer to the null structure of the source
|
|
target (IN) - pointer to the target instance
|
|
null_target (IN) - pointer to the null structure of the target
|
|
tdo (IN) - the TDO for both source and target
|
|
duration (IN) - allocation duration of the target memory
|
|
option (IN) - specify the copy option:
|
|
OROOCOSFN - Set Reference to Null. All references
|
|
in the source will not be copied to the target. The
|
|
references in the target are set to null.
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- If source or target is referenceable, it must be pinned.
|
|
- The target or the containing instance of the target must be already
|
|
be instantiated (e.g. created by OCIObjectNew()).
|
|
- The source and target instances must be of the same type. If the
|
|
source and target are located in a different databases, then the
|
|
same type must exist in both databases.
|
|
DESCRIPTION:
|
|
This function copies the contents of the 'source' instance to the
|
|
'target' instance. This function performs a deep-copy such that the
|
|
data that is copied/duplicated include:
|
|
a) all the top level attributes (see the exceptions below)
|
|
b) all the secondary memory (of the source) that is reachable from the
|
|
top level attributes.
|
|
c) the null structure of the instance
|
|
|
|
Memory is allocated with the specified allocation duration.
|
|
|
|
Certain data items are not copied:
|
|
a) If the option OCI_OBJECTCOPY_NOREF is specified, then all references
|
|
in the source are not copied. Instead, the references in the target
|
|
are set to null.
|
|
b) If the attribute is a LOB, then it is set to null.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*---------------------------- OCIObjectGetTypeRef --------------------------*/
|
|
sword OCIObjectGetTypeRef( OCIEnv *env, OCIError *err, void *instance,
|
|
OCIRef *type_ref );
|
|
/*
|
|
NAME: OCIObjectGetTypeRef - get the type reference of a standalone object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
instance (IN) - pointer to an standalone instance
|
|
type_ref (OUT) - reference to the type of the object. The reference
|
|
must already be allocated.
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The instance must be standalone.
|
|
- If the object is referenceable, the specified object must be pinned.
|
|
- The reference must already be allocated.
|
|
DESCRIPTION:
|
|
This function returns a reference to the TDO of a standalone instance.
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*--------------------------- OCIObjectGetObjectRef -------------------------*/
|
|
sword OCIObjectGetObjectRef( OCIEnv *env, OCIError *err, void *object,
|
|
OCIRef *object_ref );
|
|
/*
|
|
NAME: OCIObjectGetObjectRef - OCI get the object reference of an
|
|
referenceable object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
object (IN) - pointer to a persistent object
|
|
object_ref (OUT) - reference of the given object. The reference must
|
|
already be allocated.
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The specified object must be pinned.
|
|
- The reference must already be allocated.
|
|
DESCRIPTION:
|
|
This function returns a reference to the given object. It returns an
|
|
error for values.
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*--------------------------- OCIObjectMakeObjectRef -----------------------*/
|
|
sword OCIObjectMakeObjectRef( OCIEnv *env, OCIError *err,
|
|
const OCISvcCtx *svc, void * table,
|
|
void **values, ub4 array_len,
|
|
OCIRef *object_ref );
|
|
/*
|
|
NAME: OCIObjectMakeObjectRef - OCI Create an object reference to a
|
|
referenceable object.
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
svc (IN) - the service context
|
|
table (IN) - A pointer to the table object (must be pinned)
|
|
attrlist (IN) - A list of values (OCI type values) from which
|
|
the ref is to be created.
|
|
attrcnt (IN) - The length of the attrlist array.
|
|
object_ref (OUT) - reference of the given object. The reference must
|
|
already be allocated.
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The specified table object must be pinned.
|
|
- The reference must already be allocated.
|
|
DESCRIPTION:
|
|
This function creates a reference given the values that make up the
|
|
reference and also a pointer to the table object.
|
|
Based on the table's OID property, whether it is a pk based OID or
|
|
a system generated OID, the function creates a sys-generated REF or
|
|
a pk based REF.
|
|
In case of system generated REFs pass in a OCIRaw which is 16 bytes
|
|
long contatining the sys generated OID.
|
|
In case of PK refs pass in the OCI equivalent for numbers, chars etc..
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*--------------------------- OCIObjectGetPrimaryKeyTypeRef --------------- */
|
|
sword OCIObjectGetPrimaryKeyTypeRef( OCIEnv *env, OCIError *err,
|
|
const OCISvcCtx *svc, void *table,
|
|
OCIRef *type_ref );
|
|
/*
|
|
NAME: OCIObjectGetPrimaryKeyTypeRef - OCI get the REF to the pk OID type
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
svc (IN) - the service context
|
|
table (IN) - pointer to the table object
|
|
type_ref (OUT) - reference of the pk type. The reference must
|
|
already be allocated.
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The specified table object must be pinned.
|
|
- The reference must already be allocated.
|
|
DESCRIPTION:
|
|
This function returns a reference to the pk type. It returns an
|
|
error for values. If the table is not a Pk oid table/view, then
|
|
it returns error.
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*-------------------------- OCIObjectGetInd --------------------------------*/
|
|
sword OCIObjectGetInd( OCIEnv *env, OCIError *err, void *instance,
|
|
void **null_struct );
|
|
/*
|
|
NAME: OCIObjectGetInd - OCI get the null structure of a standalone object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
instance (IN) - pointer to the instance
|
|
null_struct (OUT) - null structure
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The object must be standalone.
|
|
- If the object is referenceable, the specified object must be pinned.
|
|
DESCRIPTION:
|
|
This function returns the null structure of an instance. This function
|
|
will allocate the top level memory of the null structure if it is not
|
|
already allocated. If an null structure cannot be allocated for the
|
|
instance, then an error is returned. This function only works for
|
|
ADT or row type instance.
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*------------------------- OCIObjectExists --------------------------------*/
|
|
sword OCIObjectExists(OCIEnv *env, OCIError *err, void *ins, boolean *exist);
|
|
/*
|
|
NAME: OCIObjectExist - OCI checks if the object exists
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
ins (IN) - pointer to an instance
|
|
exist (OUT) - return TRUE if the object exists
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The object must be standalone.
|
|
- if object is a referenceable, it must be pinned.
|
|
DESCRIPTION:
|
|
This function returns the existence of an instance. If the instance
|
|
is a value, this function always returns TRUE.
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*------------------------- OCIObjectGetProperty ---------------------------*/
|
|
sword OCIObjectGetProperty(OCIEnv *envh, OCIError *errh, const void *obj,
|
|
OCIObjectPropId propertyId,
|
|
void *property, ub4 *size );
|
|
/*
|
|
NAME: OCIObjectGetProperty - OCIObject Get Property of given object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
obj (IN) - object whose property is returned
|
|
propertyId (IN) - id which identifies the desired property
|
|
property (OUT) - buffer into which the desired property is
|
|
copied
|
|
size (IN/OUT) - on input specifies the size of the property buffer
|
|
passed by caller, on output will contain the
|
|
size in bytes of the property returned.
|
|
This parameter is required for string type
|
|
properties only (e.g OCI_OBJECTPROP_SCHEMA,
|
|
OCI_OBJECTPROP_TABLE). For non-string
|
|
properties this parameter is ignored since
|
|
the size is fixed.
|
|
DESCRIPTION:
|
|
This function returns the specified property of the object.
|
|
The desired property is identified by 'propertyId'. The property
|
|
value is copied into 'property' and for string typed properties
|
|
the string size is returned via 'size'.
|
|
|
|
Objects are classified as persistent, transient and value
|
|
depending upon the lifetime and referenceability of the object.
|
|
Some of the properties are applicable only to persistent
|
|
objects and some others only apply to persistent and
|
|
transient objects. An error is returned if the user tries to
|
|
get a property which in not applicable to the given object.
|
|
To avoid such an error, the user should first check whether
|
|
the object is persistent or transient or value
|
|
(OCI_OBJECTPROP_LIFETIME property) and then appropriately
|
|
query for other properties.
|
|
|
|
The different property ids and the corresponding type of
|
|
'property' argument is given below.
|
|
|
|
OCI_OBJECTPROP_LIFETIME
|
|
This identifies whether the given object is a persistent
|
|
object (OCI_OBJECT_PERSISTENT) or a
|
|
transient object (OCI_OBJECT_TRANSIENT) or a
|
|
value instance (OCI_OBJECT_VALUE).
|
|
'property' argument must be a pointer to a variable of
|
|
type OCIObjectLifetime.
|
|
|
|
OCI_OBJECTPROP_SCHEMA
|
|
This returns the schema name of the table in which the
|
|
object exists. An error is returned if the given object
|
|
points to a transient instance or a value. If the input
|
|
buffer is not big enough to hold the schema name an error
|
|
is returned, the error message will communicate the
|
|
required size. Upon success, the size of the returned
|
|
schema name in bytes is returned via 'size'.
|
|
'property' argument must be an array of type text and 'size'
|
|
should be set to size of array in bytes by the caller.
|
|
|
|
OCI_OBJECTPROP_TABLE
|
|
This returns the table name in which the object exists. An
|
|
error is returned if the given object points to a
|
|
transient instance or a value. If the input buffer is not
|
|
big enough to hold the table name an error is returned,
|
|
the error message will communicate the required size. Upon
|
|
success, the size of the returned table name in bytes is
|
|
returned via 'size'. 'property' argument must be an array
|
|
of type text and 'size' should be set to size of array in
|
|
bytes by the caller.
|
|
|
|
OCI_OBJECTPROP_PIN_DURATION
|
|
This returns the pin duration of the object.
|
|
An error is returned if the given object points to a value
|
|
instance. Valid pin durations are: OCI_DURATION_SESSION and
|
|
OCI_DURATION_TRANS.
|
|
'property' argument must be a pointer to a variable of type
|
|
OCIDuration.
|
|
|
|
OCI_OBJECTPROP_ALLOC_DURATION
|
|
This returns the allocation duration of the object.
|
|
Valid allocation durations are: OCI_DURATION_SESSION and
|
|
OCI_DURATION_TRANS.
|
|
'property' argument must be a pointer to a variable of type
|
|
OCIDuration.
|
|
|
|
OCI_OBJECTPROP_LOCK
|
|
This returns the lock status of the
|
|
object. The possible lock status is enumerated by OCILockOpt.
|
|
An error is returned if the given object points to a transient
|
|
or value instance.
|
|
'property' argument must be a pointer to a variable of
|
|
type OCILockOpt.
|
|
Note, the lock status of an object can also be retrieved by
|
|
calling OCIObjectIsLocked().
|
|
|
|
OCI_OBJECTPROP_MARKSTATUS
|
|
This returns the status flag which indicates whether the
|
|
object is a new object, updated object and/or deleted object.
|
|
The following macros can be used to test the mark status
|
|
flag:
|
|
|
|
OCI_OBJECT_IS_UPDATED(flag)
|
|
OCI_OBJECT_IS_DELETED(flag)
|
|
OCI_OBJECT_IS_NEW(flag)
|
|
OCI_OBJECT_IS_DIRTY(flag)
|
|
|
|
An object is dirty if it is a new object or marked deleted or
|
|
marked updated.
|
|
An error is returned if the given object points to a transient
|
|
or value instance. 'property' argument must be of type
|
|
OCIObjectMarkStatus.
|
|
|
|
OCI_OBJECTPROP_VIEW
|
|
This identifies whether the specified object is a view object
|
|
or not. If property value returned is TRUE, it indicates the
|
|
object is a view otherwise it is not.
|
|
'property' argument must be of type boolean.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR. Possible errors are TBD
|
|
*/
|
|
|
|
/*---------------------------- OCIObjectIsLocked --------------------------*/
|
|
sword OCIObjectIsLocked( OCIEnv *env, OCIError *err, void *ins,
|
|
boolean *lock);
|
|
/*
|
|
NAME: OCIObjectIsLocked - OCI get the lock status of a standalone object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
ins (IN) - pointer to an instance
|
|
lock (OUT) - return value for the lock status.
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The instance must be standalone.
|
|
- If the object is referenceable, the specified object must be pinned.
|
|
DESCRIPTION:
|
|
This function returns the lock status of an instance. If the instance
|
|
is a value, this function always returns FALSE.
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*------------------------- OCIObjectIsDirty ------------------------------*/
|
|
sword OCIObjectIsDirty( OCIEnv *env, OCIError *err, void *ins,
|
|
boolean *dirty);
|
|
/*
|
|
NAME: OCIObjectIsDirty - OCI get the dirty status of a standalone object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
ins (IN) - pointer to an instance
|
|
dirty (OUT) - return value for the dirty status.
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
- The instance must be standalone.
|
|
- if instance is an object, the instance must be pinned.
|
|
DESCRIPTION:
|
|
This function returns the dirty status of an instance. If the instance
|
|
is a value, this function always returns FALSE.
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*--------------------------- OCIObjectPinTable -----------------------------*/
|
|
sword OCIObjectPinTable( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
|
|
const oratext *schema_name,
|
|
ub4 s_n_length, const oratext *object_name, ub4 o_n_length,
|
|
const OCIRef *scope_obj_ref, OCIDuration pin_duration,
|
|
void ** object );
|
|
/*
|
|
NAME: OCIObjectPinTable - OCI get table object
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
svc (IN) - OCI service context handle
|
|
schema_name (IN, optional) - schema name of the table
|
|
s_n_length (IN, optional) - length of the schema name
|
|
object_name (IN) - name of the table
|
|
o_n_length (IN) - length of the table name
|
|
scope_obj_ref (IN, optional) - reference of the scoping object
|
|
pin_duration (IN) - pin duration. See description in OCIObjectPin().
|
|
object (OUT) - the pinned table object
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
DESCRIPTION:
|
|
This function pin a table object with the specified pin duration.
|
|
The client can unpin the object by calling OCIObjectUnpin(). See
|
|
OCIObjectPin() and OCIObjectUnpin() for more information about pinning
|
|
and unpinning.
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*------------------------- OCIObjectArrayPin -------------------------------*/
|
|
sword OCIObjectArrayPin(OCIEnv *env, OCIError *err, OCIRef **ref_array,
|
|
ub4 array_size, OCIComplexObject **cor_array,
|
|
ub4 cor_array_size, OCIPinOpt pin_option,
|
|
OCIDuration pin_duration, OCILockOpt lock,
|
|
void **obj_array, ub4 *pos );
|
|
/*
|
|
NAME: OCIObjectArrayPin - ORIO array pin
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
ref_array (IN) - array of references to be pinned
|
|
array_size (IN) - number of elements in the array of references
|
|
pin_option (IN) - pin option. See OCIObjectPin().
|
|
pin_duration (IN) - pin duration. See OCIObjectPin().
|
|
lock_option (IN) - lock option. See OCIObjectPin().
|
|
obj_array (OUT) - If this argument is not NULL, the pinned objects
|
|
will be returned in the array. The user must
|
|
allocate this array with element type being
|
|
'void *'. The size of this array is identical to
|
|
'array'.
|
|
pos (OUT) - If there is an error, this argument will contain
|
|
the element that is causing the error. Note that
|
|
this argument is set to 1 for the first element in
|
|
the ref_array.
|
|
REQUIRE:
|
|
- a valid OCI environment handle must be given.
|
|
- If 'obj_array' is not NULL, then it must already be allocated and
|
|
the size of 'obj_array' is 'array_size'.
|
|
DESCRIPTION:
|
|
This function pin an array of references. All the pinned objects are
|
|
retrieved from the database in one network roundtrip. If the user
|
|
specifies an output array ('obj_array'), then the address of the
|
|
pinned objects will be assigned to the elements in the array. See
|
|
OCIObjectPin() for more information about pinning.
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* HEAP/CACHE OPERATIONS */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
/*--------------------------- OCICacheFlush ---------------------------------*/
|
|
sword OCICacheFlush( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
|
|
void *context, OCIRef *(*get)(void *context, ub1 *last),
|
|
OCIRef **ref );
|
|
/*
|
|
NAME: OCICacheFlush - OCI flush persistent objects
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
svc (IN) [optional] - OCI service context. If null pointer is
|
|
specified, then the dirty objects in all connections
|
|
will be flushed.
|
|
context (IN) [optional] - specifies an user context that is an
|
|
argument to the client callback function 'get'. This
|
|
parameter is set to NULL if there is no user context.
|
|
get (IN) [optional] - an client-defined function which acts an
|
|
iterator to retrieve a batch of dirty objects that need
|
|
to be flushed. If the function is not NULL, this function
|
|
will be called to get a reference of a dirty object.
|
|
This is repeated until a null reference is returned by
|
|
the client function or the parameter 'last' is set to
|
|
TRUE. The parameter 'context' is passed to get()
|
|
for each invocation of the client function. This
|
|
parameter should be NULL if user callback is not given.
|
|
If the object that is returned by the client function is
|
|
not a dirtied persistent object, the object is ignored.
|
|
All the objects that are returned from the client
|
|
function must be from newed or pinned the same service
|
|
context, otherwise, an error is signalled. Note that the
|
|
returned objects are flushed in the order in which they
|
|
are marked dirty.
|
|
ref (OUT) [optional] - if there is an error in flushing the
|
|
objects, (*ref) will point to the object that
|
|
is causing the error. If 'ref' is NULL, then the object
|
|
will not be returned. If '*ref' is NULL, then a
|
|
reference will be allocated and set to point to the
|
|
object. If '*ref' is not NULL, then the reference of
|
|
the object is copied into the given space. If the
|
|
error is not caused by any of the dirtied object,
|
|
the given ref is initalized to be a NULL reference
|
|
(OCIRefIsNull(*ref) is TRUE).
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
DESCRIPTION:
|
|
This function flushes the modified persistent objects from the
|
|
environment heap to the server. The objects are flushed in the order
|
|
that they are marked updated or deleted.
|
|
|
|
See OCIObjectFlush() for more information about flushing.
|
|
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*--------------------------- OCICacheRefresh -------------------------------*/
|
|
sword OCICacheRefresh(OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
|
|
OCIRefreshOpt option, void *context,
|
|
OCIRef *(*get)(void *context), OCIRef **ref);
|
|
/*
|
|
NAME: OCICacheRefresh - OCI ReFreSh persistent objects
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
svc (IN) [optional] - OCI service context. If null pointer is
|
|
specified, then the persistent objects in all connections
|
|
will be refreshed.
|
|
option (IN) [optional] - if OCI_REFRESH_LOAD is specified, all
|
|
objects that is loaded within the transaction are
|
|
refreshed. If the option is OCI_REFERSH_LOAD and the
|
|
parameter 'get' is not NULL, this function will ignore
|
|
the parameter.
|
|
context (IN) [optional] - specifies an user context that is an
|
|
argument to the client callback function 'get'. This
|
|
parameter is set to NULL if there is no user context.
|
|
get (IN) [optional] - an client-defined function which acts an
|
|
iterator to retrieve a batch of objects that need to be
|
|
refreshed. If the function is not NULL, this function
|
|
will be called to get a reference of an object. If
|
|
the reference is not NULL, then the object will be
|
|
refreshed. These steps are repeated until a null
|
|
reference is returned by this function. The parameter
|
|
'context' is passed to get() for each invocation of the
|
|
client function. This parameter should be NULL if user
|
|
callback is not given.
|
|
ref (OUT) [optional] - if there is an error in refreshing the
|
|
objects, (*ref) will point to the object that
|
|
is causing the error. If 'ref' is NULL, then the object
|
|
will not be returned. If '*ref' is NULL, then a
|
|
reference will be allocated and set to point to the
|
|
object. If '*ref' is not NULL, then the reference of
|
|
the object is copied into the given space. If the
|
|
error is not caused by any of the object,
|
|
the given ref is initalized to be a NULL reference
|
|
(OCIRefIsNull(*ref) is TRUE).
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
DESCRIPTION:
|
|
This function refreshes all pinned persistent objects. All unpinned
|
|
persistent objects are freed. See OCIObjectRefresh() for more
|
|
information about refreshing.
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*---------------------------- OCICacheUnpin --------------------------------*/
|
|
sword OCICacheUnpin( OCIEnv *env, OCIError *err, const OCISvcCtx *svc );
|
|
/*
|
|
NAME: OCICacheUnpin - OCI UNPin objects
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
svc (IN) [optional] - OCI service context. If null pointer is
|
|
specified, then the objects in all connections
|
|
will be unpinned.
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
DESCRIPTION:
|
|
If a connection is specified, this function completely unpins the
|
|
persistent objects in that connection. Otherwise, all persistent
|
|
objects in the heap are completely unpinned. All transient objects in
|
|
the heap are also completely unpinned. See OCIObjectUnpin() for more
|
|
information about unpinning.
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*----------------------------- OCICacheFree --------------------------------*/
|
|
sword OCICacheFree( OCIEnv *env, OCIError *err, const OCISvcCtx *svc );
|
|
/*
|
|
NAME: OCICacheFree - OCI FREe instances
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
svc (IN) [optional] - OCI service context. If null pointer is
|
|
specified, then the objects in all connections
|
|
will be freed.
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
DESCRIPTION:
|
|
If a connection is specified, this function frees the persistent
|
|
objects, transient objects and values allocated for that connection.
|
|
Otherwise, all persistent objects, transient objects and values in the
|
|
heap are freed. Objects are freed regardless of their pin count. See
|
|
OCIObjectFree() for more information about freeing an instance.
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/*---------------------------- OCICacheUnmark -------------------------------*/
|
|
sword OCICacheUnmark( OCIEnv *env, OCIError *err, const OCISvcCtx *svc );
|
|
/*
|
|
NAME: OCICacheUnmark - OCI Unmark all dirty objects
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns
|
|
OCI_ERROR. The error recorded in 'err' can be
|
|
retrieved by calling OCIErrorGet().
|
|
svc (IN) [optional] - OCI service context. If null pointer is
|
|
specified, then the objects in all connections
|
|
will be unmarked.
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given.
|
|
DESCRIPTION:
|
|
If a connection is specified, this function unmarks all dirty objects
|
|
in that connection. Otherwise, all dirty objects in the cache are
|
|
unmarked. See OCIObjectUnmark() for more information about unmarking
|
|
an object.
|
|
RETURNS:
|
|
if environment handle or error handle is null, return
|
|
OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
|
|
sword OCIDurationBegin( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
|
|
OCIDuration parent, OCIDuration *dur );
|
|
/*
|
|
NAME: OCIDurationBegin - OCI DURATION BEGIN
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
This should be passed NULL, when cartridge services
|
|
are to be used.
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns OCI_ERROR.
|
|
The error recorded in 'err' can be retrieved by calling
|
|
OCIErrorGet().
|
|
svc (IN/OUT) - OCI service handle.
|
|
parent (IN) - parent for the duration to be started.
|
|
dur (OUT) - newly created user duration
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given for non-cartridge
|
|
services.
|
|
- For cartridge services, NULL should be given for environment handle
|
|
- A valid service handle must be given in all cases.
|
|
DESCRIPTION:
|
|
This function starts a new user duration. A user can have multiple
|
|
active user durations simultaneously. The user durations do not have
|
|
to be nested.
|
|
|
|
The object subsystem predefines 3 durations :
|
|
1) session - memory allocated with session duration comes from
|
|
the UGA heap (OCI_DURATION_SESSION). A session
|
|
duration terminates at the end of the user session.
|
|
2) transaction - memory allocated with transaction duration comes
|
|
from the UGA heap (OCI_DURATION_TRANS). A trans-
|
|
action duration terminates at the end of the user
|
|
transaction.
|
|
3) call - memory allocated with call duration comes from PGA
|
|
heap (OCI_DURATION_CALL). A call duration terminates
|
|
at the end of the user call.
|
|
|
|
Each user duration has a parent duration. A parent duration can be a
|
|
predefined duration or another user duration. The relationship between
|
|
a user duration and its parent duration (child duration) are:
|
|
|
|
1) An user duration is nested within the parent duration. When its
|
|
parent duration terminates, the user duration will also terminate.
|
|
2) The memory allocated with an user duration comes from the heap of
|
|
its parent duration. For example, if the parent duration of an
|
|
user duration is call, then the memory allocated with the user
|
|
duration will also come from the PGA heap.
|
|
|
|
This function can be used as both part of cartridge services as well
|
|
as without cartridge services.
|
|
The difference in the function in the case of cartridge and
|
|
non-cartridge services is:
|
|
In case of cartridge services, as descibed above a new user
|
|
duration is created as a child of the "parent" duration.
|
|
But when used for non-cartridge purposes, when a pre-defined
|
|
duration is passed in as parent, it is mapped to the cache duration
|
|
for that connection (which is created if not already present) and
|
|
the new user duration will be child of the cache duration.
|
|
|
|
RETURNS:
|
|
if environment handle and service handle is null or if error
|
|
handle is null return OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
|
|
sword OCIDurationEnd( OCIEnv *env, OCIError *err, const OCISvcCtx *svc,
|
|
OCIDuration duration );
|
|
/*
|
|
NAME: OCIDurationEnd - OCI DURATION END
|
|
PARAMETERS:
|
|
env (IN/OUT) - OCI environment handle initialized in object mode
|
|
This should be passed NULL, when cartridge services
|
|
are to be used.
|
|
err (IN/OUT) - error handle. If there is an error, it is
|
|
recorded in 'err' and this function returns OCI_ERROR.
|
|
The error recorded in 'err' can be retrieved by calling
|
|
OCIErrorGet().
|
|
svc (IN/OUT) - OCI service handle.
|
|
dur (OUT) - a previously created user duration using
|
|
OCIDurationBegin()
|
|
REQUIRES:
|
|
- a valid OCI environment handle must be given for non-cartridge
|
|
services.
|
|
- For cartridge services, NULL should be given for environment handle
|
|
- A valid service handle must be given in all cases.
|
|
DESCRIPTION:
|
|
This function terminates a user duration. All memory allocated for
|
|
this duration is freed.
|
|
|
|
This function can be used as both part of cartridge services as well
|
|
as without cartridge services. In both cased, the heap duration
|
|
is freed and all the allocated memory for that duration is freed.
|
|
The difference in the function in the case of cartridge and
|
|
non-cartridge services is:
|
|
In case of non-cartridge services, if the duration is pre-
|
|
defined, the associated cache duration (see OCIDurationBegin())
|
|
is also terminated and the following is done.
|
|
1) The child durations are terminated.
|
|
2) All objects pinned for this duration are unpinned.
|
|
3) All instances allocated for this duration are freed.
|
|
|
|
In case of cartridge services, only the heap duration is
|
|
freed. All the context entries allocated for that duration are
|
|
freed from the context hash table..
|
|
|
|
RETURNS:
|
|
if environment handle and service handle is null or if error
|
|
handle is null return OCI_INVALID_HANDLE.
|
|
if operation suceeds, return OCI_SUCCESS.
|
|
if operation fails, return OCI_ERROR.
|
|
*/
|
|
|
|
/******************************************************************************
|
|
** DO NOT USE THE FUNCTIONS BELOW! **
|
|
** UNSUPPORTED INTERFACE **
|
|
** WILL BE REMOVED/CHANGED IN A FUTURE RELEASE **
|
|
******************************************************************************/
|
|
|
|
sword OCIDurationGetParent( OCIEnv *env, OCIError *err,
|
|
OCIDuration duration, OCIDuration *parent );
|
|
|
|
sword OCIObjectAlwaysLatest( OCIEnv *env, OCIError *err, void *object );
|
|
|
|
sword OCIObjectNotAlwaysLatest( OCIEnv *env, OCIError *err,
|
|
void *object );
|
|
|
|
sword OCIObjectFlushRefresh( OCIEnv *env, OCIError *err, void *object);
|
|
|
|
sword OCIObjectIsLoaded( OCIEnv *env, OCIError *err, void *ins,
|
|
boolean *load);
|
|
|
|
sword OCIObjectIsDirtied( OCIEnv *env, OCIError *err, void *ins,
|
|
boolean *dirty);
|
|
|
|
sword OCICacheGetObjects( OCIEnv *env, OCIError *err,
|
|
const OCISvcCtx *svc,
|
|
OCIObjectProperty property,
|
|
void *client_context,
|
|
void (*client_callback)(
|
|
void *client_context,
|
|
void *object ));
|
|
|
|
sword OCICacheRegister( OCIEnv *env, OCIError *err,
|
|
OCIObjectEvent event,
|
|
void *client_context,
|
|
void (*client_callback)(
|
|
void *client_context,
|
|
OCIObjectEvent event,
|
|
void *object));
|
|
|
|
sword OCICacheFlushRefresh( OCIEnv *env, OCIError *err,
|
|
const OCISvcCtx *svc, void *context,
|
|
OCIRef *(*get)(void *context, ub1 *last),
|
|
OCIRef **ref );
|
|
|
|
sword OCIObjectSetData(OCIEnv *env, OCIError *err, void *obj_hdr,
|
|
void *data);
|
|
|
|
sword OCIObjectGetNewOID(OCIEnv *env, OCIError *err, OCISvcCtx *svc,
|
|
ub1 *oid);
|
|
|
|
|
|
#endif /* ORI_ORACLE */
|