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

  1 martin 1.11 //%LICENSE////////////////////////////////////////////////////////////////
  2 martin 1.12 //
  3 martin 1.11 // Licensed to The Open Group (TOG) under one or more contributor license
  4             // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
  5             // this work for additional information regarding copyright ownership.
  6             // Each contributor licenses this file to you under the OpenPegasus Open
  7             // Source License; you may not use this file except in compliance with the
  8             // License.
  9 martin 1.12 //
 10 martin 1.11 // Permission is hereby granted, free of charge, to any person obtaining a
 11             // copy of this software and associated documentation files (the "Software"),
 12             // to deal in the Software without restriction, including without limitation
 13             // the rights to use, copy, modify, merge, publish, distribute, sublicense,
 14             // and/or sell copies of the Software, and to permit persons to whom the
 15             // Software is furnished to do so, subject to the following conditions:
 16 martin 1.12 //
 17 martin 1.11 // The above copyright notice and this permission notice shall be included
 18             // in all copies or substantial portions of the Software.
 19 martin 1.12 //
 20 martin 1.11 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 21 martin 1.12 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 22 martin 1.11 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 23             // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 24             // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 25             // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 26             // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 27 martin 1.12 //
 28 martin 1.11 //////////////////////////////////////////////////////////////////////////
 29 chuck  1.2  //
 30             //
 31             //%/////////////////////////////////////////////////////////////////////////////
 32             
 33             #include <Pegasus/Common/InternalException.h>
 34             #include "CQLPredicate.h"
 35             #include "CQLSimplePredicate.h"
 36             #include "CQLPredicateRep.h"
 37             #include <Pegasus/CQL/CQLFactory.h>
 38             #include <Pegasus/Query/QueryCommon/QueryContext.h>
 39 humberto 1.3  #include <Pegasus/Common/Tracer.h>
 40 chuck    1.2  
 41               PEGASUS_NAMESPACE_BEGIN
 42               
 43               CQLPredicateRep::CQLPredicateRep():
 44 karl     1.10     _invert(false)
 45 chuck    1.2  {
 46               
 47               }
 48               
 49 karl     1.10 CQLPredicateRep::CQLPredicateRep(const CQLSimplePredicate& inSimplePredicate,
 50                   Boolean inVerted) :
 51                   _simplePredicate(inSimplePredicate), _invert(inVerted)
 52 chuck    1.2  {
 53 humberto 1.5  
 54 chuck    1.2  }
 55               
 56 kumpf    1.13 CQLPredicateRep::CQLPredicateRep(const CQLPredicate& inPredicate,
 57 karl     1.10     Boolean inInverted) :
 58                   _invert(inInverted)
 59 chuck    1.2  {
 60 karl     1.10     _predicates.append(inPredicate);
 61 chuck    1.2  }
 62               
 63               CQLPredicateRep::CQLPredicateRep(const CQLPredicateRep* rep):
 64 karl     1.10     _invert(false)
 65 chuck    1.2  {
 66 karl     1.10     _predicates = rep->_predicates;
 67                   _simplePredicate = rep->_simplePredicate;
 68                   _operators = rep->_operators;
 69                   _invert = rep->_invert;
 70 chuck    1.2  }
 71               
 72               Boolean CQLPredicateRep::evaluate(CIMInstance CI, QueryContext& QueryCtx)
 73               {
 74 karl     1.10     PEG_METHOD_ENTER(TRC_CQL, "CQLIPredicateRep::evaluate");
 75                   Boolean result = false;
 76 kumpf    1.13 
 77 karl     1.10     if (isSimple())
 78                   {
 79 chuck    1.2      result = _simplePredicate.evaluate(CI, QueryCtx);
 80 karl     1.10     }
 81                   else
 82                   {
 83                       result = _predicates[0].evaluate(CI, QueryCtx);
 84                       for (Uint32 i = 0; i < _operators.size(); i++)
 85 chuck    1.2          {
 86 karl     1.10             if (_operators[i] == AND)
 87                           {
 88                               if(result)
 89                               {
 90                                   result = _predicates[i+1].evaluate(CI, QueryCtx);
 91                               }
 92                           }
 93                           else
 94                           {
 95                               if(result)
 96                               {
 97                                   break;
 98                               }
 99                               else
100                               {
101                                   result = _predicates[i+1].evaluate(CI, QueryCtx);
102                               }
103                           }
104 chuck    1.2          }
105 karl     1.10     }
106                   PEG_METHOD_EXIT();
107                   return (getInverted()) ? !result : result;
108 chuck    1.2  }
109               
110               Boolean CQLPredicateRep::getInverted()const{
111 karl     1.10     return _invert;
112 chuck    1.2  }
113               
114 humberto 1.6  void CQLPredicateRep::setInverted(Boolean invert){
115 karl     1.10     _invert = invert;
116 chuck    1.2  }
117               
118               void CQLPredicateRep::appendPredicate(const CQLPredicate& inPredicate){
119 karl     1.10     _predicates.append(inPredicate);
120 chuck    1.2  }
121               
122 karl     1.10 void CQLPredicateRep::appendPredicate(const CQLPredicate& inPredicate,
123                   BooleanOpType inBooleanOperator)
124 chuck    1.2  {
125 karl     1.10     _predicates.append(inPredicate);
126                   _operators.append(inBooleanOperator);
127 chuck    1.2  }
128               
129               Array<CQLPredicate> CQLPredicateRep::getPredicates()const{
130 karl     1.10     return _predicates;
131 chuck    1.2  }
132               
133               CQLSimplePredicate CQLPredicateRep::getSimplePredicate()const{
134 karl     1.10     return _simplePredicate;
135 chuck    1.2  }
136               
137               Array<BooleanOpType> CQLPredicateRep::getOperators()const{
138 karl     1.10     return _operators;
139 chuck    1.2  }
140               
141 vijay.eli 1.8  void CQLPredicateRep::applyContext(const QueryContext& queryContext)
142 chuck     1.2  {
143 karl      1.10     PEG_METHOD_ENTER(TRC_CQL, "CQLPredicateRep::applyContext");
144                    if (isSimple())
145                    {
146                        _simplePredicate.applyContext(queryContext);
147                    }
148                    else
149 chuck     1.2      {
150 karl      1.10         for (Uint32 i = 0; i <_predicates.size(); i++)
151                        {
152                            _predicates[i].applyContext(queryContext);
153                        }
154 chuck     1.2      }
155 karl      1.10     PEG_METHOD_EXIT();
156 chuck     1.2  }
157                
158                Boolean CQLPredicateRep::isSimple()const{
159 karl      1.10     return (_predicates.size() == 0);
160 chuck     1.2  }
161                
162                Boolean CQLPredicateRep::isSimpleValue()const{
163 karl      1.10     return (isSimple() && _simplePredicate.isSimpleValue());
164 chuck     1.2  }
165                
166                String CQLPredicateRep::toString()const{
167 karl      1.10     if(isSimple())
168                    {
169                        String s;
170 humberto  1.5        if(_invert) s = "NOT ";
171                      s.append(_simplePredicate.toString());
172                      return s;
173 karl      1.10     }
174                    String s;
175                    if(_invert) s = "NOT ";
176                    for(Uint32 i = 0; i < _predicates.size(); i++)
177                    {
178                        s.append(_predicates[i].toString());
179                        if(i < _operators.size())
180                        {
181                            switch(_operators[i])
182                            {
183                                case AND: s.append(" AND ");
184                                    break;
185                                case OR: s.append(" OR ");
186                                    break;
187                            }
188                        }
189                    }
190                    return s;
191 chuck     1.2  }
192                
193                PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2