oracle instant client 11.2 for x86
diff --git a/sdk/include/occiControl.h b/sdk/include/occiControl.h
new file mode 100755
index 0000000..392f057
--- /dev/null
+++ b/sdk/include/occiControl.h
@@ -0,0 +1,2137 @@
+/* Copyright Oracle Corporation 2000, 2006. All Rights Reserved. */
+
+/*
+ NAME
+ occiControl.h - header file for OCCI control classes
+
+ DESCRIPTION
+ Class definitions for MetaData,SQLException,Environment,
+ Connection,Statement, ConnectionPool, StatelessConnectionPool
+
+ 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 OCCICONTROL_ORACLE
+# define OCCICONTROL_ORACLE
+
+#ifndef OCCICOMMON_ORACLE
+#include <occiCommon.h>
+#endif
+
+#ifndef ORAEXCEPTION
+#define ORAEXCEPTION
+#include <exception>
+#endif
+
+namespace oracle {
+namespace occi {
+/*---------------------------------------------------------------------------
+ PUBLIC TYPES AND CONSTANTS
+ ---------------------------------------------------------------------------*/
+
+class MetaData
+{
+ public :
+
+ enum AttrId
+ {ATTR_PTYPE = OCI_ATTR_PTYPE,
+ ATTR_TIMESTAMP = OCI_ATTR_TIMESTAMP,
+ ATTR_OBJ_ID = OCI_ATTR_OBJ_ID,
+ ATTR_OBJ_NAME = OCI_ATTR_OBJ_NAME,
+ ATTR_OBJ_SCHEMA = OCI_ATTR_OBJ_SCHEMA,
+ ATTR_OBJID = OCI_ATTR_OBJID,
+ ATTR_NUM_COLS = OCI_ATTR_NUM_COLS,
+ ATTR_LIST_COLUMNS = OCI_ATTR_LIST_COLUMNS,
+ ATTR_REF_TDO = OCI_ATTR_REF_TDO,
+ ATTR_IS_TEMPORARY = OCI_ATTR_IS_TEMPORARY,
+ ATTR_IS_TYPED = OCI_ATTR_IS_TYPED,
+ ATTR_DURATION = OCI_ATTR_DURATION,
+ ATTR_COLLECTION_ELEMENT = OCI_ATTR_COLLECTION_ELEMENT,
+ ATTR_RDBA = OCI_ATTR_RDBA,
+ ATTR_TABLESPACE = OCI_ATTR_TABLESPACE,
+ ATTR_CLUSTERED = OCI_ATTR_CLUSTERED,
+ ATTR_PARTITIONED = OCI_ATTR_PARTITIONED,
+ ATTR_INDEX_ONLY = OCI_ATTR_INDEX_ONLY,
+ ATTR_LIST_ARGUMENTS = OCI_ATTR_LIST_ARGUMENTS,
+ ATTR_IS_INVOKER_RIGHTS = OCI_ATTR_IS_INVOKER_RIGHTS,
+ ATTR_LIST_SUBPROGRAMS = OCI_ATTR_LIST_SUBPROGRAMS,
+ ATTR_NAME = OCI_ATTR_NAME,
+ ATTR_OVERLOAD_ID = OCI_ATTR_OVERLOAD_ID,
+ ATTR_TYPECODE = OCI_ATTR_TYPECODE,
+ ATTR_COLLECTION_TYPECODE = OCI_ATTR_COLLECTION_TYPECODE,
+ ATTR_VERSION = OCI_ATTR_VERSION,
+ ATTR_IS_INCOMPLETE_TYPE = OCI_ATTR_IS_INCOMPLETE_TYPE,
+ ATTR_IS_SYSTEM_TYPE = OCI_ATTR_IS_SYSTEM_TYPE,
+ ATTR_IS_PREDEFINED_TYPE = OCI_ATTR_IS_PREDEFINED_TYPE,
+ ATTR_IS_TRANSIENT_TYPE = OCI_ATTR_IS_TRANSIENT_TYPE,
+ ATTR_IS_SYSTEM_GENERATED_TYPE =
+ OCI_ATTR_IS_SYSTEM_GENERATED_TYPE,
+ ATTR_HAS_NESTED_TABLE = OCI_ATTR_HAS_NESTED_TABLE,
+ ATTR_HAS_LOB = OCI_ATTR_HAS_LOB,
+ ATTR_HAS_FILE = OCI_ATTR_HAS_FILE,
+ ATTR_NUM_TYPE_ATTRS = OCI_ATTR_NUM_TYPE_ATTRS,
+ ATTR_LIST_TYPE_ATTRS = OCI_ATTR_LIST_TYPE_ATTRS,
+ ATTR_NUM_TYPE_METHODS = OCI_ATTR_NUM_TYPE_METHODS,
+ ATTR_LIST_TYPE_METHODS = OCI_ATTR_LIST_TYPE_METHODS,
+ ATTR_MAP_METHOD = OCI_ATTR_MAP_METHOD,
+ ATTR_ORDER_METHOD = OCI_ATTR_ORDER_METHOD,
+ ATTR_DATA_SIZE = OCI_ATTR_DATA_SIZE,
+ ATTR_DATA_TYPE = OCI_ATTR_DATA_TYPE,
+ ATTR_PRECISION = OCI_ATTR_PRECISION,
+ ATTR_SCALE = OCI_ATTR_SCALE,
+ ATTR_TYPE_NAME = OCI_ATTR_TYPE_NAME,
+ ATTR_SCHEMA_NAME = OCI_ATTR_SCHEMA_NAME,
+ ATTR_CHARSET_ID = OCI_ATTR_CHARSET_ID,
+ ATTR_CHARSET_FORM = OCI_ATTR_CHARSET_FORM,
+ ATTR_ENCAPSULATION = OCI_ATTR_ENCAPSULATION,
+ ATTR_IS_CONSTRUCTOR = OCI_ATTR_IS_CONSTRUCTOR,
+ ATTR_IS_DESTRUCTOR = OCI_ATTR_IS_DESTRUCTOR,
+ ATTR_IS_OPERATOR = OCI_ATTR_IS_OPERATOR,
+ ATTR_IS_SELFISH = OCI_ATTR_IS_SELFISH,
+ ATTR_IS_MAP = OCI_ATTR_IS_MAP,
+ ATTR_IS_ORDER = OCI_ATTR_IS_ORDER,
+ ATTR_IS_RNDS = OCI_ATTR_IS_RNDS,
+ ATTR_IS_RNPS = OCI_ATTR_IS_RNPS,
+ ATTR_IS_WNDS = OCI_ATTR_IS_WNDS,
+ ATTR_IS_WNPS = OCI_ATTR_IS_WNPS,
+ ATTR_NUM_ELEMS = OCI_ATTR_NUM_ELEMS,
+ ATTR_LINK = OCI_ATTR_LINK,
+ ATTR_MIN = OCI_ATTR_MIN,
+ ATTR_MAX = OCI_ATTR_MAX,
+ ATTR_INCR = OCI_ATTR_INCR,
+ ATTR_CACHE = OCI_ATTR_CACHE,
+ ATTR_ORDER = OCI_ATTR_ORDER,
+ ATTR_HW_MARK = OCI_ATTR_HW_MARK,
+ ATTR_IS_NULL = OCI_ATTR_IS_NULL,
+ ATTR_POSITION = OCI_ATTR_POSITION,
+ ATTR_HAS_DEFAULT = OCI_ATTR_HAS_DEFAULT,
+ ATTR_LEVEL = OCI_ATTR_LEVEL,
+ ATTR_IOMODE = OCI_ATTR_IOMODE,
+ ATTR_RADIX = OCI_ATTR_RADIX,
+ ATTR_SUB_NAME = OCI_ATTR_SUB_NAME,
+ ATTR_LIST_OBJECTS = OCI_ATTR_LIST_OBJECTS,
+ ATTR_NCHARSET_ID = OCI_ATTR_NCHARSET_ID,
+ ATTR_LIST_SCHEMAS = OCI_ATTR_LIST_SCHEMAS,
+ ATTR_MAX_PROC_LEN = OCI_ATTR_MAX_PROC_LEN,
+ ATTR_MAX_COLUMN_LEN = OCI_ATTR_MAX_COLUMN_LEN,
+ ATTR_CURSOR_COMMIT_BEHAVIOR =
+ OCI_ATTR_CURSOR_COMMIT_BEHAVIOR,
+ ATTR_MAX_CATALOG_NAMELEN = OCI_ATTR_MAX_CATALOG_NAMELEN,
+ ATTR_CATALOG_LOCATION = OCI_ATTR_CATALOG_LOCATION,
+ ATTR_SAVEPOINT_SUPPORT = OCI_ATTR_SAVEPOINT_SUPPORT,
+ ATTR_NOWAIT_SUPPORT = OCI_ATTR_NOWAIT_SUPPORT,
+ ATTR_AUTOCOMMIT_DDL = OCI_ATTR_AUTOCOMMIT_DDL,
+ ATTR_LOCKING_MODE = OCI_ATTR_LOCKING_MODE,
+ ATTR_IS_FINAL_TYPE = OCI_ATTR_IS_FINAL_TYPE,
+ ATTR_IS_INSTANTIABLE_TYPE = OCI_ATTR_IS_INSTANTIABLE_TYPE,
+ ATTR_IS_SUBTYPE = OCI_ATTR_IS_SUBTYPE,
+ ATTR_SUPERTYPE_SCHEMA_NAME = OCI_ATTR_SUPERTYPE_SCHEMA_NAME,
+ ATTR_SUPERTYPE_NAME = OCI_ATTR_SUPERTYPE_NAME,
+ ATTR_FSPRECISION = OCI_ATTR_FSPRECISION,
+ ATTR_LFPRECISION = OCI_ATTR_LFPRECISION,
+ ATTR_IS_FINAL_METHOD = OCI_ATTR_IS_FINAL_METHOD,
+ ATTR_IS_INSTANTIABLE_METHOD = OCI_ATTR_IS_INSTANTIABLE_METHOD,
+ ATTR_IS_OVERRIDING_METHOD = OCI_ATTR_IS_OVERRIDING_METHOD,
+ ATTR_CHAR_USED = OCI_ATTR_CHAR_USED,
+ ATTR_CHAR_SIZE = OCI_ATTR_CHAR_SIZE,
+ ATTR_COL_ENC = OCI_ATTR_COL_ENC,
+ ATTR_COL_ENC_SALT = OCI_ATTR_COL_ENC_SALT,
+ ATTR_TABLE_ENC = OCI_ATTR_TABLE_ENC,
+ ATTR_TABLE_ENC_ALG = OCI_ATTR_TABLE_ENC_ALG,
+ ATTR_TABLE_ENC_ALG_ID = OCI_ATTR_TABLE_ENC_ALG_ID
+ };
+
+ enum ParamType
+ {
+ PTYPE_TABLE = OCI_PTYPE_TABLE
+ ,PTYPE_VIEW = OCI_PTYPE_VIEW
+ ,PTYPE_PROC = OCI_PTYPE_PROC
+ ,PTYPE_FUNC = OCI_PTYPE_FUNC
+ ,PTYPE_PKG = OCI_PTYPE_PKG
+ ,PTYPE_TYPE = OCI_PTYPE_TYPE
+ ,PTYPE_TYPE_ATTR = OCI_PTYPE_TYPE_ATTR
+ ,PTYPE_TYPE_COLL = OCI_PTYPE_TYPE_COLL
+ ,PTYPE_TYPE_METHOD = OCI_PTYPE_TYPE_METHOD
+ ,PTYPE_SYN = OCI_PTYPE_SYN
+ ,PTYPE_SEQ = OCI_PTYPE_SEQ
+ ,PTYPE_COL = OCI_PTYPE_COL
+ ,PTYPE_ARG = OCI_PTYPE_ARG
+ ,PTYPE_TYPE_ARG = OCI_PTYPE_TYPE_ARG
+ ,PTYPE_TYPE_RESULT = OCI_PTYPE_TYPE_RESULT
+ ,PTYPE_SCHEMA = OCI_PTYPE_SCHEMA
+ ,PTYPE_DATABASE = OCI_PTYPE_DATABASE
+ ,PTYPE_UNK = OCI_PTYPE_UNK
+ };
+
+
+ enum { DURATION_SESSION = OCI_DURATION_SESSION
+ ,DURATION_TRANS = OCI_DURATION_TRANS
+ ,DURATION_NULL = OCI_DURATION_NULL
+ ,TYPEENCAP_PRIVATE = OCI_TYPEENCAP_PRIVATE
+ ,TYPEENCAP_PUBLIC = OCI_TYPEENCAP_PUBLIC
+ ,TYPEPARAM_IN = OCI_TYPEPARAM_IN
+ ,TYPEPARAM_OUT = OCI_TYPEPARAM_OUT
+ ,TYPEPARAM_INOUT = OCI_TYPEPARAM_INOUT
+ ,CURSOR_OPEN = OCI_CURSOR_OPEN
+ ,CURSOR_CLOSED = OCI_CURSOR_CLOSED
+ ,CL_START = OCI_CL_START
+ ,CL_END = OCI_CL_END
+ ,SP_SUPPORTED = OCI_SP_SUPPORTED
+ ,SP_UNSUPPORTED = OCI_SP_UNSUPPORTED
+ ,NW_SUPPORTED = OCI_NW_SUPPORTED
+ ,NW_UNSUPPORTED = OCI_NW_UNSUPPORTED
+ ,AC_DDL = OCI_AC_DDL
+ ,NO_AC_DDL = OCI_NO_AC_DDL
+ ,LOCK_IMMEDIATE = OCI_LOCK_IMMEDIATE
+ ,LOCK_DELAYED = OCI_LOCK_DELAYED
+ };
+
+ MetaData(const MetaData &omd);
+ unsigned int getAttributeCount() const
+ ;
+ AttrId getAttributeId(unsigned int attributenum) const
+ ;
+ Type getAttributeType(unsigned int attributenum) const
+ ;
+ int getInt(MetaData::AttrId attrid) const
+ ;
+ bool getBoolean(MetaData::AttrId attrid) const
+ ;
+ unsigned int getUInt(MetaData::AttrId attrid) const
+ ;
+ OCCI_STD_NAMESPACE::string getString(MetaData::AttrId attrid) const
+ ;
+ UString getUString(MetaData::AttrId attrid) const
+ ;
+ Number getNumber(MetaData::AttrId attrid) const
+ ;
+ RefAny getRef(MetaData::AttrId attrid) const
+ ;
+ Timestamp getTimestamp(MetaData::AttrId attrid) const
+ ;
+ MetaData getMetaData(MetaData::AttrId attrid) const
+ ;
+ OCCI_STD_NAMESPACE::vector<MetaData> getVector(MetaData::AttrId attrid)
+ const ;
+ void operator =(const MetaData &omd);
+
+ ~MetaData();
+
+ private:
+
+ enum ociAttrType { OCI_UB1,
+ OCI_UB2,
+ OCI_UB4,
+ OCI_SB1,
+ OCI_WORD,
+ OCI_UB1_BOOL,
+ OCI_UB1PTR_TIMESTAMP,
+ OCI_UB1PTR_NUMBER,
+ OCI_TEXTPTR,
+ OCI_DVOIDPTR_PARAM,
+ OCI_DVOIDPTR_PARAMLIST,
+ OCI_OCIREFPTR,
+ OCI_OCIDURATION,
+ OCI_OCITYPECODE,
+ OCI_OCITYPEENCAP,
+ OCI_OCITYPEPARAMMODE,
+ OCI_OCIPRECISION
+ };
+
+ enum AttrCount {COMMON_ATTR_COUNT = 5,
+ TABLE_ATTR_COUNT = 15,
+ VIEW_ATTR_COUNT = 7,
+ FUNCPROC_ATTR_COUNT = 4,
+ PKG_ATTR_COUNT = 2,
+ TYP_ATTR_COUNT = 27,
+ TYPEATTR_ATTR_COUNT = 14,
+ TYPEMTHD_ATTR_COUNT = 16,
+ COLL_ATTR_COUNT = 12,
+ SYN_ATTR_COUNT = 4,
+ SEQ_ATTR_COUNT = 7,
+ COL_ATTR_COUNT = 15,
+ ARG_TYPARG_TYPRES_ATTR_COUNT = 20,
+ SCHEMA_ATTR_COUNT = 1,
+ DATABASE_ATTR_COUNT = 13,
+ UNK_ATTR_COUNT = 0
+ };
+
+ static const AttrId commonAttrId[COMMON_ATTR_COUNT];
+ static const ociAttrType commonAttrType[COMMON_ATTR_COUNT];
+ static const AttrId tableAttrId[TABLE_ATTR_COUNT];
+ static const ociAttrType tableAttrType[TABLE_ATTR_COUNT];
+ static const AttrId viewAttrId[VIEW_ATTR_COUNT];
+ static const ociAttrType viewAttrType[VIEW_ATTR_COUNT];
+ static const AttrId funcprocAttrId[FUNCPROC_ATTR_COUNT];
+ static const ociAttrType funcprocAttrType[FUNCPROC_ATTR_COUNT];
+ static const AttrId pkgAttrId[PKG_ATTR_COUNT];
+ static const ociAttrType pkgAttrType[PKG_ATTR_COUNT];
+ static const AttrId typAttrId[TYP_ATTR_COUNT];
+ static const ociAttrType typAttrType[TYP_ATTR_COUNT];
+ static const AttrId typeattrAttrId[TYPEATTR_ATTR_COUNT];
+ static const ociAttrType typeattrAttrType[TYPEATTR_ATTR_COUNT];
+ static const AttrId typmethdAttrId[TYPEMTHD_ATTR_COUNT];
+ static const ociAttrType typemthdAttrType[TYPEMTHD_ATTR_COUNT];
+ static const AttrId collAttrId[COLL_ATTR_COUNT];
+ static const ociAttrType collAttrType[COLL_ATTR_COUNT];
+ static const AttrId synAttrId[SYN_ATTR_COUNT];
+ static const ociAttrType synAttrType[SYN_ATTR_COUNT];
+ static const AttrId seqAttrId[SEQ_ATTR_COUNT];
+ static const ociAttrType seqAttrType[SEQ_ATTR_COUNT];
+ static const AttrId colAttrId[COL_ATTR_COUNT];
+ static const ociAttrType colAttrType[COL_ATTR_COUNT];
+ static const AttrId argtargtresAttrId[ARG_TYPARG_TYPRES_ATTR_COUNT];
+ static const ociAttrType argtargtresAttrType[
+ ARG_TYPARG_TYPRES_ATTR_COUNT];
+ static const AttrId schemaAttrId[SCHEMA_ATTR_COUNT];
+ static const ociAttrType schemaAttrType[SCHEMA_ATTR_COUNT];
+ static const AttrId databaseAttrId[DATABASE_ATTR_COUNT];
+ static const ociAttrType databaseAttrType[DATABASE_ATTR_COUNT];
+
+ Ptr<MetaDataImpl> metaDataImplPtr;
+ const OCIParam* paramhp;
+ const ConnectionImpl* sesn;
+ const AttrId* attrIdArray;
+ const ociAttrType* attrTypeArray;
+ AttrCount attrCount;
+
+ MetaData(const Connection *sessp, const OCCI_STD_NAMESPACE::string& objName,
+ ParamType prmtyp ) ;
+ MetaData(const Connection *sessp, const UString& objName,
+ ParamType prmtyp ) ;
+ MetaData(const Connection *sessp,
+ const RefAny& ref) ;
+ MetaData(const Connection *sessp, MetaDataImpl *implPtr,
+ OCIParam* parm) ;
+ MetaData(const Connection *sessp, MetaDataImpl *implPtr,
+ OCIParam *parm, ub1 parmTyp) ;
+ ub1 getParamType(OCIParam* prm) const ;
+ const AttrId* getAttrIdArrayAddr(ub1 prmTyp) const;
+ const ociAttrType* getAttrTypeArrayAddr(ub1 prmTyp) const;
+ AttrCount getAttrCount(ub1 prmTyp) const;
+ Type getType(ociAttrType typ) const;
+ bool isListTypeAttribute(AttrId attrid,ub1 ptyp) const;
+ boolean isInvalidAttrId(AttrId attrid,sb4* pos,
+ boolean* isTypeSpecificAttrPtr) const;
+ ociAttrType getValidAttrType(sb4 index, boolean isTypeSpecificAttr)
+ const;
+
+ int getListType (const OCIParam *plist) const;
+ unsigned int getLowerBound(int ltype) const;
+ unsigned int getUpperBound(unsigned int ltype,
+ unsigned int paramnum) const;
+ friend class ConnectionImpl;
+ friend class ResultSetImpl;
+
+};
+
+//return codes for user callbacks
+enum
+{
+ OCCI_SUCCESS = OCI_SUCCESS,
+ FO_RETRY = OCI_FO_RETRY
+};
+
+
+class Connection
+{
+ public :
+
+ // specifies the type of proxy to be created,
+ // used for future enhancements
+ enum ProxyType
+ {PROXY_DEFAULT
+ };
+
+ enum FailOverType
+ {
+ FO_NONE = OCI_FO_NONE,
+ FO_SESSION = OCI_FO_SESSION,
+ FO_SELECT = OCI_FO_SELECT
+ };
+
+ enum FailOverEventType
+ {
+ FO_BEGIN = OCI_FO_BEGIN,
+ FO_END = OCI_FO_END,
+ FO_ABORT = OCI_FO_ABORT,
+ FO_REAUTH = OCI_FO_REAUTH,
+ FO_ERROR = OCI_FO_ERROR
+ };
+
+ enum Purity
+ {
+ DEFAULT = OCI_ATTR_PURITY_DEFAULT,
+ NEW = OCI_ATTR_PURITY_NEW,
+ SELF = OCI_ATTR_PURITY_SELF
+ };
+
+ virtual ~Connection() { }
+ virtual Statement* createStatement(
+ const OCCI_STD_NAMESPACE::string &sql = "")
+ =0;
+ virtual void terminateStatement(Statement *statement) =0;
+ virtual void commit() =0;
+ virtual void rollback() =0;
+ virtual MetaData getMetaData(const OCCI_STD_NAMESPACE::string &object,
+ MetaData::ParamType prmtyp
+ = MetaData::PTYPE_UNK) const
+ =0;
+ virtual MetaData getMetaData(const RefAny &ref) const
+ =0;
+ virtual OCCI_STD_NAMESPACE::string getClientCharSet() const
+ =0;
+ virtual OCCI_STD_NAMESPACE::string getClientNCHARCharSet() const
+ =0;
+ virtual void changePassword(const OCCI_STD_NAMESPACE::string &user,
+ const OCCI_STD_NAMESPACE::string &oldPassword,
+ const OCCI_STD_NAMESPACE::string &newPassword)
+ =0;
+ virtual void flushCache() =0;
+
+ virtual OCIServer* getOCIServer() const =0;
+ virtual OCISvcCtx* getOCIServiceContext() const =0;
+ virtual OCISession* getOCISession() const =0;
+
+ //new interfaces
+
+ virtual Statement* createStatement(const UString &sql) = 0;
+ virtual MetaData getMetaData(const UString &object,
+ MetaData::ParamType prmtyp
+ = MetaData::PTYPE_UNK) const
+ =0;
+ virtual UString getClientCharSetUString() const
+ =0;
+ virtual UString getClientNCHARCharSetUString() const
+ =0;
+ virtual void changePassword(const UString &user,
+ const UString &oldPassword,
+ const UString &newPassword)
+ =0;
+ virtual OCCI_STD_NAMESPACE::string getTag() const =0;
+ virtual void setStmtCacheSize(unsigned int cacheSize) = 0;
+ virtual unsigned int getStmtCacheSize() const =0;
+ virtual Statement* createStatement(const OCCI_STD_NAMESPACE::string &sql,
+ const OCCI_STD_NAMESPACE::string &tag) = 0;
+ virtual void terminateStatement(Statement* stmt,
+ const OCCI_STD_NAMESPACE::string &tag) = 0;
+ virtual bool isCached(const OCCI_STD_NAMESPACE::string &sql,
+ const OCCI_STD_NAMESPACE::string &tag = "") = 0;
+ virtual void registerSubscriptions(
+ const OCCI_STD_NAMESPACE::vector<aq::Subscription>& sub) =0;
+ virtual void unregisterSubscription(const aq::Subscription& sub) =0;
+ virtual void postToSubscriptions(
+ const OCCI_STD_NAMESPACE::vector<aq::Subscription>& sub) =0;
+ virtual Statement* createStatement(const UString &sql,
+ const UString &tag) = 0;
+ virtual void terminateStatement(Statement* stmt,
+ const UString &tag) = 0;
+ virtual bool isCached(const UString &sql,
+ const UString &tag) = 0;
+ virtual void setTAFNotify(
+ int (*notifyFn)(Environment *env, Connection *conn, void *ctx,
+ FailOverType foType, FailOverEventType foEvent),
+ void *ctx) = 0;
+ virtual OCCI_STD_NAMESPACE::string getServerVersion() const =0;
+ virtual UString getServerVersionUString() const =0;
+ virtual void cancel() =0;
+};
+
+class StatelessConnectionPool
+{
+ public :
+
+ enum PoolType
+ {
+ HETEROGENEOUS = OCI_DEFAULT,
+ HOMOGENEOUS = OCI_SPC_HOMOGENEOUS,
+ NO_RLB = OCI_SPC_NO_RLB,
+ USES_EXT_AUTH = 16
+ };
+
+ enum BusyOption
+ {
+ WAIT = OCI_SPOOL_ATTRVAL_WAIT,
+ NOWAIT = OCI_SPOOL_ATTRVAL_NOWAIT,
+ FORCEGET = OCI_SPOOL_ATTRVAL_FORCEGET
+ };
+
+ enum DestroyMode
+ {
+ DEFAULT = OCI_DEFAULT,
+ SPD_FORCE = OCI_SPD_FORCE
+ };
+
+ virtual ~StatelessConnectionPool() {}
+ virtual unsigned int getBusyConnections() const =0;
+ virtual unsigned int getOpenConnections() const =0;
+ virtual unsigned int getMinConnections() const =0;
+ virtual unsigned int getMaxConnections() const =0;
+ virtual unsigned int getIncrConnections() const =0;
+ virtual OCCI_STD_NAMESPACE::string getPoolName() const =0;
+ virtual unsigned int getTimeOut() const =0;
+ virtual void setBusyOption(BusyOption busyOption) =0;
+ virtual BusyOption getBusyOption() const =0;
+ virtual void setTimeOut(unsigned int connTimeOut =0) =0;
+ virtual void setPoolSize(unsigned int maxConn =1,
+ unsigned int minConn =0, unsigned int incrConn =1) =0;
+ virtual Connection* getConnection(
+ const OCCI_STD_NAMESPACE::string &tag ="") =0;
+ virtual Connection* getConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &password,
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+ virtual Connection* getAnyTaggedConnection(
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+ virtual Connection* getAnyTaggedConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &Password,
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+ virtual Connection* getProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const OCCI_STD_NAMESPACE::string &tag = "",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) =0;
+ virtual Connection* getProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ const OCCI_STD_NAMESPACE::string &tag = "" ,
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) =0;
+ virtual Connection* getAnyTaggedProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const OCCI_STD_NAMESPACE::string &tag = "",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) =0;
+ virtual Connection* getAnyTaggedProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ const OCCI_STD_NAMESPACE::string &tag="",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT ) =0;
+ virtual void releaseConnection (Connection *connection,
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+ virtual void terminateConnection (Connection *connection) =0;
+ virtual void setStmtCacheSize(unsigned int cacheSize) =0;
+ virtual unsigned int getStmtCacheSize() const =0;
+
+ virtual Connection* getConnection(const UString &tag)=0;
+ virtual Connection* getConnection(const UString &userName,
+ const UString &password,
+ const UString &tag)=0;
+ virtual Connection* getAnyTaggedConnection(const UString &tag)=0;
+ virtual Connection* getAnyTaggedConnection( const UString &userName,
+ const UString &Password, const UString &tag)=0 ;
+ virtual Connection* getProxyConnection(const UString &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const UString &tag,
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT)=0;
+ virtual Connection* getProxyConnection(const UString &name,
+ const UString &tag, Connection::ProxyType
+ proxyType = Connection::PROXY_DEFAULT)=0;
+ virtual Connection* getAnyTaggedProxyConnection(const UString &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const UString &tag,
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT)=0;
+ virtual Connection* getAnyTaggedProxyConnection(const UString &name,
+ const UString &tag,
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT )=0;
+ virtual void releaseConnection(Connection *connection,
+ const UString &tag)=0;
+
+
+ virtual Connection* getConnection(
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+
+ virtual Connection* getConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &password,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+
+ virtual Connection* getAnyTaggedConnection(
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "") =0;
+
+ virtual Connection* getAnyTaggedConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &Password,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "")= 0;
+
+ virtual Connection* getProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) = 0;
+
+ virtual Connection* getProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) = 0;
+
+ virtual Connection* getAnyTaggedProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) = 0;
+
+
+ virtual Connection* getAnyTaggedProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity,
+ const OCCI_STD_NAMESPACE::string &tag = "",
+ Connection::ProxyType proxyType = Connection::PROXY_DEFAULT) = 0;
+
+
+ virtual Connection* getConnection(
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag) = 0;
+
+
+
+ virtual Connection* getConnection(const UString &userName,
+ const UString &password,
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag) = 0;
+
+ virtual Connection* getAnyTaggedConnection(
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag) =0;
+
+
+
+ virtual Connection* getAnyTaggedConnection( const UString &userName,
+ const UString &Password,
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag) =0;
+
+ virtual Connection* getProxyConnection(const UString &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag, Connection::ProxyType proxyType) =0;
+
+ virtual Connection* getProxyConnection(const UString &name,
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag, Connection::ProxyType proxyType) = 0;
+
+
+ virtual Connection* getAnyTaggedProxyConnection(const UString &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag,
+ Connection::ProxyType proxyType) = 0;
+
+ virtual Connection* getAnyTaggedProxyConnection(const UString &name,
+ const UString &connectionClass,
+ const Connection::Purity purity,
+ const UString &tag,
+ Connection::ProxyType proxyType ) =0;
+
+};
+
+
+class ConnectionPool
+{
+ public :
+
+ virtual ~ConnectionPool() {}
+ virtual unsigned int getBusyConnections() const
+ =0;
+ virtual unsigned int getOpenConnections() const
+ =0;
+ virtual unsigned int getMinConnections() const
+ =0;
+ virtual unsigned int getMaxConnections() const
+ =0;
+ virtual unsigned int getIncrConnections() const
+ =0;
+ virtual OCCI_STD_NAMESPACE::string getPoolName() const
+ =0;
+ virtual unsigned int getTimeOut() const
+ =0;
+ virtual void setErrorOnBusy()
+ =0;
+ virtual void setTimeOut(unsigned int connTimeOut =0)
+ =0;
+ virtual void setPoolSize(unsigned int minConn =0,
+ unsigned int maxConn =1, unsigned int incrConn =1)
+ =0;
+ virtual Connection* createConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &password) =0;
+
+ virtual Connection* createProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ Connection::ProxyType proxyType =
+ Connection::PROXY_DEFAULT) =0;
+
+ virtual Connection* createProxyConnection(
+ const OCCI_STD_NAMESPACE::string &name,
+ Connection::ProxyType proxyType =
+ Connection::PROXY_DEFAULT) =0;
+
+ virtual void terminateConnection
+ (Connection *connection) =0;
+
+ //new interfaces
+
+ virtual Connection* createConnection(
+ const UString &userName,
+ const UString &password) =0;
+
+ virtual Connection* createProxyConnection(const UString &name,
+ OCCI_STD_NAMESPACE::string roles[], unsigned int numRoles,
+ Connection::ProxyType proxyType =
+ Connection::PROXY_DEFAULT) =0;
+
+ virtual Connection* createProxyConnection(const UString &name,
+ Connection::ProxyType proxyType =
+ Connection::PROXY_DEFAULT) =0;
+
+ virtual void setStmtCacheSize(unsigned int cacheSize) =0;
+ virtual unsigned int getStmtCacheSize() const =0;
+
+ virtual UString getPoolNameUString() const
+ =0;
+};
+
+class Environment
+{
+ public:
+ // class constants
+
+ enum Mode
+ {
+ DEFAULT = OCI_DEFAULT,
+ OBJECT = OCI_OBJECT,
+ SHARED = OCI_SHARED,
+ NO_USERCALLBACKS = OCI_NO_UCB,
+ THREADED_MUTEXED = OCI_THREADED,
+ THREADED_UNMUTEXED = OCI_THREADED | OCI_NO_MUTEX,
+ EVENTS = OCI_EVENTS,
+ USE_LDAP = OCI_USE_LDAP
+ };
+
+ virtual ~Environment(){}
+
+ // public methods
+
+ static Environment * createEnvironment(
+ Mode mode = DEFAULT,
+ void *ctxp = 0,
+ void *(*malocfp)(void *ctxp, size_t size) = 0,
+ void *(*ralocfp)(void *ctxp, void *memptr,
+ size_t newsize) = 0,
+ void (*mfreefp)(void *ctxp, void *memptr) = 0);
+
+ static Environment * createEnvironment(
+ const OCCI_STD_NAMESPACE::string &charset,
+ const OCCI_STD_NAMESPACE::string &ncharset,
+ Mode mode = DEFAULT,
+ void *ctxp = 0,
+ void *(*malocfp)(void *ctxp, size_t size) = 0,
+ void *(*ralocfp)(void *ctxp, void *memptr,
+ size_t newsize) = 0,
+ void (*mfreefp)(void *ctxp, void *memptr) = 0);
+
+ static void terminateEnvironment(Environment *env);
+
+ static Environment* getXAEnvironment(const
+ OCCI_STD_NAMESPACE::string& dbname);
+
+ static void releaseXAEnvironment(Environment *env);
+
+ static void getClientVersion( int &majorVersion, int &minorVersion,
+ int &updateNum, int &patchNum,
+ int &portUpdateNum );
+
+
+ virtual Connection * createConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &password,
+ const OCCI_STD_NAMESPACE::string &connectString = "") = 0;
+
+ virtual void terminateConnection(Connection *connection) = 0;
+
+ virtual ConnectionPool* createConnectionPool(
+ const OCCI_STD_NAMESPACE::string &poolUserName,
+ const OCCI_STD_NAMESPACE::string &poolPassword,
+ const OCCI_STD_NAMESPACE::string &connectString ="",
+ unsigned int minConn =0,
+ unsigned int maxConn =1, unsigned int incrConn =1) = 0;
+
+ virtual void terminateConnectionPool(ConnectionPool *poolp) = 0;
+
+ virtual unsigned int getCurrentHeapSize() const = 0;
+
+ virtual OCIEnv * getOCIEnvironment() const = 0;
+
+ virtual Map *getMap() const = 0;
+
+ virtual void setCacheMaxSize(unsigned int maxSize) = 0;
+
+ virtual unsigned int getCacheMaxSize() const = 0;
+
+ virtual void setCacheOptSize(unsigned int OptSize) = 0;
+
+ virtual unsigned int getCacheOptSize() const = 0;
+
+
+ //new interfaces
+
+ virtual Connection * createConnection(const UString &userName,
+ const UString &password, const UString &connectString) = 0;
+
+ virtual ConnectionPool* createConnectionPool(
+ const UString &poolUserName,
+ const UString &poolPassword, const UString &connectString,
+ unsigned int minConn =0,
+ unsigned int maxConn =1, unsigned int incrConn =1) = 0;
+
+ virtual Connection* getXAConnection(const
+ OCCI_STD_NAMESPACE::string& dbname) = 0;
+
+ virtual void releaseXAConnection(Connection* conn) =0;
+
+ virtual StatelessConnectionPool* createStatelessConnectionPool(
+ const OCCI_STD_NAMESPACE::string &poolUserName,
+ const OCCI_STD_NAMESPACE::string &poolPassword,
+ const OCCI_STD_NAMESPACE::string &connectString = "",
+ unsigned int maxConn = 1, unsigned int minConn = 0,
+ unsigned int incrConn = 1,
+ StatelessConnectionPool::PoolType pType
+ = StatelessConnectionPool::HETEROGENEOUS) = 0;
+
+ virtual StatelessConnectionPool* createStatelessConnectionPool(
+ const UString &poolUserName,
+ const UString &poolPassword,
+ const UString &connectString,
+ unsigned int maxConn = 1, unsigned int minConn = 0,
+ unsigned int incrConn = 1,
+ StatelessConnectionPool::PoolType pType
+ = StatelessConnectionPool::HETEROGENEOUS) = 0;
+
+ virtual void terminateStatelessConnectionPool(StatelessConnectionPool *poolp,
+ StatelessConnectionPool::DestroyMode mode = StatelessConnectionPool::DEFAULT)
+ = 0;
+ virtual void setLDAPAuthentication(unsigned int mode) =0;
+
+ virtual unsigned int getLDAPAuthentication() const =0;
+
+ virtual void setLDAPLoginNameAndPassword(
+ const OCCI_STD_NAMESPACE::string &login,
+ const OCCI_STD_NAMESPACE::string &passwd) =0;
+
+ virtual void setLDAPAdminContext(const OCCI_STD_NAMESPACE::string &ctx)=0;
+
+ virtual OCCI_STD_NAMESPACE::string getLDAPAdminContext() const =0;
+
+ virtual void setLDAPHostAndPort(const OCCI_STD_NAMESPACE::string &host,
+ unsigned int port) =0;
+
+ virtual OCCI_STD_NAMESPACE::string getLDAPHost() const =0;
+
+ virtual unsigned int getLDAPPort() const =0;
+
+ virtual void registerSubscriptions(
+ const OCCI_STD_NAMESPACE::vector<aq::Subscription>& sub) =0;
+
+ virtual void unregisterSubscription(const aq::Subscription& sub) =0;
+
+ virtual void enableSubscription(const aq::Subscription& sub) =0;
+
+ virtual void disableSubscription(const aq::Subscription& sub) =0;
+
+ virtual bool getCacheSortedFlush() const = 0;
+
+ virtual void setCacheSortedFlush(bool flag) = 0;
+
+ virtual Connection * createConnection(
+ const OCCI_STD_NAMESPACE::string &userName,
+ const OCCI_STD_NAMESPACE::string &password,
+ const OCCI_STD_NAMESPACE::string &connectString,
+ const OCCI_STD_NAMESPACE::string &connectionClass,
+ const Connection::Purity purity) = 0;
+
+ virtual Connection * createConnection(const UString &userName,
+ const UString &password, const UString &connectString,
+ const UString &connectionclass,
+ const Connection::Purity purity) =0;
+
+ private:
+
+};
+
+
+
+class Map
+{
+ public:
+
+ virtual ~Map(){}
+ virtual void put(const OCCI_STD_NAMESPACE::string&, void *(*)(void *),
+ void (*)(void *, void *)) = 0;
+ virtual void getReadSQL(
+ void *, unsigned int, void *, unsigned int, void **) const = 0;
+ virtual void getWriteSQL(
+ void *, unsigned int, void *, unsigned int, void **) const = 0;
+ virtual void put(const OCCI_STD_NAMESPACE::string&,
+ const OCCI_STD_NAMESPACE::string&, void *(*)(void *),
+ void (*)(void *, void *)) = 0;
+ virtual void putUTF16(const OCCI_STD_NAMESPACE::string&,
+ const OCCI_STD_NAMESPACE::string&, void *(*)(void *),
+ void (*)(void *, void *)) = 0;
+
+ private:
+};
+
+
+
+class SQLException : public OCCI_STD_NAMESPACE::exception
+{
+ public:
+
+ virtual int getErrorCode() const;
+
+ virtual OCCI_STD_NAMESPACE::string getMessage() const;
+
+ const char *what() const throw();
+
+ virtual void setErrorCtx(void *ctx);
+
+ SQLException();
+
+ SQLException(const SQLException &e);
+
+ void operator=(const SQLException &other);
+
+ virtual ~SQLException() throw();
+
+ virtual int getXAErrorCode(const OCCI_STD_NAMESPACE::string& dbname) const;
+
+ virtual UString getUStringMessage() const;
+
+ virtual OCCI_STD_NAMESPACE::string getNLSMessage(Environment *env) const;
+
+ virtual UString getNLSUStringMessage(Environment *env) const;
+
+ protected:
+
+ Ptr<SQLExceptionImpl> ptr_;
+ SQLException(SQLExceptionImpl *ptr);
+
+ friend SQLException SQLExceptionCreate(int errorCode);
+ friend SQLException SQLExceptionCreate(void *handle,
+ int handleType);
+ friend class BatchSQLException;
+};
+
+class BatchSQLException : public SQLException
+{
+ public:
+ virtual ~BatchSQLException() throw();
+
+ unsigned int getFailedRowCount() const;
+ unsigned int getRowNum( unsigned int index ) const;
+ SQLException getException ( unsigned int index ) const;
+
+ private:
+ BatchSQLException();
+
+ BatchSQLException(SQLExceptionImpl *ptr);
+ friend BatchSQLException BatchSQLExceptionCreate(void *handle);
+};
+
+class Statement
+{
+ public:
+ // class constants
+
+ virtual ~Statement() {}
+
+ enum Status
+ {
+ UNPREPARED,
+ PREPARED,
+ RESULT_SET_AVAILABLE,
+ UPDATE_COUNT_AVAILABLE,
+ NEEDS_STREAM_DATA,
+ STREAM_DATA_AVAILABLE
+ };
+
+ // common methods
+
+ virtual void setSQL(const OCCI_STD_NAMESPACE::string &sql) = 0;
+
+ virtual OCCI_STD_NAMESPACE::string getSQL() const = 0;
+
+ virtual Status execute(const OCCI_STD_NAMESPACE::string &sql = "") = 0;
+
+ virtual ResultSet * getResultSet() = 0;
+
+ virtual unsigned int getUpdateCount() const = 0;
+
+ virtual ResultSet * executeQuery(
+ const OCCI_STD_NAMESPACE::string &sql = "") = 0;
+
+ virtual unsigned int executeUpdate(
+ const OCCI_STD_NAMESPACE::string &sql = "") = 0;
+
+ virtual Status status() const = 0;
+
+ virtual void closeResultSet(ResultSet *resultSet) = 0;
+
+ virtual void setPrefetchRowCount(unsigned int rowCount) = 0;
+
+ virtual void setPrefetchMemorySize(unsigned int bytes) = 0;
+
+ virtual void setAutoCommit(bool autoCommit) = 0;
+
+ virtual bool getAutoCommit() const = 0;
+
+ virtual OCIStmt * getOCIStatement() const = 0;
+
+
+ // methods for prepared statements with IN
+ // parameters
+
+ virtual void setMaxParamSize(unsigned int paramIndex,unsigned int maxSize)=0;
+
+ virtual unsigned int getMaxParamSize(unsigned int paramIndex) const = 0;
+
+ virtual void setNull(unsigned int paramIndex, Type type) = 0;
+
+ virtual void setInt(unsigned int paramIndex, int x) = 0;
+
+ virtual void setUInt(unsigned int paramIndex, unsigned int x) = 0;
+
+ virtual void setFloat(unsigned int paramIndex, float x) = 0;
+
+ virtual void setDouble(unsigned int paramIndex, double x) = 0;
+
+ virtual void setNumber(unsigned int paramIndex, const Number &x) = 0;
+
+ virtual void setString(unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::string &x) = 0;
+
+ virtual void setBytes(unsigned int paramIndex, const Bytes &x) = 0;
+
+ virtual void setDate(unsigned int paramIndex, const Date &x) = 0;
+
+ virtual void setTimestamp(unsigned int paramIndex, const Timestamp &x) = 0;
+
+ virtual void setBlob(unsigned int paramIndex, const Blob &x) = 0;
+
+ virtual void setClob(unsigned int paramIndex, const Clob &x) = 0;
+
+ virtual void setBfile(unsigned int paramIndex, const Bfile &x) = 0;
+
+ virtual void setIntervalYM(unsigned int paramIndex, const IntervalYM &x) = 0;
+
+ virtual void setIntervalDS(unsigned int paramIndex, const IntervalDS &x) = 0;
+
+ virtual void setRowid(unsigned int paramIndex, const Bytes &x) = 0;
+
+ virtual void setRef(unsigned int paramIndex, const RefAny &x) = 0;
+
+ virtual void setObject(unsigned int paramIndex, PObject * x) = 0;
+
+ virtual void setDataBuffer(unsigned int paramIndex, void *buffer,
+ Type type,
+ sb4 size, ub2 *length, sb2 *ind = NULL,
+ ub2 *rc = NULL) = 0;
+
+ virtual void setDataBufferArray(unsigned int paramIndex, void *buffer,
+ Type type,
+ ub4 arraySize, ub4 *arrayLength,
+ sb4 elementSize,
+ ub2 *elementLength, sb2 *ind = NULL,
+ ub2 *rc = NULL) = 0;
+
+ virtual void setCharSet(unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::string & charSet) = 0;
+
+ virtual OCCI_STD_NAMESPACE::string getCharSet(unsigned int paramIndex)
+ const = 0;
+
+ virtual void setDatabaseNCHARParam(
+ unsigned int paramIndex, bool isNCHAR) = 0;
+
+ virtual bool getDatabaseNCHARParam(unsigned int paramIndex) const = 0;
+
+ virtual void closeStream(Stream *stream) =0;
+
+ virtual Stream * getStream(unsigned int paramIndex) = 0;
+
+ virtual unsigned int getCurrentStreamParam() const = 0;
+
+ virtual unsigned int getCurrentStreamIteration() const = 0;
+
+ virtual void setBinaryStreamMode(unsigned int colIndex,
+ unsigned int size) =0;
+
+ virtual void setCharacterStreamMode(unsigned int colIndex,
+ unsigned int size) =0;
+
+ virtual void setMaxIterations(unsigned int maxIterations) = 0;
+
+ virtual unsigned int getMaxIterations() const = 0;
+
+ virtual void addIteration() = 0;
+
+ virtual unsigned int getCurrentIteration() const = 0;
+
+ virtual Status executeArrayUpdate(unsigned int arrayLength) = 0;
+
+
+ // methods for Callable Statements
+
+ virtual void registerOutParam(unsigned int paramIndex, Type type,
+ unsigned int maxSize=0, const OCCI_STD_NAMESPACE::string &sqltype="") = 0;
+
+ virtual bool isNull(unsigned int paramIndex) const = 0;
+
+ virtual bool isTruncated(unsigned int paramIndex) const
+ =0;
+
+
+ virtual void setErrorOnNull(unsigned int paramIndex,
+ bool causeException) = 0;
+
+ virtual void setErrorOnTruncate(unsigned int paramIndex,
+ bool causeException) = 0;
+
+ virtual int preTruncationLength(unsigned int paramIndex) const
+ =0;
+
+
+ virtual int getInt(unsigned int paramIndex) = 0;
+
+ virtual unsigned int getUInt(unsigned int paramIndex) = 0;
+
+ virtual float getFloat(unsigned int paramIndex) = 0;
+
+ virtual double getDouble(unsigned int paramIndex) = 0;
+
+ virtual Number getNumber(unsigned int paramIndex) = 0;
+
+ virtual OCCI_STD_NAMESPACE::string getString(unsigned int paramIndex) = 0;
+
+ virtual Bytes getBytes(unsigned int paramIndex) = 0;
+
+ virtual Date getDate(unsigned int paramIndex) = 0;
+
+ virtual Timestamp getTimestamp(unsigned int paramIndex) = 0;
+
+ virtual Bytes getRowid(unsigned int paramIndex) = 0;
+
+ virtual PObject * getObject(unsigned int paramIndex) = 0;
+
+ virtual Blob getBlob(unsigned int paramIndex) = 0;
+
+ virtual Clob getClob(unsigned int paramIndex) = 0;
+
+ virtual Bfile getBfile(unsigned int paramIndex) = 0;
+
+ virtual IntervalYM getIntervalYM(unsigned int paramIndex) = 0;
+
+ virtual IntervalDS getIntervalDS(unsigned int paramIndex) = 0;
+
+ virtual RefAny getRef(unsigned int paramIndex) = 0;
+
+ virtual ResultSet * getCursor(unsigned int paramIndex) = 0;
+
+ virtual Connection* getConnection() const =0;
+
+ //new interfaces
+
+ virtual void setRef(unsigned int paramIndex, const RefAny &x,
+ const OCCI_STD_NAMESPACE::string &typName,
+ const OCCI_STD_NAMESPACE::string &schName = "") = 0;
+
+ virtual void setSQLUString(const UString &sql) = 0;
+
+ virtual UString getSQLUString() const = 0;
+
+ virtual Status execute(const UString &sql) = 0;
+
+ virtual ResultSet * executeQuery(
+ const UString &sql) = 0;
+
+ virtual unsigned int executeUpdate(
+ const UString &sql) = 0;
+
+ virtual void setBFloat(unsigned int paramIndex, const BFloat &fval) = 0;
+
+ virtual void setBDouble(unsigned int paramIndex, const BDouble &dval) = 0;
+
+ virtual void setUString(unsigned int paramIndex,
+ const UString &x) = 0;
+
+ virtual void setCharSetUString(unsigned int paramIndex,
+ const UString & charSet) = 0;
+
+ virtual UString getCharSetUString(unsigned int paramIndex)
+ const = 0;
+
+ virtual void registerOutParam(unsigned int paramIndex, Type type,
+ unsigned int maxSize, const OCCI_STD_NAMESPACE::string &typName,
+ const OCCI_STD_NAMESPACE::string &schName) = 0;
+
+ virtual void registerOutParam(unsigned int paramIndex, Type type,
+ unsigned int maxSize, const UString &typName,
+ const UString &schName) = 0;
+
+ virtual BFloat getBFloat(unsigned int paramIndex) = 0;
+
+ virtual BDouble getBDouble(unsigned int paramIndex) = 0;
+
+ virtual UString getUString(unsigned int paramIndex) = 0;
+
+ virtual void disableCaching() =0;
+
+ virtual void setRef(unsigned int paramIndex, const RefAny &x,
+ const UString &typName,
+ const UString &schName) = 0;
+
+ virtual void setBinaryStreamMode(unsigned int colIndex,
+ unsigned int size, bool INArg) =0;
+
+ virtual void setCharacterStreamMode(unsigned int colIndex,
+ unsigned int size, bool INArg) =0;
+
+ virtual void setNull(unsigned int paramIndex, Type type,
+ const OCCI_STD_NAMESPACE::string &typeName,
+ const OCCI_STD_NAMESPACE::string &schemaName = "") = 0;
+
+ virtual void setNull(unsigned int paramIndex, Type type,
+ UString &typeName, UString &schemaName) = 0;
+
+ virtual void setBatchErrorMode( bool batchErrorMode ) =0;
+
+ virtual bool getBatchErrorMode( ) const =0;
+
+};
+
+
+
+class ResultSet
+{
+ public:
+ // class constants
+
+ enum Status
+ {
+ END_OF_FETCH = 0,
+ DATA_AVAILABLE,
+ STREAM_DATA_AVAILABLE
+ };
+ virtual ~ResultSet(){}
+
+ // public methods
+
+ virtual Status next(unsigned int numRows = 1) = 0;
+
+ virtual Status status() const = 0;
+
+ virtual unsigned int getNumArrayRows() const = 0;
+
+ virtual void cancel() = 0;
+
+ virtual void setMaxColumnSize(unsigned int colIndex, unsigned int max) = 0;
+
+ virtual unsigned int getMaxColumnSize(unsigned int colIndex) const = 0;
+
+ virtual bool isNull(unsigned int colIndex) const = 0;
+
+ virtual bool isTruncated(unsigned int paramIndex) const
+ =0;
+
+ virtual void setErrorOnNull(unsigned int colIndex, bool causeException) = 0;
+ virtual void setErrorOnTruncate(unsigned int paramIndex,
+ bool causeException) =0;
+
+ virtual int preTruncationLength(unsigned int paramIndex) const
+ =0;
+
+ virtual int getInt(unsigned int colIndex) = 0;
+
+ virtual unsigned int getUInt(unsigned int colIndex) = 0;
+
+ virtual float getFloat(unsigned int colIndex) = 0;
+
+ virtual double getDouble(unsigned int colIndex) = 0;
+
+ virtual Number getNumber(unsigned int colIndex) = 0;
+
+ virtual OCCI_STD_NAMESPACE::string getString(unsigned int colIndex) = 0;
+
+ virtual Bytes getBytes(unsigned int colIndex) = 0;
+
+ virtual Date getDate(unsigned int colIndex) = 0;
+
+ virtual Timestamp getTimestamp(unsigned int colIndex) = 0;
+
+ virtual Bytes getRowid(unsigned int colIndex) = 0;
+
+ virtual PObject * getObject(unsigned int colIndex) = 0;
+
+ virtual Blob getBlob(unsigned int colIndex) = 0;
+
+ virtual Clob getClob(unsigned int colIndex) =0;
+
+ virtual Bfile getBfile(unsigned int colIndex) = 0;
+
+ virtual IntervalYM getIntervalYM(unsigned int colIndex) =0;
+
+ virtual IntervalDS getIntervalDS(unsigned int colIndex) =0;
+
+ virtual RefAny getRef(unsigned int colIndex) = 0;
+
+ virtual Bytes getRowPosition() const = 0;
+
+ virtual ResultSet * getCursor(unsigned int colIndex) = 0;
+
+ virtual void setDataBuffer(unsigned int colIndex, void *buffer, Type type,
+ sb4 size = 0, ub2 *length = NULL,
+ sb2 *ind = NULL, ub2 *rc = NULL) = 0;
+
+ virtual void setCharSet(unsigned int colIndex,
+ const OCCI_STD_NAMESPACE::string & charSet) = 0;
+
+ virtual OCCI_STD_NAMESPACE::string getCharSet(unsigned int colIndex)
+ const = 0;
+
+ virtual void setBinaryStreamMode(unsigned int colIndex, unsigned int size)
+ = 0;
+
+ virtual void setCharacterStreamMode(unsigned int colIndex, unsigned int size)
+ = 0;
+
+ virtual void setDatabaseNCHARParam(unsigned int paramIndex,
+ bool isNCHAR) = 0;
+
+ virtual bool getDatabaseNCHARParam(unsigned int paramIndex) const = 0;
+
+ virtual Stream * getStream(unsigned int colIndex) = 0;
+
+ virtual void closeStream(Stream *stream) =0;
+
+ virtual unsigned int getCurrentStreamColumn() const= 0;
+
+ virtual unsigned int getCurrentStreamRow() const= 0;
+
+ virtual OCCI_STD_NAMESPACE::vector<MetaData> getColumnListMetaData() const
+ = 0;
+
+ virtual Statement* getStatement() const=0;
+
+ //new interfaces
+
+ virtual BFloat getBFloat(unsigned int colIndex) = 0;
+
+ virtual BDouble getBDouble(unsigned int colIndex) = 0;
+
+ virtual UString getUString(unsigned int colIndex) = 0;
+
+ virtual void setCharSetUString(unsigned int colIndex,
+ const UString & charSet) = 0;
+
+ virtual UString getCharSetUString(unsigned int colIndex)
+ const = 0;
+
+ virtual void setPrefetchRowCount(unsigned int rowCount) = 0;
+
+ virtual void setPrefetchMemorySize(unsigned int bytes) = 0;
+};
+
+
+class Stream
+{
+ public :
+
+ enum Status {READY_FOR_READ, READY_FOR_WRITE, INACTIVE};
+
+ virtual ~Stream(){}
+ virtual int readBuffer(char *buffer, unsigned int size)
+ =0;
+ virtual int readLastBuffer(char *buffer, unsigned int size)
+ =0;
+ virtual void writeBuffer(char *buffer, unsigned int size)
+ =0;
+ virtual void writeLastBuffer(char *buffer, unsigned int size)
+ =0;
+ virtual Status status() const =0;
+
+};
+
+/*---------------------------------------------------------------------------
+ PROTOTYPES USED BY FUNCTION TEMPLATES
+ -------------------------------------------------------------------------*/
+ void getVectorOfPObjects( ResultSet *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<PObject *> &vect) ;
+ void getVectorOfOCIRefs(ResultSet *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<void *> &vect) ;
+ void getVectorOfPObjects( Statement *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<PObject *> &vect) ;
+ void getVectorOfOCIRefs(Statement *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<void *> &vect) ;
+ void setVectorOfPObjects( Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<PObject *> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVectorOfPObjects( Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<PObject *> &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVectorOfPObjects( Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<PObject *> &vect,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void setVectorOfOCIRefs(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<void *> &vect,
+ const OCCI_STD_NAMESPACE::vector<OCIInd> &vecind,
+ const OCCI_STD_NAMESPACE::string &sqltype) ;
+ void setVectorOfOCIRefs(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<void *> &vect,
+ const OCCI_STD_NAMESPACE::vector<OCIInd> &vecind,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName) ;
+ void setVectorOfOCIRefs(Statement *stmt, unsigned int paramIndex,
+ const OCCI_STD_NAMESPACE::vector<void *> &vect,
+ const OCCI_STD_NAMESPACE::vector<OCIInd> &vecind,
+ const UString &schemaName,
+ const UString &typeName) ;
+ void pinVectorOfOCIRefs(const Connection *conn,
+ OCCI_STD_NAMESPACE::vector<void *> & vecRef,
+ OCCI_STD_NAMESPACE::vector<void *> & vecCor,
+ OCCI_STD_NAMESPACE::vector<PObject *> &vecPObj,LockOptions &lockOpt );
+
+
+/*---------------------------------------------------------------------------
+ EXPORT FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+/*------------------------ getVector for objects ---------------------------*/
+/*
+ NAME
+ getVector - overloaded function. Retrieves the attribute in the current
+position as a vector of objects
+
+ PARAMETERS
+ rs - ResultSet
+ vect- reference to vector of objects(OUT parameter).
+
+ DESCRIPTION
+ Retrieves the column in the specified position as a vector of RefAny.
+ 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 objects.
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : NTY
+
+ will call getVector(..., vector<PObject*>)
+*/
+#if defined(WIN32COMMON) || defined(__MVS__)
+// and other platforms that do not support
+// partial function template specialization
+
+template <class T>
+void getVector( ResultSet *rs, unsigned int index,OCCI_STD_NAMESPACE::vector<T>
+& vect)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ getVectorOfPObjects(rs, index, vec_pobj);
+
+ 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( ResultSet *rs, unsigned int index, OCCI_STD_NAMESPACE::vector<T
+ *> &vect)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ getVectorOfPObjects(rs, index, vec_pobj);
+
+ 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
+
+/*------------------------ getVector for objects ---------------------------*/
+/*
+ NAME
+ getVector - overloaded function. Retrieves the attribute in the current
+position as a vector of objects
+
+ PARAMETERS
+ stmt - Statement
+ vect- reference to vector of objects(OUT parameter).
+
+ DESCRIPTION
+ Retrieves the column in the specified position as a vector of RefAny.
+ 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 objects.
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : NTY
+
+ will call getVector(..., vector<PObject*>)
+*/
+#if defined(WIN32COMMON) || defined(__MVS__)
+// and other platforms that do not support
+// partial function template specialization
+
+template <class T>
+void getVector( Statement *stmt, unsigned int index,
+OCCI_STD_NAMESPACE::vector<T> &vect)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ getVectorOfPObjects(stmt, index, vec_pobj);
+ 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( Statement *stmt, unsigned int index,
+OCCI_STD_NAMESPACE::vector<T *> &vect)
+{
+ OCCI_STD_NAMESPACE::vector<PObject *> vec_pobj;
+ getVectorOfPObjects(stmt, index, vec_pobj);
+ 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
+
+/*------------------------ getVector for Ref<T> ---------------------------*/
+/*
+ NAME
+ getVector - overloaded function. Retrieves the attribute in the current
+position as a vector of Ref<T>
+
+ PARAMETERS
+ rs - ResultSet
+ vect- reference to vector of Ref<T>(OUT parameter).
+
+ DESCRIPTION
+ Retrieves the column in the specified position as a vector of Ref<T>.
+ 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 Ref<T>.
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : REF
+*/
+#if !defined(WIN32COMMON) && !defined(__MVS__)
+template <class T>
+void getVector( ResultSet *rs, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<Ref<T> > &vect)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ getVectorOfOCIRefs(rs, index, vec_ref);
+
+ const Connection *sess = rs->getStatement()->getConnection();
+
+ vect.clear();
+ unsigned int size = vec_ref.size();
+ vect.reserve( size );
+ 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
+
+/*------------------------ setVector for PObject*---------------------------*/
+/*
+ NAME
+ SetVector - overloaded function. Binds the attribute in the current
+ position with a vector of objects.
+
+ PARAMETERS
+ rs - ResultSet
+ vect- reference to vector of objects(OUT parameter).
+
+ DESCRIPTION
+ Binds the column in the specified position with a vector of signed int .
+ The column 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 objects .
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : SQLT_NTY
+
+ This will be calling setVector(..., vector<PObject*>,..)
+
+*/
+#if defined(WIN32COMMON) || defined(__MVS__)
+// and other platforms that do not support
+// partial function template specialization
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index,
+ const OCCI_STD_NAMESPACE::vector<T> &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype)
+{
+ 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((PObject *)vect[i]);
+
+ setVectorOfPObjects(stmt, index, vec_pobj, sqltype);
+}
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index, const OCCI_STD_NAMESPACE::
+vector<T> &vect, const OCCI_STD_NAMESPACE::string &schemaName,
+const OCCI_STD_NAMESPACE::string &typeName)
+{
+ 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((PObject *)vect[i]);
+
+ setVectorOfPObjects(stmt, index, vec_pobj, schemaName, typeName);
+}
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index, const OCCI_STD_NAMESPACE::
+vector<T> &vect, const UString &schemaName,
+const UString &typeName)
+{
+ 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((PObject *)vect[i]);
+
+ setVectorOfPObjects(stmt, index, vec_pobj, schemaName, typeName);
+}
+#else
+template <class T>
+void setVector( Statement *stmt, unsigned int index, const OCCI_STD_NAMESPACE::
+vector<T *> &vect, const OCCI_STD_NAMESPACE::string &sqltype)
+{
+ 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((PObject *)vect[i]);
+
+ setVectorOfPObjects(stmt, index, vec_pobj, sqltype);
+}
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index, const OCCI_STD_NAMESPACE::
+vector<T *> &vect, const OCCI_STD_NAMESPACE::string &schemaName,
+const OCCI_STD_NAMESPACE::string &typeName)
+{
+ 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((PObject *)vect[i]);
+
+ setVectorOfPObjects(stmt, index, vec_pobj, schemaName, typeName);
+}
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index, const OCCI_STD_NAMESPACE::
+vector<T *> &vect, const UString &schemaName,
+const UString &typeName)
+{
+ 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((PObject *)vect[i]);
+
+ setVectorOfPObjects(stmt, index, vec_pobj, schemaName, typeName);
+}
+#endif
+
+/*------------------------ setVector for Ref<T>---------------------------*/
+/*
+ NAME
+ setVector - overloaded function. Binds the attribute in the current
+ position with a vector of Ref<T>.
+
+ PARAMETERS
+ rs - ResultSet
+ vect- reference to vector of REF
+
+ DESCRIPTION
+ Binds the column in the specified position with a vector of signed int .
+ The column 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 OCIRef* .
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : REF
+
+ This will just call setVector(..., vector<OCIRef*>,..)
+
+
+*/
+#if !defined(WIN32COMMON) && !defined(__MVS__)
+template <class T>
+void setVector( Statement *stmt, unsigned int index,
+ const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+ const OCCI_STD_NAMESPACE::string &sqltype)
+{
+ 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((void *)vect[i].getRef());
+ vec_ind.push_back( vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+
+ setVectorOfOCIRefs(stmt, index, vec_ref, vec_ind, sqltype);
+}
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index,
+ const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+ const OCCI_STD_NAMESPACE::string &schemaName,
+ const OCCI_STD_NAMESPACE::string &typeName)
+{
+ 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((void *)vect[i].getRef());
+ vec_ind.push_back( vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+
+ setVectorOfOCIRefs(stmt, index, vec_ref, vec_ind, schemaName, typeName);
+}
+
+template <class T>
+void setVector( Statement *stmt, unsigned int index,
+ const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+ const UString &schemaName,
+ const UString &typeName)
+{
+ 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((void *)vect[i].getRef());
+ vec_ind.push_back( vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+
+ setVectorOfOCIRefs(stmt, index, vec_ref, vec_ind, schemaName, typeName);
+}
+#endif
+
+/*------------------------ getVector for Ref<T> ---------------------------*/
+/*
+ NAME
+ getVector - overloaded function. Retrieves the attribute in the current
+position as a vector of Ref<T>
+
+ PARAMETERS
+ stmt - Statement
+ vect- reference to vector of Ref<T>(OUT parameter).
+
+ DESCRIPTION
+ Retrieves the column in the specified position as a vector of Ref<T>.
+ 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 Ref<T>.
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : REF
+*/
+#if !defined(WIN32COMMON) && !defined(__MVS__)
+template <class T>
+void getVector( Statement *stmt, unsigned int index,
+ OCCI_STD_NAMESPACE::vector<Ref<T> > &vect)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ getVectorOfOCIRefs(stmt, index, vec_ref);
+
+ const Connection *sess = stmt->getConnection();
+
+ vect.clear();
+ unsigned int size = vec_ref.size();
+ vect.reserve( size );
+ 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
+
+// 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 Ref<T>
+
+ PARAMETERS
+ rs - ResultSet
+ vect- reference to vector of Ref<T>(OUT parameter).
+
+ DESCRIPTION
+ Retrieves the column in the specified position as a vector of Ref<T>.
+ 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 Ref<T>.
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : REF
+*/
+
+template <class T>
+void getVectorOfRefs( ResultSet *rs, unsigned int index,
+OCCI_STD_NAMESPACE::vector<Ref<T> > &vect)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ getVectorOfOCIRefs(rs, index, vec_ref);
+
+ const Connection *sess = rs->getStatement()->getConnection();
+
+ vect.clear();
+ unsigned int size = vec_ref.size();
+ vect.reserve( size );
+ 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. Binds the attribute in the current
+ position with a vector of Ref<T>.
+
+ PARAMETERS
+ rs - ResultSet
+ vect- reference to vector of REF
+
+ DESCRIPTION
+ Binds the column in the specified position with a vector of signed int .
+ The column 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 OCIRef* .
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : REF
+
+ This will just call setVector(..., vector<OCIRef*>,..)
+
+
+*/
+
+template <class T>
+void setVectorOfRefs( Statement *stmt, unsigned int index,
+const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+const OCCI_STD_NAMESPACE::string &sqltype)
+{
+ 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((void *)vect[i].getRef());
+ vec_ind.push_back( vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+
+ setVectorOfOCIRefs(stmt, index, vec_ref, vec_ind, sqltype);
+}
+
+template <class T>
+void setVectorOfRefs( Statement *stmt, unsigned int index,
+const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+const OCCI_STD_NAMESPACE::string &schemaName,
+const OCCI_STD_NAMESPACE::string &typeName)
+{
+ 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((void *)vect[i].getRef());
+ vec_ind.push_back( vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+
+ setVectorOfOCIRefs(stmt, index, vec_ref, vec_ind, schemaName, typeName);
+}
+
+template <class T>
+void setVectorOfRefs( Statement *stmt, unsigned int index,
+const OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+const UString &schemaName,
+const UString &typeName)
+{
+ 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((void *)vect[i].getRef());
+ vec_ind.push_back( vect[i].isNull() ? OCI_IND_NULL : OCI_IND_NOTNULL);
+ }
+
+ setVectorOfOCIRefs(stmt, index, vec_ref, vec_ind, schemaName, typeName);
+}
+
+/*------------------------ getVectorOfRefs for Ref<T> ----------------------*/
+/*
+ NAME
+ getVectorOfRefs - overloaded function. Retrieves the attribute in the
+ current position as a vector of Ref<T>
+
+ PARAMETERS
+ stmt - Statement
+ vect- reference to vector of Ref<T>(OUT parameter).
+
+ DESCRIPTION
+ Retrieves the column in the specified position as a vector of Ref<T>.
+ 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 Ref<T>.
+
+ RETURNS
+ nothing
+
+ NOTES
+ compatible SQL types : REF
+*/
+
+template <class T>
+void getVectorOfRefs( Statement *stmt, unsigned int index,
+OCCI_STD_NAMESPACE::vector <Ref<T> > &vect)
+{
+ OCCI_STD_NAMESPACE::vector<void *> vec_ref;
+ getVectorOfOCIRefs(stmt, index, vec_ref);
+
+ const Connection *sess = stmt->getConnection();
+
+ vect.clear();
+ unsigned int size = vec_ref.size();
+ vect.reserve( size );
+ 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));
+ }
+}
+/*----------------------------- pinVectorOfRefs---------------------*/
+/*
+ NAME
+ pinVectorOfRefs - array pin implementation
+
+ PARAMETERS
+ conn- Connection object
+ vecRef - vector of OCIRefs *
+ vecCor - vector of OCIComplexObject *
+ vecPOBj - vector of PObject * ( OUT )
+
+ DESCRIPTION
+ implements the array pin of refs passed and returns the corresponding
+ PObject s
+
+ RETURNS
+
+ NOTES
+*/
+template <class T>
+void pinVectorOfRefs( const Connection *conn,
+OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+OCCI_STD_NAMESPACE::vector<T* > &vectObj, LockOptions lockOpt)
+{
+
+ OCCI_STD_NAMESPACE::vector<void *> vecRef;
+ OCCI_STD_NAMESPACE::vector<void *> vecCor;
+ OCCI_STD_NAMESPACE::vector<PObject *> vecPObj;
+ unsigned int sz = vect.size();
+ vecRef.reserve( sz );
+ vecCor.reserve( sz );
+
+ for ( unsigned int i=0; i < sz; i++)
+ {
+ vecRef.push_back((void *)vect[i].getRef());
+ vecCor.push_back((void *)vect[i].getCor());
+ }
+ pinVectorOfOCIRefs(conn, vecRef, vecCor, vecPObj, lockOpt);
+ for ( unsigned int k=0; k < sz; k++)
+ {
+ vectObj.push_back((T *)vecPObj[k]);
+ vect[k].setPinnedObject(vecPObj[k]);
+ }
+}
+
+/*----------------------------- pinVectorOfRefs---------------------*/
+/*
+ NAME
+ pinVectorOfRefs - array pin implementation
+
+ PARAMETERS
+ conn- Connection object
+ vecRef - vector of OCIRefs *
+ vecCor - vector of OCIComplexObject *
+
+ DESCRIPTION
+ implements the array pin of refs passed
+
+ RETURNS
+
+ NOTES
+*/
+template <class T>
+void pinVectorOfRefs( const Connection *conn,
+OCCI_STD_NAMESPACE::vector<Ref<T> > &vect,
+LockOptions lockOpt)
+{
+
+ OCCI_STD_NAMESPACE::vector<void *> vecRef;
+ OCCI_STD_NAMESPACE::vector<void *> vecCor;
+ OCCI_STD_NAMESPACE::vector<PObject *> vecPObj;
+ unsigned int sz = vect.size();
+ vecRef.reserve( sz );
+ vecCor.reserve( sz );
+
+ for ( unsigned int i=0; i < sz; i++)
+ {
+ vecRef.push_back((void *)vect[i].getRef());
+ vecCor.push_back((void *)vect[i].getCor());
+ }
+ pinVectorOfOCIRefs(conn, vecRef, vecCor,vecPObj, lockOpt);
+ for ( unsigned int k=0; k < sz; k++)
+ vect[k].setPinnedObject(vecPObj[k]);
+}
+
+
+
+/*---------------------------------------------------------------------------
+ INTERNAL FUNCTIONS
+ ---------------------------------------------------------------------------*/
+
+
+} /* end of namespace occi */
+} /* end of namespace oracle */
+#endif /* OCCICONTROL_ORACLE */
+
+#endif /* _olint */