connectivity/source/drivers/jdbc/JStatement.cxx | 14 ++++- dbaccess/source/ui/inc/TableConnectionData.hxx | 3 - dbaccess/source/ui/querydesign/QueryDesignView.cxx | 56 +++++++++++++-------- 3 files changed, 50 insertions(+), 23 deletions(-)
New commits: commit c25bb400bbfe20b3b13237ed10935ec9d0f6d769 Author: Lionel Elie Mamane <[email protected]> Date: Sun Dec 2 18:32:38 2012 +0100 fdo#42165 make nested joins as per strict ANSI SQL Change-Id: I605d3811b27c33e35670306bb03b5a796ab72bc0 diff --git a/dbaccess/source/ui/inc/TableConnectionData.hxx b/dbaccess/source/ui/inc/TableConnectionData.hxx index bc084db..728978d 100644 --- a/dbaccess/source/ui/inc/TableConnectionData.hxx +++ b/dbaccess/source/ui/inc/TableConnectionData.hxx @@ -81,7 +81,8 @@ namespace dbaui */ void normalizeLines(); - OConnectionLineDataVec* GetConnLineDataList(){ return &m_vConnLineData; } + const OConnectionLineDataVec* GetConnLineDataList() const { return &m_vConnLineData; } + OConnectionLineDataVec* GetConnLineDataList() { return &m_vConnLineData; } inline TTableWindowData::value_type getReferencingTable() const { return m_pReferencingTable; } inline TTableWindowData::value_type getReferencedTable() const { return m_pReferencedTable; } diff --git a/dbaccess/source/ui/querydesign/QueryDesignView.cxx b/dbaccess/source/ui/querydesign/QueryDesignView.cxx index e81da08..8ba3912 100644 --- a/dbaccess/source/ui/querydesign/QueryDesignView.cxx +++ b/dbaccess/source/ui/querydesign/QueryDesignView.cxx @@ -290,14 +290,14 @@ namespace } //------------------------------------------------------------------------------ ::rtl::OUString BuildJoinCriteria( const Reference< XConnection>& _xConnection, - OConnectionLineDataVec* pLineDataList, - OQueryTableConnectionData* pData) + const OConnectionLineDataVec* pLineDataList, + const OQueryTableConnectionData* pData) { ::rtl::OUStringBuffer aCondition; if ( _xConnection.is() ) { - OConnectionLineDataVec::iterator aIter = pLineDataList->begin(); - OConnectionLineDataVec::iterator aEnd = pLineDataList->end(); + OConnectionLineDataVec::const_iterator aIter = pLineDataList->begin(); + OConnectionLineDataVec::const_iterator aEnd = pLineDataList->end(); try { const Reference< XDatabaseMetaData > xMetaData = _xConnection->getMetaData(); @@ -392,7 +392,7 @@ namespace ::rtl::OUString BuildJoin( const Reference< XConnection>& _xConnection, const ::rtl::OUString& rLh, const ::rtl::OUString& rRh, - OQueryTableConnectionData* pData) + const OQueryTableConnectionData* pData) { String aErg(rLh); @@ -430,9 +430,9 @@ namespace } //------------------------------------------------------------------------------ ::rtl::OUString BuildJoin( const Reference< XConnection>& _xConnection, - OQueryTableWindow* pLh, - OQueryTableWindow* pRh, - OQueryTableConnectionData* pData + const OQueryTableWindow* pLh, + const OQueryTableWindow* pRh, + const OQueryTableConnectionData* pData ) { bool bForce = pData->GetJoinType() == CROSS_JOIN || pData->isNatural(); @@ -441,20 +441,36 @@ namespace //------------------------------------------------------------------------------ ::rtl::OUString BuildJoin( const Reference< XConnection>& _xConnection, const ::rtl::OUString &rLh, - OQueryTableWindow* pRh, - OQueryTableConnectionData* pData + const OQueryTableWindow* pRh, + const OQueryTableConnectionData* pData ) { return BuildJoin(_xConnection,rLh,BuildTable(_xConnection,pRh),pData); } //------------------------------------------------------------------------------ ::rtl::OUString BuildJoin( const Reference< XConnection>& _xConnection, - OQueryTableWindow* pLh, + const OQueryTableWindow* pLh, const ::rtl::OUString &rRh, - OQueryTableConnectionData* pData + const OQueryTableConnectionData* pData ) { - return BuildJoin(_xConnection,BuildTable(_xConnection,pLh),rRh,pData); + // strict ANSI SQL: + // - does not support any bracketing of JOINS + // - supports nested joins only in the LEFT HAND SIDE + // In this case, we are trying to build a join with a nested join + // in the right hand side. + // So switch the direction of the join and both hand sides. + OQueryTableConnectionData data(*pData); + switch (data.GetJoinType()) + { + case LEFT_JOIN: + data.SetJoinType(RIGHT_JOIN); + break; + case RIGHT_JOIN: + data.SetJoinType(LEFT_JOIN); + break; + } + return BuildJoin(_xConnection, rRh, BuildTable(_xConnection,pLh), &data); } //------------------------------------------------------------------------------ void GetNextJoin( const Reference< XConnection>& _xConnection, commit b245079a50c94dc503628619f6342b70dcdc6e66 Author: Lionel Elie Mamane <[email protected]> Date: Sun Dec 2 18:31:17 2012 +0100 Expand comment Change-Id: I7d699222940a6ee99595d84dd8b2068e9b86ee67 diff --git a/dbaccess/source/ui/querydesign/QueryDesignView.cxx b/dbaccess/source/ui/querydesign/QueryDesignView.cxx index a6d21db..e81da08 100644 --- a/dbaccess/source/ui/querydesign/QueryDesignView.cxx +++ b/dbaccess/source/ui/querydesign/QueryDesignView.cxx @@ -1093,6 +1093,10 @@ namespace } // and now all inner joins + // these are implemented as + // "FROM tbl1, tbl2 WHERE tbl1.col1=tlb2.col2" + // rather than + // "FROM tbl1 INNER JOIN tbl2 ON tbl1.col1=tlb2.col2" aIter = pConnList->begin(); for(;aIter != aEnd;++aIter) { commit 66e5cf7096a2dc2287f9265087d45c57f1069b9b Author: Lionel Elie Mamane <[email protected]> Date: Sun Dec 2 18:29:18 2012 +0100 Catch all exceptions to respect specification In particular, getMaxRows() can throw SQLException Change-Id: I1f49afe8258d98000bff34e18f4d98967c46e1b3 diff --git a/connectivity/source/drivers/jdbc/JStatement.cxx b/connectivity/source/drivers/jdbc/JStatement.cxx index a7e24bc..0745068 100644 --- a/connectivity/source/drivers/jdbc/JStatement.cxx +++ b/connectivity/source/drivers/jdbc/JStatement.cxx @@ -30,6 +30,7 @@ #include <comphelper/sequence.hxx> #include "TConnection.hxx" #include <comphelper/types.hxx> +#include <tools/diagnose_ex.h> #include <com/sun/star/sdbc/ResultSetConcurrency.hpp> #include <com/sun/star/sdbc/ResultSetType.hpp> #include <com/sun/star/sdbc/FetchDirection.hpp> @@ -623,8 +624,10 @@ sal_Bool java_sql_Statement_Base::convertFastPropertyValue( const Any& rValue ) throw (::com::sun::star::lang::IllegalArgumentException) { - switch(nHandle) + try { + switch(nHandle) + { case PROPERTY_ID_QUERYTIMEOUT: return ::comphelper::tryPropertyValue(rConvertedValue, rOldValue, rValue, getQueryTimeOut()); case PROPERTY_ID_MAXFIELDSIZE: @@ -647,6 +650,15 @@ sal_Bool java_sql_Statement_Base::convertFastPropertyValue( // return ::comphelper::tryPropertyValue(rConvertedValue, rOldValue, rValue, m_bAsLink); default: ; + } + } + catch(::com::sun::star::lang::IllegalArgumentException) + { + throw; + } + catch(::com::sun::star::uno::Exception) + { + DBG_UNHANDLED_EXCEPTION(); } return sal_False; } commit 6174694ee7efe7b94d0bb1987be1c48f1ca25cf5 Author: Lionel Elie Mamane <[email protected]> Date: Sun Dec 2 16:06:58 2012 +0100 janitorial: prefix increment when don't care about current value Change-Id: Id19369bb9d9cb2a0bab0dacb200cf5bf488c3b20 diff --git a/dbaccess/source/ui/querydesign/QueryDesignView.cxx b/dbaccess/source/ui/querydesign/QueryDesignView.cxx index dfc0114..a6d21db 100644 --- a/dbaccess/source/ui/querydesign/QueryDesignView.cxx +++ b/dbaccess/source/ui/querydesign/QueryDesignView.cxx @@ -1028,8 +1028,8 @@ namespace for(;aIter != aEnd;++aIter) { static_cast<OQueryTableConnection*>(*aIter)->SetVisited(sal_False); - aConnectionCount[(*aIter)->GetSourceWin()]++; - aConnectionCount[(*aIter)->GetDestWin()]++; + ++aConnectionCount[(*aIter)->GetSourceWin()]; + ++aConnectionCount[(*aIter)->GetDestWin()]; } ::std::multimap<sal_Int32 , OTableWindow*> aMulti; ::std::map<OTableWindow*,sal_Int32>::iterator aCountIter = aConnectionCount.begin(); commit 0fe6d567be1a58a466b07e8c3732f0cbcc436443 Author: Lionel Elie Mamane <[email protected]> Date: Sun Dec 2 15:56:35 2012 +0100 janitorial: simplify code, no behaviour change operator[] on a map implicitly adds an entry and default-initializes value part Change-Id: Iab7817fb7fef5e9a6afdeb74be0d523fde59b5c1 diff --git a/dbaccess/source/ui/querydesign/QueryDesignView.cxx b/dbaccess/source/ui/querydesign/QueryDesignView.cxx index cf4fc38..dfc0114 100644 --- a/dbaccess/source/ui/querydesign/QueryDesignView.cxx +++ b/dbaccess/source/ui/querydesign/QueryDesignView.cxx @@ -1028,14 +1028,8 @@ namespace for(;aIter != aEnd;++aIter) { static_cast<OQueryTableConnection*>(*aIter)->SetVisited(sal_False); - if ( aConnectionCount.find((*aIter)->GetSourceWin()) == aConnectionCount.end() ) - aConnectionCount.insert(::std::map<OTableWindow*,sal_Int32>::value_type((*aIter)->GetSourceWin(),0)); - else - aConnectionCount[(*aIter)->GetSourceWin()]++; - if ( aConnectionCount.find((*aIter)->GetDestWin()) == aConnectionCount.end() ) - aConnectionCount.insert(::std::map<OTableWindow*,sal_Int32>::value_type((*aIter)->GetDestWin(),0)); - else - aConnectionCount[(*aIter)->GetDestWin()]++; + aConnectionCount[(*aIter)->GetSourceWin()]++; + aConnectionCount[(*aIter)->GetDestWin()]++; } ::std::multimap<sal_Int32 , OTableWindow*> aMulti; ::std::map<OTableWindow*,sal_Int32>::iterator aCountIter = aConnectionCount.begin(); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
