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

File: [Pegasus] / pegasus / src / Pegasus / CQL / CQLSelectStatement.h (download)
Revision: 1.2, Sun Nov 21 12:13:07 2004 UTC (19 years, 7 months ago) by chuck
Branch: MAIN
Changes since 1.1: +218 -0 lines
PEP#: 193
TITLE: CQL stage 1

DESCRIPTION:  Initial commit of CQL

//%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_CQLSelectStatement_h
#define Pegasus_CQLSelectStatement_h

#include <Pegasus/Common/Config.h>
#include <Pegasus/Common/AutoPtr.h>
#include <Pegasus/Query/QueryCommon/SelectStatement.h>
#include <Pegasus/CQL/CQLChainedIdentifier.h>
#include <Pegasus/CQL/CQLPredicate.h>
#include <Pegasus/CQL/CQLIdentifier.h>
#include <Pegasus/CQL/Linkage.h>


#ifdef PEGASUS_USE_EXPERIMENTAL_INTERFACES

PEGASUS_NAMESPACE_BEGIN

class PEGASUS_CQL_LINKAGE CQLSelectStatementRep;

/**  
This class is derived from the SelectStatement base class.  
The purpose of this class is to perform the select statement operations for
CIM Query Language (CQL). 

Notes on CQLSelectStatement class:

(A) Contains a CQLPredicate for the WHERE clause
(B) Contains an array of CQLIdentifiers for the SELECT projection
(C) Contains an array of classpaths from the FROM clause


   */
class PEGASUS_CQL_LINKAGE CQLSelectStatement : public SelectStatement
{
  public:
    CQLSelectStatement();

    /**  This is the constructor for the CQLSelectStatement object.  
           The ctor requires 3 parameters:   
                 query language (qlang) which is CQL,  
                 the query itself, 
                 and the name of the CIM namespace.
       */
    CQLSelectStatement(
        /**  The query language is needed so the
              base class can retrieve the query language.
              The class member variable where this data
              is stored is located in the base SelectStatement
              class.
           */
        String& inQlang, 
        /**  input parameter containing the query string.
           */
        String& inQuery, 
        
        QueryContext& inCtx);

    CQLSelectStatement(String& inQLang, String& inQuery);

    CQLSelectStatement(const CQLSelectStatement& statement);

    ~CQLSelectStatement();

    CQLSelectStatement& operator=(const CQLSelectStatement& rhs);

    void setQueryContext(QueryContext& inCtx);

    /**  Implements the evaluate method from the
          base SelectStatement class.
    
       */
    Boolean evaluate(
        /**  The CIM instance that will be evaluated.
               The CIMInstance object is not modified by this method.
           */
        const CIMInstance& inCI);

    /**  Implements the applyProjection method from the
          base SelectStatement class.
       */
    void applyProjection(
        /**  Input the CIMInstance object in which to apply the
              projection.
           */
        CIMInstance& inCI) throw(Exception);

    /**  Implements the validatedProperties method from the
          base SelectStatement class.
       */
    void validate() throw(Exception);

    /** Returns an array of CIMObjectPath objects that are the 
          class paths from the select statement in the FROM list.
     */
    Array<CIMObjectPath> getClassPathList();

    /** Returns the required properties from the combined SELECT and WHERE
         clauses for the classname passed in.
    
         If all the properties for the input classname are required, a null
         CIMPropertyList is returned.
       */
    CIMPropertyList getPropertyList(
        /**  The input parameter className is one of the
              classes from the FROM list.
           */
        const CIMObjectPath& inClassName = CIMObjectPath());

    CIMPropertyList getSelectPropertyList(
        const CIMObjectPath& inClassName = CIMObjectPath());

    CIMPropertyList getWherePropertyList(
        const CIMObjectPath& inClassName = CIMObjectPath());

    Array<CQLChainedIdentifier> getSelectChainedIdentifiers();

    Array<CQLChainedIdentifier> getWhereChainedIdentifiers();

    /** Modifier. This method should not be called by the user (only by the
            parser).
         Appends a CQLIdentifier to an array of CIMObjectPaths from the FROM
    statement.
        */
    void appendClassPath(
        /**  
           */
        const CQLIdentifier& inIdentifier);

    /** Sets a predicate into this object. This method should only
            be called by Bison.
        */
    void setPredicate(const CQLPredicate& inPredicate);

    /** Gets the top-level predicate contained by this object */
    CQLPredicate getPredicate() const;

    /**  This method calls QueryContext::insertClassPathAlias()  to insert a
    classpath-alias pair
          into the hash table.  The record is keyed by the class alias.
    
         This method is used by Bison.
    
        TODO:  think about exceptions such as duplicate key.
     */
    void insertClassPathAlias(
        /**  The CQLIdentifier object that contains the class path.
           */
        const CQLIdentifier& inIdentifier, 
        /**  The alias for the class.
           */
        String inAlias);

    /** Appends a CQL chained identifier to the CQL identifier list. The user
    should
            not call this method; it should only be called by the Bison.
        */
    void appendSelectIdentifier(const CQLChainedIdentifier& x);

    /**
       Applies the class contexts from the FROM list to the identifiers
       in the statement.
     */
    void applyContext();

    /**
       Normalizes the WHERE clause to disjunction of conjunctions.
     */
    void normalizeToDOC();

    void setHasWhereClause();

    Boolean hasWhereClause();

    String toString();

    void clear();

  private:
	CQLSelectStatementRep* _rep;

};

PEGASUS_NAMESPACE_END
#endif
#endif 

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2