(file) Return to test_wql.cpp CVS log (file) (dir) Up to [OMI] / omi / wql / tests

  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);

ViewCVS 0.9.2