增加instant client for osx 64位版本
diff --git a/sdk/include/occiObjects.h b/sdk/include/occiObjects.h
new file mode 100644
index 0000000..1b301ad
--- /dev/null
+++ b/sdk/include/occiObjects.h
@@ -0,0 +1,910 @@
+/* Copyright (c) 2000, 2007, Oracle. All rights reserved. */
+
+/*
+ NAME
+ occiObjects.h - header file for OCCI object classes
+
+ DESCRIPTION
+ Class definitions for Ref, RefAny, AnyData
+
+ RELATED DOCUMENTS
+ <note any documents related to this facility>
+
+ EXPORT FUNCTION(S)
+ <external functions declared for use outside package - one-line
+ descriptions>
+
+ INTERNAL FUNCTION(S)
+ <other external functions declared - one-line descriptions>
+
+ EXAMPLES
+
+ NOTES
+ <other useful comments, qualifications, etc.>
+
+
+*/
+
+#ifndef _olint /* disable olint check */
+
+#ifndef OCCIOBJECTS_ORACLE
+# define OCCIOBJECTS_ORACLE
+
+#ifndef OCCICOMMON_ORACLE
+#include <occiCommon.h>
+#endif
+
+namespace oracle {
+namespace occi {
+struct AnyDataCtx {
+ ConnectionImpl *occiSession;
+ OCIAnyData *anyData;
+ void *objHeader;
+ ub4 errNum;
+};
+typedef struct AnyDataCtx AnyDataCtx;
+
+class PObject
+{
+ public:
+ enum LockOption {OCCI_LOCK_WAIT, OCCI_LOCK_NOWAIT};
+ enum UnpinOption {OCCI_PINCOUNT_DECR, OCCI_PINCOUNT_RESET};
+ static void destroy(void *);
+ static void refresh(void *);
+ PObject();
+ PObject(const void *ctx);
+ PObject(const PObject& obj);
+ virtual ~PObject();
+ PObject& operator=(const PObject& obj);
+ void *operator new(size_t size);
+ void *operator new(size_t size, const Connection *x,
+ const OCCI_STD_NAMESPACE::string& tablename,
+ const char *typeName);
+ void *operator new(size_t size, const Connection *sess,
+ const OCCI_STD_NAMESPACE::string& tablename,
+ const OCCI_STD_NAMESPACE::string& typName ,
+ const OCCI_STD_NAMESPACE::string& schTabName="",
+ const OCCI_STD_NAMESPACE::string& schTypName = "");
+ void *operator new(size_t size, const Connection *sess,
+ const UString& tablename, const UString &typName,
+ const UString& schTabName, const UString& schTypName);
+ void *operator new(size_t size, void *adctx);
+ void operator delete(void *obj, size_t size);
+ RefAny getRef() const;
+ bool isLocked() const;
+ void unpin(UnpinOption mode=OCCI_PINCOUNT_DECR);
+ void pin();
+ void lock(PObject::LockOption lock_option);
+ void unmark();
+ void flush();
+ void markDelete();
+ void markModified();
+ bool isNull() const;
+ void setNull();
+ const Connection *getConnection() const;
+ virtual OCCI_STD_NAMESPACE::string getSQLTypeName() const = 0;
+ virtual void getSQLTypeName(Environment *env, void **schName,
+ unsigned int &schNameLen, void **typeName,
+ unsigned int &typeNameLen) const = 0;
+ void getSQLTypeName(Environment *env, void *(*rSQL)(void *),
+ void **schname, unsigned int &schnamelen,
+ void **typname, unsigned int &typnamelen) const;
+ virtual void writeSQL(AnyData& stream) = 0;
+ virtual void readSQL(AnyData& stream) = 0;
+ private:
+ static void initialise( void * obj, const Connection * sess,
+ void *schTabName, unsigned int schTabLen,
+ void *tableName, unsigned int tabLen,
+ void *schTypName, unsigned int schTypLen,
+ void *typeName, unsigned int typLen);
+
+ ConnectionImpl *occiSession_;
+ void *objHeader_;
+ ub2 customNewed_;
+ enum {CUSTOM_NEWED = 0x5cde};
+ ub2 flags_;
+ enum {NULL_INFO = 0x0001, GARBAGE_COLLECTED = 0x0002,
+ REFRESH_OBJECT = 0x0004,
+ CACHED_OBJECT = 0xBAF8};
+ //check PObject implementation for CACHED_OBJECT flag
+ // for future use
+ void *pobjectExt;
+ friend class RefImpl;
+};
+
+class AnyData
+{
+ public:
+ ~AnyData();
+ AnyData(void *any) ;
+ AnyData(const Connection *sessp);
+ AnyData(const Connection *sessp, OCIAnyData *any, bool freeImg = true) ;
+
+ AnyData(const AnyData &src);
+ AnyData& operator = (const AnyData &src);
+
+ OCIAnyData* getOCIAnyData() const;
+ const Connection* getConnection() const;
+
+
+ bool isNull() const ;
+ void setNull() ;
+ OCCI_STD_NAMESPACE::string getString() const ;
+ UString getUString() const ;
+ Blob getBlob() const ;
+ Clob getClob() const ;
+ Bfile getBfile() const ;
+ BFloat getBFloat() const ;
+ BDouble getBDouble() const ;
+ Number getNumber() const ;
+ Bytes getBytes() const ;
+ Date getDate() const ;
+ Timestamp getTimestamp() const ;
+ IntervalYM getIntervalYM() const ;
+ IntervalDS getIntervalDS() const ;
+ PObject *getObject(void *(*rSQL)(void *)) const ;
+ RefAny getRef() const ;
+
+ void setString(const OCCI_STD_NAMESPACE::string &str) ;
+ void setUString(const UString &str) ;
+ void setBlob(const Blob &blob) ;
+ void setClob(const Clob &clob) ;
+ void setBfile(const Bfile &bfile) ;
+ void setBFloat(const BFloat &n) ;
+ void setBDouble(const BDouble &n) ;
+ void setNumber(const Number &n) ;
+ void setBytes(const Bytes &bytes) ;
+ void setDate(const Date &date) ;
+ void setTimestamp(const Timestamp ×tamp) ;
+ void setIntervalYM(const IntervalYM &intervalym) ;
+ void setIntervalDS(const IntervalDS &intervalds) ;
+ void setObject(const PObject *objptr) ;
+ void setRef(const RefAny &ref) ;
+
+ void setFromString(const OCCI_STD_NAMESPACE::string &str) ;
+ void setFromBfile(const Bfile &bfile) ;
+ void setFromBFloat(const BFloat &n) ;
+ void setFromBDouble(const BDouble &n) ;
+ void setFromNumber(const Number &n) ;
+ void setFromBytes(const Bytes &bytes) ;
+ void setFromDate(const Date &date) ;
+ void setFromTimestamp(const Timestamp ×tamp) ;
+ void setFromIntervalYM(const IntervalYM &intervalym) ;
+ void setFromIntervalDS(const IntervalDS &intervalds) ;
+ void setFromObject(const PObject *objptr) ;
+ void setFromRef(const RefAny &ref,
+ const OCCI_STD_NAMESPACE::string &typname,
+ const OCCI_STD_NAMESPACE::string &schname) ;
+
+ OCCI_STD_NAMESPACE::string getAsString() const ;
+ Bfile getAsBfile() const ;
+ BFloat getAsBFloat() const ;
+ BDouble getAsBDouble() const ;
+ Number getAsNumber() const ;
+ Bytes getAsBytes() const ;
+ Date getAsDate() const ;
+ Timestamp getAsTimestamp() const ;
+ IntervalYM getAsIntervalYM() const ;
+ IntervalDS getAsIntervalDS() const ;
+ PObject *getAsObject() const ;
+ RefAny getAsRef() const ;
+
+ TypeCode getType() const;
+
+ private:
+
+
+ // private data members
+ Ptr<AnyDataImpl> anyDataImplPtr;
+
+
+};
+
+template <class T>
+class Ref
+{
+ public:
+
+ Ref();
+ Ref(const T *obj) ;
+ Ref(const RefAny &refAny) ;
+ Ref(const Ref<T> &src) ;
+ Ref(const Connection *sessp, OCIRef *tref, bool copy=TRUE)
+ ;
+ ~Ref();
+ Ref<T>& operator=(const Ref<T> &src)
+ ;
+ Ref<T>& operator=(const T *obj) ;
+ Ref<T>& operator=(const RefAny &src);
+ T * operator->() ;
+ T * ptr() ;
+ T & operator *() ;
+ const T * operator->() const;
+ const T * ptr() const;
+ const T & operator *() const ;
+ void markDelete() ;
+ void unmarkDelete() ;
+ void setNull();
+ bool isNull() const;
+ void clear() ;
+ bool isClear() const;
+ void setPrefetch(const OCCI_STD_NAMESPACE::string &typeName,
+ unsigned int depth);
+ void setPrefetch(const OCCI_STD_NAMESPACE::string &schName,
+ const OCCI_STD_NAMESPACE::string &typeName,
+ unsigned int depth);
+ void setPrefetch(const UString &schName,
+ const UString &typeName,
+ unsigned int depth);
+ void setPrefetch(unsigned int depth) ;
+ void setLock(LockOptions );
+ operator RefAny() const;
+ OCIRef *getRef() const;
+ const Connection *getConnection() const;
+ bool operator == (const Ref<T> &ref) const;
+ bool operator != (const Ref<T> &ref) const;
+ bool operator == (const RefAny &refAnyR) const ;
+ bool operator != (const RefAny &refAnyR) const ;
+ OCIComplexObject *getCor() const;
+ void setPinnedObject(PObject *objPtr);
+ private:
+
+ RefImpl *rimplPtr;
+};
+
+
+class RefImpl
+{
+ public:
+
+ RefImpl();
+ RefImpl(PObject *obj) ;
+ RefImpl(const RefAny &refAny) ;
+ RefImpl(const RefImpl &src) ;
+ RefImpl(const Connection *sessp, OCIRef *tref,
+ bool copy=TRUE) ;
+ ~RefImpl();
+ bool isNull() const ;
+ void setNull() ;
+ void markDelete() ;
+ void unmarkDelete() ;
+ void clear() ;
+ bool isClear() const ;
+ void setPrefetch(const OCCI_STD_NAMESPACE::string &typeName,
+ unsigned int depth) ;
+ void setPrefetch(const OCCI_STD_NAMESPACE::string &schName,
+ const OCCI_STD_NAMESPACE::string &typeName,
+ unsigned int depth);
+ void setPrefetch(const UString &schName,
+ const UString &typeName,
+ unsigned int depth);
+ void setPrefetch(unsigned int depth) ;
+ void setLock(LockOptions lckOption) ;
+ PObject *pin() ;
+ void unpin(PObject *obj) ;
+ void setRefFromObjPtr(const PObject *obj) ;
+ OCIRef* getRef() const;
+ void setRefImpl(RefImpl *rptr);
+ const Connection * getConnection() const;
+ bool operator == (const RefImpl &refI) const ;
+ bool operator == (const RefAny &refAnyR) const ;
+ void assignObj(PObject *newObjPtr) ;
+ void assignRefAny(const RefAny &src) ;
+ // added following methods
+ bool isEqual(PObject *obj);
+ void operator = ( const RefImpl &src);
+ OCIComplexObject *getCor() const;
+ void setPinnedObject( PObject *objPtr);
+ private:
+
+ OCIRef *ref;
+ const ConnectionImpl *sessp;
+ OCIComplexObject *corhp;
+ OCCI_STD_NAMESPACE::list<void *> descriptorList;
+ LockOptions lockOption;
+ // added data member for object header
+ void *objHeader;
+ //common implementation function for setPrefetch
+ void do_setPrefetch(void *schName, unsigned int schNameLen,
+ void *typeName, unsigned int typeNameLen,
+ unsigned int depth);
+};
+
+
+class RefAny
+{
+ public:
+
+ RefAny();
+ RefAny (const Connection *sessptr, const OCIRef *ref);
+ RefAny (const Connection *sessptr, const OCIRef *ref, bool isowner);
+ ~RefAny() ;
+ RefAny(const RefAny& src) ;
+ RefAny& operator=(const RefAny& src) ;
+ void markDelete() ;
+ void unmarkDelete() ;
+ void clear() ;
+ bool isNull() const;
+ OCIRef * getRef() const;
+ const Connection * getConnection() const;
+ bool operator == (const RefAny &refAnyR) const;
+ bool operator != (const RefAny &refAnyR) const;
+ bool isOwner() const;
+
+ private:
+
+ OCIRef *ref;
+ const ConnectionImpl *sessp;
+ // for future use
+ void *refanyExt;
+ bool owner;
+
+ friend RefAny MetaData::getRef(MetaData::AttrId) const;
+ friend RefAny PObject::getRef() const;
+ friend class AnyDataImpl;
+ friend class ResultSetImpl;
+ friend class StatementImpl;
+ friend void getVector(const ResultSet *rs,
+ unsigned int colIndex,
+ OCCI_STD_NAMESPACE::vector<RefAny> &vect) ;
+ friend void getVector(const Statement *stmt,
+ unsigned int colIndex,
+ OCCI_STD_NAMESPACE::vector<RefAny> &vect) ;
+};
+
+template <class T>
+Ref<T>::Ref()
+{
+ rimplPtr = new RefImpl();
+}
+
+template <class T>
+Ref<T>::Ref(const T *obj)
+{
+ rimplPtr = new RefImpl((PObject *)obj);
+}
+
+template <class T>
+Ref<T>::Ref(const RefAny &refAny)
+
+{
+ rimplPtr = new RefImpl(refAny);
+}
+
+template <class T>
+Ref<T>::Ref(const Ref<T>& src)
+
+{
+ rimplPtr = new RefImpl(*(src.rimplPtr));
+}
+
+template <class T>
+Ref<T>::Ref(const Connection *sessp, OCIRef *tref, bool copy)
+
+{
+ rimplPtr = new RefImpl(sessp, tref, copy);
+}
+
+template <class T>
+Ref<T>::~Ref()
+{
+ delete rimplPtr;
+}
+
+
+template <class T>
+Ref<T>& Ref<T>::operator=(const Ref<T> &src)
+{
+ if (&src == this)
+ return *this;
+ *rimplPtr = *(src.rimplPtr);
+ return *this;
+}
+
+template <class T>
+Ref<T>& Ref<T>::operator=(const T *obj)
+{
+ if (rimplPtr->isEqual((PObject *)obj))
+ return *this;
+ rimplPtr->assignObj((PObject *)obj);
+ return *this;
+}
+
+template <class T>
+Ref<T>& Ref<T>::operator=(const RefAny &src)
+{
+ rimplPtr->assignRefAny(src);
+ return *this;
+}
+
+template <class T>
+T* Ref<T>::operator->()
+{
+ return ((T *)rimplPtr->pin());
+}
+
+template <class T>
+T* Ref<T>::ptr()
+{
+ return ((T *)rimplPtr->pin());
+}
+
+template <class T>
+T& Ref<T>::operator * ()
+{
+ return ((T &)(*(rimplPtr->pin())));
+}
+
+template <class T>
+const T* Ref<T>::operator->() const
+{
+ return ((const T *)rimplPtr->pin());
+}
+
+template <class T>
+const T* Ref<T>::ptr() const
+{
+ return ((const T *)rimplPtr->pin());
+}
+
+template <class T>
+const T& Ref<T>::operator * () const
+{
+ return ((const T &)(*(rimplPtr->pin())));
+}
+
+template <class T>
+void Ref<T>::markDelete ()
+{
+ rimplPtr->markDelete();
+}
+
+template <class T>
+void Ref<T>::unmarkDelete ()
+{
+ rimplPtr->unmarkDelete();
+}
+
+template <class T>
+void Ref<T>::setNull()
+{
+ rimplPtr->setNull();
+}
+
+template <class T>
+bool Ref<T>::isNull() const
+{
+ return rimplPtr->isNull();
+}
+
+template <class T>
+void Ref<T>::clear ()
+{
+ rimplPtr->clear();
+}
+
+template <class T>
+bool Ref<T>::isClear() const
+{
+ return rimplPtr->isClear();
+}
+
+template <class T>
+void Ref<T>::setPrefetch (const OCCI_STD_NAMESPACE::string &typeName,
+unsigned int depth)
+
+{
+ rimplPtr->setPrefetch(typeName,depth);
+}
+
+template <class T>
+void Ref<T>::setPrefetch (const OCCI_STD_NAMESPACE::string &schemaName,
+const OCCI_STD_NAMESPACE::string &typeName,
+unsigned int depth)
+
+{
+ rimplPtr->setPrefetch(schemaName,typeName,depth);
+}
+
+template <class T>
+void Ref<T>::setPrefetch (const UString &schemaName,
+const UString &typeName,
+unsigned int depth)
+
+{
+ rimplPtr->setPrefetch(schemaName,typeName,depth);
+}
+
+template <class T>
+void Ref<T>::setPrefetch (unsigned int depth)
+
+{
+ rimplPtr->setPrefetch(depth);
+}
+
+template <class T>
+void Ref<T>::setLock (LockOptions lckOption)
+{
+ rimplPtr->setLock(lckOption);
+}
+
+template <class T>
+OCIRef* Ref<T>::getRef() const
+{
+ return (rimplPtr->getRef());
+}
+
+template<class T>
+const Connection* Ref<T>::getConnection () const
+{
+ return (rimplPtr->getConnection());
+}
+
+template <class T>
+Ref<T>::operator RefAny () const
+{
+ if (isNull())
+ return RefAny();
+ return (RefAny(rimplPtr->getConnection(), rimplPtr->getRef()));
+}
+
+template <class T>
+bool Ref<T>::operator ==(const Ref<T> &ref) const
+
+{
+ return ( (*rimplPtr) == (*(ref.rimplPtr)) );
+}
+
+template <class T>
+bool Ref<T>::operator !=(const Ref<T> &ref) const
+
+{
+ return ( !((*rimplPtr) == (*(ref.rimplPtr))) );
+}
+
+template <class T>
+bool Ref<T>::operator == (const RefAny & refAnyR) const
+
+{
+ return ( (*rimplPtr) == refAnyR );
+}
+
+template <class T>
+bool Ref<T>::operator != (const RefAny & refAnyR) const
+
+{
+ return ( !((*rimplPtr) == refAnyR ));
+}
+
+template <class T>
+OCIComplexObject * Ref<T>::getCor() const
+{
+ return (rimplPtr->getCor());
+}
+
+template < class T>
+void Ref<T>::setPinnedObject( PObject *objPtr)
+{
+ rimplPtr->setPinnedObject(objPtr);
+}
+
+/*---------------------------------------------------------------------------
+ PROTOTYPES USED BY FUNCTION TEMPLATES
+ ---------------------------------------------------------------------------*/
+ void getVectorOfOCIRefs( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector<void *> &vect);
+ void getVectorOfPObjects( const AnyData &any,
+ OCCI_STD_NAMESPACE::vector< PObject* > &vect,
+ void *(*rSQL)(void *)) ;
+ void setVectorOfOCIRefs( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector<void *> &vect,
+ const OCCI_STD_NAMESPACE::vector< OCIInd> &vec_ind) ;
+ void setVectorOfPObjects( AnyData &any,
+ const OCCI_STD_NAMESPACE::vector< PObject* > &vect) ;
+
+/*---------------------------------------------------------------------------
+ EXPORT FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+/*------------------- getVector for POBject----------------------------*/
+/*
+ NAME
+ getVector - overloaded function. Retrieves the attribute in the
+ current position as a vector of PObject
+
+ PARAMETERS
+ any - AnyData
+ vect- reference to vector of PObject (OUT parameter).
+
+ DESCRIPTION
+ Retrieves the attribute in the current position as a vector
+ of PObject
+ The attribute at the current position should be a collection
+ type (varray or nested table). The SQL type of the elements in
+ the collection should be compatible with PObject
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : user defined types (SQLT_NTY) etc.
+*/
+
+#if defined(WIN32COMMON) || defined(__MVS__)
+// and other platforms that do not support
+// partial function template specialization
+ template <class T>
+ void getVector(const AnyData &any, OCCI_STD_NAMESPACE::vector<T> &vect,
+ void *(*rSQL)(void *))
+ {
+ OCCI_STD_NAMESPACE::vector< PObject *> vec_pobj;
+ getVectorOfPObjects( any, vec_pobj, rSQL);
+
+ vect.clear();
+ unsigned int size= vec_pobj.size();
+ vect.reserve( size );
+ for( unsigned int i=0; i< size; i++)
+ vect.push_back( (T)vec_pobj[i] );
+ }
+#else
+ template <class T>
+ void getVector(const AnyData &any, OCCI_STD_NAMESPACE::vector<T*> &vect,
+ void *(*rSQL)(void *))
+ {
+ OCCI_STD_NAMESPACE::vector< PObject *> vec_pobj;
+ getVectorOfPObjects( any, vec_pobj, rSQL);
+
+ vect.clear();
+ unsigned int size= vec_pobj.size();
+ vect.reserve( size );
+ for( unsigned int i=0; i< size; i++)
+ vect.push_back( (T*)vec_pobj[i] );
+ }
+#endif /* end of #ifdef WIN32COMMON */
+
+ /*------------------- getVector for Ref<T>----------------------------*/
+/*
+ NAME
+ getVector - overloaded function. Retrieves the attribute in the
+ current position as a vector of PObject
+
+ PARAMETERS
+ any - AnyData
+ vect- reference to vector of PObject (OUT parameter).
+
+ DESCRIPTION
+ Retrieves the attribute in the current position as a vector
+ of PObject
+ The attribute at the current position should be a collection
+ type (varray or nested table). The SQL type of the elements in
+ the collection should be compatible with PObject
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : user defined types (SQLT_NTY) etc.
+*/
+#if !defined(WIN32COMMON) && !defined(__MVS__)
+ template <class T>
+ void getVector(const AnyData &any,OCCI_STD_NAMESPACE::vector< Ref<T> > &vect)
+ {
+ OCCI_STD_NAMESPACE::vector< void *> vec_ref;
+ getVectorOfOCIRefs( any, vec_ref);
+
+ vect.clear();
+ unsigned int size = vec_ref.size();
+ vect.reserve( size );
+ const Connection *sess = any.getConnection();
+
+ for (unsigned int i=0; i< size; i++)
+ {
+ if (vec_ref[i] == (OCIRef *)0)
+ vect.push_back(Ref<T>()); // pushing a default-constructed Ref
+ else
+ vect.push_back(Ref<T>(sess, (OCIRef *)vec_ref[i], FALSE));
+ }
+ }
+#endif /* end of #ifndef WIN32COMMON */
+
+/*-----------------------setVector for PObject--------------------------*/
+/*
+ NAME
+ setVector - overloaded function. sets the attribute in the current
+ position of anydata with the vector elements.
+
+ PARAMETERS
+ none.
+
+ DESCRIPTION
+ sets the attribute in the current position in anydata with the
+ vector elements.
+ The attribute in the current position of anydata should be a
+ collection type. If the collection type is a varray, the input vector
+ size should be equal to the size of the varray. Also the SQL type of
+ the collection's elements should be compatible with PObject.
+
+ RETURNS
+ nothing.
+
+ NOTES
+ compatible SQL types : SQLT_NTY (user defined types).
+*/
+#if defined(WIN32COMMON) || defined(__MVS__)
+// and other platforms that do not support
+// partial function template specialization
+
+ template <class T>
+ void setVector(AnyData &any, const OCCI_STD_NAMESPACE::vector<T> &vect)
+ {
+ OCCI_STD_NAMESPACE::vector< PObject *> vec_pobj;
+ unsigned int size= vect.size();
+ vec_pobj.reserve( size );
+ for( unsigned int i=0; i< size; i++)
+ vec_pobj.push_back( vect[i] );
+ setVectorOfPObjects( any, vec_pobj);
+
+ }
+
+#else
+
+ template <class T>
+ void setVector(AnyData &any, const OCCI_STD_NAMESPACE::vector<T*> &vect)
+ {
+ OCCI_STD_NAMESPACE::vector< PObject *> vec_pobj;
+ unsigned int size= vect.size();
+ vec_pobj.reserve( size );
+ for( unsigned int i=0; i< size; i++)
+ vec_pobj.push_back( vect[i] );
+ setVectorOfPObjects( any, vec_pobj);
+
+ }
+#endif /* end of #ifdef WIN32COMMON */
+
+/*-----------------------setVector for Ref<T>--------------------------*/
+/*
+ NAME
+ setVector - overloaded function. sets the attribute in the current
+ position of anydata with the vector elements.
+
+ PARAMETERS
+ none.
+
+ DESCRIPTION
+ sets the attribute in the current position in anydata with the
+ vector elements.
+ The attribute in the current position of anydata should be a
+ collection type. If the collection type is a varray, the input vector
+ size should be equal to the size of the varray. Also the SQL type of
+ the collection's elements should be compatible with PObject.
+
+ RETURNS
+ nothing.
+
+ NOTES
+ compatible SQL types : SQLT_NTY (user defined types).
+*/
+#if !defined(WIN32COMMON) && !defined(__MVS__)
+ template <class T>
+ void setVector(AnyData &any, const OCCI_STD_NAMESPACE::vector< Ref<T> > &vect)
+ {
+ OCCI_STD_NAMESPACE::vector< void *> vec_ref;
+ OCCI_STD_NAMESPACE::vector<OCIInd> vec_ind;
+
+ unsigned int size= vect.size();
+ vec_ref.reserve( size );
+ vec_ind.reserve( size );
+ for( unsigned int i=0; i< size; i++)
+ {
+ vec_ref.push_back( vect[i].getRef() );
+ vec_ind.push_back(vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+ setVectorOfOCIRefs( any, vec_ref, vec_ind);
+
+ }
+#endif /* end of #ifndef WIN32COMMON */
+
+// Platform independent get/setVectorOfRefs method added
+// get(set)Vector of Ref<T> and get(set)VectorOfRefs are identical
+// in functionality.
+
+ /*------------------- getVectorOfRefs for Ref<T>----------------------------*/
+/*
+ NAME
+ getVectorOfRefs - overloaded function. Retrieves the attribute in the
+ current position as a vector of PObject
+
+ PARAMETERS
+ any - AnyData
+ vect- reference to vector of PObject (OUT parameter).
+
+ DESCRIPTION
+ Retrieves the attribute in the current position as a vector
+ of PObject
+ The attribute at the current position should be a collection
+ type (varray or nested table). The SQL type of the elements in
+ the collection should be compatible with PObject
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : user defined types (SQLT_NTY) etc.
+*/
+
+ template <class T>
+ void getVectorOfRefs(const AnyData &any,
+ OCCI_STD_NAMESPACE::vector< Ref<T> > &vect)
+ {
+ OCCI_STD_NAMESPACE::vector< void *> vec_ref;
+ getVectorOfOCIRefs( any, vec_ref);
+
+ vect.clear();
+ unsigned int size = vec_ref.size();
+ vect.reserve( size );
+ const Connection *sess = any.getConnection();
+
+ for (unsigned int i=0; i< size; i++)
+ {
+ if (vec_ref[i] == (OCIRef *)0)
+ vect.push_back(Ref<T>()); // pushing a default-constructed Ref
+ else
+ vect.push_back(Ref<T>(sess, (OCIRef *)vec_ref[i], FALSE));
+ }
+ }
+
+/*-----------------------setVectorOfRefs for Ref<T>--------------------------*/
+/*
+ NAME
+ setVectorOfRefs - overloaded function. sets the attribute in the current
+ position of anydata with the vector elements.
+
+ PARAMETERS
+ none.
+
+ DESCRIPTION
+ sets the attribute in the current position in anydata with the
+ vector elements.
+ The attribute in the current position of anydata should be a
+ collection type. If the collection type is a varray, the input vector
+ size should be equal to the size of the varray. Also the SQL type of
+ the collection's elements should be compatible with PObject.
+
+ RETURNS
+ nothing.
+
+ NOTES
+ compatible SQL types : SQLT_NTY (user defined types).
+*/
+
+ template <class T>
+ void setVectorOfRefs(AnyData &any,
+ const OCCI_STD_NAMESPACE::vector< Ref<T> > &vect)
+
+ {
+ OCCI_STD_NAMESPACE::vector< void *> vec_ref;
+ OCCI_STD_NAMESPACE::vector<OCIInd> vec_ind;
+
+ unsigned int size= vect.size();
+ vec_ref.reserve( size );
+ vec_ind.reserve( size );
+ for( unsigned int i=0; i< size; i++)
+ {
+ vec_ref.push_back( vect[i].getRef() );
+ vec_ind.push_back(vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+ setVectorOfOCIRefs( any, vec_ref, vec_ind);
+
+ }
+
+
+/*---------------------------------------------------------------------------
+ INTERNAL FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+} /* end of namespace occi */
+} /* end of namespace oracle */
+#endif /* OCCIOBJECTS_ORACLE */
+
+#endif /* _olint */