1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir #ifndef DBACCESS_SOURCE_UI_INC_DEFAULTOBJECTNAMECHECK_HXX 29*cdf0e10cSrcweir #define DBACCESS_SOURCE_UI_INC_DEFAULTOBJECTNAMECHECK_HXX 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #ifndef DBACCESS_SOURCE_UI_INC_OBJECTNAMECHECK_HXX 32*cdf0e10cSrcweir #include "objectnamecheck.hxx" 33*cdf0e10cSrcweir #endif 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir /** === begin UNO includes === **/ 36*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XHIERARCHICALNAMEACCESS_HPP_ 37*cdf0e10cSrcweir #include <com/sun/star/container/XHierarchicalNameAccess.hpp> 38*cdf0e10cSrcweir #endif 39*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_ 40*cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp> 41*cdf0e10cSrcweir #endif 42*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBC_XCONNECTION_HPP_ 43*cdf0e10cSrcweir #include <com/sun/star/sdbc/XConnection.hpp> 44*cdf0e10cSrcweir #endif 45*cdf0e10cSrcweir /** === end UNO includes === **/ 46*cdf0e10cSrcweir 47*cdf0e10cSrcweir #include <memory> 48*cdf0e10cSrcweir #include <boost/noncopyable.hpp> 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir //........................................................................ 51*cdf0e10cSrcweir namespace dbaui 52*cdf0e10cSrcweir { 53*cdf0e10cSrcweir //........................................................................ 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir //==================================================================== 56*cdf0e10cSrcweir //= HierarchicalNameCheck 57*cdf0e10cSrcweir //==================================================================== 58*cdf0e10cSrcweir struct HierarchicalNameCheck_Impl; 59*cdf0e10cSrcweir /** class implementing the IObjectNameCheck interface, and checking given object names 60*cdf0e10cSrcweir against a hierarchical name container 61*cdf0e10cSrcweir */ 62*cdf0e10cSrcweir class HierarchicalNameCheck :public ::boost::noncopyable 63*cdf0e10cSrcweir ,public IObjectNameCheck 64*cdf0e10cSrcweir { 65*cdf0e10cSrcweir private: 66*cdf0e10cSrcweir std::auto_ptr< HierarchicalNameCheck_Impl > m_pImpl; 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir public: 69*cdf0e10cSrcweir /** constructs a HierarchicalNameCheck instance 70*cdf0e10cSrcweir @param _rxNames 71*cdf0e10cSrcweir the hierarchic container of named objects, against which given names should be 72*cdf0e10cSrcweir checked 73*cdf0e10cSrcweir @param _rRelativeRoot 74*cdf0e10cSrcweir the root in the hierarchy against which given names should be checked 75*cdf0e10cSrcweir @throws ::com::sun::star::lang::IllegalArgumentException 76*cdf0e10cSrcweir if the given container is <NULL/> 77*cdf0e10cSrcweir */ 78*cdf0e10cSrcweir HierarchicalNameCheck( 79*cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::container::XHierarchicalNameAccess >& _rxNames, 80*cdf0e10cSrcweir const ::rtl::OUString& _rRelativeRoot 81*cdf0e10cSrcweir ); 82*cdf0e10cSrcweir 83*cdf0e10cSrcweir ~HierarchicalNameCheck(); 84*cdf0e10cSrcweir 85*cdf0e10cSrcweir // IObjectNameCheck overridables 86*cdf0e10cSrcweir virtual bool isNameValid( 87*cdf0e10cSrcweir const ::rtl::OUString& _rObjectName, 88*cdf0e10cSrcweir ::dbtools::SQLExceptionInfo& _out_rErrorToDisplay 89*cdf0e10cSrcweir ) const; 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir private: 92*cdf0e10cSrcweir HierarchicalNameCheck(); // never implemented 93*cdf0e10cSrcweir }; 94*cdf0e10cSrcweir 95*cdf0e10cSrcweir //==================================================================== 96*cdf0e10cSrcweir //= DynamicTableOrQueryNameCheck 97*cdf0e10cSrcweir //==================================================================== 98*cdf0e10cSrcweir struct DynamicTableOrQueryNameCheck_Impl; 99*cdf0e10cSrcweir /** class implementing the IObjectNameCheck interface, and checking a given name 100*cdf0e10cSrcweir for being valid as either a query or a table name. 101*cdf0e10cSrcweir 102*cdf0e10cSrcweir The class can be parametrized to act as either table name or query name validator. 103*cdf0e10cSrcweir 104*cdf0e10cSrcweir For databases which support queries in queries, the name check is implicitly extended 105*cdf0e10cSrcweir to both queries and tables, no matter which category is checked. This prevents, for 106*cdf0e10cSrcweir such databases, that users can create a query with the name of an existing table, 107*cdf0e10cSrcweir or vice versa. 108*cdf0e10cSrcweir 109*cdf0e10cSrcweir @seealso dbtools::DatabaseMetaData::supportsSubqueriesInFrom 110*cdf0e10cSrcweir @seealso com::sun::star::sdb::tools::XObjectNames::checkNameForCreate 111*cdf0e10cSrcweir */ 112*cdf0e10cSrcweir class DynamicTableOrQueryNameCheck :public ::boost::noncopyable 113*cdf0e10cSrcweir ,public IObjectNameCheck 114*cdf0e10cSrcweir { 115*cdf0e10cSrcweir private: 116*cdf0e10cSrcweir std::auto_ptr< DynamicTableOrQueryNameCheck_Impl > m_pImpl; 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir public: 119*cdf0e10cSrcweir /** constructs a DynamicTableOrQueryNameCheck instance 120*cdf0e10cSrcweir @param _rxSdbLevelConnection 121*cdf0e10cSrcweir a connection supporting the css.sdb.Connection service, in other word, it 122*cdf0e10cSrcweir does expose the XTablesSupplier and XQueriesSupplier interfaces. 123*cdf0e10cSrcweir @param _nCommandType 124*cdf0e10cSrcweir specifies whether table names or query names should be checked. Only valid values 125*cdf0e10cSrcweir are CommandType::TABLE and CommandType::QUERY. 126*cdf0e10cSrcweir @throws ::com::sun::star::lang::IllegalArgumentException 127*cdf0e10cSrcweir if the given connection is <NULL/>, or the given command type is neither 128*cdf0e10cSrcweir CommandType::TABLE nor CommandType::QUERY. 129*cdf0e10cSrcweir */ 130*cdf0e10cSrcweir DynamicTableOrQueryNameCheck( 131*cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxSdbLevelConnection, 132*cdf0e10cSrcweir sal_Int32 _nCommandType 133*cdf0e10cSrcweir ); 134*cdf0e10cSrcweir 135*cdf0e10cSrcweir ~DynamicTableOrQueryNameCheck(); 136*cdf0e10cSrcweir 137*cdf0e10cSrcweir // IObjectNameCheck overridables 138*cdf0e10cSrcweir virtual bool isNameValid( 139*cdf0e10cSrcweir const ::rtl::OUString& _rObjectName, 140*cdf0e10cSrcweir ::dbtools::SQLExceptionInfo& _out_rErrorToDisplay 141*cdf0e10cSrcweir ) const; 142*cdf0e10cSrcweir 143*cdf0e10cSrcweir private: 144*cdf0e10cSrcweir DynamicTableOrQueryNameCheck(); // never implemented 145*cdf0e10cSrcweir }; 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir //........................................................................ 148*cdf0e10cSrcweir } // namespace dbaui 149*cdf0e10cSrcweir //........................................................................ 150*cdf0e10cSrcweir 151*cdf0e10cSrcweir #endif // DBACCESS_SOURCE_UI_INC_DEFAULTOBJECTNAMECHECK_HXX 152*cdf0e10cSrcweir 153