[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