(file) Return to SelectStatement.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / CQL

File: [Pegasus] / pegasus / src / Pegasus / CQL / Attic / SelectStatement.h (download)
Revision: 1.1.2.6, Fri Nov 5 17:24:55 2004 UTC (19 years, 8 months ago) by humberto
Branch: CQL_2_5_BRANCH
Changes since 1.1.2.5: +2 -1 lines
PEP#: 193

TITLE: Added #ifdef PEGASUS_USE_EXPERIMENTAL_INTERFACES to all CQL parts

DESCRIPTION: CQL implementation

//%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 <Pegasus/Common/Config.h>
#include <Pegasus/Common/String.h>
#include <Pegasus/Common/CIMInstance.h>
#include <Pegasus/CQL/QueryContext.h>
#include <Pegasus/CQL/CQLPredicate.h>
#include <Pegasus/CQL/Linkage.h>

#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:

    <pre>
        SELECT <select-list>
        FROM <class list>
        WHERE <selection expression>
    </pre>

    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<CIMObjectPath> 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 

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2