[Checkins] SVN: Sandbox/ocql-foliage/trunk/src/ Some new test cases.
Attila Gobi
attila.gobi at gmail.com
Wed Sep 26 14:56:14 EDT 2007
Log message for revision 80120:
Some new test cases.
Changed:
U Sandbox/ocql-foliage/trunk/src/ocql/engine/runnablequery.py
U Sandbox/ocql-foliage/trunk/src/ocql/ocqlengine.py
A Sandbox/ocql-foliage/trunk/src/test2.py
U Sandbox/ocql-foliage/trunk/src/testdb.py
-=-
Modified: Sandbox/ocql-foliage/trunk/src/ocql/engine/runnablequery.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/ocql/engine/runnablequery.py 2007-09-26 18:37:46 UTC (rev 80119)
+++ Sandbox/ocql-foliage/trunk/src/ocql/engine/runnablequery.py 2007-09-26 18:56:13 UTC (rev 80120)
@@ -42,13 +42,13 @@
metadata: ocql.metadata instance
alg: algebra object
"""
- def __init__(self, engine, alg):
+ def __init__(self, engine, alg, code):
self.engine = engine
self.alg = alg
- self.reanalyze()
+ self.code =code
def reanalyze(self):
- self.code = self.engine.compile_algebra(self.alg)
+ self.code = self.engine._compile_algebra(self.alg)
def execute(self, debug=False):
metadata = self.engine.metadata
Modified: Sandbox/ocql-foliage/trunk/src/ocql/ocqlengine.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/ocql/ocqlengine.py 2007-09-26 18:37:46 UTC (rev 80119)
+++ Sandbox/ocql-foliage/trunk/src/ocql/ocqlengine.py 2007-09-26 18:56:13 UTC (rev 80120)
@@ -46,7 +46,9 @@
self.algebra = factory.get_algebra()
def compile(self, query):
- return RunnableQuery(self, self._compile_query(query))
+ algebra = self._compile_query(query)
+ code = self._compile_algebra(algebra)
+ return RunnableQuery(self, algebra, code)
def _compile_query(self, query):
return self.rewriter.rewrite(
@@ -55,7 +57,7 @@
)
)
- def compile_algebra(self, alg):
+ def _compile_algebra(self, alg):
return self.algebra_compiler.compile(
self.algebra_optimizer.optimize(alg)
)
Added: Sandbox/ocql-foliage/trunk/src/test2.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/test2.py (rev 0)
+++ Sandbox/ocql-foliage/trunk/src/test2.py 2007-09-26 18:56:13 UTC (rev 80120)
@@ -0,0 +1,308 @@
+import testdb
+from ocql.engine.queryobject import *
+import operator
+import testalgebra
+from ocql.ocqlengine import OCQLEngine
+from ocql.engine.runnablequery import RunnableQuery
+
+engine = OCQLEngine()
+
+#
+# Simple empty query
+#
+# set [ ]
+#
+query = "set [ ]"
+qo=Query(set, [] , Identifier('') )
+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([])
+
+#
+# Simple SELECT ALL
+#
+# set [ c in ICurses | c ]
+#
+query = "[ c in ICurses | c ]"
+qo=Query(set, [
+ In(Identifier('c'),Identifier('ICurses')),
+ ] ,Identifier('c'))
+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: ", set([ i.name for i in q.execute() ])
+print "expected:", set([ "C1" , "C2", "C3" ])
+
+#
+# Selecting a property
+#
+# set [ c in ICurses | c.name ]
+#
+query = "[ c in ICurses | c.name ]"
+qo=Query(set, [
+ In(Identifier('c'),Identifier('ICurses')),
+ ] ,Identifier('c.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([ "C1" , "C2", "C3" ])
+
+#
+# Filtering -- empty result
+#
+# set [ c in ICurses , c.credits>3 | c.name ]
+#
+query = "[ c in ICurses, c.credits>3 | c.name ]"
+qo=Query(set, [
+ In(Identifier('c'),Identifier('ICurses')),
+ Gt(Identifier('c.credits'),Constant('3')),
+ ] ,Identifier('c.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 "expecter:",set([])
+
+#
+# Filtering -- full result
+#
+# set [ c in ICurses , c.credits<=3 | c.name ]
+#
+query = "[ c in ICurses, c.credits<=3 | c.name ]"
+qo=Query(set, [
+ In(Identifier('c'),Identifier('ICurses')),
+ Le(Identifier('c.credits'),Constant('3')),
+ ] ,Identifier('c.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([ "C1" , "C2", "C3" ])
+
+#
+# Filtering -- one result
+#
+# set [ c in ICurses , c.credits=3 | c.name ]
+#
+query = "[ c in ICurses, c.credits=3 | c.name ]"
+qo=Query(set, [
+ In(Identifier('c'),Identifier('ICurses')),
+ Eq(Identifier('c.credits'),Constant('3')),
+ ] ,Identifier('c.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([ "C2", "C3" ])
+
+#
+# Two filters -- full results
+#
+# set [ c in ICurses , c.credits<5, c.credits >=1 | c.name ]
+#
+query = "[ c in ICurses, c.credits<3, c.credits>=1 | c.name ]"
+qo=Query(set, [
+ In(Identifier('c'),Identifier('ICurses')),
+ Lt(Identifier('c.credits'),Constant('5')),
+ Ge(Identifier('c.credits'),Constant('1')),
+ ] ,Identifier('c.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([ "C1", "C2", "C3" ])
+
+#
+# Two filters -- one result
+#
+# set [ c in ICurses , c.credits<=2, 2<=c.credits | c.name ]
+#
+query = "[ c in ICurses, c.credits<=2, 2<=c.credits | c.name ]"
+qo=Query(set, [
+ In(Identifier('c'),Identifier('ICurses')),
+ Le(Identifier('c.credits'),Constant('2')),
+ Le(Constant('2'),Identifier('c.credits')),
+ ] ,Identifier('c.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([ "C1" ])
+
+#
+# Two filters -- one result
+#
+# set [ c in ICurses , c.credits>=2, 2>=c.credits | c.name ]
+#
+query = "[ c in ICurses, c.credits>=2, 2>=c.credits | c.name ]"
+qo=Query(set, [
+ In(Identifier('c'),Identifier('ICurses')),
+ Ge(Identifier('c.credits'),Constant('2')),
+ Ge(Constant('2'),Identifier('c.credits')),
+ ] ,Identifier('c.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([ "C1" ])
+
+#
+# Two filters -- no result
+#
+# set [ c in ICurses , c.credits=3, c.credits!=3 | c.name ]
+#
+query = "[ c in ICurses, c.credits=3, c.credits!=3 | c.name ]"
+qo=Query(set, [
+ In(Identifier('c'),Identifier('ICurses')),
+ Eq(Identifier('c.credits'),Constant('3')),
+ Ne(Identifier('c.credits'),Constant('3')),
+ ] ,Identifier('c.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([])
+
+#
+# join -- Departments running curses
+#
+# set [ c in ICurses d, in IDepartments , some c.runBy = d | d.name ]
+#
+query = "[ c in ICurses, d in IDepartments, d = some c.runBy | d.name ]"
+qo=Query(set, [
+ In(Identifier('c'),Identifier('ICurses')),
+ In(Identifier('d'),Identifier('IDepartments')),
+ Eq(Identifier('d'),Quanted(Some(),Identifier('c.runBy'))),
+ ] ,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(['Computing Science', 'Other Department'])
+
+#
+# join -- Departments running some 3 credits curses
+#
+# set [ d in ICurses, c in ICurses, c.credits=3, some c.runBy = d | d.name ]
+#
+query = "[ c in ICurses, d in IDepartments, c.credits=3, d = some c.runBy | d.name ]"
+qo=Query(set, [
+ In(Identifier('c'),Identifier('ICurses')),
+ In(Identifier('d'),Identifier('IDepartments')),
+ Eq(Identifier('c.credits'),Constant('3')),
+ Eq(Identifier('d'),Quanted(Some(),Identifier('c.runBy'))),
+ ] ,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(['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 ]
+#
+query = "[ d in IDepartments, cr as set [ c in ICurses, some c.runBy = d | c.credits ], some cr != 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))),
+ ] ,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(['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 ]"
+#
+
Modified: Sandbox/ocql-foliage/trunk/src/testdb.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/testdb.py 2007-09-26 18:37:46 UTC (rev 80119)
+++ Sandbox/ocql-foliage/trunk/src/testdb.py 2007-09-26 18:56:13 UTC (rev 80120)
@@ -45,16 +45,18 @@
self.credits = credits
D1 = Department("Computing Science")
-D2 = Department("something")
+D2 = Department("Other department")
+D3 = Department("Department without curse")
C1 = Curses("C1", runBy = set([D1, D2]), credits=2)
C2 = Curses("C2", runBy = set(), credits=3)
+C3 = Curses("C3", runBy = set([D1]), credits=3)
# metadata
class TestMetadata(metadata.Metadata):
db = {
'IDepartments': [D1, D2],
- 'ICurses': [C1, C2]
+ 'ICurses': [C1, C2, C3]
}
classes = {
'IDepartments': MClass(ICurses),
More information about the Checkins
mailing list