Public Member Functions | Public Attributes

OCIPL::ColumnType Struct Reference

column type description including name More...

#include <ocipl.h>

Inheritance diagram for OCIPL::ColumnType:
Inheritance graph
[legend]
Collaboration diagram for OCIPL::ColumnType:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 ColumnType ()
void init (OCIError *errh, dvoid *handle)
tstring get_type_str (bool show_null=false) const

Public Attributes

tstring _name
ub2 _data_type
ub2 _width
ub1 _char_semantics
sb1 _scale
sb2 _precision
ub1 _nullable

Detailed Description

column type description including name

Definition at line 1182 of file ocipl.h.


Constructor & Destructor Documentation

OCIPL::ColumnType::ColumnType (  ) [inline]

Definition at line 1187 of file ocipl.h.

    {
        _data_type = 0;
        _width = 0;
        _char_semantics = 0;
        _precision = 0;
        _scale = -127;
        _nullable = false;
    }

Member Function Documentation

tstring OCIPL::ColumnTypeInfo::get_type_str ( bool  show_null = false ) const [inherited]

Definition at line 863 of file ocipl.cpp.

References OCIPL::ColumnTypeInfo::_data_type, OCIPL::ColumnTypeInfo::_nullable, OCIPL::ColumnTypeInfo::_precision, OCIPL::ColumnTypeInfo::_scale, OCIPL::ColumnTypeInfo::_width, and TEXT.

{
    tostringstream str;

    switch(_data_type) {
      case OCI_TYPECODE_CHAR:
        str << TEXT("CHAR(") << _width << TEXT(")");
        break;

      case OCI_TYPECODE_VARCHAR:
        str << TEXT("VARCHAR(") << _width << TEXT(")");
        break;

      case OCI_TYPECODE_VARCHAR2:
        str << TEXT("VARCHAR2(") << _width << TEXT(")");
        break;

      case OCI_TYPECODE_NUMBER:
        if (_precision == 0)
            str << TEXT("NUMBER");
        else if (_scale == -127) {
            if (_precision == 126)
                str << TEXT("FLOAT");
            else
                str << TEXT("FLOAT(") << (int)_precision << TEXT(")");
        } else if (_scale)
            str << TEXT("NUMBER(") << (int)_precision << TEXT(",") << (int)_scale << TEXT(")");
        else
            str << TEXT("NUMBER(") << (int)_precision << TEXT(")");
        break;

#ifdef SQLT_BFLOAT
      case OCI_TYPECODE_BFLOAT:
        str << TEXT("BINARY_FLOAT");
        break;

      case OCI_TYPECODE_BDOUBLE:
        str << TEXT("BINARY_DOUBLE");
        break;
#endif

      case OCI_TYPECODE_DATE:
        str << TEXT("DATE");
        break;

#if ORACLE_VERSION>=81
      case OCI_TYPECODE_TIMESTAMP:
        str << TEXT("TIMESTAMP");
        break;
#endif

      case OCI_TYPECODE_BLOB:
        str << TEXT("BLOB");
        break;

      case OCI_TYPECODE_BFILE:
        str << TEXT("BFILE");
        break;

      case OCI_TYPECODE_CLOB:
        str << TEXT("CLOB");
        break;

      case OCI_TYPECODE_CFILE:
        str << TEXT("CFILE");
        break;

      case SQLT_LNG:
        str << TEXT("LONG");
        break;

      default:
        str << TEXT("unknown");
    }

    if (show_null)
        if (!_nullable)
            str << TEXT(" NOT NULL");
        else
            str << TEXT(" NULL");

    return str.str();
}
void OCIPL::ColumnType::init ( OCIError *  errh,
dvoid *  handle 
)

Definition at line 1249 of file ocipl.cpp.

References OCIPL::ColumnTypeInfo::_char_semantics, OCIPL::ColumnTypeInfo::_data_type, _name, OCIPL::ColumnTypeInfo::_nullable, OCIPL::ColumnTypeInfo::_precision, OCIPL::ColumnTypeInfo::_scale, OCIPL::ColumnTypeInfo::_width, OCIPL::oci_check_error(), and TCHAR.

Referenced by OCIPL::SqlStatement::get_column_type().

{
     // get column name
    TOraText* pcol_name = NULL;
    ub4 size = sizeof(pcol_name);

    sword res = OCIAttrGet(handle, OCI_DTYPE_PARAM, &pcol_name, &size, OCI_ATTR_NAME, errh);
    oci_check_error(errh, res);
    _name.assign((const TCHAR*)pcol_name, size);

     // get column data type
    size = sizeof(_data_type);
    res = OCIAttrGet(handle, OCI_DTYPE_PARAM, &_data_type, &size, OCI_ATTR_DATA_TYPE, errh);
    oci_check_error(errh, res);

     // get NULL-ability flag
    size = sizeof(_nullable);
    res = OCIAttrGet(handle, OCI_DTYPE_PARAM, &_nullable, &size, OCI_ATTR_IS_NULL, errh);
    oci_check_error(errh, res);

#if ORACLE_VERSION>=90
     // retrieve the length semantics for the column
    size = sizeof(_char_semantics);
    res = OCIAttrGet(handle, OCI_DTYPE_PARAM, &_char_semantics, &size, OCI_ATTR_CHAR_USED, errh);
    if (res != OCI_SUCCESS)
        _char_semantics = 0;

    size = sizeof(_width);
    if (_char_semantics)
         // get the column width in characters
        res = OCIAttrGet(handle, OCI_DTYPE_PARAM, &_width, &size, OCI_ATTR_CHAR_SIZE, errh);
    else
#endif
         // get the column width in bytes
        res = OCIAttrGet(handle, OCI_DTYPE_PARAM, &_width, &size, OCI_ATTR_DATA_SIZE, errh);

    oci_check_error(errh, res);

    switch(_data_type) {
      default: //case OCI_TYPECODE_VARCHAR:
        _precision = 0;
        _scale = -127;
        break;

      case OCI_TYPECODE_NUMBER:
#ifdef SQLT_BFLOAT
      case OCI_TYPECODE_BFLOAT:
      case OCI_TYPECODE_BDOUBLE:
#endif
        size = sizeof(_precision);
        res = OCIAttrGet(handle, OCI_DTYPE_PARAM, &_precision, &size, OCI_ATTR_PRECISION, errh);
        oci_check_error(errh, res);

        size = sizeof(_scale);
        res = OCIAttrGet(handle, OCI_DTYPE_PARAM, &_scale, &size, OCI_ATTR_SCALE, errh);
        oci_check_error(errh, res);
        break;

      case OCI_TYPECODE_DATE:
#if ORACLE_VERSION>=81
      //case OCI_TYPECODE_TIME:
      //case OCI_TYPECODE_TIMESTAMP:
#endif
        _precision = 0;
        _scale = -127;
        break;
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:


Member Data Documentation

Definition at line 1170 of file ocipl.h.

Referenced by init().

Definition at line 1184 of file ocipl.h.

Referenced by init().

Definition at line 1173 of file ocipl.h.

Referenced by OCIPL::ColumnTypeInfo::get_type_str(), and init().

Definition at line 1172 of file ocipl.h.

Referenced by OCIPL::ColumnTypeInfo::get_type_str(), and init().

Definition at line 1171 of file ocipl.h.

Referenced by OCIPL::ColumnTypeInfo::get_type_str(), and init().


The documentation for this struct was generated from the following files: