diff options
author | Lionel Elie Mamane <lionel@mamane.lu> | 2012-02-14 18:34:52 +0100 |
---|---|---|
committer | Lionel Elie Mamane <lionel@mamane.lu> | 2012-02-14 19:55:22 +0100 |
commit | c1ef5ba65c1b3d9c9bb8c45f68e494493e628837 (patch) | |
tree | e804398b530dfd15cad8eaf4273f5719840ea218 /connectivity/source/drivers/odbcbase/OTools.cxx | |
parent | 5930f866b649db40e6ddfd5004d4133ccbb0ede0 (diff) |
improve OTools::binParameter/bindData interaction
Don't duplicate the decision point for "data at execution or copied data"
Diffstat (limited to 'connectivity/source/drivers/odbcbase/OTools.cxx')
-rw-r--r-- | connectivity/source/drivers/odbcbase/OTools.cxx | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/connectivity/source/drivers/odbcbase/OTools.cxx b/connectivity/source/drivers/odbcbase/OTools.cxx index 9e8714cb0ca8..df7407659da5 100644 --- a/connectivity/source/drivers/odbcbase/OTools.cxx +++ b/connectivity/source/drivers/odbcbase/OTools.cxx @@ -181,14 +181,15 @@ void OTools::bindParameter( OConnection* _pConnection, SQLLEN* pLen = (SQLLEN*)pLenBuffer; SQLULEN nColumnSize=0; SQLSMALLINT nDecimalDigits=0; + bool atExec; OTools::getBindTypes(_bUseWChar,_bUseOldTimeDate,_nODBCtype,fCType,fSqlType); - OTools::bindData(_nODBCtype,_bUseWChar,pDataBuffer,pLen,_pValue,_nTextEncoding,nColumnSize); + OTools::bindData(_nODBCtype,_bUseWChar,pDataBuffer,pLen,_pValue,_nTextEncoding,nColumnSize, atExec); if ((nColumnSize == 0) && (fSqlType == SQL_CHAR || fSqlType == SQL_VARCHAR || fSqlType == SQL_LONGVARCHAR)) nColumnSize = 1; - if(fSqlType == SQL_LONGVARCHAR || fSqlType == SQL_LONGVARBINARY) + if (atExec) memcpy(pDataBuffer,&nPos,sizeof(nPos)); nRetcode = (*(T3SQLBindParameter)_pConnection->getOdbcFunction(ODBC3SQLBindParameter))(_hStmt, @@ -211,10 +212,12 @@ void OTools::bindData( SQLSMALLINT _nOdbcType, SQLLEN*& pLen, const void* _pValue, rtl_TextEncoding _nTextEncoding, - SQLULEN& _nColumnSize) + SQLULEN& _nColumnSize, + bool &atExec) { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "odbc", "Ocke.Janssen@sun.com", "OTools::bindData" ); _nColumnSize = 0; + atExec = false; switch (_nOdbcType) { @@ -307,6 +310,7 @@ void OTools::bindData( SQLSMALLINT _nOdbcType, nLen = ((const ::com::sun::star::uno::Sequence< sal_Int8 > *)_pValue)->getLength(); *pLen = (SQLLEN)SQL_LEN_DATA_AT_EXEC(nLen); } + atExec = true; break; case SQL_LONGVARCHAR: { @@ -319,6 +323,7 @@ void OTools::bindData( SQLSMALLINT _nOdbcType, nLen = aString.getLength(); } *pLen = (SQLLEN)SQL_LEN_DATA_AT_EXEC(nLen); + atExec = true; } break; case SQL_DATE: *(DATE_STRUCT*)_pData = *(DATE_STRUCT*)_pValue; |