[Checkins] SVN: Sandbox/ocql-foliage/trunk/src/ Implement QueryObject.Every class.

Attila Gobi attila.gobi at gmail.com
Wed Sep 26 16:08:32 EDT 2007


Log message for revision 80134:
  Implement QueryObject.Every class.
  More test cases.
  
  

Changed:
  U   Sandbox/ocql-foliage/trunk/src/ocql/engine/queryobject.py
  U   Sandbox/ocql-foliage/trunk/src/test2.py

-=-
Modified: Sandbox/ocql-foliage/trunk/src/ocql/engine/queryobject.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/ocql/engine/queryobject.py	2007-09-26 19:45:52 UTC (rev 80133)
+++ Sandbox/ocql-foliage/trunk/src/ocql/engine/queryobject.py	2007-09-26 20:08:32 UTC (rev 80134)
@@ -242,8 +242,19 @@
 
 # Quantors
 class Every(Quantor):
-    #NotImplemented
-    pass
+    def rewrite(self, algebra, expression, quanted, operator):
+        return algebra.Reduce(
+            set, # FIXME ?set? but which type() to take? quanted.expression?
+            algebra.Identifier('True'),
+            algebra.Lambda('i',
+                operator.__class__(
+                    Identifier('i'),
+                    expression
+                ).rewrite(algebra)
+            ),
+            algebra.Operator('and'),
+            quanted.rewrite(algebra)
+        )
 
 class Some(Quantor):
     def rewrite(self, algebra, expression, quanted, operator):

Modified: Sandbox/ocql-foliage/trunk/src/test2.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/test2.py	2007-09-26 19:45:52 UTC (rev 80133)
+++ Sandbox/ocql-foliage/trunk/src/test2.py	2007-09-26 20:08:32 UTC (rev 80134)
@@ -273,20 +273,17 @@
 print "got:     ",q.execute()
 print "expected:",set(['Computing Science'])
 
-#
 # join -- Departments running some not 3 credits curses
 #
-# [ d in IDepartments, cr as [ c in ICurses,  some c.runBy = d | c.credits ], some cr != 3| d.name  ]
+# [ d in IDepartments, c in ICurses, some c.runBy = d, some c.credits != 3| d.name ]
 #
-query = "[ d in IDepartments, cr as set [ c in ICurses,  some c.runBy = d | c.credits ], some cr != 3| d.name  ]"
+#query = "[ d in IDepartments, cr as set [ c in ICurses,  some c.runBy = d | c.credits ], some cr != 3| d.name ]"
+query = "[ d in IDepartments, c in ICurses, some c.runBy = d, c.credits != 3| d.name ]"
 qo=Query(set, [
         In(Identifier('d'),Identifier('IDepartments')),
-        Alias(Identifier('cr'),
-            Query(set, [
-                In(Identifier('c'),Identifier('ICurses')),
-                Eq(Identifier('d'),Quanted(Some(),Identifier('c.runBy'))),
-            ], Identifier('c.credits'))),
-        Ne(Identifier('cr'),Quanted(Some(),Constant(3))),
+        In(Identifier('c'),Identifier('ICurses')),
+        Eq(Identifier('d'),Quanted(Some(),Identifier('c.runBy'))),
+        Ne(Constant('3'),Identifier('c.credits')),
     ] ,Identifier('d.name'))
 algebra=qo.rewrite(testalgebra)
 code=algebra.compile();
@@ -298,11 +295,30 @@
 print algebra
 print code
 print "got:     ",q.execute()
-print "expected:",set(['Computing Science'])
-
+print "expected:",set(['Other department','Computing Science'])
 #
+#
 # join -- Departments running just 3 credits curses
 #
-# set [ d in ICurses, cr as set [ c in ICurses, some c.runBy = d | c.credits ],  all cr = 3  | d.name ]"
+# set [ d in ICurses, all set [ c in ICurses, some c.runBy = d | c.credits ] = 3  | d.name ]
 #
+query = "set [ d in IDepartments, every set [ c in ICurses, some c.runBy = d | c.credits ] = 2  | d.name ]"
+qo=Query(set, 
+    [
+        In(Identifier('d'),Identifier('IDepartments')),
+        Eq(Quanted(Every(),Query(set,[
+            In(Identifier('c'),Identifier('ICurses')),
+            Eq(Identifier('d'),Quanted(Some(),Identifier('c.runBy'))),
+        ], Identifier('c.credits'))),Constant('2')),
+    ] ,Identifier('d.name'))
+algebra=qo.rewrite(testalgebra)
+code=algebra.compile();
+compile(code,'<string>','eval')
+q = RunnableQuery(engine,algebra,code)
 
+print 
+print query
+print algebra
+print code
+print "got:     ",q.execute()
+print "expected:",set(['Other department'])



More information about the Checkins mailing list