diff options
Diffstat (limited to 'connectivity/source/inc/odbc/OTools.hxx')
-rw-r--r-- | connectivity/source/inc/odbc/OTools.hxx | 442 |
1 files changed, 34 insertions, 408 deletions
diff --git a/connectivity/source/inc/odbc/OTools.hxx b/connectivity/source/inc/odbc/OTools.hxx index dc10cea03fef..8698c30220d3 100644 --- a/connectivity/source/inc/odbc/OTools.hxx +++ b/connectivity/source/inc/odbc/OTools.hxx @@ -2,9 +2,9 @@ * * $RCSfile: OTools.hxx,v $ * - * $Revision: 1.3 $ + * $Revision: 1.4 $ * - * last change: $Author: oj $ $Date: 2001-05-02 12:52:25 $ + * last change: $Author: oj $ $Date: 2001-05-14 11:34:08 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -152,430 +152,56 @@ namespace connectivity static ::com::sun::star::uno::Sequence<sal_Int8> OTools::getBytesValue(SQLHANDLE _aStatementHandle,sal_Int32 columnIndex,SWORD _fSqlType,sal_Bool &_bWasNull, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - }; - - template <class T> void getValue( SQLHANDLE _aStatementHandle, + static void getValue( SQLHANDLE _aStatementHandle, sal_Int32 columnIndex, SQLSMALLINT _nType, sal_Bool &_bWasNull, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface, - T& _rValue) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) - { - SQLINTEGER pcbValue; - // T nValue = _rValue; - OTools::ThrowException(N3SQLGetData(_aStatementHandle, - (SQLUSMALLINT)columnIndex, - _nType, - &_rValue, - (SQLINTEGER)sizeof _rValue, - &pcbValue), - _aStatementHandle,SQL_HANDLE_STMT,_xInterface,sal_False); - _bWasNull = pcbValue == SQL_NULL_DATA; - // return nValue; - } + void* _pValue, + SQLINTEGER _rSize) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - //----------------------------------------------------------------------------- - template < class T > void bindData( SWORD fSqlType, + static void bindData( SWORD fSqlType, sal_Bool _bUseWChar, void *&_pData, SDWORD*& pLen, - const T* _pValue, - rtl_TextEncoding _nTextEncoding) - { - SDWORD nMaxLen = 0; - - switch (fSqlType) - { - case SQL_CHAR: - case SQL_VARCHAR: - if(_bUseWChar) - { - *pLen = SQL_NTS; - *((rtl::OUString*)_pData) = *(::rtl::OUString*)_pValue; - - // Zeiger auf Char* - _pData = (void*)((rtl::OUString*)_pData)->getStr(); - } - else - { - ::rtl::OString aString(::rtl::OUStringToOString(*(::rtl::OUString*)_pValue,_nTextEncoding)); - *pLen = SQL_NTS; - memcpy(_pData,aString.getStr(),aString.getLength()); - ((sal_Int8*)_pData)[aString.getLength()] = '\0'; - } break; - - case SQL_BIGINT: - case SQL_DECIMAL: - case SQL_NUMERIC: - if(_bUseWChar) - { - ::rtl::OUString aString = rtl::OUString::valueOf(*(double*)_pValue); - nMaxLen = aString.getLength(); - *pLen = nMaxLen; - *((rtl::OUString*)_pData) = aString; - // Zeiger auf Char* - _pData = (void*)((rtl::OUString*)_pData)->getStr(); - } - else - { - ::rtl::OString aString = ::rtl::OString::valueOf(*(double*)_pValue); - nMaxLen = aString.getLength(); - *pLen = nMaxLen; - memcpy(_pData,aString.getStr(),aString.getLength()); - ((sal_Int8*)_pData)[aString.getLength()] = '\0'; - } break; - case SQL_BIT: - *((sal_Int8*)_pData) = *(sal_Int8*)_pValue; - *pLen = sizeof(sal_Int8); - break; - case SQL_TINYINT: - case SQL_SMALLINT: - *((sal_Int16*)_pData) = *(sal_Int16*)_pValue; - *pLen = sizeof(sal_Int16); - break; - case SQL_INTEGER: - *((sal_Int32*)_pData) = *(sal_Int32*)_pValue; - *pLen = sizeof(sal_Int32); - break; - case SQL_REAL: - *((float*)_pData) = *(float*)_pValue; - *pLen = sizeof(float); - break; - case SQL_DOUBLE: - *((double*)_pData) = *(double*)_pValue; - *pLen = sizeof(double); - break; - case SQL_BINARY: - case SQL_VARBINARY: - _pData = (void*)((const ::com::sun::star::uno::Sequence< sal_Int8 > *)_pValue)->getConstArray(); - *pLen = ((const ::com::sun::star::uno::Sequence< sal_Int8 > *)_pValue)->getLength(); - break; - case SQL_LONGVARBINARY: - { - sal_Int32 nLen = 0; - nLen = ((const ::com::sun::star::uno::Sequence< sal_Int8 > *)_pValue)->getLength(); - *pLen = (SDWORD)SQL_LEN_DATA_AT_EXEC(nLen); - } - break; - case SQL_LONGVARCHAR: - { - _pData = 0;//(void*)&rCol; - sal_Int32 nLen = 0; - if(_bUseWChar) - nLen = sizeof(sal_Unicode) * ((::rtl::OUString*)_pValue)->getLength(); - else - { - ::rtl::OString aString(::rtl::OUStringToOString(*(::rtl::OUString*)_pValue,_nTextEncoding)); - nLen = aString.getLength(); - } - *pLen = (SDWORD)SQL_LEN_DATA_AT_EXEC(nLen); - } break; - case SQL_DATE: - *(DATE_STRUCT*)_pData = *(DATE_STRUCT*)_pValue; - *pLen = (SDWORD)sizeof(DATE_STRUCT); - break; - case SQL_TIME: - *(TIME_STRUCT*)_pData = *(TIME_STRUCT*)_pValue; - *pLen = (SDWORD)sizeof(TIME_STRUCT); - break; - case SQL_TIMESTAMP: - *(TIMESTAMP_STRUCT*)_pData = *(TIMESTAMP_STRUCT*)_pValue; - *pLen = (SDWORD)sizeof(TIMESTAMP_STRUCT); - break; - } - } - - //----------------------------------------------------------------------------- - template < class T > void bindParameter(SQLHANDLE _hStmt, - sal_Int32 nPos, - sal_Int8* pDataBuffer, - sal_Int8* pLenBuffer, - SQLSMALLINT _nJDBCtype, - sal_Bool _bUseWChar, - sal_Bool _bUseOldTimeDate, - const T* _pValue, - const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface, - rtl_TextEncoding _nTextEncoding) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) - { - SQLRETURN nRetcode; - SWORD fSqlType; - SWORD fCType; - SDWORD nMaxLen = 0; - void* pData = pDataBuffer; - SDWORD* pLen = (SDWORD*)pLenBuffer; - SQLUINTEGER nColumnSize=0; - SQLSMALLINT nDecimalDigits=0; - SQLSMALLINT nNullable=0; - - OTools::getBindTypes(_bUseWChar,_bUseOldTimeDate,_nJDBCtype,fSqlType,fCType,nColumnSize,nDecimalDigits); - - bindData< T >(fSqlType,_bUseWChar,pData,pLen,_pValue,_nTextEncoding); - if(fSqlType == SQL_LONGVARCHAR || fSqlType == SQL_LONGVARBINARY) - memcpy(pData,&nPos,sizeof(nPos)); - - nRetcode = N3SQLDescribeParam(_hStmt,(SQLUSMALLINT)nPos,&fSqlType,&nColumnSize,&nDecimalDigits,&nNullable); - - nRetcode = N3SQLBindParameter(_hStmt, - (SQLUSMALLINT)nPos, - SQL_PARAM_INPUT, - fCType, - fSqlType, - nColumnSize, - nDecimalDigits, - pData, - nMaxLen, - pLen); - - OTools::ThrowException(nRetcode,_hStmt,SQL_HANDLE_STMT,_xInterface); - } - - - template <class T> void bindValue( SQLHANDLE _aStatementHandle, + const void* _pValue, + rtl_TextEncoding _nTextEncoding); + + static void bindParameter(SQLHANDLE _hStmt, + sal_Int32 nPos, + sal_Int8* pDataBuffer, + sal_Int8* pLenBuffer, + SQLSMALLINT _nJDBCtype, + sal_Bool _bUseWChar, + sal_Bool _bUseOldTimeDate, + const void* _pValue, + const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface, + rtl_TextEncoding _nTextEncoding) + throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); + static void bindValue( SQLHANDLE _aStatementHandle, sal_Int32 columnIndex, SQLSMALLINT _nType, SQLSMALLINT _nMaxLen, SQLSMALLINT _nScale, - const T* _pValue, + const void* _pValue, void* _pData, SQLINTEGER *pLen, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface, - rtl_TextEncoding _nTextEncoding) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) - { - SQLRETURN nRetcode; - SWORD fSqlType; - SWORD fCType; - - switch(_nType) - { - case SQL_CHAR: //if(GetODBCConnection()->m_bUserWChar) - // { - // fCType = SQL_C_WCHAR; - // fSqlType = SQL_WCHAR; - // } - // else - { - fCType = SQL_C_CHAR; - fSqlType = SQL_CHAR; - } - break; - case SQL_VARCHAR: //if(GetODBCConnection()->m_bUserWChar) - // { - // fCType = SQL_C_WCHAR; - // fSqlType = SQL_WVARCHAR; - // } - // else - { - fCType = SQL_C_CHAR; - fSqlType = SQL_VARCHAR; - } - break; - case SQL_LONGVARCHAR: //if(GetODBCConnection()->m_bUserWChar) - // { - // fCType = SQL_C_WCHAR; - // fSqlType = SQL_WLONGVARCHAR; - // } - // else - { - fCType = SQL_C_CHAR; - fSqlType = SQL_LONGVARCHAR; - } - break; - case SQL_DECIMAL: fCType = SQL_C_CHAR;//GetODBCConnection()->m_bUserWChar ? SQL_C_WCHAR : SQL_C_CHAR; - fSqlType = SQL_DECIMAL; break; - case SQL_NUMERIC: fCType = SQL_C_CHAR;//GetODBCConnection()->m_bUserWChar ? SQL_C_WCHAR : SQL_C_CHAR; - fSqlType = SQL_NUMERIC; break; - case SQL_BIT: fCType = SQL_C_TINYINT; - fSqlType = SQL_INTEGER; break; - case SQL_TINYINT: fCType = SQL_C_SHORT; - fSqlType = SQL_TINYINT; break; - case SQL_SMALLINT: fCType = SQL_C_SHORT; - fSqlType = SQL_SMALLINT; break; - case SQL_INTEGER: fCType = SQL_C_LONG; - fSqlType = SQL_INTEGER; break; - case SQL_BIGINT: fCType = SQL_C_CHAR;//GetODBCConnection()->m_bUserWChar ? SQL_C_WCHAR : SQL_C_CHAR; - fSqlType = SQL_BIGINT; break; - case SQL_REAL: fCType = SQL_C_FLOAT; - fSqlType = SQL_REAL; break; - case SQL_DOUBLE: fCType = SQL_C_DOUBLE; - fSqlType = SQL_DOUBLE; break; - case SQL_BINARY: fCType = SQL_C_BINARY; - fSqlType = SQL_BINARY; break; - case SQL_VARBINARY: - fCType = SQL_C_BINARY; - fSqlType = SQL_VARBINARY; break; - case SQL_LONGVARBINARY: fCType = SQL_C_BINARY; - fSqlType = SQL_LONGVARBINARY; break; - case SQL_DATE: - // if(((SdbODBC3Connection*)GetODBCConnection())->m_bUseOldTimeDate) - { - fCType = SQL_C_DATE; - fSqlType = SQL_DATE; - } - // else - // { - // fCType = SQL_C_TYPE_DATE; - // fSqlType = SQL_TYPE_DATE; - // } - break; - case SQL_TIME: - // if(((SdbODBC3Connection*)GetODBCConnection())->m_bUseOldTimeDate) - { - fCType = SQL_C_TIME; - fSqlType = SQL_TIME; - } - // else - // { - // fCType = SQL_C_TYPE_TIME; - // fSqlType = SQL_TYPE_TIME; - // } - break; - case SQL_TIMESTAMP: - // if(((SdbODBC3Connection*)GetODBCConnection())->m_bUseOldTimeDate) - { - fCType = SQL_C_TIMESTAMP; - fSqlType = SQL_TIMESTAMP; - } - // else - // { - // fCType = SQL_C_TYPE_TIMESTAMP; - // fSqlType = SQL_TYPE_TIMESTAMP; - // } - break; - default: fCType = SQL_C_BINARY; - fSqlType = SQL_LONGVARBINARY; break; - } - - if (columnIndex != 0 && !_pValue) - { - *pLen = SQL_NULL_DATA; - nRetcode = N3SQLBindCol(_aStatementHandle, - columnIndex, - fCType, - _pData, - _nMaxLen, - pLen - ); - } - else - { - try - { - switch (_nType) - { - case SQL_CHAR: - case SQL_VARCHAR: - //if(GetODBCConnection()->m_bUserWChar) - // { - // _nMaxLen = rCol.GetPrecision(); - // *pLen = SQL_NTS; - // *((rtl::OUString*)pData) = (rtl::OUString)_aValue; - // - // // Zeiger auf Char* - // pData = (void*)((rtl::OUString*)pData)->getStr(); - // } - // else - { - ::rtl::OString aString(::rtl::OUStringToOString(*(::rtl::OUString*)_pValue,_nTextEncoding)); - *pLen = SQL_NTS; - *((::rtl::OString*)_pData) = aString; - _nMaxLen = aString.getLength(); - - // Zeiger auf Char* - _pData = (void*)aString.getStr(); - } break; - case SQL_BIGINT: - case SQL_DECIMAL: - case SQL_NUMERIC: - //if(GetODBCConnection()->m_bUserWChar) - // { - // rtl::OUString aString(rtl::OUString(SdbTools::ToString(ODbTypeConversion::toDouble(*pVariable),rCol.GetScale()))); - // *pLen = _nMaxLen; - // *((rtl::OUString*)_pData) = aString; - // // Zeiger auf Char* - // _pData = (void*)((rtl::OUString*)_pData)->getStr(); - // } - // else - { - ::rtl::OString aString = ::rtl::OString::valueOf(*(double*)_pValue); - _nMaxLen = aString.getLength(); - *pLen = _nMaxLen; - *((::rtl::OString*)_pData) = aString; - // Zeiger auf Char* - _pData = (void*)((::rtl::OString*)_pData)->getStr(); - } break; - case SQL_BIT: - *((sal_Int8*)_pData) = *(sal_Int8*)_pValue; - *pLen = sizeof(sal_Int8); - break; - case SQL_TINYINT: - case SQL_SMALLINT: - *((sal_Int16*)_pData) = *(sal_Int16*)_pValue; - *pLen = sizeof(sal_Int16); - break; - case SQL_INTEGER: - *((sal_Int32*)_pData) = *(sal_Int32*)_pValue; - *pLen = sizeof(sal_Int32); - break; - case SQL_REAL: - *((float*)_pData) = *(float*)_pValue; - *pLen = sizeof(float); - break; - case SQL_DOUBLE: - *((double*)_pData) = *(double*)_pValue; - *pLen = sizeof(double); - break; - case SQL_BINARY: - case SQL_VARBINARY: - // if (_pValue == ::getCppuType((const ::com::sun::star::uno::Sequence< sal_Int8 > *)0)) - { - _pData = (void*)((const ::com::sun::star::uno::Sequence< sal_Int8 > *)_pValue)->getConstArray(); - *pLen = ((const ::com::sun::star::uno::Sequence< sal_Int8 > *)_pValue)->getLength(); - } break; - case SQL_LONGVARBINARY: - { - sal_Int32 nLen = 0; - nLen = ((const ::com::sun::star::uno::Sequence< sal_Int8 > *)_pValue)->getLength(); - *pLen = (SDWORD)SQL_LEN_DATA_AT_EXEC(nLen); - } - break; - case SQL_LONGVARCHAR: - { - sal_Int32 nLen = 0; - nLen = ((::rtl::OUString*)_pValue)->getLength(); - *pLen = (SDWORD)SQL_LEN_DATA_AT_EXEC(nLen); - } break; - case SQL_DATE: - *pLen = sizeof(DATE_STRUCT); - *((DATE_STRUCT*)_pData) = *(DATE_STRUCT*)_pValue; - break; - case SQL_TIME: - *pLen = sizeof(TIME_STRUCT); - *((TIME_STRUCT*)_pData) = *(TIME_STRUCT*)_pValue; - break; - case SQL_TIMESTAMP: - *pLen = sizeof(TIMESTAMP_STRUCT); - *((TIMESTAMP_STRUCT*)_pData) = *(TIMESTAMP_STRUCT*)_pValue; - } - } - catch ( ... ) - { - } -// SQLINTEGER *pLen = &aLen; -// bindData< T >(fSqlType,sal_False,_pData,pLen,_pValue); + rtl_TextEncoding _nTextEncoding) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); + }; + template <class T> void getValue( SQLHANDLE _aStatementHandle, + sal_Int32 columnIndex, + SQLSMALLINT _nType, + sal_Bool &_bWasNull, + const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface, + T& _rValue) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) + { + OTools::getValue(_aStatementHandle,columnIndex,_nType,_bWasNull,_xInterface,&_rValue,sizeof _rValue); + } + //----------------------------------------------------------------------------- - nRetcode = N3SQLBindCol(_aStatementHandle, - columnIndex, - fCType, - _pData, - _nMaxLen, - pLen - ); - } - OTools::ThrowException(nRetcode,_aStatementHandle,SQL_HANDLE_STMT,_xInterface); - } } } #endif // _CONNECTIVITY_OTOOLS_HXX_ |