1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef DBAUI_QUERYCONTROLLER_HXX 25*b1cdbd2cSJim Jagielski #define DBAUI_QUERYCONTROLLER_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include "JoinController.hxx" 28*b1cdbd2cSJim Jagielski #include "JoinTableView.hxx" 29*b1cdbd2cSJim Jagielski #include "querycontainerwindow.hxx" 30*b1cdbd2cSJim Jagielski #include "queryview.hxx" 31*b1cdbd2cSJim Jagielski #include "svx/ParseContext.hxx" 32*b1cdbd2cSJim Jagielski #include "TableFieldDescription.hxx" 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/ 35*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XObjectInputStream.hpp> 36*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XObjectOutputStream.hpp> 37*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/CommandType.hpp> 38*b1cdbd2cSJim Jagielski #include <com/sun/star/sdb/XSQLQueryComposer.hpp> 39*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XConnection.hpp> 40*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbcx/XAlterView.hpp> 41*b1cdbd2cSJim Jagielski /** === end UNO includes === **/ 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielski #include <comphelper/proparrhlp.hxx> 44*b1cdbd2cSJim Jagielski #include <comphelper/propertycontainer.hxx> 45*b1cdbd2cSJim Jagielski #include <comphelper/uno3.hxx> 46*b1cdbd2cSJim Jagielski #include <comphelper/uno3.hxx> 47*b1cdbd2cSJim Jagielski #include <connectivity/sqliterator.hxx> 48*b1cdbd2cSJim Jagielski #include <connectivity/sqlnode.hxx> 49*b1cdbd2cSJim Jagielski #include <connectivity/sqlparse.hxx> 50*b1cdbd2cSJim Jagielski #include <svl/undo.hxx> 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski namespace comphelper 53*b1cdbd2cSJim Jagielski { 54*b1cdbd2cSJim Jagielski class NamedValueCollection; 55*b1cdbd2cSJim Jagielski } 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski class VCLXWindow; 58*b1cdbd2cSJim Jagielski namespace dbaui 59*b1cdbd2cSJim Jagielski { 60*b1cdbd2cSJim Jagielski class OQueryView; 61*b1cdbd2cSJim Jagielski class OQueryContainerWindow; 62*b1cdbd2cSJim Jagielski class OTableConnectionData; 63*b1cdbd2cSJim Jagielski class OTableWindowData; 64*b1cdbd2cSJim Jagielski class OAddTableDlg; 65*b1cdbd2cSJim Jagielski class OTableFieldDesc; 66*b1cdbd2cSJim Jagielski class OQueryTableWindow; 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski class OQueryController; 69*b1cdbd2cSJim Jagielski typedef ::comphelper::OPropertyContainer OQueryController_PBase; 70*b1cdbd2cSJim Jagielski typedef ::comphelper::OPropertyArrayUsageHelper< OQueryController > OQueryController_PABase; 71*b1cdbd2cSJim Jagielski class OQueryController :public OJoinController 72*b1cdbd2cSJim Jagielski ,public OQueryController_PBase 73*b1cdbd2cSJim Jagielski ,public OQueryController_PABase 74*b1cdbd2cSJim Jagielski { 75*b1cdbd2cSJim Jagielski OTableFields m_vTableFieldDesc; 76*b1cdbd2cSJim Jagielski OTableFields m_vUnUsedFieldsDesc; // contains fields which aren't visible and don't have any criteria 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > m_aFieldInformation; 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski ::svxform::OSystemParseContext* m_pParseContext; 81*b1cdbd2cSJim Jagielski ::connectivity::OSQLParser m_aSqlParser; 82*b1cdbd2cSJim Jagielski ::connectivity::OSQLParseTreeIterator* m_pSqlIterator; 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSQLQueryComposer > m_xComposer; 85*b1cdbd2cSJim Jagielski /// if we're editing an existing view, this is non-NULL 86*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XAlterView > m_xAlterView; 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski ::rtl::OUString m_sStatement; // contains the current sql statement 89*b1cdbd2cSJim Jagielski ::rtl::OUString m_sUpdateCatalogName; // catalog for update data 90*b1cdbd2cSJim Jagielski ::rtl::OUString m_sUpdateSchemaName; // schema for update data 91*b1cdbd2cSJim Jagielski ::rtl::OUString m_sUpdateTableName; // table for update data 92*b1cdbd2cSJim Jagielski mutable ::rtl::OUString 93*b1cdbd2cSJim Jagielski m_sName; // name of the query 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski sal_Int32 m_nVisibleRows; // which rows the selection browse should show 96*b1cdbd2cSJim Jagielski sal_Int32 m_nSplitPos; // the position of the splitter 97*b1cdbd2cSJim Jagielski sal_Int32 m_nCommandType; // the type of the object we're designing 98*b1cdbd2cSJim Jagielski sal_Bool m_bGraphicalDesign; // are we in the graphical design mode (sal_True) or in the text design (sal_False)? 99*b1cdbd2cSJim Jagielski sal_Bool m_bDistinct; // true when you want "select distinct" otherwise false 100*b1cdbd2cSJim Jagielski sal_Bool m_bViewAlias; // show the alias row in the design view 101*b1cdbd2cSJim Jagielski sal_Bool m_bViewTable; // show the table row in the design view 102*b1cdbd2cSJim Jagielski sal_Bool m_bViewFunction; // show the function row in the design view 103*b1cdbd2cSJim Jagielski sal_Bool m_bEscapeProcessing;// is true when we shouldn't parse the statement 104*b1cdbd2cSJim Jagielski 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski /** returns the container of queries, views, or command definitions, depending on what object type 107*b1cdbd2cSJim Jagielski we design currently. 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski Not allowed to be called if we design an independent SQL command. 110*b1cdbd2cSJim Jagielski */ 111*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > 112*b1cdbd2cSJim Jagielski getObjectContainer() const; 113*b1cdbd2cSJim Jagielski editingView() const114*b1cdbd2cSJim Jagielski inline bool editingView() const { return m_nCommandType == ::com::sun::star::sdb::CommandType::TABLE; } editingQuery() const115*b1cdbd2cSJim Jagielski inline bool editingQuery() const { return m_nCommandType == ::com::sun::star::sdb::CommandType::QUERY; } editingCommand() const116*b1cdbd2cSJim Jagielski inline bool editingCommand() const { return m_nCommandType == ::com::sun::star::sdb::CommandType::COMMAND; } 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski sal_Bool askForNewName( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess>& _xElements, 119*b1cdbd2cSJim Jagielski sal_Bool _bSaveAs); 120*b1cdbd2cSJim Jagielski // creates the querycomposer 121*b1cdbd2cSJim Jagielski void setQueryComposer(); 122*b1cdbd2cSJim Jagielski void deleteIterator(); 123*b1cdbd2cSJim Jagielski void executeQuery(); 124*b1cdbd2cSJim Jagielski bool doSaveAsDoc(sal_Bool _bSaveAs); 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski void saveViewSettings( ::comphelper::NamedValueCollection& o_rViewSettings, const bool i_includingCriteria ) const; 127*b1cdbd2cSJim Jagielski void loadViewSettings( const ::comphelper::NamedValueCollection& o_rViewSettings ); 128*b1cdbd2cSJim Jagielski ::rtl::OUString translateStatement( bool _bFireStatementChange = true ); 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski ::rtl::OUString getDefaultName() const; 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski protected: 133*b1cdbd2cSJim Jagielski // all the features which should be handled by this class 134*b1cdbd2cSJim Jagielski virtual void describeSupportedFeatures(); 135*b1cdbd2cSJim Jagielski // state of a feature. 'feature' may be the handle of a ::com::sun::star::util::URL somebody requested a dispatch interface for OR a toolbar slot. 136*b1cdbd2cSJim Jagielski virtual FeatureState GetState(sal_uInt16 nId) const; 137*b1cdbd2cSJim Jagielski // execute a feature 138*b1cdbd2cSJim Jagielski virtual void Execute(sal_uInt16 nId, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& aArgs); 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski virtual void reconnect( sal_Bool _bUI ); 141*b1cdbd2cSJim Jagielski virtual ::rtl::OUString getPrivateTitle( ) const; 142*b1cdbd2cSJim Jagielski getContainer() const143*b1cdbd2cSJim Jagielski OQueryContainerWindow* getContainer() const { return static_cast< OQueryContainerWindow* >( getView() ); } 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski public: 146*b1cdbd2cSJim Jagielski OQueryController(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rM); 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski virtual ~OQueryController(); getTableFieldDesc()149*b1cdbd2cSJim Jagielski OTableFields& getTableFieldDesc() { return m_vTableFieldDesc; } getUnUsedFields()150*b1cdbd2cSJim Jagielski OTableFields& getUnUsedFields() { return m_vUnUsedFieldsDesc; } 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski void clearFields(); 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski virtual void impl_onModifyChanged(); 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski // should the statement be parsed by our own sql parser isEsacpeProcessing() const157*b1cdbd2cSJim Jagielski sal_Bool isEsacpeProcessing() const { return m_bEscapeProcessing; } isGraphicalDesign() const158*b1cdbd2cSJim Jagielski sal_Bool isGraphicalDesign() const { return m_bGraphicalDesign; } isDistinct() const159*b1cdbd2cSJim Jagielski sal_Bool isDistinct() const { return m_bDistinct; } 160*b1cdbd2cSJim Jagielski getStatement() const161*b1cdbd2cSJim Jagielski ::rtl::OUString getStatement() const { return m_sStatement; } getSplitPos() const162*b1cdbd2cSJim Jagielski sal_Int32 getSplitPos() const { return m_nSplitPos;} getVisibleRows() const163*b1cdbd2cSJim Jagielski sal_Int32 getVisibleRows() const { return m_nVisibleRows; } 164*b1cdbd2cSJim Jagielski setDistinct(sal_Bool _bDistinct)165*b1cdbd2cSJim Jagielski void setDistinct(sal_Bool _bDistinct) { m_bDistinct = _bDistinct;} setSplitPos(sal_Int32 _nSplitPos)166*b1cdbd2cSJim Jagielski void setSplitPos(sal_Int32 _nSplitPos) { m_nSplitPos = _nSplitPos;} setVisibleRows(sal_Int32 _nVisibleRows)167*b1cdbd2cSJim Jagielski void setVisibleRows(sal_Int32 _nVisibleRows) { m_nVisibleRows = _nVisibleRows;} 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski sal_Int32 getColWidth(sal_uInt16 _nColPos) const; 170*b1cdbd2cSJim Jagielski 171*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& getFieldInformation() const172*b1cdbd2cSJim Jagielski getFieldInformation() const { return m_aFieldInformation; } 173*b1cdbd2cSJim Jagielski getParser()174*b1cdbd2cSJim Jagielski ::connectivity::OSQLParser& getParser() { return m_aSqlParser; } getParseIterator()175*b1cdbd2cSJim Jagielski ::connectivity::OSQLParseTreeIterator& getParseIterator() { return *m_pSqlIterator; } 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski virtual sal_Bool Construct(Window* pParent); 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski DECLARE_XINTERFACE( ) 180*b1cdbd2cSJim Jagielski DECLARE_XTYPEPROVIDER( ) 181*b1cdbd2cSJim Jagielski // XPropertySet 182*b1cdbd2cSJim Jagielski virtual com::sun::star::uno::Reference<com::sun::star::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo() throw(com::sun::star::uno::RuntimeException); 183*b1cdbd2cSJim Jagielski virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper(); 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielski // XEventListener 186*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException); 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski // ::com::sun::star::lang::XComponent 189*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing(); 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException); 192*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); 193*b1cdbd2cSJim Jagielski // need by registration 194*b1cdbd2cSJim Jagielski static ::rtl::OUString getImplementationName_Static() throw( ::com::sun::star::uno::RuntimeException ); 195*b1cdbd2cSJim Jagielski static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static(void) throw( ::com::sun::star::uno::RuntimeException ); 196*b1cdbd2cSJim Jagielski static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > 197*b1cdbd2cSJim Jagielski SAL_CALL Create(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&); 198*b1cdbd2cSJim Jagielski 199*b1cdbd2cSJim Jagielski // XController 200*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL getViewData(void) throw( ::com::sun::star::uno::RuntimeException ); 201*b1cdbd2cSJim Jagielski virtual void SAL_CALL restoreViewData(const ::com::sun::star::uno::Any& Data) throw( ::com::sun::star::uno::RuntimeException ); 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski private: 204*b1cdbd2cSJim Jagielski virtual void onLoadedMenu(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XLayoutManager >& _xLayoutManager); 205*b1cdbd2cSJim Jagielski // OPropertyArrayUsageHelper 206*b1cdbd2cSJim Jagielski virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const; 207*b1cdbd2cSJim Jagielski 208*b1cdbd2cSJim Jagielski // OPropertySetHelper 209*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL convertFastPropertyValue( 210*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any& rConvertedValue, 211*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any& rOldValue, 212*b1cdbd2cSJim Jagielski sal_Int32 nHandle, 213*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Any& rValue 214*b1cdbd2cSJim Jagielski ) throw (::com::sun::star::lang::IllegalArgumentException); 215*b1cdbd2cSJim Jagielski virtual void SAL_CALL setFastPropertyValue_NoBroadcast( 216*b1cdbd2cSJim Jagielski sal_Int32 nHandle, 217*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Any& rValue 218*b1cdbd2cSJim Jagielski ) throw (::com::sun::star::uno::Exception ); 219*b1cdbd2cSJim Jagielski virtual void SAL_CALL getFastPropertyValue( 220*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any& rValue, 221*b1cdbd2cSJim Jagielski sal_Int32 nHandle 222*b1cdbd2cSJim Jagielski ) const; 223*b1cdbd2cSJim Jagielski 224*b1cdbd2cSJim Jagielski virtual OJoinDesignView* getJoinView(); 225*b1cdbd2cSJim Jagielski // ask the user if the design should be saved when it is modified 226*b1cdbd2cSJim Jagielski virtual short saveModified(); 227*b1cdbd2cSJim Jagielski virtual void reset(); 228*b1cdbd2cSJim Jagielski virtual void impl_initialize(); 229*b1cdbd2cSJim Jagielski 230*b1cdbd2cSJim Jagielski void impl_reset( const bool i_bIgnoreQuerySettings = false ); 231*b1cdbd2cSJim Jagielski /// tells the user that we needed to switch to SQL view automatically 232*b1cdbd2cSJim Jagielski void impl_showAutoSQLViewError( const ::com::sun::star::uno::Any& _rErrorDetails ); 233*b1cdbd2cSJim Jagielski 234*b1cdbd2cSJim Jagielski /** switches to the graphical or SQL view mode, as determined by m_bGraphicalDesign 235*b1cdbd2cSJim Jagielski */ 236*b1cdbd2cSJim Jagielski bool impl_setViewMode( ::dbtools::SQLExceptionInfo* _pErrorInfo ); 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielski /// sets m_sStatement, and notifies our respective property change listeners 239*b1cdbd2cSJim Jagielski void setStatement_fireEvent( const ::rtl::OUString& _rNewStatement, bool _bFireStatementChange = true ); 240*b1cdbd2cSJim Jagielski /// sets the m_bEscapeProcessing member, and notifies our respective property change listeners 241*b1cdbd2cSJim Jagielski void setEscapeProcessing_fireEvent( const sal_Bool _bEscapeProcessing ); 242*b1cdbd2cSJim Jagielski 243*b1cdbd2cSJim Jagielski // OJoinController overridables 244*b1cdbd2cSJim Jagielski virtual bool allowViews() const; 245*b1cdbd2cSJim Jagielski virtual bool allowQueries() const; 246*b1cdbd2cSJim Jagielski 247*b1cdbd2cSJim Jagielski private: 248*b1cdbd2cSJim Jagielski DECL_LINK( OnExecuteAddTable, void* ); 249*b1cdbd2cSJim Jagielski 250*b1cdbd2cSJim Jagielski private: 251*b1cdbd2cSJim Jagielski using OQueryController_PBase::getFastPropertyValue; 252*b1cdbd2cSJim Jagielski }; 253*b1cdbd2cSJim Jagielski } 254*b1cdbd2cSJim Jagielski #endif // DBAUI_QUERYCONTROLLER_HXX 255*b1cdbd2cSJim Jagielski 256