variant array to be used as bind variable buffer More...
#include <ocipl.h>
Public Member Functions | |
SqlVariantArray () | |
SqlVariantArray (const ColumnTypeInfo &type, int size) | |
SqlVariantArray (const SqlVariantArray &other) | |
~SqlVariantArray () | |
void | clear () |
void | assign (const SqlVariantArray &other) |
ub2 | get_data_type () const |
SqlVariantArray & | operator= (const SqlVariantArray &other) |
tstring | str (int row, OCIError *errh) const |
SqlNumber | number (int row, OCIError *errh) const |
OciDate | oci_date (int row, OCIError *errh) const |
SqlDateTime | sql_date (int row, OCIError *errh) const |
bool | is_null (int row) const |
bool | is_not_null (int row) const |
void | bind_result (SqlStatement &stmt, int idx) |
void | set_string (int row, const TCHAR *str) |
void | set_number (int row, const SqlNumber &num) |
void | set_date (int row, const OciDate &date) |
void | set_datetime (int row, const SqlDateTime &datetime) |
void | bind_input (SqlStatement &stmt, int idx, int row) |
Protected Attributes | |
union { | |
SqlStringArray * _pstring | |
SqlNumberArray * _pnumber | |
OciDateArray * _poci_date | |
SqlDateTimeArray * _psql_date | |
void * _punion_ptr | |
}; | |
int | _size |
ub2 | _data_type |
variant array to be used as bind variable buffer
Definition at line 3467 of file ocipl.h.
OCIPL::SqlVariantArray::SqlVariantArray | ( | ) | [inline] |
Definition at line 3469 of file ocipl.h.
: _data_type(0) { _punion_ptr = NULL; }
OCIPL::SqlVariantArray::SqlVariantArray | ( | const ColumnTypeInfo & | type, |
int | size | ||
) |
Definition at line 1461 of file ocipl.cpp.
References _data_type, OCIPL::ColumnTypeInfo::_data_type, _pnumber, _poci_date, _psql_date, _pstring, OCIPL::ColumnTypeInfo::_width, and THROW_OCI_EXCEPTION.
: _size(size), _data_type(type._data_type) { switch(type._data_type) { case OCI_TYPECODE_CHAR: _data_type = OCI_TYPECODE_VARCHAR; // fall through case OCI_TYPECODE_VARCHAR: _pstring = new SqlStringArray(size, type._width); break; case OCI_TYPECODE_NUMBER: _pnumber = new SqlNumberArray(size); break; #ifdef SQLT_BFLOAT case OCI_TYPECODE_BFLOAT: _pfloat = new float[size]; break; case OCI_TYPECODE_BDOUBLE: _pdouble = new double[size]; break; #endif case OCI_TYPECODE_DATE: _poci_date = new OciDateArray(size); break; #if ORACLE_VERSION>=81 case OCI_TYPECODE_TIME: case OCI_TYPECODE_TIMESTAMP: _psql_date = new SqlDateTimeArray(size); break; /* no LOB allocation without available handles case OCI_TYPECODE_BLOB: _pblob = new OciBlobArray(size); break; case OCI_TYPECODE_CLOB: _pclob = new OciClobArray(size); break; */ #endif case SQLT_LNG: _pstring = new SqlStringArray(size, type._width); //@@ break; default: THROW_OCI_EXCEPTION("unsupported datatype"); } }
OCIPL::SqlVariantArray::SqlVariantArray | ( | const SqlVariantArray & | other ) |
OCIPL::SqlVariantArray::~SqlVariantArray | ( | ) | [inline] |
void OCIPL::SqlVariantArray::assign | ( | const SqlVariantArray & | other ) |
Definition at line 1523 of file ocipl.cpp.
References _data_type, _pnumber, _poci_date, _psql_date, _pstring, _size, and clear().
Referenced by SqlVariantArray().
{ clear(); _size = other._size; _data_type = other._data_type; switch(other._data_type) { case 0: break; case OCI_TYPECODE_VARCHAR: _pstring = new SqlStringArray(*other._pstring); //@@ break; case OCI_TYPECODE_NUMBER: _pnumber = new SqlNumberArray(*other._pnumber); break; #ifdef SQLT_BFLOAT case OCI_TYPECODE_BFLOAT: _pfloat = new float[_size]; memcpy(_pfloat, other._pfloat, sizeof(float)*_size); break; case OCI_TYPECODE_BDOUBLE: _pdouble = new double[_size]; memcpy(_pfloat, other._pfloat, sizeof(double)*_size); break; #endif case OCI_TYPECODE_DATE: _poci_date = new OciDateArray(*other._poci_date); break; #if ORACLE_VERSION>=81 case OCI_TYPECODE_TIME: case OCI_TYPECODE_TIMESTAMP: _psql_date = new SqlDateTimeArray(*other._psql_date); break; #endif /* case OCI_TYPECODE_BLOB: _pblob = new OciBlobArray(*other._pblob); break; case OCI_TYPECODE_CLOB: _pclob = new OciClobArray(*other._pclob); break; */ case SQLT_LNG: _pstring = new SqlStringArray(*other._pstring); //@@ break; default: assert(0); } }
void OCIPL::SqlVariantArray::bind_input | ( | SqlStatement & | stmt, |
int | idx, | ||
int | row | ||
) |
Definition at line 1917 of file ocipl.cpp.
References _data_type, _pnumber, _poci_date, _psql_date, _pstring, OCIPL::SqlStringArray::alen(), OCIPL::SqlStatement::bind_input(), OCIPL::OciDateArray::get_date(), OCIPL::SqlDateTimeArray::get_datetime(), OCIPL::SqlNumberArray::get_number(), OCIPL::SqlIndArray::ind(), and OCIPL::SqlStringArray::str().
{ switch(_data_type) { case OCI_TYPECODE_VARCHAR: stmt.bind_input(idx, BindInput(_pstring->str(row), _pstring->alen(), SQLT_STR)); break; case OCI_TYPECODE_NUMBER: stmt.bind_input(idx, BindInput(_pnumber->get_number(row), _pnumber->ind(row))); break; #ifdef SQLT_BFLOAT case OCI_TYPECODE_BFLOAT: stmt.bind_input(idx, *_pfloat); break; case OCI_TYPECODE_BDOUBLE: stmt.bind_input(idx, *_pdouble); break; #endif case OCI_TYPECODE_DATE: stmt.bind_input(idx, BindInput(_poci_date->get_date(row), _poci_date->ind(row))); break; #if ORACLE_VERSION>=81 case OCI_TYPECODE_TIME: case OCI_TYPECODE_TIMESTAMP: stmt.bind_input(idx, BindInput(_psql_date->get_datetime(row), _psql_date->ind(row))); break; #endif /* case OCI_TYPECODE_BLOB: stmt.bind_input(idx, *_pblob); break; case OCI_TYPECODE_CLOB: stmt.bind_input(idx, *_pclob); break; */ case SQLT_LNG: stmt.bind_input(idx, BindInput(_pstring->str(row), _pstring->alen(), SQLT_STR)); //@@ break; default: assert(0); } }
void OCIPL::SqlVariantArray::bind_result | ( | SqlStatement & | stmt, |
int | idx | ||
) |
Definition at line 1867 of file ocipl.cpp.
References _data_type, _pnumber, _poci_date, _psql_date, _pstring, and OCIPL::SqlStatement::bind_result().
{ switch(_data_type) { case OCI_TYPECODE_VARCHAR: stmt.bind_result(idx, *_pstring); break; case OCI_TYPECODE_NUMBER: stmt.bind_result(idx, *_pnumber); break; #ifdef SQLT_BFLOAT case OCI_TYPECODE_BFLOAT: stmt.bind_result(idx, *_pfloat); break; case OCI_TYPECODE_BDOUBLE: stmt.bind_result(idx, *_pdouble); break; #endif case OCI_TYPECODE_DATE: stmt.bind_result(idx, *_poci_date); break; #if ORACLE_VERSION>=81 case OCI_TYPECODE_TIME: case OCI_TYPECODE_TIMESTAMP: stmt.bind_result(idx, *_psql_date); break; #endif /* case OCI_TYPECODE_BLOB: stmt.bind_result(idx, *_pblob); break; case OCI_TYPECODE_CLOB: stmt.bind_result(idx, *_pclob); break; */ case SQLT_LNG: stmt.bind_result(idx, *_pstring); //@@ break; default: assert(0); } }
void OCIPL::SqlVariantArray::clear | ( | ) |
Definition at line 1582 of file ocipl.cpp.
References _data_type, _pnumber, _poci_date, _psql_date, _pstring, and _size.
Referenced by assign().
{ switch(_data_type) { case 0: break; case OCI_TYPECODE_VARCHAR: delete _pstring; break; case OCI_TYPECODE_NUMBER: delete _pnumber; break; #ifdef SQLT_BFLOAT case OCI_TYPECODE_BFLOAT: delete [] _pfloat; break; case OCI_TYPECODE_BDOUBLE: delete [] _pdouble; break; #endif case OCI_TYPECODE_DATE: delete _poci_date; break; #if ORACLE_VERSION>=81 case OCI_TYPECODE_TIME: case OCI_TYPECODE_TIMESTAMP: delete _psql_date; break; #endif /* case OCI_TYPECODE_BLOB: delete _pblob; break; case OCI_TYPECODE_CLOB: delete _pclob; break; */ case SQLT_LNG: delete _pstring; //@@ break; default: assert(0); } _size = 0; _data_type = 0; }
ub2 OCIPL::SqlVariantArray::get_data_type | ( | ) | const [inline] |
Definition at line 3482 of file ocipl.h.
{return _data_type;}
bool OCIPL::SqlVariantArray::is_not_null | ( | int | row ) | const |
Definition at line 1827 of file ocipl.cpp.
References _data_type, _pnumber, _poci_date, _psql_date, _pstring, and OCIPL::SqlIndArray::is_not_null().
{ switch(_data_type) { case 0: #ifdef SQLT_BFLOAT case OCI_TYPECODE_BFLOAT: case OCI_TYPECODE_BDOUBLE: #endif return true; case OCI_TYPECODE_VARCHAR: return _pstring->is_not_null(row); case OCI_TYPECODE_NUMBER: return _pnumber->is_not_null(row); case OCI_TYPECODE_DATE: return _poci_date->is_not_null(row); #if ORACLE_VERSION>=81 case OCI_TYPECODE_TIME: case OCI_TYPECODE_TIMESTAMP: return _psql_date->is_not_null(row); #endif /* case OCI_TYPECODE_BLOB: return _pblob->is_not_null(row); case OCI_TYPECODE_CLOB: return _pclob->is_not_null(row); */ case SQLT_LNG: return _pstring->is_not_null(row); //@@ default: assert(0); return true; } }
bool OCIPL::SqlVariantArray::is_null | ( | int | row ) | const [inline] |
Definition at line 3492 of file ocipl.h.
{return !is_not_null(row);}
SqlNumber OCIPL::SqlVariantArray::number | ( | int | row, |
OCIError * | errh | ||
) | const |
Definition at line 1713 of file ocipl.cpp.
References _data_type, _pnumber, _pstring, OCIPL::SqlStringArray::c_str(), OCIPL::SqlNumberArray::get_ref(), OCIPL::SqlIndArray::is_not_null(), and THROW_OCI_EXCEPTION.
{ switch(_data_type) { case 0: return SqlNumber(); case OCI_TYPECODE_VARCHAR: return SqlNumber(errh, _pstring->c_str(row)); case OCI_TYPECODE_NUMBER: if (_pnumber->is_not_null(row)) return _pnumber->get_ref(row); else return SqlNumber(); #ifdef SQLT_BFLOAT case OCI_TYPECODE_BFLOAT: return SqlNumber(errh, _pfloat[row]); case OCI_TYPECODE_BDOUBLE: return SqlNumber(errh, _pdouble[row]); #endif //case OCI_TYPECODE_DATE: // return ... default: THROW_OCI_EXCEPTION("no conversion to number"); //return SqlNumber(); // not reached } }
OciDate OCIPL::SqlVariantArray::oci_date | ( | int | row, |
OCIError * | errh | ||
) | const |
Definition at line 1754 of file ocipl.cpp.
References _data_type, _poci_date, _pstring, OCIPL::SqlStringArray::c_str(), OCIPL::OciDateArray::get_ref(), OCIPL::SqlIndArray::is_not_null(), and THROW_OCI_EXCEPTION.
{ switch(_data_type) { case 0: return OciDate(); case OCI_TYPECODE_VARCHAR: return OciDate(errh, _pstring->c_str(row)); case OCI_TYPECODE_DATE: if (_poci_date->is_not_null(row)) return *_poci_date->get_ref(row); else return OciDate(); /*@@todo convert type #if ORACLE_VERSION>=81 case OCI_TYPECODE_TIME: case OCI_TYPECODE_TIMESTAMP: return *_sql_date; #endif */ default: THROW_OCI_EXCEPTION("no conversion to date"); //return OciDate(); // not reached } }
SqlVariantArray& OCIPL::SqlVariantArray::operator= | ( | const SqlVariantArray & | other ) | [inline] |
void OCIPL::SqlVariantArray::set_date | ( | int | row, |
const OciDate & | date | ||
) |
Definition at line 1781 of file ocipl.cpp.
References _data_type, _poci_date, OCIPL::OciDateArray::set_date(), and THROW_OCI_EXCEPTION.
{ if (_data_type != OCI_TYPECODE_DATE) THROW_OCI_EXCEPTION("invalid variant data type"); _poci_date->set_date(row, date); }
void OCIPL::SqlVariantArray::set_datetime | ( | int | row, |
const SqlDateTime & | datetime | ||
) |
Definition at line 1818 of file ocipl.cpp.
References _data_type, _psql_date, OCIPL::SqlDateTimeArray::set_datetime(), and THROW_OCI_EXCEPTION.
{ if (_data_type!=OCI_TYPECODE_TIME && _data_type!=OCI_TYPECODE_TIMESTAMP) THROW_OCI_EXCEPTION("invalid variant data type"); _psql_date->set_datetime(row, datetime); }
void OCIPL::SqlVariantArray::set_number | ( | int | row, |
const SqlNumber & | num | ||
) |
Definition at line 1745 of file ocipl.cpp.
References _data_type, _pnumber, OCIPL::SqlNumberArray::set_number(), and THROW_OCI_EXCEPTION.
{ if (_data_type != OCI_TYPECODE_NUMBER) THROW_OCI_EXCEPTION("invalid variant data type"); _pnumber->set_number(row, num); }
void OCIPL::SqlVariantArray::set_string | ( | int | row, |
const TCHAR * | str | ||
) |
Definition at line 1704 of file ocipl.cpp.
References _data_type, _pstring, OCIPL::SqlStringArray::assign(), and THROW_OCI_EXCEPTION.
{ if (_data_type != OCI_TYPECODE_VARCHAR) THROW_OCI_EXCEPTION("invalid variant data type"); _pstring->assign(row, str); }
SqlDateTime OCIPL::SqlVariantArray::sql_date | ( | int | row, |
OCIError * | errh | ||
) | const |
Definition at line 1790 of file ocipl.cpp.
References _data_type, _psql_date, OCIPL::SqlDateTimeArray::get_ref(), OCIPL::SqlIndArray::is_not_null(), and THROW_OCI_EXCEPTION.
{ switch(_data_type) { case 0: return SqlDateTime(); /*@@todo convert type case OCI_TYPECODE_VARCHAR: return SqlDateTime(errh, *_string); case OCI_TYPECODE_DATE: return *_oci_date; */ #if ORACLE_VERSION>=81 case OCI_TYPECODE_TIME: case OCI_TYPECODE_TIMESTAMP: if (_psql_date->is_not_null(row)) return *_psql_date->get_ref(row); else return SqlDateTime(); #endif default: THROW_OCI_EXCEPTION("no conversion to date"); //return SqlDateTime(); // not reached } }
tstring OCIPL::SqlVariantArray::str | ( | int | row, |
OCIError * | errh | ||
) | const |
Definition at line 1637 of file ocipl.cpp.
References _data_type, _pnumber, _poci_date, _psql_date, _pstring, _stprintf, OCIPL::SqlStringArray::c_str(), COUNTOF, OCIPL::SqlDateTimeArray::str(), OCIPL::OciDateArray::str(), OCIPL::SqlNumberArray::str(), TCHAR, and TEXT.
{ #ifdef SQLT_BFLOAT TCHAR buffer[16]; #endif switch(_data_type) { case 0: return TEXT(""); case OCI_TYPECODE_VARCHAR: return _pstring->c_str(row); // return *_string; case OCI_TYPECODE_NUMBER: return _pnumber->str(row, errh); #ifdef SQLT_BFLOAT case OCI_TYPECODE_BFLOAT: #ifdef __STDC_WANT_SECURE_LIB__ _stprintf_s(buffer, COUNTOF(buffer), #else _stprintf(buffer, #endif TEXT("%f"), _pfloat[row]); return buffer; case OCI_TYPECODE_BDOUBLE: #ifdef __STDC_WANT_SECURE_LIB__ _stprintf_s(buffer, COUNTOF(buffer), #else _stprintf(buffer, #endif TEXT("%f"), _pdouble[row]); return buffer; #endif case OCI_TYPECODE_DATE: return _poci_date->str(row); #if ORACLE_VERSION>=81 case OCI_TYPECODE_TIME: case OCI_TYPECODE_TIMESTAMP: return _psql_date->str(row); #endif /* case OCI_TYPECODE_BLOB: return TEXT("(BLOB)"); case OCI_TYPECODE_BFILE: return TEXT("(BFILE)"); case OCI_TYPECODE_CLOB: return TEXT("(CLOB)"); case OCI_TYPECODE_CFILE: return TEXT("(CFILE)"); */ case SQLT_LNG: return _pstring->c_str(row); //@@ default: assert(0); return TEXT(""); } }
union { ... } [protected] |
ub2 OCIPL::SqlVariantArray::_data_type [protected] |
Definition at line 3524 of file ocipl.h.
Referenced by assign(), bind_input(), bind_result(), clear(), is_not_null(), number(), oci_date(), set_date(), set_datetime(), set_number(), set_string(), sql_date(), SqlVariantArray(), and str().
Definition at line 3511 of file ocipl.h.
Referenced by assign(), bind_input(), bind_result(), clear(), is_not_null(), number(), set_number(), SqlVariantArray(), and str().
Definition at line 3512 of file ocipl.h.
Referenced by assign(), bind_input(), bind_result(), clear(), is_not_null(), oci_date(), set_date(), SqlVariantArray(), and str().
Definition at line 3513 of file ocipl.h.
Referenced by assign(), bind_input(), bind_result(), clear(), is_not_null(), set_datetime(), sql_date(), SqlVariantArray(), and str().
Definition at line 3510 of file ocipl.h.
Referenced by assign(), bind_input(), bind_result(), clear(), is_not_null(), number(), oci_date(), set_string(), SqlVariantArray(), and str().
int OCIPL::SqlVariantArray::_size [protected] |