1 mike 1.1 /*
2 **==============================================================================
3 **
4 ** Open Management Infrastructure (OMI)
5 **
6 ** Copyright (c) Microsoft Corporation
7 **
8 ** Licensed under the Apache License, Version 2.0 (the "License"); you may not
9 ** use this file except in compliance with the License. You may obtain a copy
10 ** of the License at
11 **
12 ** http://www.apache.org/licenses/LICENSE-2.0
13 **
14 ** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 ** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
16 ** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
17 ** MERCHANTABLITY OR NON-INFRINGEMENT.
18 **
19 ** See the Apache 2 License for the specific language governing permissions
20 ** and limitations under the License.
21 **
22 mike 1.1 **==============================================================================
23 */
24
25 #include <iostream>
26 #include <string>
27 #include <ut/ut.h>
28 #include <common.h>
29 #include <wql/wql.h>
30 #include <base/instance.h>
31 #include <base/strings.h>
32 #include <base/helpers.h>
33
34 #define CT(STR) ((char*)STR)
35
36 using namespace std;
37
38 static void setUp()
39 {
40 }
41
42 static void cleanup()
43 mike 1.1 {
44 }
45
46 static void Test1()
47 {
48 WQL* wql;
49
50 wql = WQL_Parse(
51 CT("SELECT A,B,C FROM X WHERE NOT A > 1 OR B < 1 AND C > 3"), NULL);
52 UT_ASSERT(wql);
53
54 static const WQL _wql =
55 {
56 /* properties */
57 {
58 CT("A"),
59 CT("B"),
60 CT("C"),
61 },
62 3,
63 /* className */
64 mike 1.1 CT("X"),
65 /* symbols */
66 {
67 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("A")) },
68 { WQL_TYPE_INTEGER, WQL_VALUE_INTEGER(1) },
69 { WQL_TYPE_GT },
70 { WQL_TYPE_NOT },
71 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("B")) },
72 { WQL_TYPE_INTEGER, WQL_VALUE_INTEGER(1) },
73 { WQL_TYPE_LT },
74 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("C")) },
75 { WQL_TYPE_INTEGER, WQL_VALUE_INTEGER(3) },
76 { WQL_TYPE_GT },
77 { WQL_TYPE_AND },
78 { WQL_TYPE_OR },
79 },
80 12,
81 };
82
83 UT_ASSERT(WQL_Identical(wql, &_wql));
84 WQL_Delete(wql);
85 mike 1.1 }
86
87 static void Test2()
88 {
89 WQL* wql;
90 static const WQL _wql =
91 {
92 /* properties */
93 {
94 },
95 0,
96 /* className */
97 CT("CLASS1"),
98 /* symbols */
99 {
100 },
101 0,
102 };
103 wql = WQL_Parse(CT("SELECT * FROM CLASS1"), NULL);
104 UT_ASSERT(wql);
105 UT_ASSERT(WQL_Identical(&_wql, wql));
106 mike 1.1 WQL_Delete(wql);
107 }
108
109 static void Test3()
110 {
111 WQL* wql;
112 static const WQL _wql =
113 {
114 /* properties */
115 {
116 CT("Width"),
117 CT("Height"),
118 CT("Depth"),
119 },
120 3,
121 /* className */
122 CT("Bookcase"),
123 /* symbols */
124 {
125 },
126 0,
127 mike 1.1 };
128 wql = WQL_Parse(CT("SELECT Width, Height, Depth FROM Bookcase"), NULL);
129 UT_ASSERT(wql != NULL);
130 UT_ASSERT(WQL_Identical(&_wql, wql));
131 WQL_Delete(wql);
132 }
133
134 static void Test4()
135 {
136 WQL* wql;
137 static const WQL _wql =
138 {
139 /* properties */
140 {
141 CT("A"),
142 CT("B"),
143 CT("C"),
144 },
145 3,
146 /* className */
147 CT("X"),
148 mike 1.1 /* symbols */
149 {
150 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("A")) },
151 { WQL_TYPE_INTEGER, WQL_VALUE_INTEGER(10) },
152 { WQL_TYPE_GT },
153 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("A")) },
154 { WQL_TYPE_INTEGER, WQL_VALUE_INTEGER(30) },
155 { WQL_TYPE_LT },
156 { WQL_TYPE_AND },
157 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("B")) },
158 { WQL_TYPE_INTEGER, WQL_VALUE_INTEGER(40) },
159 { WQL_TYPE_GT },
160 { WQL_TYPE_OR },
161 },
162 11,
163 };
164 wql = WQL_Parse(CT("SELECT A,B,C FROM X WHERE (A>10) AND (A<30) OR (B>40)"), NULL);
165 UT_ASSERT(wql != NULL);
166 UT_ASSERT(WQL_Identical(&_wql, wql));
167 WQL_Delete(wql);
168 }
169 mike 1.1
170 static void Test5()
171 {
172 WQL* wql;
173 static const WQL _wql =
174 {
175 /* properties */
176 {
177 CT("A"),
178 CT("B"),
179 CT("C"),
180 },
181 3,
182 /* className */
183 CT("X"),
184 /* symbols */
185 {
186 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("A")) },
187 { WQL_TYPE_INTEGER, WQL_VALUE_INTEGER(10) },
188 { WQL_TYPE_GT },
189 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("A")) },
190 mike 1.1 { WQL_TYPE_INTEGER, WQL_VALUE_INTEGER(30) },
191 { WQL_TYPE_LT },
192 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("B")) },
193 { WQL_TYPE_INTEGER, WQL_VALUE_INTEGER(40) },
194 { WQL_TYPE_GT },
195 { WQL_TYPE_AND },
196 { WQL_TYPE_OR },
197 },
198 11,
199 };
200 wql = WQL_Parse(CT("SELECT A,B,C FROM X WHERE (A>10) OR (A<30) AND (B>40)"), NULL);
201 UT_ASSERT(wql != NULL);
202 UT_ASSERT(WQL_Identical(&_wql, wql));
203 WQL_Delete(wql);
204 }
205
206 static void Test6()
207 {
208 WQL* wql;
209 static const WQL _wql =
210 {
211 mike 1.1 /* properties */
212 {
213 CT("Name"),
214 },
215 1,
216 /* className */
217 CT("Animal"),
218 /* symbols */
219 {
220 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("Name")) },
221 { WQL_TYPE_STRING, WQL_VALUE_STRING(CT("Fido")) },
222 { WQL_TYPE_EQ },
223 },
224 3,
225 };
226 wql = WQL_Parse(CT("SELECT Name FROM Animal WHERE Name = \"Fido\""), NULL);
227 UT_ASSERT(wql != NULL);
228 UT_ASSERT(WQL_Identical(&_wql, wql));
229 WQL_Delete(wql);
230 }
231
232 mike 1.1 static void Test7()
233 {
234 WQL* wql;
235 static const WQL _wql =
236 {
237 /* properties */
238 {
239 },
240 0,
241 /* className */
242 CT("X"),
243 /* symbols */
244 {
245 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("NAME")) },
246 { WQL_TYPE_STRING, WQL_VALUE_STRING(CT("Fred")) },
247 { WQL_TYPE_EQ },
248 },
249 3,
250 };
251 wql = WQL_Parse(CT("SELECT * FROM X WHERE NAME=\"Fred\""), NULL);
252 UT_ASSERT(wql != NULL);
253 mike 1.1 UT_ASSERT(WQL_Identical(&_wql, wql));
254 WQL_Delete(wql);
255 }
256
257 static void Test8()
258 {
259 WQL* wql;
260 static const WQL _wql =
261 {
262 /* properties */
263 {
264 },
265 0,
266 /* className */
267 CT("X"),
268 /* symbols */
269 {
270 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("A")) },
271 { WQL_TYPE_INTEGER, WQL_VALUE_INTEGER(10) },
272 { WQL_TYPE_GT },
273 },
274 mike 1.1 3,
275 };
276 wql = WQL_Parse(CT("SELECT * FROM X WHERE A > 10"), NULL);
277 UT_ASSERT(wql != NULL);
278 UT_ASSERT(WQL_Identical(&_wql, wql));
279 WQL_Delete(wql);
280 }
281
282 static void Test9()
283 {
284 WQL* wql;
285 static const WQL _wql =
286 {
287 /* properties */
288 {
289 },
290 0,
291 /* className */
292 CT("X"),
293 /* symbols */
294 {
295 mike 1.1 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("A")) },
296 { WQL_TYPE_REAL, WQL_VALUE_REAL(1.000000) },
297 { WQL_TYPE_GT },
298 },
299 3,
300 };
301 wql = WQL_Parse(CT("SELECT * FROM X WHERE A > 1.0"), NULL);
302 UT_ASSERT(wql != NULL);
303 UT_ASSERT(WQL_Identical(&_wql, wql));
304 WQL_Delete(wql);
305 }
306
307 static void Test10()
308 {
309 WQL* wql;
310 static const WQL _wql =
311 {
312 /* properties */
313 {
314 },
315 0,
316 mike 1.1 /* className */
317 CT("X"),
318 /* symbols */
319 {
320 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("A")) },
321 { WQL_TYPE_BOOLEAN, WQL_VALUE_BOOLEAN(1) },
322 { WQL_TYPE_EQ },
323 },
324 3,
325 };
326 wql = WQL_Parse(CT("SELECT * FROM X WHERE A = TRUE"), NULL);
327 UT_ASSERT(wql != NULL);
328 UT_ASSERT(WQL_Identical(&_wql, wql));
329 WQL_Delete(wql);
330 }
331
332 static void Test11()
333 {
334 WQL* wql;
335 static const WQL _wql =
336 {
337 mike 1.1 /* properties */
338 {
339 },
340 0,
341 /* className */
342 CT("X"),
343 /* symbols */
344 {
345 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("A")) },
346 { WQL_TYPE_BOOLEAN, WQL_VALUE_BOOLEAN(1) },
347 { WQL_TYPE_EQ },
348 { WQL_TYPE_NOT },
349 },
350 4,
351 };
352 wql = WQL_Parse(CT("SELECT * FROM X WHERE NOT A = TRUE"), NULL);
353 UT_ASSERT(wql != NULL);
354 UT_ASSERT(WQL_Identical(&_wql, wql));
355 WQL_Delete(wql);
356 }
357
358 mike 1.1 static void Test12()
359 {
360 WQL* wql;
361 static const WQL _wql =
362 {
363 /* properties */
364 {
365 },
366 0,
367 /* className */
368 CT("Class1"),
369 /* symbols */
370 {
371 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("A")) },
372 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("B")) },
373 { WQL_TYPE_GT },
374 },
375 3,
376 };
377 wql = WQL_Parse(CT("SELECT * from Class1 WHERE A > B"), NULL);
378 UT_ASSERT(wql != NULL);
379 mike 1.1 UT_ASSERT(WQL_Identical(&_wql, wql));
380 WQL_Delete(wql);
381 }
382
383 extern "C"
384 {
385 static int _Lookup1(
386 const MI_Char* name,
387 WQL_Symbol* symbol,
388 Batch* batch,
389 void* data)
390 {
391 if (Zcmp(name, CT("A")) == 0)
392 {
393 symbol->type = WQL_TYPE_INTEGER;
394 symbol->value.integer = 1;
395 return 0;
396 }
397 else if (Zcmp(name, CT("B")) == 0)
398 {
399 symbol->type = WQL_TYPE_STRING;
400 mike 1.1 symbol->value.string = CT("B");
401 return 0;
402 }
403 else if (Zcmp(name, CT("C")) == 0)
404 {
405 symbol->type = WQL_TYPE_BOOLEAN;
406 symbol->value.boolean = 1;
407 return 0;
408 }
409 else if (Zcmp(name, CT("D")) == 0)
410 {
411 symbol->type = WQL_TYPE_REAL;
412 symbol->value.real = 1.5;
413 return 0;
414 }
415 else if (Zcmp(name, CT("E")) == 0)
416 {
417 symbol->type = WQL_TYPE_NULL;
418 symbol->value.integer = 0;
419 return 0;
420 }
421 mike 1.1
422 return -1;
423 }
424 }
425
426 static void Test13()
427 {
428 {
429 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE A > 1"), NULL);
430 UT_ASSERT(wql != NULL);
431 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 1);
432 WQL_Delete(wql);
433 }
434 {
435 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE A > 0"), NULL);
436 UT_ASSERT(wql != NULL);
437 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 0);
438 WQL_Delete(wql);
439 }
440 {
441 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE A = 1"), NULL);
442 mike 1.1 UT_ASSERT(wql != NULL);
443 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 0);
444 WQL_Delete(wql);
445 }
446 {
447 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE A = 0"), NULL);
448 UT_ASSERT(wql != NULL);
449 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 1);
450 WQL_Delete(wql);
451 }
452 {
453 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE A <> 0"), NULL);
454 UT_ASSERT(wql != NULL);
455 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 0);
456 WQL_Delete(wql);
457 }
458 {
459 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE A >= 0"), NULL);
460 UT_ASSERT(wql != NULL);
461 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 0);
462 WQL_Delete(wql);
463 mike 1.1 }
464 {
465 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE A <= 1"), NULL);
466 UT_ASSERT(wql != NULL);
467 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 0);
468 WQL_Delete(wql);
469 }
470 {
471 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE A = 1 AND B = \"B\""), NULL);
472 UT_ASSERT(wql != NULL);
473 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 0);
474 WQL_Delete(wql);
475 }
476 {
477 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE C = TRUE"), NULL);
478 UT_ASSERT(wql != NULL);
479 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 0);
480 WQL_Delete(wql);
481 }
482 {
483 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE D >= 1.0"), NULL);
484 mike 1.1 UT_ASSERT(wql != NULL);
485 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 0);
486 WQL_Delete(wql);
487 }
488 {
489 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE E = NULL"), NULL);
490 UT_ASSERT(wql != NULL);
491 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 0);
492 WQL_Delete(wql);
493 }
494 {
495 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE A <> NULL"), NULL);
496 UT_ASSERT(wql != NULL);
497 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 0);
498 WQL_Delete(wql);
499 }
500 {
501 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE E <> NULL"), NULL);
502 UT_ASSERT(wql != NULL);
503 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 1);
504 WQL_Delete(wql);
505 mike 1.1 }
506 {
507 WQL* wql = WQL_Parse(CT("SELECT * from X WHERE A = NULL"), NULL);
508 UT_ASSERT(wql != NULL);
509 UT_ASSERT(WQL_Eval(wql, _Lookup1, NULL) == 1);
510 WQL_Delete(wql);
511 }
512 }
513
514 static void Test14()
515 {
516 WQL* wql;
517 static const WQL _wql =
518 {
519 /* properties */
520 {
521 },
522 0,
523 /* className */
524 CT("x"),
525 /* symbols */
526 mike 1.1 {
527 { WQL_TYPE_IDENTIFIER, WQL_VALUE_STRING(CT("a")) },
528 { WQL_TYPE_STRING, WQL_VALUE_STRING(CT("one \"two\" three")) },
529 { WQL_TYPE_EQ },
530 },
531 3,
532 };
533 wql = WQL_Parse(CT("select * from x where a = \"one \\\"two\\\" three\""), NULL);
534 UT_ASSERT(wql != NULL);
535 UT_ASSERT(WQL_Identical(&_wql, wql));
536 WQL_Delete(wql);
537 }
538
539 static void Test15()
540 {
541 MI_Result r;
542 MI_Instance* inst = NULL;
543
544 /* Create a dynamic instance */
545 r = Instance_NewDynamic(&inst, CT("A"), MI_FLAG_CLASS, NULL);
546 UT_ASSERT(r == MI_RESULT_OK);
547 mike 1.1 UT_ASSERT(inst != NULL);
548
549 /* Add properties */
550 {
551 MI_Value v;
552
553 v.boolean = MI_FALSE;
554 r = __MI_Instance_AddElement(inst, CT("BooleanS"), &v, MI_BOOLEAN, 0);
555 UT_ASSERT(r == MI_RESULT_OK);
556
557 v.uint8 = 8;
558 r = __MI_Instance_AddElement(inst, CT("Uint8S"), &v, MI_UINT8, 0);
559 UT_ASSERT(r == MI_RESULT_OK);
560
561 v.sint8 = -8;
562 r = __MI_Instance_AddElement(inst, CT("Sint8S"), &v, MI_SINT8, 0);
563 UT_ASSERT(r == MI_RESULT_OK);
564
565 v.uint16 = 16;
566 r = __MI_Instance_AddElement(inst, CT("Uint16S"), &v, MI_UINT16, 0);
567 UT_ASSERT(r == MI_RESULT_OK);
568 mike 1.1
569 v.sint16 = -16;
570 r = __MI_Instance_AddElement(inst, CT("Sint16S"), &v, MI_SINT16, 0);
571 UT_ASSERT(r == MI_RESULT_OK);
572
573 v.uint32 = 32;
574 r = __MI_Instance_AddElement(inst, CT("Uint32S"), &v, MI_UINT32, 0);
575 UT_ASSERT(r == MI_RESULT_OK);
576
577 v.sint32 = -32;
578 r = __MI_Instance_AddElement(inst, CT("Sint32S"), &v, MI_SINT32, 0);
579 UT_ASSERT(r == MI_RESULT_OK);
580
581 v.uint64 = 64;
582 r = __MI_Instance_AddElement(inst, CT("Uint64S"), &v, MI_UINT64, 0);
583 UT_ASSERT(r == MI_RESULT_OK);
584
585 v.sint64 = -64;
586 r = __MI_Instance_AddElement(inst, CT("Sint64S"), &v, MI_SINT64, 0);
587 UT_ASSERT(r == MI_RESULT_OK);
588
589 mike 1.1 v.real32 = 32.0;
590 r = __MI_Instance_AddElement(inst, CT("Real32S"), &v, MI_REAL32, 0);
591 UT_ASSERT(r == MI_RESULT_OK);
592
593 v.real64 = 64.0;
594 r = __MI_Instance_AddElement(inst, CT("Real64S"), &v, MI_REAL64, 0);
595 UT_ASSERT(r == MI_RESULT_OK);
596
597 v.char16 = 16;
598 r = __MI_Instance_AddElement(inst, CT("Char16S"), &v, MI_CHAR16, 0);
599 UT_ASSERT(r == MI_RESULT_OK);
600
601 int x = StrToDatetime(CT("20101231120000.123456+360"), &v.datetime);
602 UT_ASSERT(x == 0);
603 r = __MI_Instance_AddElement(inst, CT("DatetimeS"), &v, MI_DATETIME, 0);
604 UT_ASSERT(r == MI_RESULT_OK);
605
606 v.string = CT("STRING");
607 r = __MI_Instance_AddElement(inst, CT("StringS"), &v, MI_STRING, 0);
608 UT_ASSERT(r == MI_RESULT_OK);
609
610 mike 1.1 r = __MI_Instance_AddElement(
611 inst, CT("NullStr"), &v, MI_STRING, MI_FLAG_NULL);
612 UT_ASSERT(r == MI_RESULT_OK);
613
614 #if 0
615 Instance_Print(inst, stdout, 0, MI_TRUE);
616 #endif
617 }
618
619 /* Perform evaluations against this instance */
620 {
621 {
622 WQL* wql = WQL_Parse(CT("SELECT * from A WHERE Sint8S = -8"), NULL);
623 UT_ASSERT(wql != NULL);
624 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
625 WQL_Delete(wql);
626 }
627 {
628 WQL* wql = WQL_Parse(CT("SELECT * from A WHERE Uint8S = 8"), NULL);
629 UT_ASSERT(wql != NULL);
630 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
631 mike 1.1 WQL_Delete(wql);
632 }
633 {
634 WQL* wql = WQL_Parse(CT("SELECT * from A WHERE Sint16S = -16"), NULL);
635 UT_ASSERT(wql != NULL);
636 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
637 WQL_Delete(wql);
638 }
639 {
640 WQL* wql = WQL_Parse(CT("SELECT * from A WHERE Uint16S = 16"), NULL);
641 UT_ASSERT(wql != NULL);
642 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
643 WQL_Delete(wql);
644 }
645 {
646 WQL* wql = WQL_Parse(CT("SELECT * from A WHERE Sint32S = -32"), NULL);
647 UT_ASSERT(wql != NULL);
648 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
649 WQL_Delete(wql);
650 }
651 {
652 mike 1.1 WQL* wql = WQL_Parse(CT("SELECT * from A WHERE Uint32S = 32"), NULL);
653 UT_ASSERT(wql != NULL);
654 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
655 WQL_Delete(wql);
656 }
657 {
658 WQL* wql = WQL_Parse(CT("SELECT * from A WHERE Sint64S = -64"), NULL);
659 UT_ASSERT(wql != NULL);
660 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
661 WQL_Delete(wql);
662 }
663 {
664 WQL* wql = WQL_Parse(CT("SELECT * from A WHERE Uint64S = 64"), NULL);
665 UT_ASSERT(wql != NULL);
666 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
667 WQL_Delete(wql);
668 }
669 {
670 WQL* wql = WQL_Parse(CT("SELECT * from A WHERE Real32S = 32.0"), NULL);
671 UT_ASSERT(wql != NULL);
672 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
673 mike 1.1 WQL_Delete(wql);
674 }
675 {
676 WQL* wql = WQL_Parse(CT("SELECT * from A WHERE Real64S = 64.0"), NULL);
677 UT_ASSERT(wql != NULL);
678 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
679 WQL_Delete(wql);
680 }
681 {
682 WQL* wql = WQL_Parse(CT("SELECT * from A WHERE Real64S = 65.0"), NULL);
683 UT_ASSERT(wql != NULL);
684 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 1);
685 WQL_Delete(wql);
686 }
687 {
688 WQL* wql = WQL_Parse(
689 CT("SELECT * from A WHERE StringS = \"STRING\""), NULL);
690 UT_ASSERT(wql != NULL);
691 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
692 WQL_Delete(wql);
693 }
694 mike 1.1 {
695 WQL* wql = WQL_Parse(CT("SELECT * from A "
696 "WHERE DatetimeS = \"20101231120000.123456+360\""), NULL);
697 UT_ASSERT(wql != NULL);
698 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
699 WQL_Delete(wql);
700 }
701 {
702 WQL* wql = WQL_Parse(CT("SELECT * from A "
703 "WHERE DatetimeS <> \"20101231120000.123456+360\""), NULL);
704 UT_ASSERT(wql != NULL);
705 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 1);
706 WQL_Delete(wql);
707 }
708 {
709 WQL* wql = WQL_Parse(CT(
710 "SELECT * from A WHERE NullStr = NULL"), NULL);
711 UT_ASSERT(wql != NULL);
712 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
713 WQL_Delete(wql);
714 }
715 mike 1.1 {
716 WQL* wql = WQL_Parse(CT(
717 "SELECT * from A WHERE DatetimeS <> NULL"), NULL);
718 UT_ASSERT(wql != NULL);
719 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
720 WQL_Delete(wql);
721 }
722 {
723 WQL* wql = WQL_Parse(CT(
724 "SELECT * from A WHERE DatetimeS != NULL"), NULL);
725 UT_ASSERT(wql != NULL);
726 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
727 WQL_Delete(wql);
728 }
729 {
730 WQL* wql = WQL_Parse(CT(
731 "SELECT * from A WHERE NullStr = NullStr"), NULL);
732 UT_ASSERT(wql != NULL);
733 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
734 WQL_Delete(wql);
735 }
736 mike 1.1 {
737 WQL* wql = WQL_Parse(CT(
738 "SELECT * from A WHERE NULL = NULL"), NULL);
739 UT_ASSERT(wql != NULL);
740 UT_ASSERT(WQL_Eval(wql, WQL_LookupInstanceProperty, inst) == 0);
741 WQL_Delete(wql);
742 }
743 }
744
745 MI_Instance_Delete(inst);
746 }
747
748 static void Test16()
749 {
750 WQL* wql;
751 WQL* clone;
752
753 wql = WQL_Parse(
754 CT("SELECT A,B,C FROM X WHERE (A>10) AND (A<30) OR (B>40)"), NULL);
755 UT_ASSERT(wql != NULL);
756
757 mike 1.1 clone = WQL_Clone(wql, NULL);
758 UT_ASSERT(clone != NULL);
759
760 UT_ASSERT(WQL_Identical(wql, clone));
761
762 WQL_Delete(clone);
763 WQL_Delete(wql);
764 }
765
766 static void RunTests()
767 {
768 UT_TEST(Test1);
769 UT_TEST(Test2);
770 UT_TEST(Test3);
771 UT_TEST(Test4);
772 UT_TEST(Test5);
773 UT_TEST(Test6);
774 UT_TEST(Test7);
775 UT_TEST(Test8);
776 UT_TEST(Test9);
777 UT_TEST(Test10);
778 mike 1.1 UT_TEST(Test11);
779 UT_TEST(Test12);
780 UT_TEST(Test13);
781 UT_TEST(Test14);
782 UT_TEST(Test15);
783 UT_TEST(Test16);
784 }
785
786 UT_ENTRY_POINT(RunTests);
|