[Checkins] SVN: Sandbox/adamg/ocql/branches/dbprovider/src/ocql/ took over test from old code, smashed some refactoring bugs

Adam Groszer agroszer at gmail.com
Tue Jun 17 03:54:25 EDT 2008


Log message for revision 87445:
  took over test from old code, smashed some refactoring bugs

Changed:
  U   Sandbox/adamg/ocql/branches/dbprovider/src/ocql/queryobject/queryobject.py
  U   Sandbox/adamg/ocql/branches/dbprovider/src/ocql/testing/database.py
  A   Sandbox/adamg/ocql/branches/dbprovider/src/ocql/tests/test_old.py

-=-
Modified: Sandbox/adamg/ocql/branches/dbprovider/src/ocql/queryobject/queryobject.py
===================================================================
--- Sandbox/adamg/ocql/branches/dbprovider/src/ocql/queryobject/queryobject.py	2008-06-17 02:38:06 UTC (rev 87444)
+++ Sandbox/adamg/ocql/branches/dbprovider/src/ocql/queryobject/queryobject.py	2008-06-17 07:54:23 UTC (rev 87445)
@@ -182,9 +182,11 @@
             elif isinstance(firstTerm, Alias):
                 rv = Query(
                     self.metadata,
+                    self.symbols,
                     self.collection_type,
                     [In(
                         self.metadata,
+                        self.symbols,
                         firstTerm.identifier,
                         firstTerm.expression
                         )]+self.terms[1:],
@@ -194,6 +196,7 @@
                     firstTerm.rewrite(algebra),
                     Query(
                         self.metadata,
+                        self.symbols,
                         self.collection_type,
                         self.terms[1:],
                         self.target).rewrite(algebra),
@@ -427,8 +430,10 @@
             algebra.Lambda('i',
                 operator.__class__(
                     self.metadata,
+                    self.symbols,
                     Identifier(
                         self.metadata,
+                        self.symbols,
                         'i'),
                     expression
                 ).rewrite(algebra)
@@ -446,7 +451,8 @@
             algebra.Lambda('i',
                 operator.__class__(
                     self.metadata,
-                    Identifier(self.metadata, 'i'),
+                    self.symbols,
+                    Identifier(self.metadata, self.symbols,'i'),
                     expression
                 ).rewrite(algebra)
             ),

Modified: Sandbox/adamg/ocql/branches/dbprovider/src/ocql/testing/database.py
===================================================================
--- Sandbox/adamg/ocql/branches/dbprovider/src/ocql/testing/database.py	2008-06-17 02:38:06 UTC (rev 87444)
+++ Sandbox/adamg/ocql/branches/dbprovider/src/ocql/testing/database.py	2008-06-17 07:54:23 UTC (rev 87445)
@@ -130,7 +130,7 @@
     def get_class(self, name):
         return self.classes[name]
 
-    def get_collection_type(self, name):
-        klass = self.get_class(name)
-        rv = klass.get_collection_type()
-        return rv
\ No newline at end of file
+    #def get_collection_type(self, name):
+    #    klass = self.get_class(name)
+    #    rv = klass.get_collection_type()
+    #    return rv
\ No newline at end of file

Added: Sandbox/adamg/ocql/branches/dbprovider/src/ocql/tests/test_old.py
===================================================================
--- Sandbox/adamg/ocql/branches/dbprovider/src/ocql/tests/test_old.py	                        (rev 0)
+++ Sandbox/adamg/ocql/branches/dbprovider/src/ocql/tests/test_old.py	2008-06-17 07:54:23 UTC (rev 87445)
@@ -0,0 +1,518 @@
+# -*- coding: UTF-8 -*-
+
+"""OLD tests taken over
+
+$Id$
+"""
+
+import unittest
+import doctest
+from zope.testing.doctestunit import DocTestSuite,DocFileSuite
+
+from zope.component import adapts
+from zope.component import provideAdapter
+from zope.interface import implements
+
+from ocql.queryobject.queryobject import *
+from ocql.parser.queryparser import SymbolContainer
+from ocql.rewriter import algebra
+from ocql.engine import OCQLEngine
+from ocql.compiler.runnablequery import RunnableQuery
+
+from ocql.parser.queryparser import QueryParser
+from ocql.qoptimizer.qoptimizer import QueryOptimizer
+from ocql.rewriter.rewriter import Rewriter
+from ocql.aoptimizer.aoptimizer import AlgebraOptimizer
+from ocql.compiler.compiler import AlgebraCompiler
+from ocql.testing.database import TestMetadata
+
+from ocql.testing.database import C1, C2, C3
+from ocql.testing.database import D1, D2, D3
+
+from ocql.interfaces import IDB
+from ocql.interfaces import IQueryParser
+from ocql.interfaces import IObjectQuery
+
+
+class QueryNullParser(object):
+    implements(IQueryParser)
+    adapts(IObjectQuery)
+
+    def __init__(self, context):
+        self.context = context
+        #self.db = db
+
+    def __call__(self, metadata):
+        return self.context
+
+
+class testOLD(unittest.TestCase):
+    def setUp(self):
+        provideAdapter(QueryParser)
+        provideAdapter(QueryNullParser)
+        provideAdapter(QueryOptimizer)
+        provideAdapter(Rewriter)
+        provideAdapter(AlgebraOptimizer)
+        provideAdapter(AlgebraCompiler)
+        provideAdapter(TestMetadata)
+
+        self.engine = OCQLEngine()
+
+    def doone(self, query, qo, expected):
+        print "==============="
+        print "query:",query
+
+        algebra_=qo.rewrite(algebra)
+
+        print "algebra:",algebra_
+
+        code=algebra_.compile();
+        compile(code,'<string>','eval')
+        q = RunnableQuery(engine,algebra_,code)
+
+        print "code:",code
+        print "---------------"
+        print "got:     ", q.execute()
+        print "expected:", expected
+
+    def doit(self, query, qo, expected):
+        run = self.engine.compile(qo)
+        result = run.execute()
+
+        self.assertEqual(expected, result)
+
+
+    def test_old(self):
+        metadata = IDB(None)
+        symbols = SymbolContainer()
+
+        #
+        # Simple empty query
+        #
+        # set [ ]
+        #
+        query = "set [ ]"
+        qo=Query(metadata, symbols,
+                 set,
+                 [] ,
+                 Identifier(metadata, symbols,
+                            '') )
+
+        self.doit(query, qo, set([]))
+
+
+        symbols = SymbolContainer()
+        #
+        # Simple SELECT ALL
+        #
+        # set [ c in ICourse | c ]
+        #
+        query = "[ c in ICourse | c ]"
+        qo=Query(
+            metadata, symbols,
+            set,
+            [
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c'),
+                    Identifier(metadata, symbols,'ICourse')),
+            ] ,Identifier(metadata, symbols,'c') )
+
+        #caution, these here are object references
+        self.doit(query, qo, set([ C1 , C2, C3 ]))
+
+
+        symbols = SymbolContainer()
+        #
+        # Selecting a property
+        #
+        # set [ c in ICourse | c.code ]
+        #
+        query = "[ c in ICourse | c.code ]"
+        qo=Query(
+            metadata, symbols,
+            set,
+            [
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c'),
+                    Identifier(metadata, symbols,'ICourse')),
+            ] ,Identifier(metadata, symbols,'c.code') )
+
+        self.doit(query, qo, set([ "C1" , "C2", "C3"  ]))
+
+
+        symbols = SymbolContainer()
+        #
+        # Filtering -- empty result
+        #
+        # set [ c in ICourse , c.credits>3 | c.code ]
+        #
+        query = "[ c in ICourse, c.credits>3 | c.code ]"
+        qo=Query(
+            metadata, symbols,
+            set,
+            [
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c'),
+                    Identifier(metadata, symbols,'ICourse')),
+                Gt(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c.credits'),
+                    Constant(metadata, symbols,'3')),
+            ] ,Identifier(metadata, symbols, 'c.code') )
+
+        self.doit(query, qo, set([]))
+
+
+        symbols = SymbolContainer()
+        #
+        # Filtering -- full result
+        #
+        # set [ c in ICourse , c.credits<=3 | c.code ]
+        #
+        query = "[ c in ICourse, c.credits<=3 | c.code ]"
+        qo=Query(
+            metadata, symbols,
+            set, [
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c'),
+                    Identifier(metadata, symbols,'ICourse')),
+                Le(metadata, symbols,
+                    Identifier(metadata, symbols,'c.credits'),
+                    Constant(metadata, symbols,'3')),
+            ] ,Identifier(metadata, symbols,'c.code'))
+
+        self.doit(query, qo, set([ "C1" , "C2", "C3" ]))
+
+
+        symbols = SymbolContainer()
+        #
+        # Filtering -- one result
+        #
+        # set [ c in ICourse , c.credits=3 | c.code ]
+        #
+        query = "[ c in ICourse, c.credits=3 | c.code ]"
+        qo=Query(
+            metadata, symbols,
+            set,
+            [
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c'),
+                    Identifier(metadata, symbols,'ICourse')),
+                Eq(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c.credits'),
+                    Constant(metadata, symbols,'3')),
+            ] ,Identifier(metadata, symbols,'c.code'))
+
+        self.doit(query, qo, set([ "C2", "C3" ]))
+
+
+        symbols = SymbolContainer()
+        #
+        # Two filters -- full results
+        #
+        # set [ c in ICourse , c.credits<5, c.credits >=1  | c.code ]
+        #
+        query = "[ c in ICourse, c.credits<3, c.credits>=1 | c.code ]"
+        qo=Query(
+            metadata, symbols,
+            set,
+            [
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c'),
+                    Identifier(metadata, symbols,'ICourse')),
+                Lt(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c.credits'),
+                    Constant(metadata, symbols,'5')),
+                Ge(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c.credits'),
+                    Constant(metadata, symbols,'1')),
+            ] ,Identifier(metadata, symbols, 'c.code'))
+
+        self.doit(query, qo, set([ "C1", "C2", "C3" ]))
+
+
+        symbols = SymbolContainer()
+        #
+        # Two filters -- one result
+        #
+        # set [ c in ICourse , c.credits<=2, 2<=c.credits  | c.code ]
+        #
+        query = "[ c in ICourse, c.credits<=2, 2<=c.credits | c.code ]"
+        qo=Query(
+            metadata, symbols,
+            set, [
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c'),
+                    Identifier(metadata, symbols,'ICourse')),
+                Le(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c.credits'),
+                    Constant(metadata, symbols,'2')),
+                Le(
+                    metadata, symbols,
+                    Constant(metadata, symbols,'2'),
+                    Identifier(metadata, symbols,'c.credits')),
+            ] ,Identifier(metadata, symbols,'c.code'))
+
+        self.doit(query, qo, set([ "C1" ]))
+
+
+        symbols = SymbolContainer()
+        #
+        # Two filters -- one result
+        #
+        # set [ c in ICourse , c.credits>=2, 2>=c.credits  | c.code ]
+        #
+        query = "[ c in ICourse, c.credits>=2, 2>=c.credits | c.code ]"
+        qo=Query(
+            metadata, symbols,
+            set, [
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c'),
+                    Identifier(metadata, symbols,'ICourse')),
+                Ge(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c.credits'),
+                    Constant(metadata, symbols,'2')),
+                Ge(
+                    metadata, symbols,
+                    Constant(metadata, symbols,'2'),
+                    Identifier(metadata, symbols,'c.credits')),
+            ] ,Identifier(metadata, symbols,'c.code'))
+
+        self.doit(query, qo, set([ "C1" ]))
+
+
+        symbols = SymbolContainer()
+        #
+        # Two filters -- no result
+        #
+        # set [ c in ICourse , c.credits=3, c.credits!=3  | c.code ]
+        #
+        query = "[ c in ICourse, c.credits=3, c.credits!=3 | c.code ]"
+        qo=Query(
+            metadata, symbols,
+            set, [
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c'),
+                    Identifier(metadata, symbols,'ICourse')),
+                Eq(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c.credits'),
+                    Constant(metadata, symbols,'3')),
+                Ne(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c.credits'),
+                    Constant(metadata, symbols,'3')),
+            ] ,Identifier(metadata, symbols,'c.code'))
+
+        self.doit(query, qo, set([]))
+
+
+        symbols = SymbolContainer()
+        #
+        # join -- Departments running curses
+        #
+        # set [ c in ICourse d, in IDepartments ,
+        # some c.runBy = d  | d.name ]
+        #
+        query = "[ c in ICourse, d in IDepartments, d = some c.runBy | d.name  ]"
+        qo=Query(
+            metadata, symbols,
+            set, [
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c'),
+                    Identifier(metadata, symbols,'ICourse')),
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'d'),
+                    Identifier(metadata, symbols,'IDepartments')),
+                Eq(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'d'),
+                    Quanted(metadata, symbols,
+                            Some(metadata, symbols),
+                            Property(metadata, symbols,
+                                    Identifier(metadata, symbols, 'c'),
+                                    Identifier(metadata, symbols, 'runBy'))
+                                )),
+            ] ,Identifier(metadata, symbols,'d.name'))
+
+        self.doit(query, qo, set(['Other department', 'Computing Science']))
+
+
+        symbols = SymbolContainer()
+        #
+        # join -- Departments running some 3 credits curses
+        #
+        # set [ d in ICourse, c in ICourse, c.credits=3, some c.runBy = d | d.name ]
+        #
+        query = "[ c in ICourse, d in IDepartments, c.credits=3, d = some c.runBy | d.name  ]"
+        qo=Query(
+            metadata, symbols,
+            set,
+            [
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c'),
+                    Identifier(metadata, symbols,'ICourse')),
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'d'),
+                    Identifier(metadata, symbols,'IDepartments')),
+                Eq(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c.credits'),
+                    Constant(metadata, symbols,'3')),
+                Eq(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'d'),
+                    Quanted(
+                        metadata, symbols,
+                        Some(metadata, symbols),
+                        Property(metadata, symbols,
+                                    Identifier(metadata, symbols, 'c'),
+                                    Identifier(metadata, symbols, 'runBy'))
+                                )),
+            ] ,Identifier(metadata, symbols, 'd.name'))
+
+        self.doit(query, qo, set(['Computing Science']))
+
+
+        symbols = SymbolContainer()
+        # join -- Departments running some not 3 credits curses
+        #
+        # [ d in IDepartments, c in ICourse, some c.runBy = d, some c.credits != 3| d.name ]
+        #
+        query = """[ d in IDepartments,
+        c in ICourse,
+        some c.runBy = d, c.credits != 3| d.name ]"""
+        qo=Query(
+            metadata, symbols,
+            set,
+            [
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'d'),
+                    Identifier(metadata, symbols,'IDepartments')),
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'c'),
+                    Identifier(metadata, symbols,'ICourse')),
+                Eq(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'d'),
+                    Quanted(
+                        metadata, symbols,
+                        Some(metadata, symbols),
+                        Property(metadata, symbols,
+                                    Identifier(metadata, symbols, 'c'),
+                                    Identifier(metadata, symbols, 'runBy'))
+                                )),
+                Ne(
+                    metadata, symbols,
+                    Constant(metadata, symbols,'3'),
+                    Identifier(metadata, symbols,'c.credits')),
+            ] ,Identifier(metadata, symbols,'d.name'))
+
+        self.doit(query, qo, set(['Other department','Computing Science']))
+
+
+        symbols = SymbolContainer()
+        #
+        #
+        # join -- Departments running just 2 credits curses
+        #
+        # set [ d in IDepartments, every set [ c in ICourse, some c.runBy = d | c.credits ] = 3  | d.name ]
+        #
+        query = """set [ d in IDepartments,
+            every
+            set [ c in ICourse, some c.runBy = d | c.credits ] = 2
+            | d.name ]"""
+        qo=Query(
+            metadata, symbols,
+            set,
+            [
+                In(
+                    metadata, symbols,
+                    Identifier(metadata, symbols,'d'),
+                    Identifier(metadata, symbols,'IDepartments')),
+                Eq(
+                    metadata, symbols,
+                    Quanted(
+                        metadata, symbols,
+                        Every(metadata, symbols),
+                        Query(
+                            metadata, symbols,
+                            set,
+                            [
+                                In(
+                                    metadata, symbols,
+                                    Identifier(metadata, symbols,'c'),
+                                    Identifier(metadata, symbols,'ICourse')),
+                                Eq(
+                                    metadata, symbols,
+                                    Identifier(metadata, symbols,'d'),
+                                    Quanted(
+                                        metadata, symbols,
+                                        Some(metadata, symbols),
+                                        Property(metadata, symbols,
+                                            Identifier(metadata, symbols, 'c'),
+                                            Identifier(metadata, symbols, 'runBy'))
+                                        )),
+                            ], Identifier(metadata, symbols, 'c.credits')
+                            )
+                    ),Constant(metadata, symbols,'2')),
+            ] ,Identifier(metadata, symbols,'d.name'))
+
+        self.doit(query, qo, set(['Other department']))
+
+
+        #symbols = SymbolContainer()
+        ##
+        ##
+        ## alias
+        ##
+        ## set [ c in ICourse, a as c.code  | a ]
+        ##
+        #query = """set [ c in ICourse, a as c.code  | a ]"""
+        #
+        #qo=Query(
+        #    metadata, symbols,
+        #    set,
+        #    [
+        #        In(
+        #            metadata, symbols,
+        #            Identifier(metadata, symbols,'c'),
+        #            Identifier(metadata, symbols,'ICourse')),
+        #        Alias(
+        #            metadata, symbols,
+        #            Identifier(metadata, symbols,'a'),
+        #            Property(metadata, symbols,
+        #                 Identifier(metadata, symbols, 'c'),
+        #                 Identifier(metadata, symbols, 'code')))
+        #    ] ,Identifier(metadata, symbols,'c') )
+        #
+        #self.doit(qo, set(['C1','C2','C3']))
+
+def test_suite():
+    flags =  doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS
+    return unittest.TestSuite((
+        unittest.makeSuite(testOLD),
+        ))
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')
\ No newline at end of file


Property changes on: Sandbox/adamg/ocql/branches/dbprovider/src/ocql/tests/test_old.py
___________________________________________________________________
Name: svn:keywords
   + Date Author Id Revision
Name: svn:eol-style
   + native



More information about the Checkins mailing list