⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ociref.cpp

📁 一个通用的oracle OCI开发程序包
💻 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 + -