📄 ociref.cpp
字号:
#ifndef _COCIRef
#include "ociref.h"
#endif
#ifndef _COCISession
#include "ocisess.h"
#endif
#ifndef _COCIObject
#include "ociobj.h"
#endif
COCIRef::COCIRef(const COCISession& Sess)
: m_Session(Sess)
, m_Object((COCIObject*)0)
{
m_Indicator = OCI_IND_NULL;
}
COCIRef::COCIRef(const COCISession& Sess, dvoid* oci_ref)
: m_Session(Sess)
, m_Object((COCIObject*)0)
{
CHECK( m_Session.get_error(), OCIObjectNew(m_Session.get_env(),
m_Session.get_error(),
m_Session.get_svc(),
OCI_TYPECODE_REF,
0,
0, // No Table required
OCI_DURATION_TRANS, TRUE, (dvoid **) &get_instance()) );
CHECK(m_Session.get_error(),
OCIRefAssign(m_Session.get_env(), m_Session.get_error(), (OCIRef*)oci_ref, (OCIRef**)&get_instance()));
m_Indicator = OCI_IND_NOTNULL;
}
COCIRef::COCIRef(const COCIRef& src)
: m_Session(src.m_Session)
{
// If src.get_instance() hasn't been allocated, then no need to copy
if(((COCIBase*)&src)->get_instance())
{
CHECK( m_Session.get_error(), OCIObjectNew(m_Session.get_env(),
m_Session.get_error(),
m_Session.get_svc(),
OCI_TYPECODE_REF,
0,
0, // No Table required
OCI_DURATION_TRANS, TRUE, (dvoid **) &get_instance()) );
if((OCIRef*)((COCIBase*)&src)->get_instance())
{
CHECK(m_Session.get_error(), OCIRefAssign(m_Session.get_env(), m_Session.get_error(), (OCIRef*)((COCIBase*)&src)->get_instance(), (OCIRef**)&get_instance()));
}
/*OCIRef* temp = (OCIRef*)get_instance();
CHECK(m_Session.get_error(), OCIRefAssign(m_Session.get_env(), m_Session.get_error(), (OCIRef*)((COCIBase*)&src)->get_instance(), &temp));
set_instance((void*&)temp);*/
}
m_Object = src.m_Object;
m_Indicator = OCI_IND_NOTNULL;
}
// Fudge for now
/*static COCISession temp;
COCIRef::COCIRef()
: m_Session(temp)
{
}
*/
COCIRef::~COCIRef()
{
if(m_Object)
{
delete m_Object;
m_Object = (COCIObject*)0;
}
if(get_instance())
{
CHECK(m_Session.get_error(),
OCIObjectFree(m_Session.get_env(), m_Session.get_error(), (dvoid *) get_instance(), OCI_OBJECTFREE_FORCE));
}
}
void COCIRef::assign(const COCIRef& src)
{
CHECK(m_Session.get_error(), OCIRefAssign(m_Session.get_env(), m_Session.get_error(), (OCIRef*)((COCIBase*)&src)->get_instance(), (OCIRef**)&get_instance()));
}
void COCIRef::clear(void)
{
OCIRefClear(m_Session.get_env(), (OCIRef*)get_instance());
}
void COCIRef::from_hex(char* hex)
{
OCIRef* temp = (OCIRef*)get_instance();
CHECK(m_Session.get_error(), OCIRefFromHex(m_Session.get_env(),
m_Session.get_error(),
m_Session.get_svc(),
(text*)hex,
strlen(hex),
&temp));
}
std::string COCIRef::to_hex(void)
{
ub4 size = hex_size();
std::string hex_value;
hex_value.resize(size);
CHECK(m_Session.get_error(), OCIRefToHex(m_Session.get_env(),
m_Session.get_error(),
(OCIRef*)get_instance(),
(text*)hex_value.c_str(),
&size));
return hex_value;
}
ub4 COCIRef::hex_size(void)
{
return OCIRefHexSize(m_Session.get_env(), (OCIRef*)get_instance());
}
bool COCIRef::is_equal(const COCIRef& src)
{
return (bool)OCIRefIsEqual(m_Session.get_env(), (OCIRef*)((COCIBase*)&src)->get_instance(), (OCIRef*)get_instance());
}
bool COCIRef::is_null(void)
{
return OCIRefIsNull(m_Session.get_env(), (OCIRef*)get_instance()) == TRUE;
}
bool COCIRef::operator == (const COCIRef& src)
{
return is_equal(src);
}
COCIObject COCIRef::operator * ()
{
dvoid* object;
CHECK(m_Session.get_error(), OCIObjectPin(m_Session.get_env(), m_Session.get_error(), (OCIRef*)get_instance(),
(OCIComplexObject *)0, OCI_PIN_ANY,
OCI_DURATION_TRANS, OCI_LOCK_NONE,
(dvoid **) &object));
COCIObject o_tdo_ref(m_Session, OCI_TYPECODE_REF);
CHECK(m_Session.get_error(), OCIObjectGetTypeRef(m_Session.get_env(), m_Session.get_error(), object, (OCIRef*)o_tdo_ref.get_instance()));
OCIParam *parmhp = (OCIParam*)0;
OCIDescribe *deshp = (OCIDescribe*)0;
dvoid* object_tdo = (dvoid*)0;
CHECK(m_Session.get_error(), OCIObjectPin(m_Session.get_env(), m_Session.get_error(), (OCIRef*)o_tdo_ref.get_instance(), (OCIComplexObject *)0,
OCI_PIN_ANY, OCI_DURATION_TRANS, OCI_LOCK_NONE, (dvoid **)&object_tdo));
COCIType type(m_Session, (OCIType*)object_tdo);
return COCIObject(m_Session, object, type);
}
COCIObject* COCIRef::operator -> ()
{
if(m_Object)
{
delete m_Object;
}
m_Object = new COCIObject(COCIRef::operator*());
return m_Object;
}
COCIRef& COCIRef::operator = (const COCIRef& src)
{
if(&src != this)
{
assign(src);
}
return *this;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -