From 02f6eae3aacc973f98fce99219ee74ddb75f2c9a Mon Sep 17 00:00:00 2001
From: "Ocke Janssen [oj]" <Ocke.Janssen@sun.com>
Date: Fri, 22 Jan 2010 08:14:22 +0100
Subject: dba33f: #i108548# extend SingleSelectQueryComposer
 appendFilterByColumn with additonal parameter

---
 svx/source/fmcomp/dbaexchange.cxx | 57 ++++++++-------------------------------
 svx/source/fmcomp/gridcell.cxx    | 46 ++++++++++---------------------
 2 files changed, 25 insertions(+), 78 deletions(-)

(limited to 'svx/source/fmcomp')

diff --git a/svx/source/fmcomp/dbaexchange.cxx b/svx/source/fmcomp/dbaexchange.cxx
index 99abbd9853f7..235cd57865ec 100644
--- a/svx/source/fmcomp/dbaexchange.cxx
+++ b/svx/source/fmcomp/dbaexchange.cxx
@@ -138,30 +138,19 @@ namespace svx
         {
             try
             {
-                // need a query composer for this
-                Reference< XSQLQueryComposerFactory > xComposerFac;
-                _rxForm->getPropertyValue(FM_PROP_ACTIVE_CONNECTION) >>= xComposerFac;
-                Reference< XSQLQueryComposer > xComposer;
-                if (xComposerFac.is())
-                    xComposer = xComposerFac->createQueryComposer();
-
-                if (xComposer.is())
+                Reference< XTablesSupplier > xSupTab;
+                _rxForm->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SingleSelectQueryComposer"))) >>= xSupTab;
+
+                if(xSupTab.is())
                 {
-                    ::rtl::OUString sActiveCommand;
-                    _rxForm->getPropertyValue(FM_PROP_ACTIVECOMMAND) >>= sActiveCommand;
-                    xComposer->setQuery(sActiveCommand);
-                    Reference< XTablesSupplier > xSupTab(xComposer, UNO_QUERY);
-                    if(xSupTab.is())
+                    Reference< XNameAccess > xNames = xSupTab->getTables();
+                    if (xNames.is())
                     {
-                        Reference< XNameAccess > xNames = xSupTab->getTables();
-                        if (xNames.is())
+                        Sequence< ::rtl::OUString > aTables = xNames->getElementNames();
+                        if (1 == aTables.getLength())
                         {
-                            Sequence< ::rtl::OUString > aTables = xNames->getElementNames();
-                            if (1 == aTables.getLength())
-                            {
-                                sCommand        = aTables[0];
-                                nCommandType    = CommandType::TABLE;
-                            }
+                            sCommand        = aTables[0];
+                            nCommandType    = CommandType::TABLE;
                         }
                     }
                 }
@@ -460,34 +449,10 @@ namespace svx
         String sObjectKind = (CommandType::TABLE == nObjectType) ? String('1') : String('0');
 
         // check if the SQL-statement is modified
-        sal_Bool bHasFilterOrSort(sal_False);
         ::rtl::OUString sCompleteStatement;
         try
         {
-            ::rtl::OUString sFilter, sSort;
-            if (::cppu::any2bool(_rxLivingForm->getPropertyValue(FM_PROP_APPLYFILTER)))
-                _rxLivingForm->getPropertyValue(FM_PROP_FILTER) >>= sFilter;
-            _rxLivingForm->getPropertyValue(FM_PROP_SORT) >>= sSort;
-            bHasFilterOrSort = (sFilter.getLength()>0) || (sSort.getLength()>0);
-
             _rxLivingForm->getPropertyValue(FM_PROP_ACTIVECOMMAND) >>= sCompleteStatement;
-
-            // create a composer
-            Reference< XSQLQueryComposerFactory > xFactory( xConnection, UNO_QUERY );
-            Reference< XSQLQueryComposer > xComposer;
-            if (xFactory.is())
-                xComposer = xFactory->createQueryComposer();
-
-            // let the composer compose
-            if (xComposer.is())
-            {
-                xComposer->setQuery(sCompleteStatement);
-                xComposer->setFilter(sFilter);
-                xComposer->setOrder(sSort);
-                sCompleteStatement = xComposer->getComposedQuery();
-            }
-            // Usually, I would expect the result of the composing to be the same as the ActiveCommand property
-            // But this code here is pretty old, and I don't know wha the side effects are if I remove it now ...
         }
         catch(Exception&)
         {
@@ -499,7 +464,7 @@ namespace svx
                     ,sConnectionResource
                     ,nObjectType
                     ,sObjectName,xConnection
-                    ,!((CommandType::QUERY == nObjectType) && !bHasFilterOrSort)
+                    ,!((CommandType::QUERY == nObjectType))
                     ,sCompleteStatement);
     }
 
diff --git a/svx/source/fmcomp/gridcell.cxx b/svx/source/fmcomp/gridcell.cxx
index c94a63c853f4..92e8d9aebaa1 100644
--- a/svx/source/fmcomp/gridcell.cxx
+++ b/svx/source/fmcomp/gridcell.cxx
@@ -48,6 +48,8 @@
 #include <com/sun/star/form/XBoundComponent.hpp>
 #include <com/sun/star/script/XEventAttacherManager.hpp>
 #include <com/sun/star/sdb/XSQLQueryComposerFactory.hpp>
+#include <com/sun/star/sdbcx/XTablesSupplier.hpp>
+#include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
 #include <com/sun/star/sdbc/ColumnValue.hpp>
 #include <com/sun/star/sdbc/DataType.hpp>
 #include <com/sun/star/sdbc/XStatement.hpp>
@@ -85,6 +87,7 @@ using namespace ::svt;
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star::sdbc;
+using namespace ::com::sun::star::sdbcx;
 using namespace ::com::sun::star::sdb;
 using namespace ::com::sun::star::beans;
 using namespace ::com::sun::star::form;
@@ -3042,43 +3045,22 @@ void DbFilterField::Update()
         if (!xForm.is())
             return;
 
-        Reference< XConnection >  xConnection(getRowSetConnection(xForm));
-        if (!xConnection.is())
-            return;
-
-        Reference< ::com::sun::star::sdb::XSQLQueryComposerFactory >  xFactory(xConnection, UNO_QUERY);
-        if (!xFactory.is())
-        {
-            DBG_ERROR("DbFilterField::Update : used the right place to request the ::com::sun::star::sdb::XSQLQueryComposerFactory interface ?");
-            return;
-        }
-
-        Reference< ::com::sun::star::sdb::XSQLQueryComposer >  xComposer = xFactory->createQueryComposer();
-        try
-        {
-            Reference< ::com::sun::star::beans::XPropertySet >  xFormAsSet(xForm, UNO_QUERY);
-            ::rtl::OUString sStatement;
-            xFormAsSet->getPropertyValue(FM_PROP_ACTIVECOMMAND) >>= sStatement;
-            xComposer->setQuery(sStatement);
-        }
-        catch(const Exception&)
-        {
-            ::comphelper::disposeComponent(xComposer);
-            return;
-        }
+        Reference<XPropertySet> xFormProp(xForm,UNO_QUERY);
+        Reference< XTablesSupplier > xSupTab;
+        xFormProp->getPropertyValue(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SingleSelectQueryComposer"))) >>= xSupTab;
 
-        Reference< ::com::sun::star::beans::XPropertySet >  xComposerAsSet(xComposer, UNO_QUERY);
-        if (!xComposerAsSet.is())
+        Reference< XConnection >  xConnection(getRowSetConnection(xForm));
+        if (!xSupTab.is())
             return;
 
         // search the field
-        Reference< ::com::sun::star::container::XNameAccess >    xFieldNames;
-        Reference< ::com::sun::star::container::XNameAccess >    xTablesNames;
-        Reference< ::com::sun::star::beans::XPropertySet >       xComposerFieldAsSet;
+        Reference< XColumnsSupplier > xSupCol(xSupTab,UNO_QUERY);
+        Reference< ::com::sun::star::container::XNameAccess >    xFieldNames = xSupCol->getColumns();
+        if (!xFieldNames->hasByName(aName))
+            return;
 
-        ::cppu::extractInterface(xFieldNames, xComposerAsSet->getPropertyValue(FM_PROP_SELECTED_FIELDS));
-        ::cppu::extractInterface(xTablesNames, xComposerAsSet->getPropertyValue(FM_PROP_SELECTED_TABLES));
-        ::cppu::extractInterface(xComposerFieldAsSet, xFieldNames->getByName(aName));
+        Reference< ::com::sun::star::container::XNameAccess >    xTablesNames = xSupTab->getTables();
+        Reference< ::com::sun::star::beans::XPropertySet >       xComposerFieldAsSet(xFieldNames->getByName(aName),UNO_QUERY);
 
         if (xComposerFieldAsSet.is() && ::comphelper::hasProperty(FM_PROP_TABLENAME, xComposerFieldAsSet) &&
             ::comphelper::hasProperty(FM_PROP_FIELDSOURCE, xComposerFieldAsSet))
-- 
cgit