[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