Index: odbc/OResultSet.cxx =================================================================== RCS file: /cvs/dba/connectivity/source/drivers/odbc/OResultSet.cxx,v retrieving revision 1.55.4.2 diff -u -r1.55.4.2 OResultSet.cxx --- odbc/OResultSet.cxx 23 Apr 2004 06:26:40 -0000 1.55.4.2 +++ odbc/OResultSet.cxx 13 May 2004 10:20:34 -0000 @@ -873,13 +873,13 @@ sal_Bool bPositionByBookmark; if ( bPositionByBookmark = NULL != getOdbcFunction(ODBC3SQLBulkOperations) ) { - nRet = N3SQLBulkOperations(m_aStatementHandle, SQL_ADD); + fillNeededData(nRet = N3SQLBulkOperations(m_aStatementHandle, SQL_ADD)); } else { if(isBeforeFirst()) next(); // must be done - nRet = N3SQLSetPos(m_aStatementHandle,1,SQL_ADD,SQL_LOCK_NO_CHANGE); + fillNeededData(nRet = N3SQLSetPos(m_aStatementHandle,1,SQL_ADD,SQL_LOCK_NO_CHANGE)); } try { @@ -933,41 +933,7 @@ SQLRETURN nRet; - nRet = N3SQLSetPos(m_aStatementHandle,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE); - if( nRet == SQL_NEED_DATA) - { - void* pColumnIndex = 0; - nRet = N3SQLParamData(m_aStatementHandle,&pColumnIndex); - - do - { - if (nRet != SQL_SUCCESS && nRet != SQL_SUCCESS_WITH_INFO && nRet != SQL_NEED_DATA) - break; - - sal_Int32 nColumnIndex ( reinterpret_cast(pColumnIndex)); - Sequence< sal_Int8 > aSeq; - switch(m_aRow[nColumnIndex].getTypeKind()) - { - case DataType::BINARY: - case DataType::VARBINARY: - case DataType::LONGVARBINARY: - aSeq = m_aRow[nColumnIndex]; - N3SQLPutData (m_aStatementHandle, aSeq.getArray(), aSeq.getLength()); - break; - case DataType::LONGVARCHAR: - { - ::rtl::OUString sRet; - sRet = m_aRow[nColumnIndex].getString(); - N3SQLPutData (m_aStatementHandle, (SQLPOINTER)sRet.getStr(), sizeof(sal_Unicode)*sRet.getLength()); - break; - } - default: - OSL_ENSURE(0,"Not supported at the moment!"); - } - nRet = N3SQLParamData(m_aStatementHandle,&pColumnIndex); - } - while (nRet == SQL_NEED_DATA); - } + fillNeededData(nRet = N3SQLSetPos(m_aStatementHandle,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE)); OTools::ThrowException(m_pStatement->getOwnConnection(),nRet,m_aStatementHandle,SQL_HANDLE_STMT,*this); // now unbind all columns so we can fetch all columns again with SQLGetData nRet = N3SQLFreeStmt(m_aStatementHandle,SQL_UNBIND); @@ -1094,15 +1060,19 @@ // ------------------------------------------------------------------------- void SAL_CALL OResultSet::updateString( sal_Int32 columnIndex, const ::rtl::OUString& x ) throw(SQLException, RuntimeException) { - SQLSMALLINT nOdbcType = static_cast(OTools::jdbcTypeToOdbc(m_aRow[columnIndex].getTypeKind())); + sal_Int32 nType = m_aRow[columnIndex].getTypeKind(); + SQLSMALLINT nOdbcType = static_cast(OTools::jdbcTypeToOdbc(nType)); m_aRow[columnIndex] = x; + m_aRow[columnIndex].setTypeKind(nType); // OJ: otherwise longvarchar will be recognized by fillNeededData updateValue(columnIndex,nOdbcType,(void*)&x); } // ------------------------------------------------------------------------- void SAL_CALL OResultSet::updateBytes( sal_Int32 columnIndex, const Sequence< sal_Int8 >& x ) throw(SQLException, RuntimeException) { - SQLSMALLINT nOdbcType = static_cast(OTools::jdbcTypeToOdbc(m_aRow[columnIndex].getTypeKind())); + sal_Int32 nType = m_aRow[columnIndex].getTypeKind(); + SQLSMALLINT nOdbcType = static_cast(OTools::jdbcTypeToOdbc(nType)); m_aRow[columnIndex] = x; + m_aRow[columnIndex].setTypeKind(nType); // OJ: otherwise longvarbinary will be recognized by fillNeededData updateValue(columnIndex,nOdbcType,(void*)&x); } // ------------------------------------------------------------------------- @@ -1669,5 +1639,42 @@ move(_eCursorPosition,_nOffset,_bRetrieveData); } // ----------------------------------------------------------------------------- +void OResultSet::fillNeededData(SQLRETURN _nRet) +{ + SQLRETURN nRet = _nRet; + if( nRet == SQL_NEED_DATA) + { + void* pColumnIndex = 0; + nRet = N3SQLParamData(m_aStatementHandle,&pColumnIndex); + + do + { + if (nRet != SQL_SUCCESS && nRet != SQL_SUCCESS_WITH_INFO && nRet != SQL_NEED_DATA) + break; + sal_Int32 nColumnIndex ( reinterpret_cast(pColumnIndex)); + Sequence< sal_Int8 > aSeq; + switch(m_aRow[nColumnIndex].getTypeKind()) + { + case DataType::BINARY: + case DataType::VARBINARY: + case DataType::LONGVARBINARY: + aSeq = m_aRow[nColumnIndex]; + N3SQLPutData (m_aStatementHandle, aSeq.getArray(), aSeq.getLength()); + break; + case DataType::LONGVARCHAR: + { + ::rtl::OUString sRet; + sRet = m_aRow[nColumnIndex].getString(); + N3SQLPutData (m_aStatementHandle, (SQLPOINTER)sRet.getStr(), sizeof(sal_Unicode)*sRet.getLength()); + break; + } + default: + OSL_ENSURE(0,"Not supported at the moment!"); + } + nRet = N3SQLParamData(m_aStatementHandle,&pColumnIndex); + } + while (nRet == SQL_NEED_DATA); + } +}