diff options
Diffstat (limited to 'connectivity/source')
61 files changed, 630 insertions, 689 deletions
diff --git a/connectivity/source/commontools/ParamterSubstitution.cxx b/connectivity/source/commontools/ParamterSubstitution.cxx index 5a31a9308cab..68f1e163c7be 100644 --- a/connectivity/source/commontools/ParamterSubstitution.cxx +++ b/connectivity/source/commontools/ParamterSubstitution.cxx @@ -86,8 +86,7 @@ namespace connectivity { try { - uno::Reference< XMultiServiceFactory> xFac(m_xContext->getServiceManager(),uno::UNO_QUERY_THROW); - OSQLParser aParser( xFac ); + OSQLParser aParser( m_xContext ); ::rtl::OUString sErrorMessage; ::rtl::OUString sNewSql; OSQLParseNode* pNode = aParser.parseTree(sErrorMessage,_sText); diff --git a/connectivity/source/commontools/TColumnsHelper.cxx b/connectivity/source/commontools/TColumnsHelper.cxx index 83bfe69746d1..ad725c4f1e64 100644 --- a/connectivity/source/commontools/TColumnsHelper.cxx +++ b/connectivity/source/commontools/TColumnsHelper.cxx @@ -115,6 +115,11 @@ sdbcx::ObjectType OColumnsHelper::createObject(const ::rtl::OUString& _rName) { nField11 = ColumnValue::NO_NULLS; } // if ( xKeys.is() ) + ::dbtools::OPropertyMap& rPropMap = OMetaConnection::getPropMap(); + ::rtl::OUString aCatalog, aSchema, aTable; + m_pTable->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_CATALOGNAME)) >>= aCatalog; + m_pTable->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_SCHEMANAME)) >>= aSchema; + m_pTable->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)) >>= aTable; connectivity::sdbcx::OColumn* pRet = new connectivity::sdbcx::OColumn(_rName, pColDesc->aField6, pColDesc->sField13, @@ -126,7 +131,10 @@ sdbcx::ObjectType OColumnsHelper::createObject(const ::rtl::OUString& _rName) bAutoIncrement, sal_False, bIsCurrency, - isCaseSensitive()); + isCaseSensitive(), + aCatalog, + aSchema, + aTable); xRet = pRet; } diff --git a/connectivity/source/commontools/TIndexColumns.cxx b/connectivity/source/commontools/TIndexColumns.cxx index ca0e783fdfc6..c64e94bf1d14 100644 --- a/connectivity/source/commontools/TIndexColumns.cxx +++ b/connectivity/source/commontools/TIndexColumns.cxx @@ -47,13 +47,14 @@ OIndexColumns::OIndexColumns( OIndexHelper* _pIndex, sdbcx::ObjectType OIndexColumns::createObject(const ::rtl::OUString& _rName) { ::dbtools::OPropertyMap& rPropMap = OMetaConnection::getPropMap(); - ::rtl::OUString aSchema,aTable; + ::rtl::OUString aCatalog, aSchema, aTable; + ::com::sun::star::uno::Any Catalog(m_pIndex->getTable()->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_CATALOGNAME))); + Catalog >>= aCatalog; m_pIndex->getTable()->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_SCHEMANAME)) >>= aSchema; m_pIndex->getTable()->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)) >>= aTable; Reference< XResultSet > xResult = m_pIndex->getTable()->getConnection()->getMetaData()->getIndexInfo( - m_pIndex->getTable()->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_CATALOGNAME)), - aSchema,aTable,sal_False,sal_False); + Catalog, aSchema, aTable, sal_False, sal_False); sal_Bool bAsc = sal_True; if ( xResult.is() ) @@ -68,8 +69,7 @@ sdbcx::ObjectType OIndexColumns::createObject(const ::rtl::OUString& _rName) } xResult = m_pIndex->getTable()->getConnection()->getMetaData()->getColumns( - m_pIndex->getTable()->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_CATALOGNAME)), - aSchema,aTable,_rName); + Catalog, aSchema, aTable, _rName); sdbcx::ObjectType xRet; if ( xResult.is() ) @@ -87,14 +87,15 @@ sdbcx::ObjectType OIndexColumns::createObject(const ::rtl::OUString& _rName) ::rtl::OUString aColumnDef(xRow->getString(13)); OIndexColumn* pRet = new OIndexColumn(bAsc, - _rName, - aTypeName, - aColumnDef, - nNull, - nSize, - nDec, - nDataType, - sal_False,sal_False,sal_False,sal_True); + _rName, + aTypeName, + aColumnDef, + nNull, + nSize, + nDec, + nDataType, + sal_False,sal_False,sal_False,sal_True, + aCatalog, aSchema, aTable); xRet = pRet; break; } diff --git a/connectivity/source/commontools/TKeyColumns.cxx b/connectivity/source/commontools/TKeyColumns.cxx index f9a9a223f82b..bb5a36a38f2a 100644 --- a/connectivity/source/commontools/TKeyColumns.cxx +++ b/connectivity/source/commontools/TKeyColumns.cxx @@ -48,13 +48,15 @@ OKeyColumnsHelper::OKeyColumnsHelper( OTableKeyHelper* _pKey, sdbcx::ObjectType OKeyColumnsHelper::createObject(const ::rtl::OUString& _rName) { ::dbtools::OPropertyMap& rPropMap = OMetaConnection::getPropMap(); - ::rtl::OUString aSchema,aTable; + ::rtl::OUString aCatalog, aSchema, aTable; + ::com::sun::star::uno::Any Catalog(m_pKey->getTable()->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_CATALOGNAME))); + Catalog >>= aCatalog; m_pKey->getTable()->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_SCHEMANAME)) >>= aSchema; m_pKey->getTable()->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)) >>= aTable; // frist get the related column to _rName Reference< XResultSet > xResult = m_pKey->getTable()->getMetaData()->getImportedKeys( - m_pKey->getTable()->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_CATALOGNAME)),aSchema,aTable); + Catalog, aSchema, aTable); ::rtl::OUString aRefColumnName; if ( xResult.is() ) @@ -75,8 +77,7 @@ sdbcx::ObjectType OKeyColumnsHelper::createObject(const ::rtl::OUString& _rName) sdbcx::ObjectType xRet; // now describe the column _rName and set his related column - xResult = m_pKey->getTable()->getMetaData()->getColumns( - m_pKey->getTable()->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_CATALOGNAME)),aSchema,aTable,_rName); + xResult = m_pKey->getTable()->getMetaData()->getColumns(Catalog, aSchema, aTable, _rName); if ( xResult.is() ) { @@ -101,17 +102,20 @@ sdbcx::ObjectType OKeyColumnsHelper::createObject(const ::rtl::OUString& _rName) } OKeyColumn* pRet = new OKeyColumn(aRefColumnName, - _rName, - aTypeName, - sColumnDef, - nNull, - nSize, - nDec, - nDataType, - sal_False, - sal_False, - sal_False, - isCaseSensitive()); + _rName, + aTypeName, + sColumnDef, + nNull, + nSize, + nDec, + nDataType, + sal_False, + sal_False, + sal_False, + isCaseSensitive(), + aCatalog, + aSchema, + aTable); xRet = pRet; } } diff --git a/connectivity/source/commontools/TSortIndex.cxx b/connectivity/source/commontools/TSortIndex.cxx index a0fc73823167..a9d5bc5028b7 100644 --- a/connectivity/source/commontools/TSortIndex.cxx +++ b/connectivity/source/commontools/TSortIndex.cxx @@ -19,6 +19,7 @@ #include "TSortIndex.hxx" #include <algorithm> +#include <iterator> #include <o3tl/compat_functional.hxx> @@ -107,7 +108,7 @@ void OSortIndex::AddKeyValue(OKeyValue * pKeyValue) OSL_ENSURE(pKeyValue,"Can not be null here!"); if(m_bFrozen) { - m_aKeyValues.push_back(TIntValuePairVector::value_type(pKeyValue->getValue(),NULL)); + m_aKeyValues.push_back(TIntValuePairVector::value_type(pKeyValue->getValue(),(OKeyValue *)NULL)); delete pKeyValue; } else diff --git a/connectivity/source/commontools/TTableHelper.cxx b/connectivity/source/commontools/TTableHelper.cxx index cec9e48009eb..6a5ad878f004 100644 --- a/connectivity/source/commontools/TTableHelper.cxx +++ b/connectivity/source/commontools/TTableHelper.cxx @@ -36,6 +36,8 @@ #include <o3tl/compat_functional.hxx> +#include <iterator> + using namespace ::comphelper; using namespace connectivity; using namespace ::com::sun::star::uno; diff --git a/connectivity/source/commontools/dbtools.cxx b/connectivity/source/commontools/dbtools.cxx index 2afd00192482..6c758f88ebdd 100644 --- a/connectivity/source/commontools/dbtools.cxx +++ b/connectivity/source/commontools/dbtools.cxx @@ -81,6 +81,7 @@ #include "connectivity/OSubComponent.hxx" #include <algorithm> +#include <iterator> using namespace ::comphelper; using namespace ::com::sun::star::uno; diff --git a/connectivity/source/commontools/dbtools2.cxx b/connectivity/source/commontools/dbtools2.cxx index bb832535cbfe..4092e9e185de 100644 --- a/connectivity/source/commontools/dbtools2.cxx +++ b/connectivity/source/commontools/dbtools2.cxx @@ -389,6 +389,8 @@ namespace Reference<XPropertySet> xProp; Reference<XDatabaseMetaData> xMetaData = _xConnection->getMetaData(); Reference< XResultSet > xResult = xMetaData->getColumns(_aCatalog, _aSchema, _aTable, _rQueryName); + ::rtl::OUString sCatalog; + _aCatalog >>= sCatalog; if ( xResult.is() ) { @@ -472,7 +474,10 @@ namespace bAutoIncrement, sal_False, bIsCurrency, - _bCase); + _bCase, + sCatalog, + _aSchema, + _aTable); xProp = pRet; break; @@ -515,6 +520,8 @@ Reference<XPropertySet> createSDBCXColumn(const Reference<XPropertySet>& _xTable Reference<XDatabaseMetaData> xMetaData = _xConnection->getMetaData(); Any aCatalog; aCatalog = _xTable->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_CATALOGNAME)); + ::rtl::OUString sCatalog; + aCatalog >>= sCatalog; ::rtl::OUString aSchema, aTable; _xTable->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_SCHEMANAME)) >>= aSchema; @@ -536,7 +543,10 @@ Reference<XPropertySet> createSDBCXColumn(const Reference<XPropertySet>& _xTable _bIsAutoIncrement, sal_False, _bIsCurrency, - _bCase); + _bCase, + sCatalog, + aSchema, + aTable); } diff --git a/connectivity/source/commontools/predicateinput.cxx b/connectivity/source/commontools/predicateinput.cxx index 4950de6fd7a7..8b6220ba6107 100644 --- a/connectivity/source/commontools/predicateinput.cxx +++ b/connectivity/source/commontools/predicateinput.cxx @@ -39,12 +39,12 @@ namespace dbtools //......................................................................... using ::com::sun::star::sdbc::XConnection; - using ::com::sun::star::lang::XMultiServiceFactory; using ::com::sun::star::util::XNumberFormatsSupplier; using ::com::sun::star::util::NumberFormatter; using ::com::sun::star::util::XNumberFormatter; using ::com::sun::star::uno::UNO_QUERY; using ::com::sun::star::uno::UNO_QUERY_THROW; + using ::com::sun::star::uno::XComponentContext; using ::com::sun::star::beans::XPropertySet; using ::com::sun::star::beans::XPropertySetInfo; using ::com::sun::star::lang::Locale; @@ -100,19 +100,18 @@ namespace dbtools //--------------------------------------------------------------------- OPredicateInputController::OPredicateInputController( - const Reference< XMultiServiceFactory >& _rxORB, const Reference< XConnection >& _rxConnection, const IParseContext* _pParseContext ) - :m_xORB( _rxORB ) - ,m_xConnection( _rxConnection ) - ,m_aParser( m_xORB, _pParseContext ) + const Reference< XComponentContext >& rxContext, const Reference< XConnection >& _rxConnection, const IParseContext* _pParseContext ) + : m_xConnection( _rxConnection ) + ,m_aParser( rxContext, _pParseContext ) { try { // create a number formatter / number formats supplier pair - OSL_ENSURE( m_xORB.is(), "OPredicateInputController::OPredicateInputController: need a service factory!" ); - if ( m_xORB.is() ) + OSL_ENSURE( rxContext.is(), "OPredicateInputController::OPredicateInputController: need a service factory!" ); + if ( rxContext.is() ) { m_xFormatter = Reference< XNumberFormatter >( - NumberFormatter::create(comphelper::getComponentContext(m_xORB)), + NumberFormatter::create(rxContext), UNO_QUERY_THROW ); } @@ -124,9 +123,9 @@ namespace dbtools m_xFormatter->attachNumberFormatsSupplier( xNumberFormats ); // create the locale data - if ( m_xORB.is() ) + if ( rxContext.is() ) { - m_xLocaleData = LocaleData::create( comphelper::getComponentContext(m_xORB) ); + m_xLocaleData = LocaleData::create( rxContext ); } } catch( const Exception& ) @@ -374,7 +373,10 @@ namespace dbtools nType, sal_False, sal_False, - xMeta.is() && xMeta->supportsMixedCaseQuotedIdentifiers()); + xMeta.is() && xMeta->supportsMixedCaseQuotedIdentifiers(), + ::rtl::OUString(), + ::rtl::OUString(), + ::rtl::OUString()); Reference<XPropertySet> xColumn = pColumn; pColumn->setFunction(sal_True); pColumn->setRealName(sField); diff --git a/connectivity/source/drivers/ado/AColumn.cxx b/connectivity/source/drivers/ado/AColumn.cxx index 7780447f7958..4c4e4f23b546 100644 --- a/connectivity/source/drivers/ado/AColumn.cxx +++ b/connectivity/source/drivers/ado/AColumn.cxx @@ -57,7 +57,7 @@ void WpADOColumn::Create() } // ------------------------------------------------------------------------- OAdoColumn::OAdoColumn(sal_Bool _bCase,OConnection* _pConnection,_ADOColumn* _pColumn) - : connectivity::sdbcx::OColumn(::rtl::OUString(),::rtl::OUString(),::rtl::OUString(),::rtl::OUString(),0,0,0,0,sal_False,sal_False,sal_False,_bCase) + : connectivity::sdbcx::OColumn(_bCase) ,m_pConnection(_pConnection) { construct(); diff --git a/connectivity/source/drivers/ado/APreparedStatement.cxx b/connectivity/source/drivers/ado/APreparedStatement.cxx index fd1e0b196b92..ed2373a4af80 100644 --- a/connectivity/source/drivers/ado/APreparedStatement.cxx +++ b/connectivity/source/drivers/ado/APreparedStatement.cxx @@ -25,6 +25,7 @@ #include "ado/ADriver.hxx" #include <com/sun/star/lang/DisposedException.hpp> #include <cppuhelper/typeprovider.hxx> +#include <comphelper/processfactory.hxx> #include <comphelper/sequence.hxx> #include "connectivity/dbexception.hxx" #include "connectivity/dbtools.hxx" @@ -59,7 +60,7 @@ OPreparedStatement::OPreparedStatement( OConnection* _pConnection,const OTypeInf { osl_atomic_increment( &m_refCount ); - OSQLParser aParser(_pConnection->getDriver()->getORB()); + OSQLParser aParser(comphelper::getComponentContext(_pConnection->getDriver()->getORB())); ::rtl::OUString sErrorMessage; ::rtl::OUString sNewSql; OSQLParseNode* pNode = aParser.parseTree(sErrorMessage,sql); diff --git a/connectivity/source/drivers/ado/AStatement.cxx b/connectivity/source/drivers/ado/AStatement.cxx index 6e97e8ebd729..0d042d84f2e7 100644 --- a/connectivity/source/drivers/ado/AStatement.cxx +++ b/connectivity/source/drivers/ado/AStatement.cxx @@ -509,7 +509,19 @@ sal_Int32 OStatement_Base::getMaxRows() const throw(SQLException, RuntimeExcepti //------------------------------------------------------------------------------ sal_Int32 OStatement_Base::getResultSetConcurrency() const throw(SQLException, RuntimeException) { - return m_eLockType; + sal_Int32 nValue; + + switch(m_eLockType) + { + case adLockReadOnly: + nValue = ResultSetConcurrency::READ_ONLY; + break; + default: + nValue = ResultSetConcurrency::UPDATABLE; + break; + } + + return nValue; } //------------------------------------------------------------------------------ sal_Int32 OStatement_Base::getResultSetType() const throw(SQLException, RuntimeException) diff --git a/connectivity/source/drivers/ado/ATable.cxx b/connectivity/source/drivers/ado/ATable.cxx index f2ae573249f6..2b31601aeeb0 100644 --- a/connectivity/source/drivers/ado/ATable.cxx +++ b/connectivity/source/drivers/ado/ATable.cxx @@ -48,7 +48,7 @@ using namespace com::sun::star::lang; // ------------------------------------------------------------------------- OAdoTable::OAdoTable(sdbcx::OCollection* _pTables,sal_Bool _bCase,OCatalog* _pCatalog,_ADOTable* _pTable) - : OTable_TYPEDEF(_pTables,_bCase,::rtl::OUString(),::rtl::OUString()) + : OTable_TYPEDEF(_pTables,_bCase) ,m_pCatalog(_pCatalog) { construct(); diff --git a/connectivity/source/drivers/ado/Awrapado.cxx b/connectivity/source/drivers/ado/Awrapado.cxx index b4eb39746344..08535858cf55 100644 --- a/connectivity/source/drivers/ado/Awrapado.cxx +++ b/connectivity/source/drivers/ado/Awrapado.cxx @@ -1031,9 +1031,9 @@ sal_Bool WpADOParameter::put_Size(const sal_Int32& _nSize) return (SUCCEEDED(pInterface->put_Size(_nSize))); } - ::rtl::OUString WpADOColumn::get_Name() const +::rtl::OUString WpADOColumn::get_Name() const { - OSL_ENSURE(pInterface,"Interface is null!"); + OSL_ENSURE(pInterface,"Interface is null!"); OLEString aBSTR; pInterface->get_Name(&aBSTR); return aBSTR; @@ -1561,6 +1561,13 @@ WpBase::WpBase(IDispatch* pInt) } } +WpBase::WpBase(const WpBase& aWrapper) + :pIUnknown(aWrapper.pIUnknown) +{ + if (pIUnknown) + pIUnknown->AddRef(); +} + //inline WpBase& WpBase::operator=(const WpBase& rhs) { @@ -1588,11 +1595,6 @@ WpBase& WpBase::operator=(IDispatch* rhs) return *this; } -WpBase::WpBase(const WpBase& aWrapper) -{ - operator=(aWrapper); -} - WpBase::~WpBase() { if (pIUnknown) diff --git a/connectivity/source/drivers/calc/CTable.cxx b/connectivity/source/drivers/calc/CTable.cxx index da8cbe573657..ff3c33319a48 100644 --- a/connectivity/source/drivers/calc/CTable.cxx +++ b/connectivity/source/drivers/calc/CTable.cxx @@ -514,7 +514,8 @@ void OCalcTable::fillColumns() sdbcx::OColumn* pColumn = new sdbcx::OColumn( aAlias, aTypeName, ::rtl::OUString(),::rtl::OUString(), ColumnValue::NULLABLE, nPrecision, nDecimals, eType, sal_False, sal_False, bCurrency, - bStoresMixedCaseQuotedIdentifiers); + bStoresMixedCaseQuotedIdentifiers, + m_CatalogName, getSchema(), getName()); Reference< XPropertySet> xCol = pColumn; m_aColumns->get().push_back(xCol); m_aTypes.push_back(eType); diff --git a/connectivity/source/drivers/dbase/DIndexColumns.cxx b/connectivity/source/drivers/dbase/DIndexColumns.cxx index 1fbff248ee24..73aa3d525cda 100644 --- a/connectivity/source/drivers/dbase/DIndexColumns.cxx +++ b/connectivity/source/drivers/dbase/DIndexColumns.cxx @@ -59,7 +59,10 @@ sdbcx::ObjectType ODbaseIndexColumns::createObject(const ::rtl::OUString& _rName ,sal_False ,sal_False ,sal_False - ,pTable->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers()); + ,pTable->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers() + ,getString(xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CATALOGNAME))) + ,getString(xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCHEMANAME))) + ,getString(xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME)))); return xRet; } diff --git a/connectivity/source/drivers/dbase/DTable.cxx b/connectivity/source/drivers/dbase/DTable.cxx index 28d4436931ec..499b238284cf 100644 --- a/connectivity/source/drivers/dbase/DTable.cxx +++ b/connectivity/source/drivers/dbase/DTable.cxx @@ -436,7 +436,8 @@ OSL_TRACE("column type: %c",aDBFColumn.db_typ); sal_False, bIsRowVersion, bIsCurrency, - bCase); + bCase, + m_CatalogName, getSchema(), getName()); m_aColumns->get().push_back(xCol); } // for (; i < nFieldCount; i++) OSL_ENSURE(i,"No columns in table!"); @@ -1505,7 +1506,7 @@ sal_Bool ODbaseTable::InsertRow(OValueRefVector& rRow, sal_Bool bFlush,const Ref sal_uInt32 nTempPos = m_nFilePos; m_nFilePos = (sal_uIntPtr)m_aHeader.db_anz + 1; - sal_Bool bInsertRow = UpdateBuffer( rRow, NULL, _xCols ); + sal_Bool bInsertRow = UpdateBuffer( rRow, NULL, _xCols, true ); if ( bInsertRow ) { sal_uInt32 nFileSize = 0, nMemoFileSize = 0; @@ -1567,7 +1568,7 @@ sal_Bool ODbaseTable::UpdateRow(OValueRefVector& rRow, OValueRefRow& pOrgRow,con m_pMemoStream->Seek(STREAM_SEEK_TO_END); nMemoFileSize = m_pMemoStream->Tell(); } - if (!UpdateBuffer(rRow, pOrgRow,_xCols) || !WriteBuffer()) + if (!UpdateBuffer(rRow, pOrgRow, _xCols, false) || !WriteBuffer()) { if (HasMemoFields() && m_pMemoStream) m_pMemoStream->SetStreamSize(nMemoFileSize); // restore old size @@ -1668,7 +1669,7 @@ static double toDouble(const rtl::OString& rString) } //------------------------------------------------------------------ -sal_Bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow,const Reference<XIndexAccess>& _xCols) +sal_Bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow, const Reference<XIndexAccess>& _xCols, const bool bForceAllFields) { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseTable::UpdateBuffer" ); OSL_ENSURE(m_pBuffer,"Buffer is NULL!"); @@ -1814,10 +1815,13 @@ sal_Bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow,c ++nPos; // the row values start at 1 - // If the variable is bound at all? - if ( !rRow.get()[nPos]->isBound() ) + const ORowSetValue &thisColVal = rRow.get()[nPos]->get(); + const bool thisColIsBound = thisColVal.isBound(); + const bool thisColIsNull = !thisColIsBound || thisColVal.isNull(); + // don't overwrite non-bound columns + if ( ! (bForceAllFields || thisColIsBound) ) { - // No - the next field. + // No - don't overwrite this field, it has not changed. nByteOffset += nLen; continue; } @@ -1828,19 +1832,19 @@ sal_Bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow,c ODbaseIndex* pIndex = reinterpret_cast< ODbaseIndex* >( xTunnel->getSomething(ODbaseIndex::getUnoTunnelImplementationId()) ); OSL_ENSURE(pIndex,"ODbaseTable::UpdateBuffer: No Index returned!"); // Update !! - if (pOrgRow.is() && !rRow.get()[nPos]->getValue().isNull() ) - pIndex->Update(m_nFilePos,*(pOrgRow->get())[nPos],*rRow.get()[nPos]); + if (pOrgRow.is() && !thisColIsNull) + pIndex->Update(m_nFilePos, *(pOrgRow->get())[nPos], thisColVal); else - pIndex->Insert(m_nFilePos,*rRow.get()[nPos]); + pIndex->Insert(m_nFilePos, thisColVal); } char* pData = (char *)(m_pBuffer + nByteOffset); - if (rRow.get()[nPos]->getValue().isNull()) + if (thisColIsNull) { if ( bSetZero ) - memset(pData,0,nLen); // Clear to NULL + memset(pData,0,nLen); // Clear to NULL char ('\0') else - memset(pData,' ',nLen); // Clear to NULL + memset(pData,' ',nLen); // Clear to space/blank ('\0x20') nByteOffset += nLen; OSL_ENSURE( nByteOffset <= m_nBufferSize ,"ByteOffset > m_nBufferSize!"); continue; @@ -1853,7 +1857,7 @@ sal_Bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow,c case DataType::TIMESTAMP: { sal_Int32 nJulianDate = 0, nJulianTime = 0; - lcl_CalcJulDate(nJulianDate,nJulianTime,rRow.get()[nPos]->getValue()); + lcl_CalcJulDate(nJulianDate,nJulianTime, thisColVal); // Exactly 8 bytes to copy: memcpy(pData,&nJulianDate,4); memcpy(pData+4,&nJulianTime,4); @@ -1862,10 +1866,10 @@ sal_Bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow,c case DataType::DATE: { ::com::sun::star::util::Date aDate; - if(rRow.get()[nPos]->getValue().getTypeKind() == DataType::DOUBLE) - aDate = ::dbtools::DBTypeConversion::toDate(rRow.get()[nPos]->getValue().getDouble()); + if(thisColVal.getTypeKind() == DataType::DOUBLE) + aDate = ::dbtools::DBTypeConversion::toDate(thisColVal.getDouble()); else - aDate = rRow.get()[nPos]->getValue(); + aDate = thisColVal; char s[9]; snprintf(s, sizeof(s), @@ -1879,13 +1883,13 @@ sal_Bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow,c } break; case DataType::INTEGER: { - sal_Int32 nValue = rRow.get()[nPos]->getValue(); + sal_Int32 nValue = thisColVal; memcpy(pData,&nValue,nLen); } break; case DataType::DOUBLE: { - const double d = rRow.get()[nPos]->getValue(); + const double d = thisColVal; m_pColumns->getByIndex(i) >>= xCol; if (getBOOL(xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISCURRENCY)))) // Currency is treated separately @@ -1905,7 +1909,7 @@ sal_Bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow,c { memset(pData,' ',nLen); // Clear to NULL - const double n = rRow.get()[nPos]->getValue(); + const double n = thisColVal; // one, because const_cast GetFormatPrecision on SvNumberFormat is not constant, // even though it really could and should be @@ -1937,7 +1941,7 @@ sal_Bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow,c } } break; case DataType::BIT: - *pData = rRow.get()[nPos]->getValue().getBool() ? 'T' : 'F'; + *pData = thisColVal.getBool() ? 'T' : 'F'; break; case DataType::LONGVARBINARY: case DataType::LONGVARCHAR: @@ -1949,7 +1953,7 @@ sal_Bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow,c // Next initial character restore again: pData[nLen] = cNext; - if (!m_pMemoStream || !WriteMemo(rRow.get()[nPos]->get(), nBlockNo)) + if (!m_pMemoStream || !WriteMemo(thisColVal, nBlockNo)) break; rtl::OString aBlock(rtl::OString::valueOf(static_cast<sal_Int32>(nBlockNo))); @@ -1965,7 +1969,7 @@ sal_Bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow,c { memset(pData,' ',nLen); // Clear to NULL - ::rtl::OUString sStringToWrite( rRow.get()[nPos]->getValue().getString() ); + ::rtl::OUString sStringToWrite( thisColVal.getString() ); // convert the string, using the connection's encoding ::rtl::OString sEncoded; @@ -2002,7 +2006,7 @@ sal_Bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow,c } // ----------------------------------------------------------------------------- -sal_Bool ODbaseTable::WriteMemo(ORowSetValue& aVariable, sal_uIntPtr& rBlockNr) +sal_Bool ODbaseTable::WriteMemo(const ORowSetValue& aVariable, sal_uIntPtr& rBlockNr) { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "dbase", "Ocke.Janssen@sun.com", "ODbaseTable::WriteMemo" ); // if the BlockNo 0 is given, the block will be appended at the end diff --git a/connectivity/source/drivers/evoab2/NColumns.cxx b/connectivity/source/drivers/evoab2/NColumns.cxx index c4cae93cfcfe..b131bc36bb95 100644 --- a/connectivity/source/drivers/evoab2/NColumns.cxx +++ b/connectivity/source/drivers/evoab2/NColumns.cxx @@ -37,10 +37,14 @@ using namespace connectivity::evoab; // ------------------------------------------------------------------------- sdbcx::ObjectType OEvoabColumns::createObject(const ::rtl::OUString& _rName) { + const Any aCatalog; + const ::rtl::OUString sCatalogName; + const ::rtl::OUString sSchemaName(m_pTable->getSchema()); + const ::rtl::OUString sTableName(m_pTable->getTableName()); Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns( - Any(), - m_pTable->getSchema(), - m_pTable->getTableName(), + aCatalog, + sSchemaName, + sTableName, _rName); sdbcx::ObjectType xRet = NULL; @@ -64,7 +68,10 @@ sdbcx::ObjectType OEvoabColumns::createObject(const ::rtl::OUString& _rName) sal_False, sal_False, sal_False, - sal_True); + sal_True, + sCatalogName, + sSchemaName, + sTableName); xRet = pRet; break; } diff --git a/connectivity/source/drivers/evoab2/NDriver.hxx b/connectivity/source/drivers/evoab2/NDriver.hxx index e255a32fa987..a6bcf2ed85e2 100644 --- a/connectivity/source/drivers/evoab2/NDriver.hxx +++ b/connectivity/source/drivers/evoab2/NDriver.hxx @@ -22,6 +22,7 @@ #include <com/sun/star/sdbc/XDriver.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> +#include <comphelper/processfactory.hxx> #include <cppuhelper/compbase2.hxx> #include "connectivity/CommonTools.hxx" #include <osl/module.h> @@ -79,7 +80,9 @@ namespace connectivity public: const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > - & getMSFactory(void) const { return m_xFactory; } + & getMSFactory(void) const { return m_xFactory; } + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > + getComponentContext( ) const { return comphelper::getComponentContext( m_xFactory ); } // static methods static sal_Bool acceptsURL_Stat( const ::rtl::OUString& url ); diff --git a/connectivity/source/drivers/evoab2/NStatement.cxx b/connectivity/source/drivers/evoab2/NStatement.cxx index 711f09e8c150..bd377e5ffb55 100644 --- a/connectivity/source/drivers/evoab2/NStatement.cxx +++ b/connectivity/source/drivers/evoab2/NStatement.cxx @@ -55,7 +55,7 @@ OCommonStatement::OCommonStatement(OEvoabConnection* _pConnection) , m_xResultSet(NULL) , m_pResultSet(NULL) , m_pConnection(_pConnection) - , m_aParser(_pConnection->getDriver().getMSFactory()) + , m_aParser(_pConnection->getDriver().getComponentContext()) , m_aSQLIterator( _pConnection, _pConnection->createCatalog()->getTables(), m_aParser, NULL ) , m_pParseTree(NULL) , m_nMaxFieldSize(0) @@ -419,7 +419,7 @@ rtl::OUString OCommonStatement::getTableName() if( m_pParseTree && m_aSQLIterator.getStatementType() == SQL_STATEMENT_SELECT ) { Any aCatalog; - ::rtl::OUString aSchema, aComposedName; + ::rtl::OUString aSchema; const OSQLParseNode *pSelectStmnt = m_aSQLIterator.getParseTree(); const OSQLParseNode *pAllTableNames = pSelectStmnt->getChild( 3 )->getChild( 0 )->getChild( 1 ); diff --git a/connectivity/source/drivers/file/FColumns.cxx b/connectivity/source/drivers/file/FColumns.cxx index f916b2ddd7bc..199c0acda4d3 100644 --- a/connectivity/source/drivers/file/FColumns.cxx +++ b/connectivity/source/drivers/file/FColumns.cxx @@ -37,9 +37,12 @@ using namespace ::com::sun::star::lang; sdbcx::ObjectType OColumns::createObject(const ::rtl::OUString& _rName) { - + const Any aCatalog; + const ::rtl::OUString sCatalogName; + const ::rtl::OUString sSchemaName(m_pTable->getSchema()); + const ::rtl::OUString sTableName(m_pTable->getName()); Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns(Any(), - m_pTable->getSchema(),m_pTable->getName(),_rName); + sSchemaName, sTableName, _rName); sdbcx::ObjectType xRet = NULL; if(xResult.is()) @@ -60,7 +63,10 @@ sdbcx::ObjectType OColumns::createObject(const ::rtl::OUString& _rName) sal_False, sal_False, sal_False, - m_pTable->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers()); + m_pTable->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers(), + sCatalogName, + sSchemaName, + sTableName); xRet = pRet; break; } diff --git a/connectivity/source/drivers/file/FPreparedStatement.cxx b/connectivity/source/drivers/file/FPreparedStatement.cxx index 0d810fcc2b32..f99cf3c959b6 100644 --- a/connectivity/source/drivers/file/FPreparedStatement.cxx +++ b/connectivity/source/drivers/file/FPreparedStatement.cxx @@ -506,7 +506,10 @@ sal_uInt32 OPreparedStatement::AddParameter(OSQLParseNode * pParameter, const Re ,eType ,sal_False ,sal_False - ,m_aSQLIterator.isCaseSensitive()); + ,m_aSQLIterator.isCaseSensitive() + ,::rtl::OUString() + ,::rtl::OUString() + ,::rtl::OUString()); m_xParamColumns->get().push_back(xParaColumn); return m_xParamColumns->get().size(); } diff --git a/connectivity/source/drivers/file/FStatement.cxx b/connectivity/source/drivers/file/FStatement.cxx index c606bbfe9dfc..49c604664d9b 100644 --- a/connectivity/source/drivers/file/FStatement.cxx +++ b/connectivity/source/drivers/file/FStatement.cxx @@ -29,6 +29,7 @@ #include <com/sun/star/sdbc/ResultSetType.hpp> #include <com/sun/star/sdbc/FetchDirection.hpp> #include <com/sun/star/lang/DisposedException.hpp> +#include <comphelper/processfactory.hxx> #include <comphelper/sequence.hxx> #include <cppuhelper/typeprovider.hxx> #include "connectivity/dbexception.hxx" @@ -57,7 +58,7 @@ OStatement_Base::OStatement_Base(OConnection* _pConnection ) :OStatement_BASE(m_aMutex) ,::comphelper::OPropertyContainer(OStatement_BASE::rBHelper) ,m_xDBMetaData(_pConnection->getMetaData()) - ,m_aParser(_pConnection->getDriver()->getFactory()) + ,m_aParser( comphelper::getComponentContext(_pConnection->getDriver()->getFactory()) ) ,m_aSQLIterator( _pConnection, _pConnection->createCatalog()->getTables(), m_aParser, NULL ) ,m_pConnection(_pConnection) ,m_pParseTree(NULL) diff --git a/connectivity/source/drivers/flat/ETable.cxx b/connectivity/source/drivers/flat/ETable.cxx index 14732280c6af..0d57cb18b971 100644 --- a/connectivity/source/drivers/flat/ETable.cxx +++ b/connectivity/source/drivers/flat/ETable.cxx @@ -109,7 +109,7 @@ void OFlatTable::fillColumns(const ::com::sun::star::lang::Locale& _aLocale) m_aScales.assign(nFieldCount+1,-1); const sal_Bool bCase = m_pConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers(); - CharClass aCharClass(pConnection->getDriver()->getFactory(),_aLocale); + CharClass aCharClass( comphelper::getComponentContext(pConnection->getDriver()->getFactory()), _aLocale); // read description const sal_Unicode cDecimalDelimiter = pConnection->getDecimalDelimiter(); const sal_Unicode cThousandDelimiter = pConnection->getThousandDelimiter(); @@ -171,7 +171,8 @@ void OFlatTable::fillColumns(const ::com::sun::star::lang::Locale& _aLocale) sal_False, sal_False, sal_False, - bCase); + bCase, + m_CatalogName, getSchema(), getName()); Reference< XPropertySet> xCol = pColumn; m_aColumns->get().push_back(xCol); } diff --git a/connectivity/source/drivers/hsqldb/HStorageAccess.cxx b/connectivity/source/drivers/hsqldb/HStorageAccess.cxx index 3de95a3199bb..125681bbe860 100644 --- a/connectivity/source/drivers/hsqldb/HStorageAccess.cxx +++ b/connectivity/source/drivers/hsqldb/HStorageAccess.cxx @@ -44,7 +44,7 @@ using namespace ::connectivity::hsqldb; * Method: openStream * Signature: (Ljava/lang/String;Ljava/lang/String;I)V */ -SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_openStream +SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_openStream (JNIEnv * env, jobject /*obj_this*/,jstring name, jstring key, jint mode) { #ifdef HSQLDB_DBG @@ -62,7 +62,7 @@ SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStor * Method: close * Signature: (Ljava/lang/String;Ljava/lang/String;)V */ -SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_close +SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_close (JNIEnv * env, jobject /*obj_this*/,jstring name, jstring key) { #ifdef HSQLDB_DBG @@ -101,7 +101,7 @@ SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStor * Method: getFilePointer * Signature: (Ljava/lang/String;Ljava/lang/String;)J */ -SAL_DLLPUBLIC_EXPORT jlong JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_getFilePointer +SAL_JNI_EXPORT jlong JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_getFilePointer (JNIEnv * env, jobject /*obj_this*/,jstring name, jstring key) { #ifdef HSQLDB_DBG @@ -125,7 +125,7 @@ SAL_DLLPUBLIC_EXPORT jlong JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeSto * Method: length * Signature: (Ljava/lang/String;Ljava/lang/String;)J */ -SAL_DLLPUBLIC_EXPORT jlong JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_length +SAL_JNI_EXPORT jlong JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_length (JNIEnv * env, jobject /*obj_this*/,jstring name, jstring key) { #ifdef HSQLDB_DBG @@ -192,7 +192,7 @@ jint read_from_storage_stream( JNIEnv * env, jobject /*obj_this*/, jstring name, * Method: read * Signature: (Ljava/lang/String;Ljava/lang/String;)I */ -SAL_DLLPUBLIC_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_read__Ljava_lang_String_2Ljava_lang_String_2 +SAL_JNI_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_read__Ljava_lang_String_2Ljava_lang_String_2 (JNIEnv* env, jobject obj_this, jstring name, jstring key) { #ifdef HSQLDB_DBG @@ -265,7 +265,7 @@ jint read_from_storage_stream_into_buffer( JNIEnv * env, jobject /*obj_this*/,js * Method: read * Signature: (Ljava/lang/String;Ljava/lang/String;[BII)I */ -SAL_DLLPUBLIC_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_read__Ljava_lang_String_2Ljava_lang_String_2_3BII +SAL_JNI_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_read__Ljava_lang_String_2Ljava_lang_String_2_3BII (JNIEnv * env, jobject obj_this,jstring name, jstring key, jbyteArray buffer, jint off, jint len) { #ifdef HSQLDB_DBG @@ -286,7 +286,7 @@ SAL_DLLPUBLIC_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStor * Method: readInt * Signature: (Ljava/lang/String;Ljava/lang/String;)I */ -SAL_DLLPUBLIC_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_readInt +SAL_JNI_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_readInt (JNIEnv * env, jobject /*obj_this*/,jstring name, jstring key) { #ifdef HSQLDB_DBG @@ -354,7 +354,7 @@ SAL_DLLPUBLIC_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStor * Method: seek * Signature: (Ljava/lang/String;Ljava/lang/String;J)V */ -SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_seek +SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_seek (JNIEnv * env, jobject /*obj_this*/,jstring name, jstring key, jlong position) { #ifdef HSQLDB_DBG @@ -466,7 +466,7 @@ void write_to_storage_stream_from_buffer( JNIEnv* env, jobject /*obj_this*/, jst * Method: write * Signature: (Ljava/lang/String;Ljava/lang/String;[BII)V */ -SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_write +SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_write (JNIEnv * env, jobject obj_this,jstring name, jstring key, jbyteArray buffer, jint off, jint len) { #ifdef HSQLDB_DBG @@ -525,7 +525,7 @@ void write_to_storage_stream( JNIEnv* env, jobject /*obj_this*/, jstring name, j * Method: writeInt * Signature: (Ljava/lang/String;Ljava/lang/String;I)V */ -SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_writeInt +SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_NativeStorageAccess_writeInt (JNIEnv * env, jobject obj_this,jstring name, jstring key, jint v) { #ifdef HSQLDB_DBG diff --git a/connectivity/source/drivers/hsqldb/StorageFileAccess.cxx b/connectivity/source/drivers/hsqldb/StorageFileAccess.cxx index 897a4ffc8973..38f43765e41b 100644 --- a/connectivity/source/drivers/hsqldb/StorageFileAccess.cxx +++ b/connectivity/source/drivers/hsqldb/StorageFileAccess.cxx @@ -46,7 +46,7 @@ using namespace ::connectivity::hsqldb; * Method: isStreamElement * Signature: (Ljava/lang/String;Ljava/lang/String;)Z */ -SAL_DLLPUBLIC_EXPORT jboolean JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_isStreamElement +SAL_JNI_EXPORT jboolean JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_isStreamElement (JNIEnv * env, jobject /*obj_this*/,jstring key, jstring name) { TStorages::mapped_type aStoragePair = StorageContainer::getRegisteredStorage(StorageContainer::jstring2ustring(env,key)); @@ -98,7 +98,7 @@ SAL_DLLPUBLIC_EXPORT jboolean JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_Storag * Method: removeElement * Signature: (Ljava/lang/String;Ljava/lang/String;)V */ -SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_removeElement +SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_removeElement (JNIEnv * env, jobject /*obj_this*/,jstring key, jstring name) { #ifdef HSQLDB_DBG @@ -133,7 +133,7 @@ SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageFil * Method: renameElement * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V */ -SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_renameElement +SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageFileAccess_renameElement (JNIEnv * env, jobject /*obj_this*/,jstring key, jstring oldname, jstring newname) { #ifdef HSQLDB_DBG diff --git a/connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx b/connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx index 40f04a5c41ff..b6d578b27bc8 100644 --- a/connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx +++ b/connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx @@ -57,7 +57,7 @@ using namespace ::connectivity::hsqldb; * Method: openStream * Signature: (Ljava/lang/String;Ljava/lang/String;I)V */ -SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_openStream +SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_openStream (JNIEnv * env, jobject /*obj_this*/,jstring key, jstring name, jint mode) { #ifdef HSQLDB_DBG @@ -75,7 +75,7 @@ SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNat * Method: read * Signature: (Ljava/lang/String;Ljava/lang/String;)I */ -SAL_DLLPUBLIC_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_read__Ljava_lang_String_2Ljava_lang_String_2 +SAL_JNI_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_read__Ljava_lang_String_2Ljava_lang_String_2 (JNIEnv * env, jobject obj_this,jstring key, jstring name) { #ifdef HSQLDB_DBG @@ -94,7 +94,7 @@ SAL_DLLPUBLIC_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNat * Method: read * Signature: (Ljava/lang/String;Ljava/lang/String;[BII)I */ -SAL_DLLPUBLIC_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_read__Ljava_lang_String_2Ljava_lang_String_2_3BII +SAL_JNI_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_read__Ljava_lang_String_2Ljava_lang_String_2_3BII (JNIEnv * env, jobject obj_this,jstring key, jstring name, jbyteArray buffer, jint off, jint len) { #ifdef HSQLDB_DBG @@ -113,7 +113,7 @@ SAL_DLLPUBLIC_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNat * Method: close * Signature: (Ljava/lang/String;Ljava/lang/String;)V */ -SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_close +SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_close (JNIEnv * env, jobject /*obj_this*/,jstring key, jstring name) { #ifdef HSQLDB_DBG @@ -133,7 +133,7 @@ SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNat * Method: skip * Signature: (Ljava/lang/String;Ljava/lang/String;J)J */ -SAL_DLLPUBLIC_EXPORT jlong JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_skip +SAL_JNI_EXPORT jlong JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_skip (JNIEnv * env, jobject /*obj_this*/,jstring key, jstring name, jlong n) { #ifdef HSQLDB_DBG @@ -199,7 +199,7 @@ SAL_DLLPUBLIC_EXPORT jlong JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNa * Method: available * Signature: (Ljava/lang/String;Ljava/lang/String;)I */ -SAL_DLLPUBLIC_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_available +SAL_JNI_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_available (JNIEnv * env, jobject /*obj_this*/,jstring key, jstring name) { #ifdef HSQLDB_DBG @@ -241,7 +241,7 @@ SAL_DLLPUBLIC_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNat * Method: read * Signature: (Ljava/lang/String;Ljava/lang/String;[B)I */ -SAL_DLLPUBLIC_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_read__Ljava_lang_String_2Ljava_lang_String_2_3B +SAL_JNI_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeInputStream_read__Ljava_lang_String_2Ljava_lang_String_2_3B (JNIEnv * env, jobject /*obj_this*/,jstring key, jstring name, jbyteArray buffer) { #ifdef HSQLDB_DBG diff --git a/connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx b/connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx index e81447d5b6dd..61295b3c1a4e 100644 --- a/connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx +++ b/connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx @@ -57,7 +57,7 @@ using namespace ::connectivity::hsqldb; * Method: openStream * Signature: (Ljava/lang/String;Ljava/lang/String;I)V */ -extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_openStream +extern "C" SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_openStream (JNIEnv * env, jobject /*obj_this*/, jstring name, jstring key, jint mode) { #ifdef HSQLDB_DBG @@ -73,7 +73,7 @@ extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb * Method: write * Signature: (Ljava/lang/String;Ljava/lang/String;[BII)V */ -extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2_3BII +extern "C" SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2_3BII (JNIEnv * env, jobject obj_this, jstring key, jstring name, jbyteArray buffer, jint off, jint len) { #ifdef HSQLDB_DBG @@ -91,7 +91,7 @@ extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb * Method: write * Signature: (Ljava/lang/String;Ljava/lang/String;[B)V */ -extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2_3B +extern "C" SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2_3B (JNIEnv * env, jobject obj_this, jstring key, jstring name, jbyteArray buffer) { #ifdef HSQLDB_DBG @@ -109,7 +109,7 @@ extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb * Method: close * Signature: (Ljava/lang/String;Ljava/lang/String;)V */ -extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_close +extern "C" SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_close (JNIEnv * env, jobject /*obj_this*/, jstring key, jstring name) { #ifdef HSQLDB_DBG @@ -141,7 +141,7 @@ extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb * Method: write * Signature: (Ljava/lang/String;Ljava/lang/String;I)V */ -extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2I +extern "C" SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_write__Ljava_lang_String_2Ljava_lang_String_2I (JNIEnv * env, jobject obj_this, jstring key, jstring name,jint b) { #ifdef HSQLDB_DBG @@ -159,7 +159,7 @@ extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb * Method: flush * Signature: (Ljava/lang/String;Ljava/lang/String;)V */ -extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_flush +extern "C" SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_flush (JNIEnv * env, jobject /*obj_this*/, jstring key, jstring name) { OSL_UNUSED( env ); @@ -178,7 +178,7 @@ extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb * Method: sync * Signature: (Ljava/lang/String;Ljava/lang/String;)V */ -extern "C" SAL_DLLPUBLIC_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_sync +extern "C" SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_StorageNativeOutputStream_sync (JNIEnv * env, jobject /*obj_this*/, jstring key, jstring name) { #ifdef HSQLDB_DBG diff --git a/connectivity/source/drivers/jdbc/JConnection.cxx b/connectivity/source/drivers/jdbc/JConnection.cxx index 6921c0d96050..a814c1b6665d 100644 --- a/connectivity/source/drivers/jdbc/JConnection.cxx +++ b/connectivity/source/drivers/jdbc/JConnection.cxx @@ -469,7 +469,7 @@ Reference< XStatement > SAL_CALL java_sql_Connection::createStatement( ) throw( { try { - OSQLParser aParser( m_pDriver->getContext().getLegacyServiceFactory() ); + OSQLParser aParser( m_pDriver->getContext().getUNOContext() ); ::rtl::OUString sErrorMessage; ::rtl::OUString sNewSql; OSQLParseNode* pNode = aParser.parseTree(sErrorMessage,_sSQL); diff --git a/connectivity/source/drivers/jdbc/jservices.cxx b/connectivity/source/drivers/jdbc/jservices.cxx index 8ad3d81c1fa1..2d29006d7d61 100644 --- a/connectivity/source/drivers/jdbc/jservices.cxx +++ b/connectivity/source/drivers/jdbc/jservices.cxx @@ -75,7 +75,7 @@ struct ProviderRequest }; extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL -component_getImplementationEnvironment( +jdbc_component_getImplementationEnvironment( char const ** ppEnvTypeName, uno_Environment **) { // Recent Java 6 VMs make calls to JNI Attach/DetachCurrentThread (which diff --git a/connectivity/source/drivers/kab/KColumns.cxx b/connectivity/source/drivers/kab/KColumns.cxx index a047d1afe843..5ab9598073ee 100644 --- a/connectivity/source/drivers/kab/KColumns.cxx +++ b/connectivity/source/drivers/kab/KColumns.cxx @@ -37,11 +37,12 @@ using namespace ::com::sun::star::lang; // ------------------------------------------------------------------------- sdbcx::ObjectType KabColumns::createObject(const ::rtl::OUString& _rName) { + const Any aCatalog; + const ::rtl::OUString sCatalogName; + const ::rtl::OUString sSchemaName(m_pTable->getSchema()); + const ::rtl::OUString sTableName(m_pTable->getTableName()); Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns( - Any(), - m_pTable->getSchema(), - m_pTable->getTableName(), - _rName); + aCatalog, sSchemaName, sTableName, _rName); sdbcx::ObjectType xRet = NULL; if (xResult.is()) @@ -64,7 +65,10 @@ sdbcx::ObjectType KabColumns::createObject(const ::rtl::OUString& _rName) sal_False, sal_False, sal_False, - sal_True); + sal_True, + sCatalogName, + sSchemaName, + sTableName); xRet = pRet; break; } diff --git a/connectivity/source/drivers/kab/KDriver.hxx b/connectivity/source/drivers/kab/KDriver.hxx index b51058151279..1243f7425185 100644 --- a/connectivity/source/drivers/kab/KDriver.hxx +++ b/connectivity/source/drivers/kab/KDriver.hxx @@ -23,6 +23,7 @@ #include <com/sun/star/sdbc/XDriver.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/frame/XTerminateListener.hpp> +#include <comphelper/processfactory.hxx> #include <cppuhelper/compbase3.hxx> #include <osl/module.h> @@ -161,8 +162,8 @@ namespace connectivity static ::rtl::OUString getImplementationName_Static( ) throw(::com::sun::star::uno::RuntimeException); static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static( ) throw (::com::sun::star::uno::RuntimeException); - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& - getMSFactory() const { return m_xMSFactory; } + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > + getComponentContext() const { return comphelper::getComponentContext(m_xMSFactory); } /** returns the driver's implementation name (being pure ASCII) for reference in various places */ diff --git a/connectivity/source/drivers/kab/KStatement.cxx b/connectivity/source/drivers/kab/KStatement.cxx index e898ee48f62f..a5babf0c2de3 100644 --- a/connectivity/source/drivers/kab/KStatement.cxx +++ b/connectivity/source/drivers/kab/KStatement.cxx @@ -62,7 +62,7 @@ IMPLEMENT_SERVICE_INFO(KabStatement, "com.sun.star.sdbc.drivers.KabStatement", " KabCommonStatement::KabCommonStatement(KabConnection* _pConnection ) : KabCommonStatement_BASE(m_aMutex), OPropertySetHelper(KabCommonStatement_BASE::rBHelper), - m_aParser(_pConnection->getDriver()->getMSFactory()), + m_aParser(_pConnection->getDriver()->getComponentContext()), m_aSQLIterator(_pConnection, _pConnection->createCatalog()->getTables(), m_aParser, NULL ), m_pParseTree(NULL), m_pConnection(_pConnection), diff --git a/connectivity/source/drivers/macab/MacabColumns.cxx b/connectivity/source/drivers/macab/MacabColumns.cxx index 4d0b064ce28b..107ab4575784 100644 --- a/connectivity/source/drivers/macab/MacabColumns.cxx +++ b/connectivity/source/drivers/macab/MacabColumns.cxx @@ -37,11 +37,12 @@ using namespace ::com::sun::star::lang; // ------------------------------------------------------------------------- sdbcx::ObjectType MacabColumns::createObject(const ::rtl::OUString& _rName) { + const Any aCatalog; + const ::rtl::OUString sCatalogName; + const ::rtl::OUString sSchemaName(m_pTable->getSchema()); + const ::rtl::OUString sTableName(m_pTable->getTableName()); Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns( - Any(), - m_pTable->getSchema(), - m_pTable->getTableName(), - _rName); + aCatalog, sSchemaName, sTableName, _rName); sdbcx::ObjectType xRet = NULL; if (xResult.is()) @@ -64,7 +65,10 @@ sdbcx::ObjectType MacabColumns::createObject(const ::rtl::OUString& _rName) sal_False, sal_False, sal_False, - sal_True); + sal_True, + sCatalogName, + sSchemaName, + sTableName); xRet = pRet; break; } diff --git a/connectivity/source/drivers/macab/MacabDriver.hxx b/connectivity/source/drivers/macab/MacabDriver.hxx index c908ee481d2c..cbfe0c035bdc 100644 --- a/connectivity/source/drivers/macab/MacabDriver.hxx +++ b/connectivity/source/drivers/macab/MacabDriver.hxx @@ -23,6 +23,7 @@ #include <com/sun/star/sdbc/XDriver.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/frame/XTerminateListener.hpp> +#include <comphelper/processfactory.hxx> #include <cppuhelper/compbase3.hxx> #include <osl/module.h> @@ -134,8 +135,8 @@ namespace connectivity static ::rtl::OUString getImplementationName_Static( ) throw(::com::sun::star::uno::RuntimeException); static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static( ) throw (::com::sun::star::uno::RuntimeException); - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& - getMSFactory() const { return m_xMSFactory; } + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > + getComponentContext() const { return comphelper::getComponentContext(m_xMSFactory); } /** returns the driver's implementation name (being pure ASCII) for reference in various places */ diff --git a/connectivity/source/drivers/macab/MacabStatement.cxx b/connectivity/source/drivers/macab/MacabStatement.cxx index 7ea31f7e35b4..12cf3f4cef20 100644 --- a/connectivity/source/drivers/macab/MacabStatement.cxx +++ b/connectivity/source/drivers/macab/MacabStatement.cxx @@ -65,7 +65,7 @@ IMPLEMENT_SERVICE_INFO(MacabStatement, "com.sun.star.sdbc.drivers.MacabStatement MacabCommonStatement::MacabCommonStatement(MacabConnection* _pConnection ) : MacabCommonStatement_BASE(m_aMutex), OPropertySetHelper(MacabCommonStatement_BASE::rBHelper), - m_aParser(_pConnection->getDriver()->getMSFactory()), + m_aParser(_pConnection->getDriver()->getComponentContext()), m_aSQLIterator(_pConnection, _pConnection->createCatalog()->getTables(), m_aParser, NULL ), m_pParseTree(NULL), m_pConnection(_pConnection), diff --git a/connectivity/source/drivers/mork/MColumns.cxx b/connectivity/source/drivers/mork/MColumns.cxx index 852bb4d4c012..22a2dd7f4495 100644 --- a/connectivity/source/drivers/mork/MColumns.cxx +++ b/connectivity/source/drivers/mork/MColumns.cxx @@ -42,8 +42,12 @@ using namespace ::com::sun::star::lang; sdbcx::ObjectType OColumns::createObject(const ::rtl::OUString& _rName) { - Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns(Any(), - m_pTable->getSchema(),m_pTable->getTableName(),_rName); + const Any aCatalog; + const ::rtl::OUString sCatalogName; + const ::rtl::OUString sSchemaName(m_pTable->getSchema()); + const ::rtl::OUString sTableName(m_pTable->getTableName()); + Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns( + aCatalog, sSchemaName, sTableName, _rName); sdbcx::ObjectType xRet = NULL; if(xResult.is()) @@ -65,7 +69,10 @@ sdbcx::ObjectType OColumns::createObject(const ::rtl::OUString& _rName) nPrec, xRow->getInt(9), nType, - sal_False,sal_False,sal_False,sal_True); + sal_False,sal_False,sal_False,sal_True, + sCatalogName, + sSchemaName, + sTableName); xRet = pRet; break; } diff --git a/connectivity/source/drivers/mork/MPreparedStatement.cxx b/connectivity/source/drivers/mork/MPreparedStatement.cxx index c34de94576e1..803b9606b1d0 100644 --- a/connectivity/source/drivers/mork/MPreparedStatement.cxx +++ b/connectivity/source/drivers/mork/MPreparedStatement.cxx @@ -442,7 +442,10 @@ size_t OPreparedStatement::AddParameter(OSQLParseNode * pParameter, const Refere ,sal_False ,sal_False ,sal_False - ,m_pSQLIterator->isCaseSensitive()); + ,m_pSQLIterator->isCaseSensitive() + ,::rtl::OUString() + ,::rtl::OUString() + ,::rtl::OUString()); m_xParamColumns->get().push_back(xParaColumn); return nParameter; } diff --git a/connectivity/source/drivers/mork/MStatement.cxx b/connectivity/source/drivers/mork/MStatement.cxx index 342ac2add17b..2beacfecd95a 100644 --- a/connectivity/source/drivers/mork/MStatement.cxx +++ b/connectivity/source/drivers/mork/MStatement.cxx @@ -30,6 +30,7 @@ #include <com/sun/star/lang/DisposedException.hpp> #include <comphelper/sequence.hxx> #include <cppuhelper/typeprovider.hxx> +#include <comphelper/processfactory.hxx> #include <comphelper/extract.hxx> #include <comphelper/types.hxx> #include <connectivity/dbexception.hxx> @@ -79,7 +80,7 @@ OCommonStatement::OCommonStatement(OConnection* _pConnection ) ,OCommonStatement_SBASE((::cppu::OWeakObject*)_pConnection, this) ,m_pTable(NULL) ,m_pConnection(_pConnection) - ,m_aParser(_pConnection->getDriver()->getFactory()) + ,m_aParser( comphelper::getComponentContext(_pConnection->getDriver()->getFactory()) ) ,m_pSQLIterator( new OSQLParseTreeIterator( _pConnection, _pConnection->createCatalog()->getTables(), m_aParser, NULL ) ) ,rBHelper(OCommonStatement_IBASE::rBHelper) { diff --git a/connectivity/source/drivers/mozab/MColumns.cxx b/connectivity/source/drivers/mozab/MColumns.cxx index f6fb6e217942..786280cbbe5e 100644 --- a/connectivity/source/drivers/mozab/MColumns.cxx +++ b/connectivity/source/drivers/mozab/MColumns.cxx @@ -43,8 +43,12 @@ using namespace ::com::sun::star::lang; sdbcx::ObjectType OColumns::createObject(const ::rtl::OUString& _rName) { - Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns(Any(), - m_pTable->getSchema(),m_pTable->getTableName(),_rName); + const Any aCatalog; + const ::rtl::OUString sCatalogName; + const ::rtl::OUString sSchemaName(m_pTable->getSchema()); + const ::rtl::OUString sTableName(m_pTable->getTableName()); + Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns( + aCatalog, sSchemaName, sTableName, _rName); sdbcx::ObjectType xRet = NULL; if(xResult.is()) @@ -66,7 +70,10 @@ sdbcx::ObjectType OColumns::createObject(const ::rtl::OUString& _rName) nPrec, xRow->getInt(9), nType, - sal_False,sal_False,sal_False,sal_True); + sal_False,sal_False,sal_False,sal_True, + sCatalogName, + sSchemaName, + sTableName); xRet = pRet; break; } diff --git a/connectivity/source/drivers/mozab/MPreparedStatement.cxx b/connectivity/source/drivers/mozab/MPreparedStatement.cxx index 9a650effd215..971749d03cc0 100644 --- a/connectivity/source/drivers/mozab/MPreparedStatement.cxx +++ b/connectivity/source/drivers/mozab/MPreparedStatement.cxx @@ -443,7 +443,10 @@ size_t OPreparedStatement::AddParameter(OSQLParseNode * pParameter, const Refere ,sal_False ,sal_False ,sal_False - ,m_pSQLIterator->isCaseSensitive()); + ,m_pSQLIterator->isCaseSensitive() + ,::rtl::OUString() + ,::rtl::OUString() + ,::rtl::OUString()); m_xParamColumns->get().push_back(xParaColumn); return nParameter; } diff --git a/connectivity/source/drivers/mozab/MStatement.cxx b/connectivity/source/drivers/mozab/MStatement.cxx index c1041d909cae..9f6b2d5420d6 100644 --- a/connectivity/source/drivers/mozab/MStatement.cxx +++ b/connectivity/source/drivers/mozab/MStatement.cxx @@ -32,6 +32,7 @@ #include <cppuhelper/typeprovider.hxx> #include <comphelper/extract.hxx> #include <comphelper/types.hxx> +#include <comphelper/processfactory.hxx> #include <connectivity/dbexception.hxx> #include <com/sun/star/container/XIndexAccess.hpp> @@ -73,7 +74,8 @@ OCommonStatement::OCommonStatement(OConnection* _pConnection ) ,m_xDBMetaData(_pConnection->getMetaData()) ,m_pTable(NULL) ,m_pConnection(_pConnection) - ,m_aParser(_pConnection->getDriver()->getMSFactory()) + ,m_aParser(::comphelper::getComponentContext( + _pConnection->getDriver()->getMSFactory())) ,m_pSQLIterator( new OSQLParseTreeIterator( _pConnection, _pConnection->createCatalog()->getTables(), m_aParser, NULL ) ) ,m_pParseTree(NULL) ,rBHelper(OCommonStatement_IBASE::rBHelper) diff --git a/connectivity/source/drivers/odbcbase/OPreparedStatement.cxx b/connectivity/source/drivers/odbcbase/OPreparedStatement.cxx index a5d24dddc628..f5c05b80f76f 100644 --- a/connectivity/source/drivers/odbcbase/OPreparedStatement.cxx +++ b/connectivity/source/drivers/odbcbase/OPreparedStatement.cxx @@ -30,6 +30,7 @@ #include "odbc/OResultSet.hxx" #include "odbc/OResultSetMetaData.hxx" #include <cppuhelper/typeprovider.hxx> +#include <comphelper/processfactory.hxx> #include <comphelper/sequence.hxx> #include <com/sun/star/lang/DisposedException.hpp> #include "connectivity/dbtools.hxx" @@ -37,6 +38,8 @@ #include "connectivity/FValue.hxx" #include "resource/common_res.hrc" #include "connectivity/sqlparse.hxx" +#include <boost/type_traits/remove_reference.hpp> +#include <boost/type_traits/is_same.hpp> using namespace ::comphelper; using namespace connectivity; @@ -52,6 +55,13 @@ using namespace com::sun::star::util; IMPLEMENT_SERVICE_INFO(OPreparedStatement,"com.sun.star.sdbcx.OPreparedStatement","com.sun.star.sdbc.PreparedStatement"); +namespace +{ + // for now, never use wchar, + // but most of code is prepared to handle it + // in case we make this configurable + const bool useWChar = false; +} OPreparedStatement::OPreparedStatement( OConnection* _pConnection,const ::rtl::OUString& sql) :OStatement_BASE2(_pConnection) @@ -64,7 +74,7 @@ OPreparedStatement::OPreparedStatement( OConnection* _pConnection,const ::rtl::O { if(_pConnection->isParameterSubstitutionEnabled()) { - OSQLParser aParser(_pConnection->getDriver()->getORB()); + OSQLParser aParser( comphelper::getComponentContext(_pConnection->getDriver()->getORB()) ); ::rtl::OUString sErrorMessage; ::rtl::OUString sNewSql; ::std::auto_ptr<OSQLParseNode> pNode( aParser.parseTree(sErrorMessage,sql) ); @@ -199,31 +209,6 @@ sal_Bool SAL_CALL OPreparedStatement::execute( ) throw(SQLException, RuntimeExc { } - // Now loop while more data is needed (i.e. a data-at- - // execution parameter was given). For each parameter - // that needs data, put the data from the input stream. - - while (needData) { - - // Get the parameter number that requires data - - sal_Int32* paramIndex = 0; - N3SQLParamData (m_aStatementHandle,(SQLPOINTER*)¶mIndex); - - // If the parameter index is -1, there is no more - // data required - - if (*paramIndex == -1) { - needData = sal_False; - } - else { - // Now we have the proper parameter index, - // get the data from the input stream - // and do a SQLPutData - putParamData(*paramIndex); - } - } - // Now determine if there is a result set associated with // the SQL statement that was executed. Get the column // count, and if it is not zero, there is a result set. @@ -258,8 +243,7 @@ sal_Int32 SAL_CALL OPreparedStatement::executeUpdate( ) throw(SQLException, Run void SAL_CALL OPreparedStatement::setString( sal_Int32 parameterIndex, const ::rtl::OUString& x ) throw(SQLException, RuntimeException) { - ::rtl::OString aString(::rtl::OUStringToOString(x,getOwnConnection()->getTextEncoding())); - setParameter(parameterIndex,DataType::CHAR,aString.getLength(),(void*)&x); + setParameter(parameterIndex, DataType::CHAR, invalid_scale, x); } // ------------------------------------------------------------------------- @@ -294,111 +278,189 @@ Reference< XResultSet > SAL_CALL OPreparedStatement::executeQuery( ) throw(SQLE void SAL_CALL OPreparedStatement::setBoolean( sal_Int32 parameterIndex, sal_Bool x ) throw(SQLException, RuntimeException) { - ::osl::MutexGuard aGuard( m_aMutex ); + // Set the parameter as if it were an integer + setInt (parameterIndex, x ? 1 : 0 ); +} +// ------------------------------------------------------------------------- +// The MutexGuard must _already_ be taken! +void OPreparedStatement::setParameterPre(sal_Int32 parameterIndex) +{ checkDisposed(OStatement_BASE::rBHelper.bDisposed); + prepareStatement(); + checkParameterIndex(parameterIndex); + OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!"); +} +// ------------------------------------------------------------------------- +template <typename T> void OPreparedStatement::setScalarParameter(const sal_Int32 parameterIndex, const sal_Int32 i_nType, const SQLULEN i_nColSize, const T i_Value) +{ + ::osl::MutexGuard aGuard( m_aMutex ); + setParameterPre(parameterIndex); - sal_Int32 value = 0; + typedef typename boost::remove_reference< T >::type TnoRef; - // If the parameter is sal_True, set the value to 1 - if (x) { - value = 1; - } + TnoRef *bindBuf = static_cast< TnoRef* >( allocBindBuf(parameterIndex, sizeof(i_Value)) ); + *bindBuf = i_Value; - // Set the parameter as if it were an integer - setInt (parameterIndex, value); + setParameter(parameterIndex, i_nType, i_nColSize, invalid_scale, bindBuf, sizeof(i_Value), sizeof(i_Value)); } // ------------------------------------------------------------------------- -void OPreparedStatement::setParameter(sal_Int32 parameterIndex,sal_Int32 _nType,sal_Int32 _nSize,void* _pData) + +void OPreparedStatement::setParameter(const sal_Int32 parameterIndex, const sal_Int32 _nType, const sal_Int16 _nScale, const ::rtl::OUString &_sData) { ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(OStatement_BASE::rBHelper.bDisposed); + setParameterPre(parameterIndex); - prepareStatement(); - // Allocate a buffer to be used in binding. This will be - // a 'permanent' buffer that the bridge will fill in with - // the bound data in native format. + assert (_nType == DataType::VARCHAR || _nType == DataType::CHAR || _nType == DataType::DECIMAL || _nType == DataType::NUMERIC); - - checkParameterIndex(parameterIndex); - sal_Int32 nRealSize = _nSize; - SQLSMALLINT fSqlType = static_cast<SQLSMALLINT>(OTools::jdbcTypeToOdbc(_nType)); - switch(fSqlType) + sal_Int32 nCharLen; + sal_Int32 nByteLen; + void *pData; + if (useWChar) { - case SQL_CHAR: - case SQL_VARCHAR: - case SQL_DECIMAL: - case SQL_NUMERIC: - ++nRealSize; - break; - case SQL_BINARY: - case SQL_VARBINARY: - nRealSize=1; //dummy buffer, binary data isn't copied - break; - default: - break; + /* + * On Windows, wchar is 16 bits (UTF-16 encoding), the ODBC "W" variants functions take UTF-16 encoded strings + * and character lengths are number of UTF-16 codepoints. + * Reference: http://msdn.microsoft.com/en-us/library/windows/desktop/ms716246%28v=vs.85%29.aspx + * ODBC Programmer's reference > Developing Applications > Programming Considerations > Unicode > Unicode Function Arguments + * http://support.microsoft.com/kb/294169 + * + * UnixODBC can be configured at compile-time so that the "W" variants expect + * UTF-16 or UTF-32 encoded strings, and character lengths are number of codepoints. + * However, UTF-16 is the default, what all/most distributions do + * and the established API that most drivers implement. + * As wchar is often 32 bits, this differs from C-style strings of wchar! + * + * Our internal OUString storage is always UTF-16, so no conversion to do here. + */ + BOOST_STATIC_ASSERT( sizeof(sal_Unicode) == 2 ); + nCharLen = _sData.getLength(); + nByteLen = nCharLen * sizeof(sal_Unicode); + pData = allocBindBuf(parameterIndex, nByteLen); + memcpy(pData, _sData.getStr(), nByteLen); + } + else + { + ::rtl::OString sOData( ::rtl::OUStringToOString(_sData, getOwnConnection()->getTextEncoding()) ); + nCharLen = sOData.getLength(); + nByteLen = nCharLen; + pData = allocBindBuf(parameterIndex, nByteLen); + memcpy(pData, sOData.getStr(), nByteLen); } - sal_Int8* bindBuf = allocBindBuf(parameterIndex, nRealSize); + setParameter( parameterIndex, _nType, nCharLen, _nScale, pData, nByteLen, nByteLen ); +} +// ------------------------------------------------------------------------- +void OPreparedStatement::setParameter(const sal_Int32 parameterIndex, const sal_Int32 _nType, const Sequence< sal_Int8 > &x) +{ + ::osl::MutexGuard aGuard( m_aMutex ); + setParameterPre(parameterIndex); - OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!"); - OTools::bindParameter( m_pConnection, - m_aStatementHandle, - parameterIndex, - bindBuf, - getLengthBuf(parameterIndex), - fSqlType, - sal_False, - m_pConnection->useOldDateFormat(), - _pData, - (Reference <XInterface>)*this, - getOwnConnection()->getTextEncoding()); + assert(_nType == DataType::BINARY || _nType == DataType::VARBINARY); + + // don't copy the sequence, just point the ODBC directly at the sequence's storage array + // Why BINARY/Sequence is treated differently than strings (which are copied), I'm not sure + OSL_VERIFY(allocBindBuf(parameterIndex, 0) == NULL); + boundParams[parameterIndex-1].setSequence(x); // this ensures that the sequence stays alive + + setParameter( parameterIndex, _nType, x.getLength(), invalid_scale, x.getConstArray(), x.getLength(), x.getLength() ); +} +// ------------------------------------------------------------------------- +void OPreparedStatement::setParameter(const sal_Int32 parameterIndex, const sal_Int32 _nType, const SQLULEN _nColumnSize, const sal_Int32 _nScale, const void* const _pData, const SQLULEN _nDataLen, const SQLLEN _nDataAllocLen) +{ + SQLSMALLINT fCType, fSqlType; + OTools::getBindTypes(useWChar, m_pConnection->useOldDateFormat(), OTools::jdbcTypeToOdbc(_nType), fCType, fSqlType); + + SQLLEN *pDataLen=boundParams[parameterIndex-1].getBindLengthBuffer(); + *pDataLen=_nDataLen; + + SQLRETURN nRetcode; + nRetcode = (*(T3SQLBindParameter)m_pConnection->getOdbcFunction(ODBC3SQLBindParameter))( + m_aStatementHandle, + // checkParameterIndex guarantees this is safe + static_cast<SQLUSMALLINT>(parameterIndex), + SQL_PARAM_INPUT, + fCType, + fSqlType, + _nColumnSize, + _nScale, + // we trust the ODBC driver not to touch it because SQL_PARAM_INPUT + const_cast<void*>(_pData), + _nDataAllocLen, + pDataLen); + + OTools::ThrowException(m_pConnection, nRetcode, m_aStatementHandle, SQL_HANDLE_STMT, *this); } // ----------------------------------------------------------------------------- -void SAL_CALL OPreparedStatement::setByte( sal_Int32 parameterIndex, sal_Int8 x ) throw(SQLException, RuntimeException) +void SAL_CALL OPreparedStatement::setByte( const sal_Int32 parameterIndex, const sal_Int8 x ) throw(SQLException, RuntimeException) { - setParameter(parameterIndex,DataType::TINYINT,sizeof(sal_Int8),&x); + setScalarParameter(parameterIndex, DataType::TINYINT, 3, x); } // ------------------------------------------------------------------------- - +// For older compilers (that do not support partial specialisation of class templates) +// uncomment if necessary (safe also on compilers that *do* support partial specialisation) +//BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(DATE_STRUCT); +//BOOST_STATIC_ASSERT((boost::is_same<DATE_STRUCT, boost::remove_reference<DATE_STRUCT&>::type>::value)); void SAL_CALL OPreparedStatement::setDate( sal_Int32 parameterIndex, const Date& aData ) throw(SQLException, RuntimeException) { - DATE_STRUCT x = OTools::DateToOdbcDate(aData); - setParameter(parameterIndex,DataType::DATE,sizeof(DATE_STRUCT),&x); + DATE_STRUCT x(OTools::DateToOdbcDate(aData)); + setScalarParameter<DATE_STRUCT&>(parameterIndex, DataType::DATE, 10, x); } // ------------------------------------------------------------------------- - void SAL_CALL OPreparedStatement::setTime( sal_Int32 parameterIndex, const Time& aVal ) throw(SQLException, RuntimeException) { - TIME_STRUCT x = OTools::TimeToOdbcTime(aVal); - setParameter(parameterIndex,DataType::TIME,sizeof(TIME_STRUCT),&x); + const sal_uInt16 hundredths (aVal.HundredthSeconds); + SQLULEN nColSize; + if(hundredths == 0) + nColSize = 8; + else if(hundredths % 10 == 0) + nColSize = 10; + else + nColSize = 11; + TIME_STRUCT x(OTools::TimeToOdbcTime(aVal)); + setScalarParameter<TIME_STRUCT&>(parameterIndex, DataType::TIME, nColSize, x); } // ------------------------------------------------------------------------- void SAL_CALL OPreparedStatement::setTimestamp( sal_Int32 parameterIndex, const DateTime& aVal ) throw(SQLException, RuntimeException) { - TIMESTAMP_STRUCT x = OTools::DateTimeToTimestamp(aVal); - setParameter(parameterIndex,DataType::TIMESTAMP,sizeof(TIMESTAMP_STRUCT),&x); + sal_uInt16 s(aVal.Seconds); + sal_uInt16 hundredths(aVal.HundredthSeconds); + SQLULEN nColSize; + if(hundredths == 0) + { + if (s == 0) + nColSize=16; + else + nColSize=19; + } + else if(hundredths % 10 == 0) + nColSize = 21; + else + nColSize = 22; + + TIMESTAMP_STRUCT x(OTools::DateTimeToTimestamp(aVal)); + setScalarParameter<TIMESTAMP_STRUCT&>(parameterIndex, DataType::TIMESTAMP, nColSize, x); } // ------------------------------------------------------------------------- void SAL_CALL OPreparedStatement::setDouble( sal_Int32 parameterIndex, double x ) throw(SQLException, RuntimeException) { - setParameter(parameterIndex,DataType::DOUBLE,sizeof(double),&x); + setScalarParameter(parameterIndex, DataType::DOUBLE, 15, x); } // ------------------------------------------------------------------------- void SAL_CALL OPreparedStatement::setFloat( sal_Int32 parameterIndex, float x ) throw(SQLException, RuntimeException) { - setParameter(parameterIndex,DataType::FLOAT,sizeof(float),&x); + setScalarParameter(parameterIndex, DataType::FLOAT, 15, x); } // ------------------------------------------------------------------------- void SAL_CALL OPreparedStatement::setInt( sal_Int32 parameterIndex, sal_Int32 x ) throw(SQLException, RuntimeException) { - setParameter(parameterIndex,DataType::INTEGER,sizeof(sal_Int32),&x); + setScalarParameter(parameterIndex, DataType::INTEGER, 10, x); } // ------------------------------------------------------------------------- @@ -406,57 +468,44 @@ void SAL_CALL OPreparedStatement::setLong( sal_Int32 parameterIndex, sal_Int64 x { try { - setParameter(parameterIndex,DataType::BIGINT,sizeof(sal_Int64),&x); + setScalarParameter(parameterIndex, DataType::BIGINT, 19, x); } catch(SQLException&) { - setString(parameterIndex,ORowSetValue(x)); + setString(parameterIndex, ORowSetValue(x)); } } // ------------------------------------------------------------------------- -void SAL_CALL OPreparedStatement::setNull( sal_Int32 parameterIndex, sal_Int32 sqlType ) throw(SQLException, RuntimeException) +void SAL_CALL OPreparedStatement::setNull( sal_Int32 parameterIndex, const sal_Int32 _nType ) throw(SQLException, RuntimeException) { ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(OStatement_BASE::rBHelper.bDisposed); + setParameterPre(parameterIndex); + OSL_VERIFY(allocBindBuf(parameterIndex, 0) == NULL); + SQLLEN * const lenBuf = getLengthBuf (parameterIndex); + *lenBuf = SQL_NULL_DATA; - prepareStatement(); - // Get the buffer needed for the length - checkParameterIndex(parameterIndex); - - sal_Int8* lenBuf = getLengthBuf (parameterIndex); - *(SQLLEN*)lenBuf = SQL_NULL_DATA; + SQLSMALLINT fCType; + SQLSMALLINT fSqlType; - SQLLEN prec = 0; - SQLULEN nColumnSize = 0; - if (sqlType == SQL_CHAR || sqlType == SQL_VARCHAR || sqlType == SQL_LONGVARCHAR) - { - prec = 1; - nColumnSize = 1; - } - - SQLSMALLINT fCType = 0; - SQLSMALLINT fSqlType = 0; - - SQLSMALLINT nDecimalDigits = 0; - OTools::getBindTypes( sal_False, + OTools::getBindTypes( useWChar, m_pConnection->useOldDateFormat(), - (SQLSMALLINT)sqlType, + OTools::jdbcTypeToOdbc(_nType), fCType, fSqlType); SQLRETURN nReturn = N3SQLBindParameter( m_aStatementHandle, - (SQLUSMALLINT)parameterIndex, - (SQLSMALLINT)SQL_PARAM_INPUT, + static_cast<SQLUSMALLINT>(parameterIndex), + SQL_PARAM_INPUT, fCType, fSqlType, - nColumnSize, - nDecimalDigits, + 0, + 0, NULL, - prec, - (SQLLEN*)lenBuf + 0, + lenBuf ); OTools::ThrowException(m_pConnection,nReturn,m_aStatementHandle,SQL_HANDLE_STMT,*this); } @@ -465,14 +514,14 @@ void SAL_CALL OPreparedStatement::setNull( sal_Int32 parameterIndex, sal_Int32 s void SAL_CALL OPreparedStatement::setClob( sal_Int32 parameterIndex, const Reference< XClob >& x ) throw(SQLException, RuntimeException) { if ( x.is() ) - setStream(parameterIndex, x->getCharacterStream(), (SQLLEN)x->length(), DataType::LONGVARCHAR); + setStream(parameterIndex, x->getCharacterStream(), x->length(), DataType::LONGVARCHAR); } // ------------------------------------------------------------------------- void SAL_CALL OPreparedStatement::setBlob( sal_Int32 parameterIndex, const Reference< XBlob >& x ) throw(SQLException, RuntimeException) { if ( x.is() ) - setStream(parameterIndex, x->getBinaryStream(), (SQLLEN)x->length(), DataType::LONGVARCHAR); + setStream(parameterIndex, x->getBinaryStream(), x->length(), DataType::LONGVARBINARY); } // ------------------------------------------------------------------------- @@ -487,12 +536,6 @@ void SAL_CALL OPreparedStatement::setRef( sal_Int32 /*parameterIndex*/, const Re ::dbtools::throwFunctionNotSupportedException( "XParameters::setRef", *this ); } // ------------------------------------------------------------------------- -void OPreparedStatement::setDecimal( sal_Int32 parameterIndex, const ::rtl::OUString& x ) -{ - ::rtl::OString aString(::rtl::OUStringToOString(x,getOwnConnection()->getTextEncoding())); - setParameter(parameterIndex,DataType::DECIMAL,aString.getLength(),(void*)&x); -} -// ------------------------------------------------------------------------- void SAL_CALL OPreparedStatement::setObjectWithInfo( sal_Int32 parameterIndex, const Any& x, sal_Int32 sqlType, sal_Int32 scale ) throw(SQLException, RuntimeException) { checkDisposed(OStatement_BASE::rBHelper.bDisposed); @@ -504,31 +547,29 @@ void SAL_CALL OPreparedStatement::setObjectWithInfo( sal_Int32 parameterIndex, c switch (sqlType) { + case DataType::CHAR: case DataType::VARCHAR: case DataType::LONGVARCHAR: if(x.hasValue()) { ::rtl::OUString sStr; x >>= sStr; - ::rtl::OString aString(::rtl::OUStringToOString(sStr,getOwnConnection()->getTextEncoding())); - setParameter(parameterIndex,sqlType,aString.getLength(),&aString); + setParameter(parameterIndex, sqlType, scale, sStr); } else setNull(parameterIndex,sqlType); break; case DataType::DECIMAL: - { - ORowSetValue aValue; - aValue.fill(x); - setDecimal(parameterIndex,aValue); - } - break; case DataType::NUMERIC: + if(x.hasValue()) { ORowSetValue aValue; aValue.fill(x); - setString(parameterIndex,aValue); + // TODO: make sure that this calls the string overload + setParameter(parameterIndex, sqlType, scale, aValue); } + else + setNull(parameterIndex,sqlType); break; default: ::dbtools::setObjectWithInfo(this,parameterIndex,x,sqlType,scale); @@ -538,9 +579,6 @@ void SAL_CALL OPreparedStatement::setObjectWithInfo( sal_Int32 parameterIndex, c void SAL_CALL OPreparedStatement::setObjectNull( sal_Int32 parameterIndex, sal_Int32 sqlType, const ::rtl::OUString& /*typeName*/ ) throw(SQLException, RuntimeException) { - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(OStatement_BASE::rBHelper.bDisposed); - setNull(parameterIndex,sqlType); } // ------------------------------------------------------------------------- @@ -556,20 +594,21 @@ void SAL_CALL OPreparedStatement::setObject( sal_Int32 parameterIndex, const Any void SAL_CALL OPreparedStatement::setShort( sal_Int32 parameterIndex, sal_Int16 x ) throw(SQLException, RuntimeException) { - setParameter(parameterIndex,DataType::SMALLINT,sizeof(sal_Int16),&x); + setScalarParameter(parameterIndex, DataType::SMALLINT, 5, x); } // ------------------------------------------------------------------------- void SAL_CALL OPreparedStatement::setBytes( sal_Int32 parameterIndex, const Sequence< sal_Int8 >& x ) throw(SQLException, RuntimeException) { - setParameter(parameterIndex,DataType::BINARY,x.getLength(),(void*)&x); - boundParams[parameterIndex-1].setSequence(x); // this assures that the sequence stays alive + setParameter(parameterIndex, DataType::BINARY, x); } // ------------------------------------------------------------------------- void SAL_CALL OPreparedStatement::setCharacterStream( sal_Int32 parameterIndex, const Reference< ::com::sun::star::io::XInputStream >& x, sal_Int32 length ) throw(SQLException, RuntimeException) { + // LEM: It is quite unclear to me what the interface here is. + // The XInputStream provides *bytes*, not characters. setStream(parameterIndex, x, length, DataType::LONGVARCHAR); } // ------------------------------------------------------------------------- @@ -582,6 +621,7 @@ void SAL_CALL OPreparedStatement::setBinaryStream( sal_Int32 parameterIndex, con void SAL_CALL OPreparedStatement::clearParameters( ) throw(SQLException, RuntimeException) { + ::osl::MutexGuard aGuard( m_aMutex ); prepareStatement(); OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!"); SQLRETURN nRet = N3SQLFreeStmt (m_aStatementHandle, SQL_RESET_PARAMS); @@ -591,6 +631,7 @@ void SAL_CALL OPreparedStatement::clearParameters( ) throw(SQLException, Runtim // ------------------------------------------------------------------------- void SAL_CALL OPreparedStatement::clearBatch( ) throw(SQLException, RuntimeException) { + ::dbtools::throwFunctionNotSupportedException( "XPreparedBatchExecution::clearBatch", *this ); // clearParameters( ); // m_aBatchList.erase(); } @@ -598,11 +639,14 @@ void SAL_CALL OPreparedStatement::clearBatch( ) throw(SQLException, RuntimeExce void SAL_CALL OPreparedStatement::addBatch( ) throw(SQLException, RuntimeException) { + ::dbtools::throwFunctionNotSupportedException( "XPreparedBatchExecution::addBatch", *this ); } // ------------------------------------------------------------------------- Sequence< sal_Int32 > SAL_CALL OPreparedStatement::executeBatch( ) throw(SQLException, RuntimeException) { + ::dbtools::throwFunctionNotSupportedException( "XPreparedBatchExecution::executeBatch", *this ); + // not reached, but keep -Werror happy return Sequence< sal_Int32 > (); } // ------------------------------------------------------------------------- @@ -632,12 +676,6 @@ void OPreparedStatement::initBoundParam () throw(SQLException) boundParams = new OBoundParam[numParams]; - // initialize each bound parameter - - for (sal_Int32 i = 0; i < numParams; i++) - { - boundParams[i].initialize (); - } } } // ------------------------------------------------------------------------- @@ -648,14 +686,13 @@ void OPreparedStatement::initBoundParam () throw(SQLException) // parameter. //-------------------------------------------------------------------- -sal_Int8* OPreparedStatement::allocBindBuf( sal_Int32 index,sal_Int32 bufLen) +void* OPreparedStatement::allocBindBuf( sal_Int32 index,sal_Int32 bufLen) { - sal_Int8* b = NULL; + void* b = NULL; // Sanity check the parameter number - if ((index >= 1) && - (index <= numParams) && bufLen > 0 ) + if ((index >= 1) && (index <= numParams)) { b = boundParams[index - 1].allocBindDataBuffer(bufLen); } @@ -669,9 +706,9 @@ sal_Int8* OPreparedStatement::allocBindBuf( sal_Int32 index,sal_Int32 bufLen) // Gets the length buffer for the given parameter index //-------------------------------------------------------------------- -sal_Int8* OPreparedStatement::getLengthBuf (sal_Int32 index) +SQLLEN* OPreparedStatement::getLengthBuf (sal_Int32 index) { - sal_Int8* b = NULL; + SQLLEN* b = NULL; // Sanity check the parameter number @@ -762,7 +799,7 @@ void OPreparedStatement::setStream( sal_Int32 ParameterIndex, const Reference< XInputStream>& x, SQLLEN length, - sal_Int32 SQLtype) + sal_Int32 _nType) throw(SQLException) { ::osl::MutexGuard aGuard( m_aMutex ); @@ -774,35 +811,33 @@ void OPreparedStatement::setStream( checkParameterIndex(ParameterIndex); // Get the buffer needed for the length - sal_Int8* lenBuf = getLengthBuf(ParameterIndex); + SQLLEN * const lenBuf = getLengthBuf(ParameterIndex); // Allocate a new buffer for the parameter data. This buffer // will be returned by SQLParamData (it is set to the parameter - // number, a 4-sal_Int8 integer) + // number, a sal_Int32) - sal_Int8* dataBuf = allocBindBuf (ParameterIndex, 4); + sal_Int32* dataBuf = static_cast<sal_Int32*>( allocBindBuf(ParameterIndex, sizeof(ParameterIndex)) ); + *dataBuf = ParameterIndex; // Bind the parameter with SQL_LEN_DATA_AT_EXEC - SQLSMALLINT Ctype = SQL_C_CHAR; - SQLLEN atExec = SQL_LEN_DATA_AT_EXEC (length); - memcpy (dataBuf, &ParameterIndex, sizeof(ParameterIndex)); - memcpy (lenBuf, &atExec, sizeof (atExec)); + *lenBuf = SQL_LEN_DATA_AT_EXEC (length); - if ((SQLtype == SQL_BINARY) || (SQLtype == SQL_VARBINARY) || (SQLtype == SQL_LONGVARBINARY)) - Ctype = SQL_C_BINARY; + SQLSMALLINT fCType, fSqlType; + OTools::getBindTypes(useWChar, m_pConnection->useOldDateFormat(), OTools::jdbcTypeToOdbc(_nType), fCType, fSqlType); OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!"); N3SQLBindParameter(m_aStatementHandle, - (SQLUSMALLINT)ParameterIndex, - (SQLUSMALLINT)SQL_PARAM_INPUT, - Ctype, - (SQLSMALLINT)SQLtype, - (SQLULEN)length, - 0, - dataBuf, - sizeof(ParameterIndex), - (SQLLEN*)lenBuf); + static_cast<SQLUSMALLINT>(ParameterIndex), + SQL_PARAM_INPUT, + fCType, + fSqlType, + length, + invalid_scale, + dataBuf, + sizeof(ParameterIndex), + lenBuf); // Save the input stream boundParams[ParameterIndex - 1].setInputStream (x, length); @@ -865,7 +900,9 @@ void OPreparedStatement::prepareStatement() // ----------------------------------------------------------------------------- void OPreparedStatement::checkParameterIndex(sal_Int32 _parameterIndex) { - if( !_parameterIndex || _parameterIndex > numParams) + if( _parameterIndex > numParams || + _parameterIndex < 1 || + _parameterIndex > std::numeric_limits<SQLUSMALLINT>::max() ) { ::connectivity::SharedResources aResources; const ::rtl::OUString sError( aResources.getResourceStringWithSubstitution(STR_WRONG_PARAM_INDEX, diff --git a/connectivity/source/drivers/odbcbase/OResultSet.cxx b/connectivity/source/drivers/odbcbase/OResultSet.cxx index 7cfebcb23f4d..96d7d8ee4672 100644 --- a/connectivity/source/drivers/odbcbase/OResultSet.cxx +++ b/connectivity/source/drivers/odbcbase/OResultSet.cxx @@ -1058,7 +1058,7 @@ void SAL_CALL OResultSet::updateDouble( sal_Int32 columnIndex, double x ) throw( void SAL_CALL OResultSet::updateString( sal_Int32 columnIndex, const ::rtl::OUString& x ) throw(SQLException, RuntimeException) { sal_Int32 nType = m_aRow[columnIndex].getTypeKind(); - SQLSMALLINT nOdbcType = static_cast<SQLSMALLINT>(OTools::jdbcTypeToOdbc(nType)); + SQLSMALLINT nOdbcType = 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); @@ -1067,7 +1067,7 @@ void SAL_CALL OResultSet::updateString( sal_Int32 columnIndex, const ::rtl::OUSt void SAL_CALL OResultSet::updateBytes( sal_Int32 columnIndex, const Sequence< sal_Int8 >& x ) throw(SQLException, RuntimeException) { sal_Int32 nType = m_aRow[columnIndex].getTypeKind(); - SQLSMALLINT nOdbcType = static_cast<SQLSMALLINT>(OTools::jdbcTypeToOdbc(nType)); + SQLSMALLINT nOdbcType = 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); diff --git a/connectivity/source/drivers/odbcbase/OTools.cxx b/connectivity/source/drivers/odbcbase/OTools.cxx index b38dd2b29766..3e327803513a 100644 --- a/connectivity/source/drivers/odbcbase/OTools.cxx +++ b/connectivity/source/drivers/odbcbase/OTools.cxx @@ -150,190 +150,6 @@ void OTools::getValue( OConnection* _pConnection, _aStatementHandle,SQL_HANDLE_STMT,_xInterface,sal_False); _bWasNull = pcbValue == SQL_NULL_DATA; } -// ----------------------------------------------------------------------------- -void OTools::bindParameter( OConnection* _pConnection, - SQLHANDLE _hStmt, - sal_Int32 nPos, - sal_Int8*& pDataBuffer, - sal_Int8* pLenBuffer, - SQLSMALLINT _nODBCtype, - 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) -{ - RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "odbc", "Ocke.Janssen@sun.com", "OTools::bindParameter" ); - SQLRETURN nRetcode; - SQLSMALLINT fSqlType; - SQLSMALLINT fCType; - SQLLEN nMaxLen = 0; - 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, atExec); - if ((nColumnSize == 0) && (fSqlType == SQL_CHAR || fSqlType == SQL_VARCHAR || fSqlType == SQL_LONGVARCHAR)) - nColumnSize = 1; - - if (atExec) - memcpy(pDataBuffer,&nPos,sizeof(nPos)); - - nRetcode = (*(T3SQLBindParameter)_pConnection->getOdbcFunction(ODBC3SQLBindParameter))(_hStmt, - (SQLUSMALLINT)nPos, - SQL_PARAM_INPUT, - fCType, - fSqlType, - nColumnSize, - nDecimalDigits, - pDataBuffer, - nMaxLen, - pLen); - - OTools::ThrowException(_pConnection,nRetcode,_hStmt,SQL_HANDLE_STMT,_xInterface); -} -// ----------------------------------------------------------------------------- -void OTools::bindData( SQLSMALLINT _nOdbcType, - sal_Bool _bUseWChar, - sal_Int8 *&_pData, - SQLLEN*& pLen, - const void* _pValue, - rtl_TextEncoding _nTextEncoding, - SQLULEN& _nColumnSize, - bool &atExec) -{ - RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "odbc", "Ocke.Janssen@sun.com", "OTools::bindData" ); - _nColumnSize = 0; - atExec = false; - - switch (_nOdbcType) - { - case SQL_CHAR: - case SQL_VARCHAR: - case SQL_DECIMAL: - if(_bUseWChar) - { - *pLen = SQL_NTS; - ::rtl::OUString sStr(*(::rtl::OUString*)_pValue); - _nColumnSize = sStr.getLength(); - *((rtl::OUString*)_pData) = sStr; - - // Pointer on Char* - _pData = (sal_Int8*)((rtl::OUString*)_pData)->getStr(); - } - else - { - ::rtl::OString aString(::rtl::OUStringToOString(*(::rtl::OUString*)_pValue,_nTextEncoding)); - *pLen = SQL_NTS; - _nColumnSize = aString.getLength(); - memcpy(_pData,aString.getStr(),aString.getLength()); - ((sal_Int8*)_pData)[aString.getLength()] = '\0'; - } - break; - - case SQL_BIGINT: - *((sal_Int64*)_pData) = *(sal_Int64*)_pValue; - *pLen = sizeof(sal_Int64); - _nColumnSize = *pLen; - break; - - case SQL_NUMERIC: - if(_bUseWChar) - { - ::rtl::OUString aString = rtl::OUString::valueOf(*(double*)_pValue); - _nColumnSize = aString.getLength(); - *pLen = _nColumnSize; - *((rtl::OUString*)_pData) = aString; - // Pointer on Char* - _pData = (sal_Int8*)((rtl::OUString*)_pData)->getStr(); - } - else - { - ::rtl::OString aString = ::rtl::OString::valueOf(*(double*)_pValue); - _nColumnSize = aString.getLength(); - *pLen = _nColumnSize; - memcpy(_pData,aString.getStr(),aString.getLength()); - ((sal_Int8*)_pData)[_nColumnSize] = '\0'; - } break; - case SQL_BIT: - case SQL_TINYINT: - *((sal_Int8*)_pData) = *(sal_Int8*)_pValue; - *pLen = sizeof(sal_Int8); - break; - - 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_FLOAT: - *((float*)_pData) = *(float*)_pValue; - *pLen = sizeof(float); - break; - case SQL_REAL: - case SQL_DOUBLE: - *((double*)_pData) = *(double*)_pValue; - *pLen = sizeof(double); - break; - case SQL_BINARY: - case SQL_VARBINARY: - { - const ::com::sun::star::uno::Sequence< sal_Int8 >* pSeq = static_cast< const ::com::sun::star::uno::Sequence< sal_Int8 >* >(_pValue); - OSL_ENSURE(pSeq,"OTools::bindData: Sequence is null!"); - - if(pSeq) - { - _pData = (sal_Int8*)pSeq->getConstArray(); - *pLen = pSeq->getLength(); - } - } - break; - case SQL_LONGVARBINARY: - { - sal_Int32 nLen = 0; - 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: - { - 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 = (SQLLEN)SQL_LEN_DATA_AT_EXEC(nLen); - atExec = true; - } break; - case SQL_DATE: - *(DATE_STRUCT*)_pData = *(DATE_STRUCT*)_pValue; - *pLen = (SQLLEN)sizeof(DATE_STRUCT); - _nColumnSize = 10; - break; - case SQL_TIME: - *(TIME_STRUCT*)_pData = *(TIME_STRUCT*)_pValue; - *pLen = (SQLLEN)sizeof(TIME_STRUCT); - _nColumnSize = 8; - break; - case SQL_TIMESTAMP: - *(TIMESTAMP_STRUCT*)_pData = *(TIMESTAMP_STRUCT*)_pValue; - *pLen = (SQLLEN)sizeof(TIMESTAMP_STRUCT); - // 20+sub-zero precision; we have hundredths of seconds - _nColumnSize = 22; - break; - } -} // ------------------------------------------------------------------------- void OTools::bindValue( OConnection* _pConnection, SQLHANDLE _aStatementHandle, @@ -342,7 +158,7 @@ void OTools::bindValue( OConnection* _pConnection, SQLSMALLINT _nMaxLen, const void* _pValue, void* _pData, - SQLLEN *pLen, + SQLLEN * const pLen, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface, rtl_TextEncoding _nTextEncoding, sal_Bool _bUseOldTimeDate) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) @@ -779,7 +595,7 @@ void OTools::GetInfo(OConnection* _pConnection, _aConnectionHandle,SQL_HANDLE_DBC,_xInterface); } // ------------------------------------------------------------------------- -sal_Int32 OTools::MapOdbcType2Jdbc(sal_Int32 _nType) +sal_Int32 OTools::MapOdbcType2Jdbc(SQLSMALLINT _nType) { sal_Int32 nValue = DataType::VARCHAR; switch(_nType) @@ -857,7 +673,7 @@ sal_Int32 OTools::MapOdbcType2Jdbc(sal_Int32 _nType) // jdbcTypeToOdbc // Convert the JDBC SQL type to the correct ODBC type //-------------------------------------------------------------------- -sal_Int32 OTools::jdbcTypeToOdbc(sal_Int32 jdbcType) +SQLSMALLINT OTools::jdbcTypeToOdbc(sal_Int32 jdbcType) { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "odbc", "Ocke.Janssen@sun.com", "OTools::jdbcTypeToOdbc" ); // For the most part, JDBC types match ODBC types. We'll @@ -876,6 +692,11 @@ sal_Int32 OTools::jdbcTypeToOdbc(sal_Int32 jdbcType) case DataType::TIMESTAMP: odbcType = SQL_TIMESTAMP; break; + // ODBC doesn't have any notion of CLOB or BLOB + case DataType::CLOB: + odbcType = SQL_LONGVARCHAR; + case DataType::BLOB: + odbcType = SQL_LONGVARBINARY; } return odbcType; diff --git a/connectivity/source/inc/ado/Aolewrap.hxx b/connectivity/source/inc/ado/Aolewrap.hxx index 6f428bfd19f1..c4462a1eb11a 100644 --- a/connectivity/source/inc/ado/Aolewrap.hxx +++ b/connectivity/source/inc/ado/Aolewrap.hxx @@ -94,8 +94,8 @@ namespace connectivity } WpOLEBase(const WpOLEBase<T>& aWrapper) - : WpBase(aWrapper) - , pInterface(aWrapper.pInterface) + : WpBase( aWrapper ) + , pInterface( aWrapper.pInterface ) { } diff --git a/connectivity/source/inc/dbase/DTable.hxx b/connectivity/source/inc/dbase/DTable.hxx index ad352d0a4ccf..691b65469ed2 100644 --- a/connectivity/source/inc/dbase/DTable.hxx +++ b/connectivity/source/inc/dbase/DTable.hxx @@ -105,9 +105,9 @@ namespace connectivity sal_Bool ReadMemoHeader(); sal_Bool ReadMemo(sal_uIntPtr nBlockNo, ORowSetValue& aVariable); - sal_Bool WriteMemo(ORowSetValue& aVariable, sal_uIntPtr& rBlockNr); + sal_Bool WriteMemo(const ORowSetValue& aVariable, sal_uIntPtr& rBlockNr); sal_Bool WriteBuffer(); - sal_Bool UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow,const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess>& _xCols); + sal_Bool UpdateBuffer(OValueRefVector& rRow, OValueRefRow pOrgRow,const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess>& _xCols, bool bForceAllFields); ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> isUniqueByColumnName(sal_Int32 _nColumnPos); void AllocBuffer(); diff --git a/connectivity/source/inc/odbc/OBoundParam.hxx b/connectivity/source/inc/odbc/OBoundParam.hxx index 8e587b4f2fc2..fca532bcade9 100644 --- a/connectivity/source/inc/odbc/OBoundParam.hxx +++ b/connectivity/source/inc/odbc/OBoundParam.hxx @@ -20,6 +20,7 @@ #define _CONNECTIVITY_OBOUNPARAM_HXX_ #include <com/sun/star/io/XInputStream.hpp> +#include <com/sun/star/sdbc/DataType.hpp> #include "odbc/odbcbasedllapi.hxx" namespace connectivity @@ -31,50 +32,29 @@ namespace connectivity public: OBoundParam() + : binaryData(NULL) + , paramInputStreamLen(0) + , sqlType(::com::sun::star::sdbc::DataType::SQLNULL) + , outputParameter(false) { - paramLength = NULL; - binaryData = NULL; - pA1=0; - pA2=0; - pB1=0; - pB2=0; - pC1=0; - pC2=0; - pS1=0; - pS2=0; } ~OBoundParam() { - delete [] binaryData; - delete [] paramLength; + free(binaryData); } //-------------------------------------------------------------------- - // initialize - // Perform an necessary initialization - //-------------------------------------------------------------------- - void initialize () - { - // Allocate storage for the length. Note - the length is - // stored in native format, and will have to be converted - // to a Java sal_Int32. The jdbcodbc 'C' bridge provides an - // interface to do this. - - paramLength = new sal_Int8[sizeof(SQLLEN)]; - } - - //-------------------------------------------------------------------- // allocBindDataBuffer // Allocates and returns a new bind data buffer of the specified // length //-------------------------------------------------------------------- - sal_Int8* allocBindDataBuffer (sal_Int32 bufLen) + void* allocBindDataBuffer (sal_Int32 bufLen) { - if ( binaryData ) - delete [] binaryData; - binaryData = new sal_Int8[bufLen]; - - // Reset the input stream, we are doing a new bind + // Reset the input stream and sequence, we are doing a new bind setInputStream (NULL, 0); + aSequence.realloc(0); + + free(binaryData); + binaryData = (bufLen > 0) ? malloc(bufLen) : NULL; return binaryData; } @@ -83,7 +63,7 @@ namespace connectivity // getBindDataBuffer // Returns the data buffer to be used when binding to a parameter //-------------------------------------------------------------------- - sal_Int8* getBindDataBuffer () + void* getBindDataBuffer () { return binaryData; } @@ -92,9 +72,9 @@ namespace connectivity // getBindLengthBuffer // Returns the length buffer to be used when binding to a parameter //-------------------------------------------------------------------- - sal_Int8* getBindLengthBuffer () + SQLLEN* getBindLengthBuffer () { - return paramLength; + return ¶mLength; } //-------------------------------------------------------------------- @@ -176,20 +156,20 @@ namespace connectivity // Data attributes //==================================================================== - sal_Int8* binaryData; // Storage area to be used - // when binding the parameter + void *binaryData; // Storage area to be used + // when binding the parameter - sal_Int8* paramLength; // Storage area to be used - // for the bound length of the - // parameter. Note that this - // data is in native format. + SQLLEN paramLength; // Storage area to be used + // for the bound length of the + // parameter. Note that this + // data is in native format. ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream> paramInputStream; ::com::sun::star::uno::Sequence< sal_Int8 > aSequence; // When an input stream is - // bound to a parameter, the - // input stream is saved - // until needed. + // bound to a parameter, a + // reference to the input stream is saved + // until not needed anymore. sal_Int32 paramInputStreamLen; // Length of input stream @@ -197,16 +177,6 @@ namespace connectivity // register an OUT parameter sal_Bool outputParameter; // true for OUTPUT parameters - - - sal_Int32 pA1; //pointers - sal_Int32 pA2; - sal_Int32 pB1; - sal_Int32 pB2; - sal_Int32 pC1; - sal_Int32 pC2; - sal_Int32 pS1; - sal_Int32 pS2;// reserved for strings(UTFChars) }; } } diff --git a/connectivity/source/inc/odbc/OPreparedStatement.hxx b/connectivity/source/inc/odbc/OPreparedStatement.hxx index 0d34099f39ab..139ea3fda327 100644 --- a/connectivity/source/inc/odbc/OPreparedStatement.hxx +++ b/connectivity/source/inc/odbc/OPreparedStatement.hxx @@ -46,6 +46,7 @@ namespace connectivity public OPreparedStatement_BASE { protected: + static const short invalid_scale = -1; struct Parameter { ::com::sun::star::uno::Any aValue; @@ -74,15 +75,20 @@ namespace connectivity void putParamData (sal_Int32 index) throw(::com::sun::star::sdbc::SQLException); void setStream (sal_Int32 ParameterIndex,const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream>& x, SQLLEN length,sal_Int32 SQLtype) throw(::com::sun::star::sdbc::SQLException); - sal_Int8* getLengthBuf (sal_Int32 index); - sal_Int8* allocBindBuf ( sal_Int32 index, sal_Int32 bufLen); + SQLLEN* getLengthBuf (sal_Int32 index); + void* allocBindBuf ( sal_Int32 index, sal_Int32 bufLen); void initBoundParam () throw(::com::sun::star::sdbc::SQLException); - void setParameter(sal_Int32 parameterIndex,sal_Int32 _nType,sal_Int32 _nSize,void* _pData); + void setParameterPre(sal_Int32 parameterIndex); + template <typename T> void setScalarParameter(sal_Int32 parameterIndex, sal_Int32 _nType, SQLULEN _nColumnSize, const T i_Value); + void setParameter(sal_Int32 parameterIndex, sal_Int32 _nType, SQLULEN _nColumnSize, sal_Int32 _nScale, const void* _pData, SQLULEN _nDataLen, SQLLEN _nDataAllocLen); + void setParameter(sal_Int32 parameterIndex, sal_Int32 _nType, sal_Int32 _nColumnSize, sal_Int32 _nByteSize, void* _pData); + // Wrappers for special cases + void setParameter(sal_Int32 parameterIndex, sal_Int32 _nType, sal_Int16 _nScale, const ::rtl::OUString &_sData); + void setParameter(sal_Int32 parameterIndex, sal_Int32 _nType, const com::sun::star::uno::Sequence< sal_Int8 > &_Data); sal_Bool isPrepared() const { return m_bPrepared;} void prepareStatement(); void checkParameterIndex(sal_Int32 _parameterIndex); - void setDecimal( sal_Int32 parameterIndex, const ::rtl::OUString& x ); /** creates the driver specific resultset (factory) diff --git a/connectivity/source/inc/odbc/OTools.hxx b/connectivity/source/inc/odbc/OTools.hxx index 99339e23bf31..a971d4c8edaa 100644 --- a/connectivity/source/inc/odbc/OTools.hxx +++ b/connectivity/source/inc/odbc/OTools.hxx @@ -138,8 +138,8 @@ namespace connectivity sal_Bool &_rValue, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xInterface) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - static sal_Int32 MapOdbcType2Jdbc(sal_Int32 _nType); - static sal_Int32 jdbcTypeToOdbc(sal_Int32 jdbcType); + static sal_Int32 MapOdbcType2Jdbc(SQLSMALLINT _nType); + static SQLSMALLINT jdbcTypeToOdbc(sal_Int32 jdbcType); static DATE_STRUCT DateToOdbcDate(const ::com::sun::star::util::Date& x) { @@ -206,40 +206,6 @@ namespace connectivity void* _pValue, SQLLEN _nSize) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - /** - bindData copies data from pValue to pData - @param _nOdbcType [in] the ODBC sql type - @param _bUseWChar [in] true when Unicode should be used - @param _pData [in/out] data copy destination - @param pLen [out] buffer length of data written to _pData - @param _pValue [in] contains the data to be copied - @param _nTextEncoding [in] the text encoding - @param _nColumnSize [out] columnSize of data written to _pData - @param atExec [out] data was not copied, but setup for data-at-execution; - caller is responsible for writing a token in _pData - */ - static void bindData( SQLSMALLINT _nOdbcType, - sal_Bool _bUseWChar, - sal_Int8 *&_pData, - SQLLEN*& pLen, - const void* _pValue, - rtl_TextEncoding _nTextEncoding, - SQLULEN& _nColumnSize, - bool &atExec); - - static void bindParameter( OConnection* _pConnection, - 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( OConnection* _pConnection, SQLHANDLE _aStatementHandle, sal_Int32 columnIndex, diff --git a/connectivity/source/manager/mdrivermanager.cxx b/connectivity/source/manager/mdrivermanager.cxx index 743d38a35e8d..7f2d8fb30c2c 100644 --- a/connectivity/source/manager/mdrivermanager.cxx +++ b/connectivity/source/manager/mdrivermanager.cxx @@ -35,6 +35,7 @@ #include <osl/diagnose.h> #include <algorithm> +#include <iterator> #include <o3tl/compat_functional.hxx> diff --git a/connectivity/source/parse/PColumn.cxx b/connectivity/source/parse/PColumn.cxx index f9523c98fcac..7649044bd168 100644 --- a/connectivity/source/parse/PColumn.cxx +++ b/connectivity/source/parse/PColumn.cxx @@ -25,6 +25,8 @@ #include <comphelper/types.hxx> #include <tools/diagnose_ex.h> +#include <bitset> + using namespace ::comphelper; using namespace connectivity; using namespace dbtools; @@ -48,6 +50,9 @@ OParseColumn::OParseColumn(const Reference<XPropertySet>& _xColumn,sal_Bool , sal_False , getBOOL(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISCURRENCY))) , _bCase + , getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CATALOGNAME))) + , getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCHEMANAME))) + , getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME))) ) , m_bFunction(sal_False) , m_bDbasePrecisionChanged(sal_False) @@ -68,7 +73,10 @@ OParseColumn::OParseColumn( const ::rtl::OUString& _Name, sal_Int32 _Type, sal_Bool _IsAutoIncrement, sal_Bool _IsCurrency, - sal_Bool _bCase + sal_Bool _bCase, + const ::rtl::OUString& _CatalogName, + const ::rtl::OUString& _SchemaName, + const ::rtl::OUString& _TableName ) : connectivity::sdbcx::OColumn(_Name, _TypeName, _DefaultValue, @@ -80,7 +88,10 @@ OParseColumn::OParseColumn( const ::rtl::OUString& _Name, _IsAutoIncrement, sal_False, _IsCurrency, - _bCase) + _bCase, + _CatalogName, + _SchemaName, + _TableName) , m_bFunction(sal_False) , m_bDbasePrecisionChanged(sal_False) , m_bAggregateFunction(sal_False) @@ -116,7 +127,7 @@ OParseColumn::OParseColumn( const ::rtl::OUString& _Name, // ------------------------------------------------------------------------- OParseColumn* OParseColumn::createColumnForResultSet( const Reference< XResultSetMetaData >& _rxResMetaData, - const Reference< XDatabaseMetaData >& _rxDBMetaData, sal_Int32 _nColumnPos,StringMap& _rColumns ) + const Reference< XDatabaseMetaData >& _rxDBMetaData, sal_Int32 _nColumnPos, StringMap& _rColumns ) { ::rtl::OUString sLabel = _rxResMetaData->getColumnLabel( _nColumnPos ); // retrieve the name of the column @@ -143,17 +154,11 @@ OParseColumn* OParseColumn::createColumnForResultSet( const Reference< XResultSe _rxResMetaData->getColumnType( _nColumnPos ), _rxResMetaData->isAutoIncrement( _nColumnPos ), _rxResMetaData->isCurrency( _nColumnPos ), - _rxDBMetaData->supportsMixedCaseQuotedIdentifiers() + _rxDBMetaData->supportsMixedCaseQuotedIdentifiers(), + _rxResMetaData->getCatalogName( _nColumnPos ), + _rxResMetaData->getSchemaName( _nColumnPos ), + _rxResMetaData->getTableName( _nColumnPos ) ); - const ::rtl::OUString sTableName = _rxResMetaData->getTableName( _nColumnPos ); - if ( !sTableName.isEmpty() ) - pColumn->setTableName( ::dbtools::composeTableName( _rxDBMetaData, - _rxResMetaData->getCatalogName( _nColumnPos ), - _rxResMetaData->getSchemaName( _nColumnPos ), - sTableName, - sal_False, - eComplete - ) ); pColumn->setIsSearchable( _rxResMetaData->isSearchable( _nColumnPos ) ); pColumn->setRealName(_rxResMetaData->getColumnName( _nColumnPos )); pColumn->setLabel(sLabel); @@ -167,13 +172,12 @@ OParseColumn::~OParseColumn() // ------------------------------------------------------------------------- void OParseColumn::construct() { - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FUNCTION), PROPERTY_ID_FUNCTION, 0, &m_bFunction, ::getCppuType(static_cast< sal_Bool*>(0))); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_AGGREGATEFUNCTION), PROPERTY_ID_AGGREGATEFUNCTION, 0, &m_bAggregateFunction, ::getCppuType(static_cast< sal_Bool*>(0))); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME), PROPERTY_ID_TABLENAME, 0, &m_aTableName, ::getCppuType(static_cast< ::rtl::OUString*>(0))); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_REALNAME), PROPERTY_ID_REALNAME, 0, &m_aRealName, ::getCppuType(static_cast< ::rtl::OUString*>(0))); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DBASEPRECISIONCHANGED), PROPERTY_ID_DBASEPRECISIONCHANGED, 0, &m_bDbasePrecisionChanged, ::getCppuType(static_cast<sal_Bool*>(0))); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISSEARCHABLE), PROPERTY_ID_ISSEARCHABLE, 0, &m_bIsSearchable, ::getCppuType(static_cast< sal_Bool*>(0))); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_LABEL), PROPERTY_ID_LABEL, 0, &m_sLabel, ::getCppuType(static_cast< ::rtl::OUString*>(0))); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FUNCTION), PROPERTY_ID_FUNCTION, 0, &m_bFunction, ::getCppuType(&m_bFunction)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_AGGREGATEFUNCTION), PROPERTY_ID_AGGREGATEFUNCTION, 0, &m_bAggregateFunction, ::getCppuType(&m_bAggregateFunction)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_REALNAME), PROPERTY_ID_REALNAME, 0, &m_aRealName, ::getCppuType(&m_aRealName)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DBASEPRECISIONCHANGED), PROPERTY_ID_DBASEPRECISIONCHANGED, 0, &m_bDbasePrecisionChanged, ::getCppuType(&m_bDbasePrecisionChanged)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISSEARCHABLE), PROPERTY_ID_ISSEARCHABLE, 0, &m_bIsSearchable, ::getCppuType(&m_bIsSearchable)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_LABEL), PROPERTY_ID_LABEL, 0, &m_sLabel, ::getCppuType(&m_sLabel)); } // ----------------------------------------------------------------------------- ::cppu::IPropertyArrayHelper* OParseColumn::createArrayHelper() const @@ -188,24 +192,6 @@ void OParseColumn::construct() } // ----------------------------------------------------------------------------- -namespace -{ - ::rtl::OUString lcl_getColumnTableName( const Reference< XPropertySet >& i_parseColumn ) - { - ::rtl::OUString sColumnTableName; - try - { - OSL_VERIFY( i_parseColumn->getPropertyValue( OMetaConnection::getPropMap().getNameByIndex( PROPERTY_ID_TABLENAME ) ) >>= sColumnTableName ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - return sColumnTableName; - } -} - -// ----------------------------------------------------------------------------- OOrderColumn::OOrderColumn( const Reference<XPropertySet>& _xColumn, const ::rtl::OUString& i_rOriginatingTableName, sal_Bool _bCase, sal_Bool _bAscending ) : connectivity::sdbcx::OColumn( @@ -220,12 +206,17 @@ OOrderColumn::OOrderColumn( const Reference<XPropertySet>& _xColumn, const ::rtl getBOOL(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT))), sal_False, getBOOL(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISCURRENCY))), - _bCase + _bCase, + getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CATALOGNAME))), + getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCHEMANAME))), + i_rOriginatingTableName ) ,m_bAscending(_bAscending) - ,m_sTableName( i_rOriginatingTableName ) { construct(); + OSL_ENSURE( getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME))).isEmpty() || + i_rOriginatingTableName == getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME)) ), + "dbaccess::OOrderColumn::OOrderColumn: forced originating table name != underlying column table name" ); } // ----------------------------------------------------------------------------- @@ -242,10 +233,12 @@ OOrderColumn::OOrderColumn( const Reference<XPropertySet>& _xColumn, sal_Bool _b getBOOL(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT))), sal_False, getBOOL(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISCURRENCY))), - _bCase + _bCase, + getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CATALOGNAME))), + getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCHEMANAME))), + getString(_xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME))) ) ,m_bAscending(_bAscending) - ,m_sTableName( lcl_getColumnTableName( _xColumn ) ) { construct(); } @@ -259,9 +252,7 @@ OOrderColumn::~OOrderColumn() void OOrderColumn::construct() { registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISASCENDING), PROPERTY_ID_ISASCENDING, - PropertyAttribute::READONLY, const_cast< sal_Bool* >( &m_bAscending ), ::getCppuType( static_cast< sal_Bool* >( 0 ) ) ); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME), PROPERTY_ID_TABLENAME, - PropertyAttribute::READONLY, const_cast< ::rtl::OUString* >( &m_sTableName ), ::getCppuType(static_cast< ::rtl::OUString*>(0))); + PropertyAttribute::READONLY, const_cast< sal_Bool* >( &m_bAscending ), ::getCppuType( &m_bAscending ) ); } // ----------------------------------------------------------------------------- ::cppu::IPropertyArrayHelper* OOrderColumn::createArrayHelper() const diff --git a/connectivity/source/parse/sqliterator.cxx b/connectivity/source/parse/sqliterator.cxx index f30aca2fe41f..7d91655b6394 100644 --- a/connectivity/source/parse/sqliterator.cxx +++ b/connectivity/source/parse/sqliterator.cxx @@ -40,6 +40,9 @@ #include "diagnose_ex.h" #include <rtl/logfile.hxx> + +#include <iterator> + using namespace ::comphelper; using namespace ::connectivity; using namespace ::connectivity::sdbcx; @@ -896,7 +899,8 @@ void OSQLParseTreeIterator::traverseCreateColumns(const OSQLParseNode* pSelectNo { //TODO:Create a new class for create statement to handle field length OParseColumn* pColumn = new OParseColumn(aColumnName,aTypeName,::rtl::OUString(),::rtl::OUString(), - ColumnValue::NULLABLE_UNKNOWN,0,0,nType,sal_False,sal_False,isCaseSensitive()); + ColumnValue::NULLABLE_UNKNOWN,0,0,nType,sal_False,sal_False,isCaseSensitive(), + ::rtl::OUString(),::rtl::OUString(),::rtl::OUString()); pColumn->setFunction(sal_False); pColumn->setRealName(aColumnName); @@ -1497,7 +1501,10 @@ void OSQLParseTreeIterator::traverseParameter(const OSQLParseNode* _pParseNode nType, sal_False, sal_False, - isCaseSensitive()); + isCaseSensitive(), + ::rtl::OUString(), + ::rtl::OUString(), + ::rtl::OUString()); pColumn->setFunction(sal_True); pColumn->setAggregateFunction(sal_True); pColumn->setRealName(sFunctionName); @@ -1561,7 +1568,10 @@ void OSQLParseTreeIterator::traverseParameter(const OSQLParseNode* _pParseNode nType, sal_False, sal_False, - isCaseSensitive() ); + isCaseSensitive(), + ::rtl::OUString(), + ::rtl::OUString(), + ::rtl::OUString()); pColumn->setName(aNewColName); pColumn->setRealName(sParameterName); m_aParameters->get().push_back(pColumn); @@ -1704,7 +1714,10 @@ void OSQLParseTreeIterator::appendColumns(::rtl::Reference<OSQLColumns>& _rColum , getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE))) , getBOOL(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT))) , getBOOL(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISCURRENCY))) - , isCaseSensitive() ); + , isCaseSensitive() + , getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CATALOGNAME))) + , getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCHEMANAME))) + , getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME)))); pColumn->setTableName(_rTableAlias); pColumn->setRealName(*pBegin); @@ -1782,7 +1795,10 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns>& _ _nType, sal_False, sal_False, - isCaseSensitive() + isCaseSensitive(), + ::rtl::OUString(), + ::rtl::OUString(), + ::rtl::OUString() ); xNewColumn = pColumn; @@ -1796,7 +1812,8 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns>& _ ::rtl::OUString aNewColName(getUniqueColumnName(rColumnAlias)); OParseColumn* pColumn = new OParseColumn(aNewColName,::rtl::OUString(),::rtl::OUString(),::rtl::OUString(), - ColumnValue::NULLABLE_UNKNOWN,0,0,_nType,sal_False,sal_False,isCaseSensitive()); + ColumnValue::NULLABLE_UNKNOWN,0,0,_nType,sal_False,sal_False,isCaseSensitive(), + ::rtl::OUString(),::rtl::OUString(),::rtl::OUString()); pColumn->setFunction(sal_True); pColumn->setAggregateFunction(bAggFkt); pColumn->setRealName(rColumnName); @@ -1817,7 +1834,8 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns>& _ ::rtl::OUString aNewColName(getUniqueColumnName(rColumnAlias)); OParseColumn* pColumn = new OParseColumn(aNewColName,::rtl::OUString(),::rtl::OUString(),::rtl::OUString(), - ColumnValue::NULLABLE_UNKNOWN,0,0,_nType,sal_False,sal_False,isCaseSensitive()); + ColumnValue::NULLABLE_UNKNOWN,0,0,_nType,sal_False,sal_False,isCaseSensitive(), + ::rtl::OUString(),::rtl::OUString(),::rtl::OUString()); pColumn->setFunction(sal_True); pColumn->setAggregateFunction(bAggFkt); pColumn->setRealName(rColumnName); @@ -1854,7 +1872,8 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns>& _ ::rtl::OUString aNewColName(getUniqueColumnName(rColumnAlias)); OParseColumn* pColumn = new OParseColumn(aNewColName,::rtl::OUString(),::rtl::OUString(),::rtl::OUString(), - ColumnValue::NULLABLE_UNKNOWN,0,0,DataType::VARCHAR,sal_False,sal_False,isCaseSensitive()); + ColumnValue::NULLABLE_UNKNOWN,0,0,DataType::VARCHAR,sal_False,sal_False,isCaseSensitive(), + ::rtl::OUString(),::rtl::OUString(),::rtl::OUString()); pColumn->setFunction(sal_True); pColumn->setAggregateFunction(bAggFkt); diff --git a/connectivity/source/parse/sqlnode.cxx b/connectivity/source/parse/sqlnode.cxx index daf8ff5e768a..73fd5101c7cb 100644 --- a/connectivity/source/parse/sqlnode.cxx +++ b/connectivity/source/parse/sqlnode.cxx @@ -44,6 +44,7 @@ #include <com/sun/star/util/NumberFormat.hpp> #include <com/sun/star/i18n/KParseType.hpp> #include <com/sun/star/i18n/KParseTokens.hpp> +#include <com/sun/star/i18n/CharacterClassification.hpp> #include "connectivity/dbconversion.hxx" #include <com/sun/star/util/DateTime.hpp> #include <com/sun/star/util/Time.hpp> @@ -1068,8 +1069,8 @@ OSQLParseNode* OSQLParser::buildNode_STR_NUM(OSQLParseNode*& _pLiteral) { ::rtl::OUString aValue; if(!m_xCharClass.is()) - m_xCharClass = Reference<XCharacterClassification>(m_xServiceFactory->createInstance(::rtl::OUString("com.sun.star.i18n.CharacterClassification")),UNO_QUERY); - if(m_xCharClass.is() && s_xLocaleData.is()) + m_xCharClass = CharacterClassification::create( m_xContext ); + if( s_xLocaleData.is() ) { try { @@ -1259,13 +1260,13 @@ OSQLParseNode* OSQLParser::predicateTree(::rtl::OUString& rErrorMessage, const : //============================================================================= //----------------------------------------------------------------------------- -OSQLParser::OSQLParser(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _xServiceFactory,const IParseContext* _pContext) +OSQLParser::OSQLParser(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext, const IParseContext* _pContext) :m_pContext(_pContext) ,m_pParseTree(NULL) - ,m_pData( new OSQLParser_Data( _xServiceFactory ) ) + ,m_pData( new OSQLParser_Data( uno::Reference<lang::XMultiServiceFactory>(rxContext->getServiceManager(), uno::UNO_QUERY_THROW) ) ) ,m_nFormatKey(0) ,m_nDateFormatKey(0) - ,m_xServiceFactory(_xServiceFactory) + ,m_xContext(rxContext) { @@ -1286,7 +1287,7 @@ OSQLParser::OSQLParser(const ::com::sun::star::uno::Reference< ::com::sun::star: s_pGarbageCollector = new OSQLParseNodesGarbageCollector(); if(!s_xLocaleData.is()) - s_xLocaleData = LocaleData::create(comphelper::getComponentContext(m_xServiceFactory)); + s_xLocaleData = LocaleData::create(m_xContext); // reset to 0 memset(OSQLParser::s_nRuleIDs,0,sizeof(OSQLParser::s_nRuleIDs[0]) * (OSQLParseNode::rule_count+1)); diff --git a/connectivity/source/sdbcx/VColumn.cxx b/connectivity/source/sdbcx/VColumn.cxx index f69cb5e7ae85..8de64c8ff189 100644 --- a/connectivity/source/sdbcx/VColumn.cxx +++ b/connectivity/source/sdbcx/VColumn.cxx @@ -87,7 +87,10 @@ OColumn::OColumn( const ::rtl::OUString& _Name, sal_Bool _IsAutoIncrement, sal_Bool _IsRowVersion, sal_Bool _IsCurrency, - sal_Bool _bCase) + sal_Bool _bCase, + const ::rtl::OUString& _CatalogName, + const ::rtl::OUString& _SchemaName, + const ::rtl::OUString& _TableName) :OColumnDescriptor_BASE(m_aMutex) ,ODescriptor(OColumnDescriptor_BASE::rBHelper,_bCase) ,m_TypeName(_TypeName) @@ -100,6 +103,9 @@ OColumn::OColumn( const ::rtl::OUString& _Name, ,m_IsAutoIncrement(_IsAutoIncrement) ,m_IsRowVersion(_IsRowVersion) ,m_IsCurrency(_IsCurrency) + ,m_CatalogName(_CatalogName) + ,m_SchemaName(_SchemaName) + ,m_TableName(_TableName) { m_Name = _Name; @@ -157,16 +163,19 @@ void OColumn::construct() sal_Int32 nAttrib = isNew() ? 0 : PropertyAttribute::READONLY; - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME), PROPERTY_ID_TYPENAME, nAttrib,&m_TypeName, ::getCppuType(static_cast< ::rtl::OUString*>(0))); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DESCRIPTION), PROPERTY_ID_DESCRIPTION, nAttrib,&m_Description, ::getCppuType(static_cast< ::rtl::OUString*>(0))); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE), PROPERTY_ID_DEFAULTVALUE, nAttrib,&m_DefaultValue, ::getCppuType(static_cast< ::rtl::OUString*>(0))); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRECISION), PROPERTY_ID_PRECISION, nAttrib,&m_Precision, ::getCppuType(static_cast<sal_Int32*>(0))); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE), PROPERTY_ID_TYPE, nAttrib,&m_Type, ::getCppuType(static_cast<sal_Int32*>(0))); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE), PROPERTY_ID_SCALE, nAttrib,&m_Scale, ::getCppuType(static_cast<sal_Int32*>(0))); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE), PROPERTY_ID_ISNULLABLE, nAttrib,&m_IsNullable, ::getCppuType(static_cast<sal_Int32*>(0))); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT), PROPERTY_ID_ISAUTOINCREMENT, nAttrib,&m_IsAutoIncrement, ::getBooleanCppuType()); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISROWVERSION), PROPERTY_ID_ISROWVERSION, nAttrib,&m_IsRowVersion, ::getBooleanCppuType()); - registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISCURRENCY), PROPERTY_ID_ISCURRENCY, nAttrib,&m_IsCurrency, ::getBooleanCppuType()); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME), PROPERTY_ID_TYPENAME, nAttrib, &m_TypeName, ::getCppuType(&m_TypeName)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DESCRIPTION), PROPERTY_ID_DESCRIPTION, nAttrib, &m_Description, ::getCppuType(&m_Description)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE), PROPERTY_ID_DEFAULTVALUE, nAttrib, &m_DefaultValue, ::getCppuType(&m_DefaultValue)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRECISION), PROPERTY_ID_PRECISION, nAttrib, &m_Precision, ::getCppuType(&m_Precision)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE), PROPERTY_ID_TYPE, nAttrib, &m_Type, ::getCppuType(&m_Type)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE), PROPERTY_ID_SCALE, nAttrib, &m_Scale, ::getCppuType(&m_Scale)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE), PROPERTY_ID_ISNULLABLE, nAttrib, &m_IsNullable, ::getCppuType(&m_IsNullable)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT), PROPERTY_ID_ISAUTOINCREMENT, nAttrib, &m_IsAutoIncrement, ::getBooleanCppuType()); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISROWVERSION), PROPERTY_ID_ISROWVERSION, nAttrib, &m_IsRowVersion, ::getBooleanCppuType()); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISCURRENCY), PROPERTY_ID_ISCURRENCY, nAttrib, &m_IsCurrency, ::getBooleanCppuType()); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CATALOGNAME), PROPERTY_ID_CATALOGNAME, nAttrib, &m_CatalogName, ::getCppuType(&m_CatalogName)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCHEMANAME), PROPERTY_ID_SCHEMANAME, nAttrib, &m_SchemaName, ::getCppuType(&m_SchemaName)); + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME), PROPERTY_ID_TABLENAME, nAttrib, &m_TableName, ::getCppuType(&m_TableName)); } // ------------------------------------------------------------------------- void OColumn::disposing(void) @@ -195,7 +204,10 @@ Reference< XPropertySet > SAL_CALL OColumn::createDataDescriptor( ) throw(Runti m_IsAutoIncrement, m_IsRowVersion, m_IsCurrency, - isCaseSensitive()); + isCaseSensitive(), + m_CatalogName, + m_SchemaName, + m_TableName); pNewColumn->setNew(sal_True); return pNewColumn; } diff --git a/connectivity/source/sdbcx/VIndexColumn.cxx b/connectivity/source/sdbcx/VIndexColumn.cxx index be5fd014ff72..15a20a2dec59 100644 --- a/connectivity/source/sdbcx/VIndexColumn.cxx +++ b/connectivity/source/sdbcx/VIndexColumn.cxx @@ -71,7 +71,10 @@ OIndexColumn::OIndexColumn( sal_Bool _IsAscending, sal_Bool _IsAutoIncrement, sal_Bool _IsRowVersion, sal_Bool _IsCurrency, - sal_Bool _bCase + sal_Bool _bCase, + const ::rtl::OUString& _CatalogName, + const ::rtl::OUString& _SchemaName, + const ::rtl::OUString& _TableName ) : OColumn(_Name, _TypeName, _DefaultValue, @@ -83,7 +86,10 @@ OIndexColumn::OIndexColumn( sal_Bool _IsAscending, _IsAutoIncrement, _IsRowVersion, _IsCurrency, - _bCase) + _bCase, + _CatalogName, + _SchemaName, + _TableName) , m_IsAscending(_IsAscending) { construct(); diff --git a/connectivity/source/sdbcx/VKeyColumn.cxx b/connectivity/source/sdbcx/VKeyColumn.cxx index edb052277d2b..48e1df5154f3 100644 --- a/connectivity/source/sdbcx/VKeyColumn.cxx +++ b/connectivity/source/sdbcx/VKeyColumn.cxx @@ -71,7 +71,10 @@ OKeyColumn::OKeyColumn( const ::rtl::OUString& _ReferencedColumn, sal_Bool _IsAutoIncrement, sal_Bool _IsRowVersion, sal_Bool _IsCurrency, - sal_Bool _bCase + sal_Bool _bCase, + const ::rtl::OUString& _CatalogName, + const ::rtl::OUString& _SchemaName, + const ::rtl::OUString& _TableName ) : OColumn(_Name, _TypeName, _DefaultValue, @@ -83,7 +86,10 @@ OKeyColumn::OKeyColumn( const ::rtl::OUString& _ReferencedColumn, _IsAutoIncrement, _IsRowVersion, _IsCurrency, - _bCase) + _bCase, + _CatalogName, + _SchemaName, + _TableName) , m_ReferencedColumn(_ReferencedColumn) { construct(); diff --git a/connectivity/source/simpledbt/dbtfactory.cxx b/connectivity/source/simpledbt/dbtfactory.cxx index 616a7fa6dded..29d000423ed0 100644 --- a/connectivity/source/simpledbt/dbtfactory.cxx +++ b/connectivity/source/simpledbt/dbtfactory.cxx @@ -94,9 +94,9 @@ namespace connectivity SAL_WNODEPRECATED_DECLARATIONS_POP //---------------------------------------------------------------- - ::rtl::Reference< simple::ISQLParser > ODataAccessToolsFactory::createSQLParser(const Reference< XMultiServiceFactory >& _rxServiceFactory,const IParseContext* _pContext) const + ::rtl::Reference< simple::ISQLParser > ODataAccessToolsFactory::createSQLParser(const Reference< XComponentContext >& rxContext, const IParseContext* _pContext) const { - return new OSimpleSQLParser(_rxServiceFactory,_pContext); + return new OSimpleSQLParser(rxContext, _pContext); } //........................................................................ diff --git a/connectivity/source/simpledbt/dbtfactory.hxx b/connectivity/source/simpledbt/dbtfactory.hxx index ba9d9c7e532f..40005ecbdd9f 100644 --- a/connectivity/source/simpledbt/dbtfactory.hxx +++ b/connectivity/source/simpledbt/dbtfactory.hxx @@ -44,7 +44,7 @@ namespace connectivity // IDataAccessToolsFactory virtual ::rtl::Reference< simple::ISQLParser > createSQLParser( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxServiceFactory, + const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext, const IParseContext* _pContext ) const; diff --git a/connectivity/source/simpledbt/parser_s.cxx b/connectivity/source/simpledbt/parser_s.cxx index 302099d53622..b49c4bfe9a49 100644 --- a/connectivity/source/simpledbt/parser_s.cxx +++ b/connectivity/source/simpledbt/parser_s.cxx @@ -35,8 +35,8 @@ namespace connectivity //= OSimpleSQLParser //================================================================ //---------------------------------------------------------------- - OSimpleSQLParser::OSimpleSQLParser(const Reference< XMultiServiceFactory >& _rxServiceFactory,const IParseContext* _pContext) - :m_aFullParser(_rxServiceFactory,_pContext) + OSimpleSQLParser::OSimpleSQLParser(const Reference< XComponentContext >& rxContext, const IParseContext* _pContext) + :m_aFullParser(rxContext, _pContext) { } diff --git a/connectivity/source/simpledbt/parser_s.hxx b/connectivity/source/simpledbt/parser_s.hxx index 6d2555e7b099..155ef739b233 100644 --- a/connectivity/source/simpledbt/parser_s.hxx +++ b/connectivity/source/simpledbt/parser_s.hxx @@ -40,7 +40,7 @@ namespace connectivity OSQLParser m_aFullParser; public: - OSimpleSQLParser(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxServiceFactory,const IParseContext* _pContext); + OSimpleSQLParser(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext, const IParseContext* _pContext); // ISQLParser virtual ::rtl::Reference< simple::ISQLParseNode > predicateTree( |