//%2003//////////////////////////////////////////////////////////////////////// // // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Development // Company, L. P., IBM Corp., The Open Group, Tivoli Systems. // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.; // IBM Corp.; EMC Corporation, The Open Group. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // //============================================================================== // // Authors: David Rosckes (rosckes@us.ibm.com) // Bert Rivero (hurivero@us.ibm.com) // Chuck Carmack (carmack@us.ibm.com) // Brian Lucier (lucier@us.ibm.com) // // Modified By: // //%///////////////////////////////////////////////////////////////////////////// #ifndef Pegasus_SelectStatement_h #define Pegasus_SelectStatement_h #include #include #include #include #include #include #ifdef PEGASUS_USE_EXPERIMENTAL_INTERFACES PEGASUS_NAMESPACE_BEGIN class PEGASUS_CQL_LINKAGE SelectStatementRep; /** This class is an abstract base class for the query language (e,g. WQL or CQL) select statement. A example of a simple query language SELECT statement may take the following form although CQL architecture includes much more extensive forms of the SELECT statement:
        SELECT 
        FROM 
        WHERE 
    
There are methods for obtaining the various elements of the select statement. See the concrete subclasses for specific information on each type of query language select statement. */ class PEGASUS_CQL_LINKAGE SelectStatement { public: virtual ~SelectStatement(); /** Returns the query language (WQL or CQL). */ String getQueryLanguage() const; /** Returns the query string. */ String getQuery() const; /** This method operates on a single CIMInstance. Returns a boolean value indicating the evaluation result: TRUE means the CIMInstance passed conforms to the criteria on the WHERE clause FALSE means the CIMInstance passed does not conform to the criteria on the WHERE clause */ virtual Boolean evaluate( /** The CIM instance that will be evaluated. The CIMInstance object is not modified by this method. */ const CIMInstance& inCI) = 0; /** applyProjection() method operates on a single CIMInstance to determine what properties to include. On that CIMInstance it will remove all propoerties that are not included in the projection. TODO: document the exceptions! */ virtual void applyProjection( /** Input the CIMInstance object in which to apply the projection. */ CIMInstance& inCI) throw(Exception) = 0; /** This method validates that the class passed in exists both in the FROM list (in the query string) and in the namespace. This method uses the default namespace passed in the CTOR, and the FROM list from the query string passed in the CTOR. An exception is thrown if a class does not exist in the namespace or the FROM list. TODO: document the exceptions. repository errors, namespace doesn't exist, etc. */ virtual void validateClass(const CIMObjectPath& inClassName) throw(Exception) = 0; /** Validates that all the property name identifiers actually exist on a class from the FROM list of the query string. It checks the class in the default namespace (passed on the CTOR) in the repository. An exception is thrown if a property is not valid. TODO: document the exceptions. repository errors, namespace not found, etc. */ virtual void validateProperties() throw(Exception) = 0; /** Returns an array of CIMObjectPath objects that are the class paths from the select statement in the FROM list. */ virtual Array getClassPathList() = 0; /** Returns the required properties from the combined SELECT and WHERE clauses for the classname passed in. This is a pure virtual function that must be implemented in one or more subclasses. If all the properties for the input classname are required, a null CIMPropertyList is returned. */ virtual CIMPropertyList getPropertyList( /** The input parameter className is one of the classes from the FROM list. */ const CIMObjectPath& inClassName) = 0; protected: SelectStatement(); SelectStatementRep* _rep; private: SelectStatement(const SelectStatement& ss); SelectStatement& operator=(const SelectStatement& rhs); }; PEGASUS_NAMESPACE_END #endif #endif