1 chuck 1.1.2.4 //%2003////////////////////////////////////////////////////////////////////////
|
2 david 1.1.2.1 //
|
3 chuck 1.1.2.5 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Development
4 // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;
|
6 david 1.1.2.1 // IBM Corp.; EMC Corporation, The Open Group.
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to
10 // deal in the Software without restriction, including without limitation the
11 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
12 // sell copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
14 //
15 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
16 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
17 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
18 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
19 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 //
24 //==============================================================================
25 //
26 // Author: Dave Rosckes (rosckes@us.ibm.com)
27 david 1.1.2.1 //
|
28 dj.gorey 1.1.2.21 // Modified By: Dan Gorey (djgorey@us.ibm.com)
|
29 david 1.1.2.1 //
30 //%/////////////////////////////////////////////////////////////////////////////
31
32 #include <cstdlib>
33 #include <iostream>
34
|
35 david 1.1.2.15 #include <Pegasus/CQL/CQLValue.h>
|
36 david 1.1.2.1 #include <Pegasus/CQL/CQLValueRep.h>
37 #include <Pegasus/Repository/NameSpaceManager.h>
38 #include <Pegasus/Common/CIMClass.h>
|
39 david 1.1.2.25 #include <Pegasus/Common/Tracer.h>
|
40 david 1.1.2.1 #include <Pegasus/CQL/CQLIdentifier.h>
|
41 dj.gorey 1.1.2.21 #include <Pegasus/CQL/CQLRegularExpression.h>
|
42 david 1.1.2.1 #include <Pegasus/CQL/CQLFactory.h>
|
43 david 1.1.2.25 #include <Pegasus/CQL/QueryException.h>
|
44 david 1.1.2.1
45
46
47 PEGASUS_NAMESPACE_BEGIN
48 PEGASUS_USING_STD;
49
50 #define PEGASUS_ARRAY_T CQLValueRep
51 #include <Pegasus/Common/ArrayImpl.h>
52 #undef PEGASUS_ARRAY_T
53
|
54 david 1.1.2.18 #define PEGASUS_SINT64_MIN (PEGASUS_SINT64_LITERAL(0x8000000000000000))
55 #define PEGASUS_UINT64_MAX PEGASUS_UINT64_LITERAL(0xFFFFFFFFFFFFFFFF)
|
56 david 1.1.2.1 #define CIMTYPE_EMBEDDED 15 //temporary
|
57 humberto 1.1.2.3
58 CQLValueRep::CQLValueRep()
|
59 david 1.1.2.18 :_valueType(CQLValue::Null_type)
|
60 humberto 1.1.2.3 {
61 }
|
62 david 1.1.2.23
|
63 david 1.1.2.1 CQLValueRep::~CQLValueRep()
64 {
|
65 david 1.1.2.23
|
66 david 1.1.2.1 }
67
|
68 david 1.1.2.18
69 CQLValueRep::CQLValueRep(const CQLValueRep& val)
70 {
|
71 david 1.1.2.23 _theValue = val._theValue;
|
72 david 1.1.2.18
73 _CQLChainId = val._CQLChainId;
74
75 _isResolved = val._isResolved;
76
77 _valueType = val._valueType;
|
78 david 1.1.2.24
79
|
80 david 1.1.2.18 }
81
|
82 david 1.1.2.1 CQLValueRep::CQLValueRep(const CQLValueRep* val)
83 {
|
84 david 1.1.2.23 _theValue = val->_theValue;
|
85 david 1.1.2.1
|
86 david 1.1.2.23 _CQLChainId = val->_CQLChainId;
|
87 david 1.1.2.1
|
88 david 1.1.2.23 _isResolved = val->_isResolved;
|
89 david 1.1.2.1
|
90 david 1.1.2.23 _valueType = val->_valueType;
|
91 david 1.1.2.1 }
92
|
93 david 1.1.2.15 CQLValueRep::CQLValueRep(const String& inString, CQLValue::NumericType inValueType, Boolean inSign)
|
94 david 1.1.2.1 {
|
95 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL, "CQLValueRep::CQLValueRep()");
|
96 david 1.1.2.1 CString cStr = inString.getCString();
97 char *endP;
98
99 switch(inValueType)
100 {
|
101 david 1.1.2.15 case CQLValue::Hex:
|
102 david 1.1.2.1 if(inSign)
103 {
|
104 david 1.1.2.23 _theValue.set((Uint64)strtoul((const char*)cStr,&endP,16));
|
105 david 1.1.2.15 _valueType = CQLValue::Uint64_type;
|
106 david 1.1.2.1 }
107 else
108 {
|
109 david 1.1.2.23 _theValue.set((Sint64)strtol((const char *)cStr,&endP,16));
|
110 david 1.1.2.15 _valueType = CQLValue::Sint64_type;
|
111 david 1.1.2.1 }
112
113 break;
|
114 david 1.1.2.15 case CQLValue::Binary:
|
115 david 1.1.2.1 if(inSign)
116 {
|
117 david 1.1.2.23 _theValue.set((Uint64)strtoul((const char *)cStr,&endP,2));
|
118 david 1.1.2.15 _valueType = CQLValue::Uint64_type;
|
119 david 1.1.2.1 }
120 else
121 {
|
122 david 1.1.2.23 _theValue.set((Sint64)strtol((const char *)cStr,&endP,2));
|
123 david 1.1.2.15 _valueType = CQLValue::Sint64_type;
|
124 david 1.1.2.1 }
125 break;
|
126 david 1.1.2.15 case CQLValue::Decimal:
|
127 david 1.1.2.1 if(inSign)
128 {
|
129 david 1.1.2.23 _theValue.set((Uint64)strtoul((const char *)cStr,&endP,10));
|
130 david 1.1.2.15 _valueType = CQLValue::Uint64_type;
|
131 david 1.1.2.1 }
132 else
133 {
|
134 david 1.1.2.23 _theValue.set((Sint64)strtol((const char *)cStr,&endP,10));
|
135 david 1.1.2.15 _valueType = CQLValue::Sint64_type;
|
136 david 1.1.2.1 }
137 break;
|
138 david 1.1.2.15 case CQLValue::Real:
|
139 david 1.1.2.1 if(inSign)
140 {
|
141 david 1.1.2.23 _theValue.set((Real64)strtod((const char *)cStr,&endP));
|
142 david 1.1.2.15 _valueType = CQLValue::Real_type;
|
143 david 1.1.2.1 }
144 else
145 {
|
146 david 1.1.2.23 _theValue.set((Real64)strtod((const char *)cStr,&endP));
|
147 david 1.1.2.15 _valueType = CQLValue::Real_type;
|
148 david 1.1.2.1 }
149 break;
150 default:
|
151 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.CONSTRUCTOR_FAILURE"),
152 String("Undefined case in constructor."));
153 throw CQLRuntimeException(mload);
154
155 break;
|
156 david 1.1.2.1 }
|
157 david 1.1.2.25
|
158 david 1.1.2.1 _isResolved = true;
|
159 david 1.1.2.25
160 PEG_METHOD_EXIT();
|
161 david 1.1.2.1 }
162
163
|
164 david 1.1.2.15 CQLValueRep::CQLValueRep(const CQLChainedIdentifier& inCQLIdent)
|
165 david 1.1.2.18 : _CQLChainId(inCQLIdent),
166 _isResolved(false),
167 _valueType(CQLValue::CQLIdentifier_type)
|
168 david 1.1.2.1 {
|
169 david 1.1.2.18
|
170 david 1.1.2.1 }
171
172
|
173 david 1.1.2.15 CQLValueRep::CQLValueRep(const String& inString)
|
174 david 1.1.2.18 : _isResolved(true),
175 _valueType(CQLValue::String_type)
|
176 david 1.1.2.1 {
|
177 david 1.1.2.23 _theValue.set(inString);
|
178 david 1.1.2.1 }
179
|
180 david 1.1.2.15 CQLValueRep::CQLValueRep(const CIMInstance& inInstance)
|
181 david 1.1.2.18 : _isResolved(true),
|
182 david 1.1.2.23 _valueType(CQLValue::CIMObject_type)
|
183 david 1.1.2.1 {
|
184 david 1.1.2.25 _theValue.set((CIMObject)inInstance);
|
185 david 1.1.2.1 }
186
|
187 david 1.1.2.15 CQLValueRep::CQLValueRep(const CIMClass& inClass)
|
188 david 1.1.2.18 : _isResolved(true),
|
189 david 1.1.2.23 _valueType(CQLValue::CIMObject_type)
|
190 david 1.1.2.1 {
|
191 david 1.1.2.25 _theValue.set((CIMObject)inClass);
|
192 david 1.1.2.1 }
193
|
194 david 1.1.2.24 CQLValueRep::CQLValueRep(const CIMObject& inObject)
195 : _isResolved(true),
196 _valueType(CQLValue::CIMObject_type)
197 {
|
198 david 1.1.2.25 _theValue.set((CIMObject)inObject);
|
199 david 1.1.2.24 }
200
|
201 david 1.1.2.15 CQLValueRep::CQLValueRep(const CIMObjectPath& inObjPath)
|
202 david 1.1.2.18 : _isResolved(true),
203 _valueType(CQLValue::CIMReference_type)
|
204 david 1.1.2.1 {
|
205 david 1.1.2.23 _theValue.set(inObjPath);
|
206 david 1.1.2.1 }
207
|
208 david 1.1.2.15 CQLValueRep::CQLValueRep(const CIMDateTime& inDateTime)
|
209 david 1.1.2.18 : _isResolved(true),
210 _valueType(CQLValue::CIMDateTime_type)
|
211 david 1.1.2.1 {
|
212 david 1.1.2.23 _theValue.set(inDateTime);
|
213 david 1.1.2.1 }
214
215 CQLValueRep::CQLValueRep(Uint64 inUint)
|
216 david 1.1.2.18 : _isResolved(true),
217 _valueType(CQLValue::Uint64_type)
|
218 david 1.1.2.1 {
|
219 david 1.1.2.23 _theValue.set(inUint);
|
220 david 1.1.2.1 }
221
222 CQLValueRep::CQLValueRep(Boolean inBool)
|
223 david 1.1.2.18 : _isResolved(true),
224 _valueType(CQLValue::Boolean_type)
|
225 david 1.1.2.1 {
|
226 david 1.1.2.23 _theValue.set(inBool);
|
227 david 1.1.2.1 }
228
229 CQLValueRep::CQLValueRep(Sint64 inSint)
|
230 david 1.1.2.18 : _isResolved(true),
231 _valueType(CQLValue::Sint64_type)
|
232 david 1.1.2.1 {
|
233 david 1.1.2.23 _theValue.set(inSint);
|
234 david 1.1.2.1 }
235
236 CQLValueRep::CQLValueRep(Real64 inReal)
|
237 david 1.1.2.18 : _isResolved(true),
238 _valueType(CQLValue::Real_type)
|
239 david 1.1.2.1 {
|
240 david 1.1.2.23 _theValue.set(inReal);
|
241 david 1.1.2.1 }
242
|
243 david 1.1.2.24 CQLValueRep::CQLValueRep(const CIMValue& inVal)
244 {
245 _setValue(inVal);
246 }
247
|
248 david 1.1.2.17 void CQLValueRep::resolve(const CIMInstance& CI, const QueryContext& inQueryCtx)
|
249 chuck 1.1.2.22 {
|
250 david 1.1.2.18 if(_CQLChainId.size() == 0)
251 {
|
252 david 1.1.2.1 return;
|
253 david 1.1.2.18 }
254
|
255 david 1.1.2.1
|
256 david 1.1.2.18 Array<CQLIdentifier> Idstrings =
257 _CQLChainId.getSubIdentifiers(); // Array of Identifiers to process
258
259 Uint32 index = 0; // Counter for looping through Identifiers
260 CIMProperty propObj;
261
262 if(Idstrings.size() == 1)
263 {
|
264 david 1.1.2.1 // A class was passed in with no property indicated.
265 // Set the instance passed in, as a primitive.
|
266 david 1.1.2.25 _theValue.set((CIMObject)CI);
|
267 david 1.1.2.23 _valueType = CQLValue::CIMObject_type;
|
268 david 1.1.2.1 _isResolved = true;
269 return; // Done.
|
270 david 1.1.2.18 }
271 else
272 {
273 // Symbolic Constant processing
274 if(_CQLChainId.getLastIdentifier().isSymbolicConstant() &&
275 Idstrings.size() == 2)
276 {
277 _resolveSymbolicConstant(inQueryCtx);
278 return;
279 }
280
|
281 david 1.1.2.1 // Need to increment index since the first Identifier is a class,
282 // and additional identifiers need processing.
283 ++index;
|
284 david 1.1.2.18 }
285
286 CIMName classContext = Idstrings[0].getName();
287 CIMObject objectContext = CI;
|
288 david 1.1.2.25
|
289 david 1.1.2.18 for(;index < Idstrings.size(); ++index)
290 {
|
291 david 1.1.2.1 // Now we need to verify that the property is in the class.
|
292 david 1.1.2.18 Uint32 propertyIndex = objectContext.findProperty(Idstrings[index].getName());
293
|
294 david 1.1.2.1 if(propertyIndex == PEG_NOT_FOUND)
|
295 david 1.1.2.18 {
296 _valueType = CQLValue::Null_type;
297 return;
298 }
299
|
300 david 1.1.2.1 // We will check the property type to determine what processing
301 // needs to be done.
|
302 david 1.1.2.18 propObj = objectContext.getProperty(propertyIndex);
|
303 chuck 1.1.2.22
304 /*
|
305 david 1.1.2.18 if(inQueryCtx.getClassRelation(Idstrings[index].getScope(),classContext)
306 == QueryContext::NOTRELATED)
307 {
308 // The chain is not inline with scope.
309 _valueType = CQLValue::Null_type;
310 return;
311 }
|
312 chuck 1.1.2.22 */
|
313 david 1.1.2.18
314 if(index == Idstrings.size()-1)
315 {
316 _process_value(propObj,Idstrings[index],inQueryCtx);
|
317 david 1.1.2.25 return;
|
318 david 1.1.2.18 }
319 else if(propObj.getType() != CIMTYPE_EMBEDDED)
320 {
321 // Object is not embedded.
322 _valueType = CQLValue::Null_type;
323 return;
324 }
|
325 david 1.1.2.25 propObj.getValue().get(objectContext);
|
326 david 1.1.2.18 classContext = objectContext.getClassName();
327 }
|
328 david 1.1.2.1 } // end of function
329
|
330 david 1.1.2.18 void CQLValueRep::_process_value(CIMProperty& propObj,
331 CQLIdentifier& _id,
332 const QueryContext& inQueryCtx)
333 {
334 if(propObj.getType() == CIMTYPE_EMBEDDED)
335 {
336 CIMObject cimObj;
|
337 david 1.1.2.25 propObj.getValue().get(cimObj);
|
338 david 1.1.2.18
|
339 david 1.1.2.25 _theValue.set(cimObj);
340 _valueType = CQLValue::CIMObject_type;
|
341 david 1.1.2.18 }
342 else // Primitive
343 {
344 if(_id.isArray())
345 {
346 // We have an array property. All we need to do
347 // Is get the index defined by CQLIdentifier.
348 // NOTE: Basic CQL support only allows one index.
349 _setValue(propObj.getValue(),
350 _id.getSubRanges()[0].start);
351 return;
352 }
353 else if(_id.isSymbolicConstant())
354 {
355 // Symbolic Constant processing
356 _resolveSymbolicConstant(inQueryCtx);
357 return;
358 }
359 else
360 {
361 // The property has no special charactors.
|
362 david 1.1.2.24 if(propObj.isArray())
363 {
364 Uint32 qualIndex = propObj.findQualifier(CIMName(String("ArrayType")));
365 propObj.getQualifier(qualIndex).getValue().get(_ArrayType);
366 }
|
367 david 1.1.2.18 _setValue(propObj.getValue());
368 return;
369 }
370 }
371 }
372
|
373 david 1.1.2.23 CQLValueRep& CQLValueRep::operator=(const CQLValueRep& rhs)
374 {
|
375 david 1.1.2.1
|
376 david 1.1.2.23 if(&rhs != this)
377 {
378 _valueType = rhs._valueType;
379 _theValue = rhs._theValue;
380 _CQLChainId = rhs._CQLChainId;
381 _isResolved = rhs._isResolved;
382 }
383 return *this;
|
384 david 1.1.2.1 }
385 Boolean CQLValueRep::operator==(const CQLValueRep& x)
386 {
|
387 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL, "CQLValueRep::operator==");
|
388 david 1.1.2.18 _validate(x);
|
389 david 1.1.2.6
|
390 david 1.1.2.24 if(_theValue.isArray())
391 {
392 return _compareArray(x);
393 }
394 else if((_theValue.getType() == x._theValue.getType()) &&
|
395 david 1.1.2.23 (_valueType != CQLValue::CIMObject_type) &&
|
396 david 1.1.2.24 (_valueType != CQLValue::CQLIdentifier_type))
|
397 david 1.1.2.23 {
398 return _theValue == x._theValue;
399 }
400 else
401 {
402 Uint64 tmpU64;
403 Sint64 tmpS64;
404 Real64 tmpR64;
405
406 switch(_valueType)
407 {
408 case CQLValue::Null_type:
409 {
410 if(x._valueType == CQLValue::Null_type)
|
411 david 1.1.2.18 {
412 return true;
413 }
|
414 david 1.1.2.23 }
415 break;
416
417 case CQLValue::Sint64_type:
418 {
419 _theValue.get(tmpS64);
420 if(x._valueType == CQLValue::Uint64_type)
421 {
422 x._theValue.get(tmpU64);
423
424 if(tmpU64 > (Uint64)PEGASUS_SINT64_MIN)
425 {
426 return false;
427 }
428 else
429 {
430 return (Sint64)tmpU64 == tmpS64;
431 }
432 }
433 else
434 {
435 david 1.1.2.23 x._theValue.get(tmpR64);
436
437 return tmpR64 == tmpS64;
438 }
439 break;
440 }
441 case CQLValue::Uint64_type:
442 {
443 _theValue.get(tmpU64);
444 if(x._valueType == CQLValue::Sint64_type)
445 {
446 x._theValue.get(tmpS64);
447
448 if(tmpU64 > (Uint64)PEGASUS_SINT64_MIN)
449 {
450 return false;
451 }
452 else
453 {
454 return (Sint64)tmpU64 == tmpS64;
455 }
456 david 1.1.2.23 }
457 else
458 {
459 x._theValue.get(tmpR64);
460 if(tmpU64 > (Uint64)PEGASUS_SINT64_MIN)
461 {
462 return false;
463 }
464 else
465 {
466 return tmpR64 == (Sint64)tmpU64;
467 }
468 }
469 break;
470 }
471 case CQLValue::Real_type:
472 {
473 _theValue.get(tmpR64);
474 if(x._valueType == CQLValue::Uint64_type)
475 {
476 x._theValue.get(tmpU64);
477 david 1.1.2.23
478 if(tmpU64 > (Uint64)PEGASUS_SINT64_MIN)
479 {
480 return false;
481 }
482 else
483 {
484 return (Sint64)tmpU64 == tmpR64;
485 }
486 }
487 else
488 {
489 x._theValue.get(tmpS64);
490
491 return tmpR64 == tmpS64;
492 }
493 break;
494 }
495 case CQLValue::CIMObject_type:
496 {
497 CIMObject objBase;
498 david 1.1.2.23 CIMObject objParm;
|
499 david 1.1.2.25 _theValue.get(objBase);
500 x._theValue.get(objParm);
|
501 david 1.1.2.23
|
502 david 1.1.2.25 return _compareObjects(objBase,objParm);
|
503 david 1.1.2.23 }
504 break;
505
506 default:
|
507 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.CONSTRUCTOR_FAILURE"),
508 String("Undefined case in constructor."));
509 throw CQLRuntimeException(mload);
|
510 david 1.1.2.23 break;
511 }
512 return false;
513 }
|
514 david 1.1.2.25 PEG_METHOD_EXIT();
|
515 david 1.1.2.1 }
|
516 david 1.1.2.23
|
517 david 1.1.2.1 Boolean CQLValueRep::operator!=(const CQLValueRep& x)
518 {
|
519 david 1.1.2.18 return !(this->operator==(x));
|
520 david 1.1.2.1 }
521
522
523 Boolean CQLValueRep::operator<=(const CQLValueRep& x)
|
524 david 1.1.2.23 {
|
525 david 1.1.2.18 if (this->operator<(x) || this->operator==(x))
526 {
527 return true;
528 }
529
530 return false;
|
531 david 1.1.2.1 }
532
533
534 Boolean CQLValueRep::operator>=(const CQLValueRep& x)
535 {
|
536 david 1.1.2.18 _validate(x);
537
|
538 lucier 1.1.2.13 return !(this->operator<(x));
|
539 david 1.1.2.1 }
540
541
542 Boolean CQLValueRep::operator<(const CQLValueRep& x)
543 {
|
544 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL, "CQLValueRep::operator<");
545
|
546 david 1.1.2.24 Uint64 tmpU64;
547 Sint64 tmpS64;
548 Real64 tmpR64;
549
550 switch(_valueType)
551 {
552 case CQLValue::Null_type:
553 {
554 return false;
555 }
556 break;
|
557 david 1.1.2.23
|
558 david 1.1.2.24 case CQLValue::Sint64_type:
559 {
560 _theValue.get(tmpS64);
561 if(x._valueType == CQLValue::Sint64_type)
|
562 david 1.1.2.18 {
|
563 david 1.1.2.24 Sint64 right;
564 x._theValue.get(right);
565
566 return tmpS64 < right;
|
567 david 1.1.2.18 }
|
568 david 1.1.2.24 else if(x._valueType == CQLValue::Uint64_type)
569 {
570 x._theValue.get(tmpU64);
571
572 if(tmpU64 > (Uint64)PEGASUS_SINT64_MIN)
573 {
574 return true;
575 }
576 else
577 {
578 return tmpS64 < (Sint64)tmpU64;
579 }
580 }
581 else
582 {
583 x._theValue.get(tmpR64);
584
585 return tmpS64 < tmpR64;
586 }
587 break;
588 }
589 david 1.1.2.24 case CQLValue::Uint64_type:
590 {
591 _theValue.get(tmpU64);
592 if(x._valueType == CQLValue::Uint64_type)
593 {
594 Uint64 right;
595 x._theValue.get(right);
596
597 return tmpU64 < right;
598 }
599 else if(x._valueType == CQLValue::Sint64_type)
600 {
601 x._theValue.get(tmpS64);
602
603 if(tmpU64 > (Uint64)PEGASUS_SINT64_MIN)
604 {
605 return false;
606 }
607 else
608 {
609 return (Sint64)tmpU64 < tmpS64;
610 david 1.1.2.24 }
611 }
612 else
613 {
614 x._theValue.get(tmpR64);
615 if(tmpU64 > (Uint64)PEGASUS_SINT64_MIN)
616 {
617 return false;
618 }
|
619 david 1.1.2.23 else
620 {
621 return (Sint64)tmpU64 < tmpR64;
622 }
|
623 david 1.1.2.24 }
624 break;
625 }
626 case CQLValue::Real_type:
627 {
628 _theValue.get(tmpR64);
629 if(x._valueType == CQLValue::Real_type)
630 {
631 Real64 right;
632 x._theValue.get(right);
|
633 david 1.1.2.23
|
634 david 1.1.2.24 return tmpR64 < right;
635 }
636 else if(x._valueType == CQLValue::Uint64_type)
|
637 david 1.1.2.23 {
|
638 david 1.1.2.24 x._theValue.get(tmpU64);
639
640 if(tmpU64 > (Uint64)PEGASUS_SINT64_MIN)
641 {
642 return true;
643 }
644 else
645 {
646 return tmpR64 < (Sint64)tmpU64;
647 }
648 }
649 else
650 {
651 x._theValue.get(tmpS64);
652
653 return tmpR64 < tmpS64;
654 }
|
655 david 1.1.2.23 break;
|
656 david 1.1.2.24 }
657 case CQLValue::String_type:
658 {
659 String tmpS1;
660 String tmpS2;
661 _theValue.get(tmpS1);
662 x._theValue.get(tmpS2);
663 return tmpS1 < tmpS2;
664 }
665 break;
666 case CQLValue::CIMDateTime_type:
667 {
668 CIMDateTime tmpS1;
669 CIMDateTime tmpS2;
670 _theValue.get(tmpS1);
671 x._theValue.get(tmpS2);
672 return tmpS1 < tmpS2;
673 }
674 break;
|
675 david 1.1.2.25
|
676 david 1.1.2.24 default:
|
677 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.CONSTRUCTOR_FAILURE"),
678 String("Undefined case in constructor."));
679 throw CQLRuntimeException(mload);
|
680 david 1.1.2.24 break;
681 }
|
682 david 1.1.2.25 PEG_METHOD_EXIT();
|
683 david 1.1.2.24 return false;
|
684 david 1.1.2.1 }
685
686
687 Boolean CQLValueRep::operator>(const CQLValueRep& x)
688 {
|
689 david 1.1.2.18 _validate(x);
690
|
691 lucier 1.1.2.13 if (this->operator<(x) || this->operator==(x))
|
692 david 1.1.2.18 {
693 return false;
694 }
|
695 lucier 1.1.2.13 return true;
|
696 david 1.1.2.1 }
697
|
698 david 1.1.2.17
|
699 david 1.1.2.1 CQLValueRep CQLValueRep::operator+(const CQLValueRep x)
700 {
|
701 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::operator+");
|
702 david 1.1.2.18 _validate(x);
|
703 david 1.1.2.6
|
704 david 1.1.2.1 switch(_valueType)
|
705 david 1.1.2.25 {
|
706 david 1.1.2.18 case CQLValue::String_type:
|
707 david 1.1.2.23 {
708 String tmpS1;
709 String tmpS2;
710 _theValue.get(tmpS1);
711 x._theValue.get(tmpS2);
712 return CQLValueRep(tmpS1 + tmpS2);
713 }
|
714 david 1.1.2.18 break;
715
716 default:
|
717 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.CONSTRUCTOR_FAILURE"),
718 String("Undefined case in constructor."));
719 throw CQLRuntimeException(mload);
|
720 david 1.1.2.18 break;
721 }
|
722 david 1.1.2.1
|
723 david 1.1.2.25 PEG_METHOD_EXIT();
|
724 david 1.1.2.1 return x;
725 }
726
|
727 david 1.1.2.15 CQLValue::CQLValueType CQLValueRep::getValueType()
|
728 david 1.1.2.1 {
729 return _valueType;
730 }
731
732
733 void CQLValueRep::setNull()
734 {
|
735 david 1.1.2.15 _valueType = CQLValue::Null_type;
|
736 david 1.1.2.1 _isResolved = true;
737 }
738
739
740 Boolean CQLValueRep::isResolved()
741 {
742 return _isResolved;
743 }
744
745
746 Boolean CQLValueRep::isNull()
747 {
|
748 david 1.1.2.15 if(_valueType == CQLValue::Null_type)
|
749 david 1.1.2.1 {
750 return true;
751 }
752 return false;
753 }
754
755
|
756 david 1.1.2.18 Boolean CQLValueRep::isa(const CQLChainedIdentifier& inID,QueryContext& QueryCtx)
|
757 david 1.1.2.1 {
|
758 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::isa()");
|
759 david 1.1.2.1 if(!_isResolved ||
|
760 david 1.1.2.23 (_valueType != CQLValue::CIMObject_type))
|
761 david 1.1.2.18 {
|
762 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.ISA_TYPE_MISMATCH"),
763 String("The type is not an object."));
764 throw CQLRuntimeException(mload);
|
765 david 1.1.2.18 }
|
766 david 1.1.2.1
|
767 david 1.1.2.18 CIMName className;
|
768 david 1.1.2.23 CIMObject obj;
|
769 david 1.1.2.1
|
770 david 1.1.2.25 _theValue.get(obj);
|
771 david 1.1.2.23
772 className = obj.getClassName();
|
773 david 1.1.2.1
|
774 david 1.1.2.18 Array<CIMName> cimNames = QueryCtx.enumerateClassNames(inID[0].getName());
|
775 david 1.1.2.1
|
776 david 1.1.2.18 for(Uint32 i = 0; i < cimNames.size() ; ++i)
777 {
778 if(cimNames[i] == className)
779 {
|
780 david 1.1.2.25 PEG_METHOD_EXIT();
|
781 david 1.1.2.18 return true;
782 }
783 }
|
784 david 1.1.2.25 PEG_METHOD_EXIT();
|
785 david 1.1.2.1 return false;
786 }
787
788
789 Boolean CQLValueRep::like(const CQLValueRep& inVal)
790 {
|
791 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::like()");
|
792 david 1.1.2.15 if( _valueType != CQLValue::String_type ||
793 inVal._valueType != CQLValue::String_type)
|
794 david 1.1.2.1 {
|
795 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.LIKE_TYPE_MISMATCH"),
796 String("The type is not a string."));
797 throw CQLRuntimeException(mload);
|
798 david 1.1.2.1 }
|
799 david 1.1.2.20
|
800 david 1.1.2.23 String leftside;
801 _theValue.get(leftside);
802
803 String rightside;
804 inVal._theValue.get(rightside);
|
805 dj.gorey 1.1.2.21
806 CQLRegularExpression re;
|
807 david 1.1.2.25
808 PEG_METHOD_EXIT();
|
809 dj.gorey 1.1.2.21 return re.match(leftside,rightside);
|
810 david 1.1.2.23
|
811 david 1.1.2.1 }
|
812 david 1.1.2.19
|
813 david 1.1.2.1 CQLChainedIdentifier CQLValueRep::getChainedIdentifier()const
814 {
815 return _CQLChainId;
816 }
817
818 Uint64 CQLValueRep::getUint()const
819 {
|
820 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::getUint()");
|
821 david 1.1.2.15 if(_valueType != CQLValue::Uint64_type)
|
822 david 1.1.2.1 {
|
823 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.TYPE_MISMATCH"),
824 String("The type is not correct for get operation."));
825 throw CQLRuntimeException(mload);
|
826 david 1.1.2.1 }
|
827 david 1.1.2.23 Uint64 tmp;
828 _theValue.get(tmp);
|
829 david 1.1.2.25
830 PEG_METHOD_EXIT();
|
831 david 1.1.2.23 return tmp;
|
832 david 1.1.2.1 }
833
834 Boolean CQLValueRep::getBool()const
835 {
|
836 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::getBool()");
|
837 david 1.1.2.15 if(_valueType != CQLValue::Boolean_type)
|
838 david 1.1.2.1 {
|
839 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.TYPE_MISMATCH"),
840 String("The type is not correct for get operation."));
841 throw CQLRuntimeException(mload);
|
842 david 1.1.2.1 }
|
843 david 1.1.2.23 Boolean tmp;
844 _theValue.get(tmp);
|
845 david 1.1.2.25
846 PEG_METHOD_EXIT();
|
847 david 1.1.2.23 return tmp;
|
848 david 1.1.2.1 }
849
850 Sint64 CQLValueRep::getSint()const
851 {
|
852 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::getSint()");
853
|
854 david 1.1.2.15 if(_valueType != CQLValue::Sint64_type)
|
855 david 1.1.2.1 {
|
856 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.TYPE_MISMATCH"),
857 String("The type is not correct for get operation."));
858 throw CQLRuntimeException(mload);
|
859 david 1.1.2.1 }
|
860 david 1.1.2.23 Sint64 tmp;
861 _theValue.get(tmp);
|
862 david 1.1.2.25
863 PEG_METHOD_EXIT();
|
864 david 1.1.2.23 return tmp;
|
865 david 1.1.2.1 }
866
867 Real64 CQLValueRep::getReal()const
868 {
|
869 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::getReal()");
|
870 david 1.1.2.15 if(_valueType != CQLValue::Real_type)
|
871 david 1.1.2.1 {
|
872 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.TYPE_MISMATCH"),
873 String("The type is not correct for get operation."));
874 throw CQLRuntimeException(mload);
|
875 david 1.1.2.1 }
|
876 david 1.1.2.23 Real64 tmp;
877 _theValue.get(tmp);
|
878 david 1.1.2.25 PEG_METHOD_EXIT();
|
879 david 1.1.2.23 return tmp;
|
880 david 1.1.2.1 }
881
882 String CQLValueRep::getString()const
883 {
|
884 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::getString()");
|
885 david 1.1.2.15 if(_valueType != CQLValue::String_type)
|
886 david 1.1.2.1 {
|
887 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.TYPE_MISMATCH"),
888 String("The type is not correct for get operation."));
889 throw CQLRuntimeException(mload);
|
890 david 1.1.2.1 }
|
891 david 1.1.2.23 String tmp;
892 _theValue.get(tmp);
|
893 david 1.1.2.25 PEG_METHOD_EXIT();
|
894 david 1.1.2.23 return tmp;
|
895 david 1.1.2.1 }
896
897 CIMDateTime CQLValueRep::getDateTime()const
898 {
|
899 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::getDateTime()");
|
900 david 1.1.2.15 if(_valueType != CQLValue::CIMDateTime_type)
|
901 david 1.1.2.1 {
|
902 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.TYPE_MISMATCH"),
903 String("The type is not correct for get operation."));
904 throw CQLRuntimeException(mload);
|
905 david 1.1.2.1 }
|
906 david 1.1.2.23 CIMDateTime tmp;
907 _theValue.get(tmp);
|
908 david 1.1.2.25 PEG_METHOD_EXIT();
|
909 david 1.1.2.23 return tmp;
|
910 david 1.1.2.1 }
911
912 CIMObjectPath CQLValueRep::getReference()const
913 {
|
914 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::getReference()");
915
|
916 david 1.1.2.15 if(_valueType != CQLValue::CIMReference_type)
|
917 david 1.1.2.1 {
|
918 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.TYPE_MISMATCH"),
919 String("The type is not correct for get operation."));
920 throw CQLRuntimeException(mload);
|
921 david 1.1.2.1 }
|
922 david 1.1.2.23 CIMObjectPath tmp;
923 _theValue.get(tmp);
|
924 david 1.1.2.25
925 PEG_METHOD_EXIT();
|
926 david 1.1.2.23 return tmp;
|
927 david 1.1.2.1 }
928
|
929 david 1.1.2.23 CIMObject CQLValueRep::getObject()const
|
930 david 1.1.2.1 {
|
931 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::getObject()");
|
932 david 1.1.2.23 if(_valueType != CQLValue::CIMObject_type)
|
933 david 1.1.2.1 {
|
934 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.TYPE_MISMATCH"),
935 String("The type is not correct for get operation."));
936 throw CQLRuntimeException(mload);
|
937 david 1.1.2.1 }
|
938 david 1.1.2.23 CIMObject tmp;
|
939 david 1.1.2.25 _theValue.get(tmp);
940 PEG_METHOD_EXIT();
|
941 david 1.1.2.23 return tmp.clone();
|
942 david 1.1.2.1 }
943
944 String CQLValueRep::toString()const
945 {
|
946 david 1.1.2.23 if(_valueType == CQLValue::CQLIdentifier_type)
947 {
948 return _CQLChainId.toString();
949 }
950 else
951 {
952 return _theValue.toString();
953 }
|
954 david 1.1.2.1 }
955
956
957
|
958 david 1.1.2.18 void CQLValueRep::_validate(const CQLValueRep& x)
|
959 david 1.1.2.1 {
|
960 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::_validate()");
|
961 david 1.1.2.1 switch(_valueType)
962 {
|
963 david 1.1.2.15 case CQLValue::Boolean_type:
964 if(x._valueType != CQLValue::Boolean_type)
|
965 david 1.1.2.1 {
|
966 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.OP_TYPE_MISMATCH"),
967 String("Invalid types for operation."));
968 throw CQLRuntimeException(mload);
|
969 david 1.1.2.1 }
970 break;
|
971 david 1.1.2.15 case CQLValue::Sint64_type:
972 case CQLValue::Uint64_type:
973 case CQLValue::Real_type:
974 if(x._valueType != CQLValue::Sint64_type &&
975 x._valueType != CQLValue::Uint64_type &&
976 x._valueType != CQLValue::Real_type)
|
977 david 1.1.2.1 {
|
978 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.OP_TYPE_MISMATCH"),
979 String("Invalid types for operation."));
980 throw CQLRuntimeException(mload);
|
981 david 1.1.2.1 }
982 break;
|
983 david 1.1.2.15 case CQLValue::String_type:
984 if(x._valueType != CQLValue::String_type)
|
985 david 1.1.2.1 {
|
986 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.OP_TYPE_MISMATCH"),
987 String("Invalid types for operation."));
988 throw CQLRuntimeException(mload);
|
989 david 1.1.2.1 }
990 break;
|
991 david 1.1.2.15 case CQLValue::CIMDateTime_type:
992 if(x._valueType != CQLValue::CIMDateTime_type)
|
993 david 1.1.2.1 {
|
994 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.OP_TYPE_MISMATCH"),
995 String("Invalid types for operation."));
996 throw CQLRuntimeException(mload);
|
997 david 1.1.2.1 }
998 break;
|
999 david 1.1.2.15 case CQLValue::CIMReference_type:
1000 if(x._valueType != CQLValue::CIMReference_type)
|
1001 david 1.1.2.1 {
|
1002 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.OP_TYPE_MISMATCH"),
1003 String("Invalid types for operation."));
1004 throw CQLRuntimeException(mload);
|
1005 david 1.1.2.1 }
1006 break;
|
1007 david 1.1.2.23 case CQLValue::CIMObject_type:
1008 if(x._valueType != CQLValue::CIMObject_type)
|
1009 david 1.1.2.1 {
|
1010 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.OP_TYPE_MISMATCH"),
1011 String("Invalid types for operation."));
1012 throw CQLRuntimeException(mload);
|
1013 david 1.1.2.1 }
1014 break;
|
1015 david 1.1.2.15 case CQLValue::CQLIdentifier_type:
1016 if(x._valueType != CQLValue::CQLIdentifier_type)
|
1017 david 1.1.2.1 {
|
1018 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.OP_TYPE_MISMATCH"),
1019 String("Invalid types for operation."));
1020 throw CQLRuntimeException(mload);
|
1021 david 1.1.2.1 }
1022 break;
1023
1024 default:
|
1025 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.OP_TYPE_MISMATCH"),
1026 String("Invalid types for operation."));
1027 throw CQLRuntimeException(mload);
|
1028 david 1.1.2.1 break;
1029 }
|
1030 david 1.1.2.25 PEG_METHOD_EXIT();
|
1031 david 1.1.2.18 return;
|
1032 david 1.1.2.1 }
1033
|
1034 david 1.1.2.23 void CQLValueRep::_setValue(CIMValue cv,Sint64 index)
|
1035 david 1.1.2.1 {
|
1036 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::_setValue()");
|
1037 david 1.1.2.23 CIMValue tmp;
|
1038 david 1.1.2.24 if(cv.isArray())
|
1039 david 1.1.2.23 {
|
1040 david 1.1.2.1 switch(cv.getType())
|
1041 david 1.1.2.23 {
1042 case CIMTYPE_BOOLEAN:
1043 {
|
1044 david 1.1.2.24 if(index == -1)
1045 {
1046 _theValue = cv;
1047 }
1048 else
1049 {
1050 Array<Boolean> _bool;
1051 cv.get(_bool);
1052 _theValue.set(_bool[index]);
1053 }
1054
1055 _valueType = CQLValue::Boolean_type;
|
1056 david 1.1.2.1 break;
|
1057 david 1.1.2.23 }
1058 case CIMTYPE_UINT8:
1059 {
|
1060 david 1.1.2.24 Array<Uint8> _uint;
1061 cv.get(_uint);
1062
1063 if(index == -1)
1064 {
1065 Array<Uint64> _uint64;
1066 for(Uint32 i = 0; i < _uint.size(); ++i)
1067 {
1068 _uint64.append((Uint64)_uint[i]);
1069 }
1070 _theValue = CIMValue(_uint64);
1071 }
1072 else
1073 {
1074 _theValue.set((Uint64)_uint[index]);
1075 }
|
1076 david 1.1.2.15 _valueType = CQLValue::Uint64_type;
|
1077 david 1.1.2.1 break;
|
1078 david 1.1.2.23 }
1079 case CIMTYPE_UINT16:
1080 {
|
1081 david 1.1.2.24 Array<Uint16> _uint;
1082 cv.get(_uint);
1083
1084 if(index == -1)
1085 {
1086 Array<Uint64> _uint64;
1087 for(Uint32 i = 0; i < _uint.size(); ++i)
1088 {
1089 _uint64.append((Uint64)_uint[i]);
1090 }
1091 _theValue = CIMValue(_uint64);
1092 }
1093 else
1094 {
1095 _theValue.set((Uint64)_uint[index]);
1096 }
|
1097 david 1.1.2.15 _valueType = CQLValue::Uint64_type;
|
1098 david 1.1.2.1 break;
|
1099 david 1.1.2.23 }
1100 case CIMTYPE_UINT32:
1101 {
|
1102 david 1.1.2.24 Array<Uint32> _uint;
1103 cv.get(_uint);
1104
1105 if(index == -1)
1106 {
1107 Array<Uint64> _uint64;
1108 for(Uint32 i = 0; i < _uint.size(); ++i)
1109 {
1110 _uint64.append((Uint64)_uint[i]);
1111 }
1112 _theValue = CIMValue(_uint64);
1113 }
1114 else
1115 {
1116 _theValue.set((Uint64)_uint[index]);
1117 }
|
1118 david 1.1.2.15 _valueType = CQLValue::Uint64_type;
|
1119 david 1.1.2.1 break;
|
1120 david 1.1.2.23 }
1121 case CIMTYPE_UINT64:
1122 {
|
1123 david 1.1.2.24 if(index == -1)
1124 {
1125 _theValue = cv;
1126 }
1127 else
1128 {
1129 Array<Uint64> _uint;
1130 cv.get(_uint);
1131 _theValue.set((Uint64)_uint[index]);
1132 }
|
1133 david 1.1.2.15 _valueType = CQLValue::Uint64_type;
|
1134 david 1.1.2.1 break;
|
1135 david 1.1.2.23 }
1136 case CIMTYPE_SINT8:
1137 {
1138 Array<Sint8> _sint;
1139 cv.get(_sint);
|
1140 david 1.1.2.24
1141 if(index == -1)
1142 {
1143 Array<Sint64> _sint64;
1144 for(Uint32 i = 0; i < _sint.size(); ++i)
1145 {
1146 _sint64.append((Sint64)_sint[i]);
1147 }
1148 _theValue = CIMValue(_sint64);
1149 }
1150 else
1151 {
1152 _theValue.set((Sint64)_sint[index]);
1153 }
|
1154 david 1.1.2.23 _valueType = CQLValue::Sint64_type;
1155 break;
1156 }
1157 case CIMTYPE_SINT16:
1158 {
1159 Array<Sint16> _sint;
1160 cv.get(_sint);
|
1161 david 1.1.2.24
1162 if(index == -1)
1163 {
1164 Array<Sint64> _sint64;
1165 for(Uint32 i = 0; i < _sint.size(); ++i)
1166 {
1167 _sint64.append((Sint64)_sint[i]);
1168 }
1169 _theValue = CIMValue(_sint64);
1170 }
1171 else
1172 {
1173 _theValue.set((Sint64)_sint[index]);
1174 }
|
1175 david 1.1.2.23 _valueType = CQLValue::Sint64_type;
1176 break;
1177 }
1178 case CIMTYPE_SINT32:
1179 {
|
1180 david 1.1.2.24 Array<Sint32> _sint;
1181 cv.get(_sint);
1182
1183 if(index == -1)
1184 {
1185 Array<Sint64> _sint64;
1186 for(Uint32 i = 0; i < _sint.size(); ++i)
1187 {
1188 _sint64.append((Sint64)_sint[i]);
1189 }
1190 _theValue = CIMValue(_sint64);
1191 }
1192 else
1193 {
1194 _theValue.set((Sint64)_sint[index]);
1195 }
|
1196 david 1.1.2.15 _valueType = CQLValue::Sint64_type;
|
1197 david 1.1.2.1 break;
|
1198 david 1.1.2.23 }
1199 case CIMTYPE_SINT64:
1200 {
|
1201 david 1.1.2.24 if(index == -1)
1202 {
1203 _theValue = cv;
1204 }
1205 else
1206 {
1207 Array<Sint64> _sint;
1208 cv.get(_sint);
1209 _theValue.set((Sint64)_sint[index]);
1210 }
|
1211 david 1.1.2.15 _valueType = CQLValue::Sint64_type;
|
1212 david 1.1.2.1 break;
|
1213 david 1.1.2.23 }
1214
1215 case CIMTYPE_REAL32:
1216 {
|
1217 david 1.1.2.24 Array<Real32> _real;
1218 cv.get(_real);
1219
1220 if(index == -1)
1221 {
1222 Array<Real64> _real64;
1223 for(Uint32 i = 0; i < _real.size(); ++i)
1224 {
1225 _real64.append((Real64)_real[i]);
1226 }
1227 _theValue = CIMValue(_real64);
1228 }
1229 else
1230 {
1231 _theValue.set((Real64)_real[index]);
1232 }
|
1233 david 1.1.2.15 _valueType = CQLValue::Real_type;
|
1234 david 1.1.2.1 break;
|
1235 david 1.1.2.23 }
1236 case CIMTYPE_REAL64:
1237 {
|
1238 david 1.1.2.24 if(index == -1)
1239 {
1240 _theValue = cv;
1241 }
1242 else
1243 {
1244 Array<Real64> _real;
1245 cv.get(_real);
1246 _theValue.set((Real64)_real[index]);
1247 }
|
1248 david 1.1.2.15 _valueType = CQLValue::Real_type;
|
1249 david 1.1.2.1 break;
|
1250 david 1.1.2.23 }
1251 case CIMTYPE_CHAR16:
1252 {
|
1253 david 1.1.2.24 Array<Char16> _str16;
1254 cv.get(_str16);
1255
1256 if(index == -1)
1257 {
1258 Array<String> _str;
1259 for(Uint32 i = 0; i < _str16.size(); ++i)
1260 {
1261 _str.append(String(&_str16[i]));
1262 }
1263 _theValue = CIMValue(_str);
1264 }
1265 else
1266 {
1267 _theValue.set(String(&_str16[index]));
1268 }
1269 _valueType = CQLValue::String_type;
|
1270 david 1.1.2.1 break;
|
1271 david 1.1.2.23 }
1272 case CIMTYPE_STRING:
1273 {
|
1274 david 1.1.2.24 if(index == -1)
1275 {
1276 _theValue = cv;
1277 }
1278 else
1279 {
1280 Array<String> _str;
1281 cv.get(_str);
1282 _theValue.set(_str[index]);
1283 }
|
1284 david 1.1.2.15 _valueType = CQLValue::String_type;
|
1285 david 1.1.2.1 break;
|
1286 david 1.1.2.23 }
1287 case CIMTYPE_DATETIME:
1288 {
|
1289 david 1.1.2.24 if(index == -1)
1290 {
1291 _theValue = cv;
1292 }
1293 else
1294 {
1295 Array<CIMDateTime> _date;
1296 cv.get(_date);
1297 _theValue.set(_date[index]);
1298 }
|
1299 david 1.1.2.15 _valueType = CQLValue::CIMDateTime_type;
|
1300 david 1.1.2.1 break;
|
1301 david 1.1.2.23 }
1302 case CIMTYPE_REFERENCE:
1303 {
|
1304 david 1.1.2.24 if(index == -1)
1305 {
1306 _theValue = cv;
1307 }
1308 else
1309 {
1310 Array<CIMObjectPath> _path;
1311 cv.get(_path);
1312 _theValue.set(_path[index]);
1313 }
|
1314 david 1.1.2.15 _valueType = CQLValue::CIMReference_type;
|
1315 david 1.1.2.1 break;
|
1316 david 1.1.2.23 }
1317 case CIMTYPE_EMBEDDED:
1318 {
|
1319 david 1.1.2.24 if(index == -1)
1320 {
1321 _theValue = cv;
1322 }
1323 else
1324 {
1325 Array<CIMObject> _obj;
|
1326 david 1.1.2.25 cv.get(_obj);
1327 _theValue.set(_obj[index]);
|
1328 david 1.1.2.24 }
|
1329 david 1.1.2.23 _valueType = CQLValue::CIMObject_type;
1330 break;
1331 }
1332 default:
|
1333 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.SET_VALUE"),
1334 String("Unable to set internal object."));
1335 throw CQLRuntimeException(mload);
|
1336 david 1.1.2.23 } // switch statement
1337 }
1338 else
1339 {
|
1340 david 1.1.2.1 switch(cv.getType())
|
1341 david 1.1.2.23 {
1342 case CIMTYPE_BOOLEAN:
1343 {
1344 _theValue = cv;
|
1345 david 1.1.2.15 _valueType = CQLValue::Boolean_type;
|
1346 david 1.1.2.1 break;
|
1347 david 1.1.2.23 }
1348 case CIMTYPE_UINT8:
1349 {
1350 Uint8 _tmp;
1351 cv.get(_tmp);
1352 _theValue = CIMValue((Uint64)_tmp);
1353 _valueType = CQLValue::Uint64_type;
1354 break;
1355 }
1356 case CIMTYPE_UINT16:
1357 {
1358 Uint16 _tmp;
1359 cv.get(_tmp);
1360 _theValue = CIMValue((Uint64)_tmp);
1361 _valueType = CQLValue::Uint64_type;
1362 break;
1363 }
1364 case CIMTYPE_UINT32:
1365 {
1366 Uint32 _tmp;
1367 cv.get(_tmp);
1368 david 1.1.2.23 _theValue = CIMValue((Uint64)_tmp);
1369 _valueType = CQLValue::Uint64_type;
1370 break;
1371 }
1372 case CIMTYPE_UINT64:
1373 {
1374 Uint64 _tmp;
1375 cv.get(_tmp);
1376 _theValue = CIMValue((Uint64)_tmp);
1377 _valueType = CQLValue::Uint64_type;
1378 break;
1379 }
1380 case CIMTYPE_SINT8:
1381 {
1382 Sint8 _tmp;
1383 cv.get(_tmp);
1384 _theValue = CIMValue((Sint64)_tmp);
1385 _valueType = CQLValue::Sint64_type;
1386 break;
1387 }
1388 case CIMTYPE_SINT16:
1389 david 1.1.2.23 {
1390 Sint16 _tmp;
1391 cv.get(_tmp);
1392 _theValue = CIMValue((Sint64)_tmp);
1393 _valueType = CQLValue::Sint64_type;
1394 break;
1395 }
1396 case CIMTYPE_SINT32:
1397 {
1398 Sint32 _tmp;
1399 cv.get(_tmp);
1400 _theValue = CIMValue((Sint64)_tmp);
1401 _valueType = CQLValue::Sint64_type;
1402 break;
1403 }
1404 case CIMTYPE_SINT64:
1405 {
1406 Sint64 _tmp;
1407 cv.get(_tmp);
1408 _theValue = CIMValue((Sint64)_tmp);
1409 _valueType = CQLValue::Sint64_type;
1410 david 1.1.2.23 break;
1411 }
1412 case CIMTYPE_REAL32:
1413 {
1414 Real64 _tmp;
1415 cv.get(_tmp);
1416 _theValue = CIMValue((Real64)_tmp);
1417 _valueType = CQLValue::Real_type;
1418 break;
1419 }
1420 case CIMTYPE_REAL64:
1421 {
1422 Real64 _tmp;
1423 cv.get(_tmp);
1424 _theValue = CIMValue((Real64)_tmp);
1425 _valueType = CQLValue::Real_type;
1426 break;
1427 }
1428 case CIMTYPE_CHAR16:
1429 {
1430 Char16 _tmp;
1431 david 1.1.2.23 cv.get(_tmp);
1432 _theValue = CIMValue(String(&_tmp));
1433 _valueType = CQLValue::String_type;
1434 break;
1435 }
1436 case CIMTYPE_STRING:
1437 {
1438 _theValue = cv;
1439 _valueType = CQLValue::String_type;
1440 break;
1441 }
1442 case CIMTYPE_DATETIME:
1443 {
1444 _theValue = cv;
1445 _valueType = CQLValue::CIMDateTime_type;
1446 break;
1447 }
1448 case CIMTYPE_REFERENCE:
1449 {
1450 _theValue = cv;
1451 _valueType = CQLValue::CIMReference_type;
|
1452 david 1.1.2.1 break;
|
1453 david 1.1.2.23 }
1454 case CIMTYPE_EMBEDDED:
1455 {
1456 _theValue = cv;
1457 _valueType = CQLValue::CIMObject_type;
|
1458 david 1.1.2.1 break;
|
1459 david 1.1.2.23 }
1460 default:
|
1461 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.SET_VALUE"),
1462 String("Unable to set internal object."));
1463 throw CQLRuntimeException(mload);
|
1464 david 1.1.2.23 }
|
1465 david 1.1.2.1
|
1466 david 1.1.2.23 }
1467
1468 _isResolved = true;
|
1469 david 1.1.2.25
1470 PEG_METHOD_EXIT();
|
1471 david 1.1.2.23 return;
|
1472 david 1.1.2.1 }
1473
|
1474 david 1.1.2.8 void CQLValueRep::applyContext(QueryContext& _ctx,
1475 CQLChainedIdentifier& inCid)
|
1476 lucier 1.1.2.13 {
|
1477 david 1.1.2.8 if(inCid.size() != 0 && _CQLChainId.size() == 1)
|
1478 david 1.1.2.18 {
1479 // If we get here we have a stand alone Symbolic constant.
1480 // We need to take the chain and create a complete context
1481 // for the symbolic constant. We will use the context from
1482 // inCid to populate the context for chain.
|
1483 chuck 1.1.2.22 /*
|
1484 david 1.1.2.18 _CQLChainId[0].setName(inCid[inCid.size()-1].getName());
1485 _CQLChainId[0].applyScope(inCid[inCid.size()-1].getScope());
|
1486 chuck 1.1.2.22 */
1487
1488 CQLIdentifier id = _CQLChainId[0];
1489 id.setName(inCid[inCid.size()-1].getName());
1490 id.applyScope(inCid[inCid.size()-1].getScope());
1491
1492 CQLChainedIdentifier chainId(id);
1493
1494 for(Sint32 i = inCid.size()-2; i >= 0; --i)
1495 {
1496 chainId.prepend(inCid[i]);
1497 }
1498
1499 _CQLChainId = chainId;
1500
1501
|
1502 david 1.1.2.18 CIMInstance temp;
1503 resolve(temp,_ctx);
1504 }
|
1505 david 1.1.2.8 else
|
1506 david 1.1.2.18 {
1507 _CQLChainId.applyContext(_ctx);
1508 }
|
1509 chuck 1.1.2.22
1510 // Add the chained identifier to the WHERE identifier list.
1511 // Note: CQLValue's are only used in WHERE processing.
1512 if (_CQLChainId.size() > 0)
1513 {
1514 _ctx.addWhereIdentifier(_CQLChainId);
1515 }
|
1516 humberto 1.1.2.2 }
1517
|
1518 david 1.1.2.17 void CQLValueRep::_resolveSymbolicConstant(const QueryContext& inQueryCtx)
|
1519 david 1.1.2.9 {
|
1520 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::_resolveSymbolicConstant()");
1521
|
1522 david 1.1.2.9 Array<String> valueMapArray; // Value Map Qualifier for property
1523 Array<String> valuesArray; // Values Qualifier for property
1524 CIMName className;
1525 CQLIdentifier lid = _CQLChainId.getLastIdentifier();
1526 CIMClass QueryClass;
1527 CIMValue valueMap; // CIMValue for Value Map Qualifiers
1528 CIMValue values; // CIMValue for Values Qualifiers
1529 Boolean matchFound = false; // Indicator for match Qualifier
1530 Uint32 matchIndex; // Placeholder for matched Qualifier
1531
1532 if(lid.isScoped())
1533 {
|
1534 david 1.1.2.25 className = lid.getScope();
|
1535 david 1.1.2.9 }
1536 else
1537 {
|
1538 david 1.1.2.25 className = _CQLChainId[0].getName();
|
1539 david 1.1.2.9 }
1540
|
1541 chuck 1.1.2.22 PEGASUS_STD(cout) << _CQLChainId.toString() << PEGASUS_STD(endl);
1542
|
1543 david 1.1.2.9 QueryClass = inQueryCtx.getClass(className);
1544
1545 Uint32 propertyIndex =
1546 QueryClass.findProperty(lid.getName());
1547
1548 if(propertyIndex == PEG_NOT_FOUND)
1549 {
|
1550 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.PROP_NOT_FOUND"),
1551 String("Property $0 not found on class $1."),
1552 lid.getName().getString(),
1553 className.getString());
1554 throw CQLRuntimeException(mload);
|
1555 david 1.1.2.9 }
1556
1557 CIMProperty queryPropObj = QueryClass.getProperty(propertyIndex);
1558
1559 // We have a symbolic constant (ex. propName#OK)
1560 // We need to retrieve the ValueMap and Values Qualifiers for
1561 // the property if the exist.
1562 Uint32 qualIndex = queryPropObj.findQualifier(CIMName("ValueMap"));
1563
1564 if(qualIndex == PEG_NOT_FOUND)
1565 {
1566 // This property can not be processed with a symbolic constant.
|
1567 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.QUALIFIER_NOT_FOUND"),
1568 String("Qualifier $0 not found on Property $1 in class $2."),
1569 String("ValueMap"),
1570 lid.getName().getString(),
1571 className.getString());
1572 throw CQLRuntimeException(mload);
|
1573 david 1.1.2.9 }
1574
1575 valueMap = queryPropObj.getQualifier(qualIndex).getValue();
1576 qualIndex = queryPropObj.findQualifier(CIMName("Values"));
1577
1578 if(qualIndex == PEG_NOT_FOUND)
|
1579 david 1.1.2.18 {
1580 // This property does not have a Values Qualifier,
1581 // therefore the valueMap must be the list of symbolic constants.
1582
1583 valueMap.get(valueMapArray);
1584
1585 // We will loop through the list of Symbolic constants to
1586 // determine if we have a match with the Symbolic constant
1587 // defined in the CQLIdentifier.
1588 for(Uint32 i = 0; i < valueMapArray.size(); ++i)
1589 {
1590 if(String::equalNoCase(valueMapArray[i],lid.getSymbolicConstantName()))
1591 {
1592 matchFound = true;
1593 matchIndex = i;
1594 break;
1595 }
1596 }
1597 if(matchFound == false)
1598 {
1599 // The symbolic constant provided is not valid
1600 david 1.1.2.18 // for this property.
|
1601 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.INVALID_SYMBOLIC_CONSTANT"),
1602 String("Provided symbolic constant $0 is not valid for property $1 in class $2."),
1603 lid.getSymbolicConstantName(),
1604 lid.getName().getString(),
1605 className.getString());
1606 throw CQLRuntimeException(mload);
|
1607 david 1.1.2.18 }
1608
1609 // The symbolic constant defined in the CQLIdentifier is
1610 // valid for this property. Now we need to set the value.
1611 // Set primitive
1612 _setValue(CIMValue(lid.getSymbolicConstantName()));
|
1613 david 1.1.2.25
1614 PEG_METHOD_EXIT();
|
1615 david 1.1.2.18 return;
1616 }
|
1617 david 1.1.2.9 else
|
1618 david 1.1.2.18 {
1619 // The qualifier Values is defined for the property.
1620 // valueMap must be a list of #'s.
1621
1622 values = queryPropObj.getQualifier(qualIndex).getValue();
1623
1624 valueMap.get(valueMapArray);
1625 values.get(valuesArray);
1626
1627 // We will loop through the list of Symbolic constants to
1628 // determine if we have a match with the Symbolic constant
1629 // defined in the CQLIdentifier.
1630 for(Uint32 i = 0; i < valuesArray.size(); ++i)
|
1631 david 1.1.2.9 {
|
1632 david 1.1.2.18 if(String::equalNoCase(valuesArray[i],lid.getSymbolicConstantName()))
1633 {
1634 matchFound = true;
1635 matchIndex = i;
1636 break;
1637 }
1638 }
1639 if(matchFound == false)
1640 {
1641 // The symbolic constant provided is not valid
1642 // for this property.
|
1643 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.INVALID_SYMBOLIC_CONSTANT"),
1644 String("Provided symbolic constant $0 is not valid for property $1 in class $2."),
1645 lid.getSymbolicConstantName(),
1646 lid.getName().getString(),
1647 className.getString());
1648 throw CQLRuntimeException(mload);
|
1649 david 1.1.2.18 }
1650
1651 CString cStr = valueMapArray[matchIndex].getCString();
1652 char *endP;
1653
1654 // Set Primitive
1655 _setValue(CIMValue(Uint64(strtoul((const char*)cStr,&endP,10))));
|
1656 david 1.1.2.25
1657 PEG_METHOD_EXIT();
|
1658 david 1.1.2.18 return;
1659 }
|
1660 david 1.1.2.25
|
1661 david 1.1.2.18 }
|
1662 david 1.1.2.9
|
1663 david 1.1.2.23 Boolean CQLValueRep::_compareObjects(CIMObject& _in1, CIMObject& _in2)
|
1664 david 1.1.2.18 {
|
1665 david 1.1.2.24 if(_in1.isClass() != _in2.isClass())
1666 {
1667 return false;
1668 }
1669 else if(_in1.isClass())
1670 { // objects are classes
1671 return _in1.identical(_in2);
1672 }
1673 else
1674 { // objects are instances
1675
1676 if(_in1.getPropertyCount() !=
1677 _in2.getPropertyCount())
1678 {
1679 return false;
1680 }
1681
1682 Array<CIMProperty> prop1;
1683 Array<CIMProperty> prop2;
1684 Boolean result;
1685
1686 david 1.1.2.24 for(Uint32 i = 0; i < _in1.getPropertyCount(); ++i)
1687 {
1688 prop1.append(_in1.getProperty(i));
1689 prop2.append(_in2.getProperty(i));
1690 }
1691
1692 for(Uint32 i = 0; i < _in1.getPropertyCount(); ++i)
1693 {
1694 result = false;
1695
1696 for(Uint32 j = 0; j < _in2.getPropertyCount(); ++j)
1697 {
1698 if(prop1[i].getName() == prop2[j].getName())
1699 {
|
1700 david 1.1.2.25 if(CQLValue(prop1[i].getValue()) == CQLValue(prop2[j].getValue()))
|
1701 david 1.1.2.24 {
1702 result = true;
1703 break;
1704 }
1705 else
1706 {
1707 result = false;
1708 break;
1709 }
1710 }
1711 }
1712 if(result == false)
1713 {
1714 return false;
1715 }
1716 }
1717 }
1718 return true;
1719 }
1720
1721 Boolean CQLValueRep::_compareArray(const CQLValueRep& _in)
1722 david 1.1.2.24 {
|
1723 david 1.1.2.25 PEG_METHOD_ENTER(TRC_CQL,"CQLValueRep::_compareArray()");
|
1724 david 1.1.2.24 // Currently pegasus has no concept of different array types( Bagged, Ordered, or Indexed)
1725 // We will do bag comparisons.
1726
1727 Boolean result;
1728 Array<Boolean> _bool1;
1729 Array<Boolean> _bool2;
1730 Array<Uint64> _uint1;
1731 Array<Uint64> _uint2;
1732 Array<Sint64> _sint1;
1733 Array<Sint64> _sint2;
1734 Array<Real64> _real1;
1735 Array<Real64> _real2;
1736 Array<String> _str1;
1737 Array<String> _str2;
1738 Array<CIMDateTime> _date1;
1739 Array<CIMDateTime> _date2;
1740 Array<CIMObjectPath> _path1;
1741 Array<CIMObjectPath> _path2;
1742 Array<CIMObject> _obj1;
1743 Array<CIMObject> _obj2;
1744
1745 david 1.1.2.24 Array<CQLValue> _cqlVal1;
1746 Array<CQLValue> _cqlVal2;
1747
1748 CIMValue _in1 = _theValue;
1749 CIMValue _in2 = _in._theValue;
1750
1751 String _arrayType1 = _ArrayType;
1752 String _arrayType2 = _in._ArrayType;
1753
1754 switch(_in1.getType())
1755 {
1756 case CIMTYPE_BOOLEAN:
1757 {
1758 _in1.get(_bool1);
1759 for(Uint32 i = 0; i < _bool1.size(); ++i)
1760 {
1761 _cqlVal1.append(CQLValue(_bool1[i]));
1762 }
1763 }
1764 case CIMTYPE_UINT64:
1765 {
1766 david 1.1.2.24 _in1.get(_uint1);
1767 for(Uint32 i = 0; i < _uint1.size(); ++i)
1768 {
1769 _cqlVal1.append(CQLValue(_uint1[i]));
1770 }
1771 break;
1772 }
1773 case CIMTYPE_SINT64:
1774 {
1775 _in1.get(_sint1);
1776 for(Uint32 i = 0; i < _sint1.size(); ++i)
1777 {
1778 _cqlVal1.append(CQLValue(_sint1[i]));
1779 }
1780 break;
1781 }
1782 case CIMTYPE_REAL64:
1783 {
1784 _in1.get(_real1);
1785 for(Uint32 i = 0; i < _real1.size(); ++i)
1786 {
1787 david 1.1.2.24 _cqlVal1.append(CQLValue(_real1[i]));
1788 }
1789 break;
1790 }
1791 case CIMTYPE_STRING:
1792 {
1793 _in1.get(_str1);
1794 for(Uint32 i = 0; i < _str1.size(); ++i)
1795 {
1796 _cqlVal1.append(CQLValue(_str1[i]));
1797 }
1798 break;
1799 }
1800 case CIMTYPE_DATETIME:
1801 {
1802 _in1.get(_date1);
1803 for(Uint32 i = 0; i < _date1.size(); ++i)
1804 {
1805 _cqlVal1.append(CQLValue(_date1[i]));
1806 }
1807 break;
1808 david 1.1.2.24 }
1809 case CIMTYPE_REFERENCE:
1810 {
1811 _in1.get(_path1);
1812 for(Uint32 i = 0; i < _path1.size(); ++i)
1813 {
1814 _cqlVal1.append(CQLValue(_path1[i]));
1815 }
1816 break;
1817 }
1818 case CIMTYPE_EMBEDDED:
1819 {
|
1820 david 1.1.2.25 _in1.get(_obj1);
|
1821 david 1.1.2.24 for(Uint32 i = 0; i < _obj1.size(); ++i)
1822 {
1823 _cqlVal1.append(CQLValue(_obj1[i]));
1824 }
1825 break;
1826 }
1827 default:
|
1828 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.INVALID_ARRAY_COMPARISON"),
1829 String("Invalid array comparison type."));
1830 throw CQLRuntimeException(mload);
|
1831 david 1.1.2.24 } // switch statement
1832
1833 switch(_in2.getType())
1834 {
1835 case CIMTYPE_BOOLEAN:
1836 {
1837 _in2.get(_bool2);
1838 for(Uint32 i = 0; i < _bool2.size(); ++i)
1839 {
1840 _cqlVal2.append(CQLValue(_bool2[i]));
1841 }
1842 }
1843 case CIMTYPE_UINT64:
1844 {
1845 _in2.get(_uint2);
1846 for(Uint32 i = 0; i < _uint2.size(); ++i)
1847 {
1848 _cqlVal2.append(CQLValue(_uint2[i]));
1849 }
1850 break;
1851 }
1852 david 1.1.2.24 case CIMTYPE_SINT64:
1853 {
1854 _in2.get(_sint2);
1855 for(Uint32 i = 0; i < _sint2.size(); ++i)
1856 {
1857 _cqlVal2.append(CQLValue(_sint2[i]));
1858 }
1859 break;
1860 }
1861 case CIMTYPE_REAL64:
1862 {
1863 _in2.get(_real2);
1864 for(Uint32 i = 0; i < _real2.size(); ++i)
1865 {
1866 _cqlVal2.append(CQLValue(_real2[i]));
1867 }
1868 break;
1869 }
1870 case CIMTYPE_STRING:
1871 {
1872 _in2.get(_str2);
1873 david 1.1.2.24 for(Uint32 i = 0; i < _str2.size(); ++i)
1874 {
1875 _cqlVal2.append(CQLValue(_str2[i]));
1876 }
1877 break;
1878 }
1879 case CIMTYPE_DATETIME:
1880 {
1881 _in2.get(_date2);
1882 for(Uint32 i = 0; i < _date2.size(); ++i)
1883 {
1884 _cqlVal2.append(CQLValue(_date2[i]));
1885 }
1886 break;
1887 }
1888 case CIMTYPE_REFERENCE:
1889 {
1890 _in2.get(_path2);
1891 for(Uint32 i = 0; i < _path2.size(); ++i)
1892 {
1893 _cqlVal2.append(CQLValue(_path2[i]));
1894 david 1.1.2.24 }
1895 break;
1896 }
1897 case CIMTYPE_EMBEDDED:
1898 {
|
1899 david 1.1.2.25 _in2.get(_obj2);
|
1900 david 1.1.2.24 for(Uint32 i = 0; i < _obj2.size(); ++i)
1901 {
1902 _cqlVal2.append(CQLValue(_obj2[i]));
1903 }
1904 break;
1905 }
1906 default:
|
1907 david 1.1.2.25 MessageLoaderParms mload(String("CQL.CQLValueRep.INVALID_ARRAY_COMPARISON"),
1908 String("Invalid array comparison type."));
1909 throw CQLRuntimeException(mload);
|
1910 david 1.1.2.24 } // switch statement
1911
1912 if((_arrayType1 == String("Indexed") ||
1913 _arrayType1 == String("Ordered")) &&
1914 (_arrayType2 == String("Indexed") ||
1915 _arrayType2 == String("Ordered")))
1916 { // Handle the indexed or ordered case.
1917 for(Uint32 i = 0; i < _cqlVal1.size(); ++i)
1918 {
1919 if(_cqlVal1[i] != _cqlVal2[i])
1920 {
|
1921 david 1.1.2.25 PEG_METHOD_EXIT();
|
1922 david 1.1.2.24 return false;
1923 }
1924 }
1925 }
1926 else
1927 {
1928 for(Uint32 i = 0; i < _cqlVal1.size(); ++i)
1929 {
1930 result = false;
1931
1932 for(Uint32 j = 0; j < _cqlVal2.size(); ++j)
1933 {
1934 if(_cqlVal1[i] == _cqlVal2[j])
1935 {
1936 result = true;
1937 break;
1938 }
1939 }
1940 if(result == false)
1941 {
|
1942 david 1.1.2.25 PEG_METHOD_EXIT();
|
1943 david 1.1.2.24 return false;
1944 }
1945 }
1946
1947 for(Uint32 i = 0; i < _cqlVal2.size(); ++i)
1948 {
1949 result = false;
1950
1951 for(Uint32 j = 0; j < _cqlVal1.size(); ++j)
1952 {
1953 if(_cqlVal2[i] == _cqlVal1[j])
1954 {
1955 result = true;
1956 break;
1957 }
1958 }
1959 if(result == false)
1960 {
|
1961 david 1.1.2.25 PEG_METHOD_EXIT();
|
1962 david 1.1.2.24 return false;
1963 }
1964 }
1965 }
|
1966 david 1.1.2.25 PEG_METHOD_EXIT();
|
1967 david 1.1.2.18 return true;
|
1968 david 1.1.2.9 }
1969
|
1970 david 1.1.2.1 PEGASUS_NAMESPACE_END
|