[Checkins] SVN: Sandbox/ocql-foliage/trunk/src/ocql/ moving to buildout

Adam Groszer agroszer at gmail.com
Tue May 27 10:46:16 EDT 2008


Log message for revision 86984:
  moving to buildout

Changed:
  U   Sandbox/ocql-foliage/trunk/src/ocql/__init__.py
  U   Sandbox/ocql-foliage/trunk/src/ocql/engine/queryobject.py
  U   Sandbox/ocql-foliage/trunk/src/ocql/ocqlengine.py
  A   Sandbox/ocql-foliage/trunk/src/ocql/tests/
  A   Sandbox/ocql-foliage/trunk/src/ocql/tests/__init__.py
  A   Sandbox/ocql-foliage/trunk/src/ocql/tests/algebra.py
  A   Sandbox/ocql-foliage/trunk/src/ocql/tests/database.py
  A   Sandbox/ocql-foliage/trunk/src/ocql/tests/manualtest.py
  A   Sandbox/ocql-foliage/trunk/src/ocql/tests/manualtest2.py
  A   Sandbox/ocql-foliage/trunk/src/ocql/tests/temp.py
  A   Sandbox/ocql-foliage/trunk/src/ocql/tests/test_parser.py

-=-
Modified: Sandbox/ocql-foliage/trunk/src/ocql/__init__.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/ocql/__init__.py	2008-05-27 14:39:09 UTC (rev 86983)
+++ Sandbox/ocql-foliage/trunk/src/ocql/__init__.py	2008-05-27 14:46:16 UTC (rev 86984)
@@ -1 +1,7 @@
-from ocqlengine import OCQLEngine
\ No newline at end of file
+# this is a namespace package
+try:
+    import pkg_resources
+    pkg_resources.declare_namespace(__name__)
+except ImportError:
+    import pkgutil
+    __path__ = pkgutil.extend_path(__path__, __name__)

Modified: Sandbox/ocql-foliage/trunk/src/ocql/engine/queryobject.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/ocql/engine/queryobject.py	2008-05-27 14:39:09 UTC (rev 86983)
+++ Sandbox/ocql-foliage/trunk/src/ocql/engine/queryobject.py	2008-05-27 14:46:16 UTC (rev 86984)
@@ -7,13 +7,13 @@
 
 class QueryObject:
     metadata = None
-    
+
     def __init__(self, metadata):
         self.metadata = metadata
-        
+
     def addSymbol(self):
         pass
-        
+
     def get_class(self):
         s = self.metadata.symbols.current()
         try:
@@ -23,11 +23,11 @@
         except AttributeError:
             from pub.dbgpclient import brk; brk()
 
-    
+
     def get_collection_type(self, klass=None):
         if klass is None:
             klass = self.get_class()
-            
+
             if klass is None:
                 from pub.dbgpclient import brk; brk()
 
@@ -36,23 +36,23 @@
         return rv
 
     def rewrite(self, algebra):
-        raise NotImplemented(self) 
+        raise NotImplemented(self)
 
 class Term:
     pass
-        
+
 class Expression(Term, QueryObject):
     pass
 
 #
 # General
-# 
+#
 class hasClassWith(Expression):
     #NotImplemented
     expression = None
     klass = None
     conditional = None
-    
+
     def __init__(self, metadata, expr, klass, conditional):
         self.metadata = metadata
         self.expression = expr
@@ -61,7 +61,7 @@
 
 class Identifier(Expression):
     name = None
-    
+
     def __init__(self, metadata, name):
         self.metadata = metadata
         self.name = name
@@ -72,11 +72,11 @@
 class Constant(Expression):
     #this shall be abstract?
     value = None
-    
+
     def __init__(self, metadata, value):
         self.metadata = metadata
         self.value=value
-    
+
     def rewrite(self, algebra):
         return algebra.Constant(self.value)
 
@@ -93,34 +93,34 @@
 
 class CollectionConstant(Constant):
     pass
-   
+
 class Query(Expression):
     collection_type = None
     terms = None
     target = None
-        
+
     def __init__(self, metadata, collection_type, terms, target):
         self.metadata = metadata
         self.collection_type = collection_type
         self.terms = terms
         self.target = target
-    
+
     def get_collection_type(self, klass=None):
         return self.collection_type
-    
+
     def rewrite(self, algebra):
         self.metadata.symbols.addlevel()
         rv=None
-        
+
         if len(self.terms):
             for t in self.terms:
                 t.addSymbol()
-            
+
             firstTerm = self.terms[0]
             if isinstance(firstTerm, In):
-                
+
                 ctype = firstTerm.get_collection_type()
-                
+
                 rv = algebra.Iter(
                     self.collection_type,
                     algebra.Lambda(
@@ -161,25 +161,25 @@
             rv = algebra.Single(
                 self.collection_type,
                 self.target.rewrite(algebra))
-        
+
         self.metadata.symbols.dellevel()
         return rv
 
 class In(Term):
     identifier = None
     expression = None
-        
+
     def __init__(self, metadata, identifier, expression):
         self.metadata = metadata
         self.identifier = identifier
         self.expression = expression
-    
+
     def addSymbol(self):
         s = self.metadata.symbols.current()
         #s[self.identifier.name] = self.metadata.get_class(
         #    self.expression.name)
         s[self.identifier.name] = self.expression.get_class()
-    
+
     def get_collection_type(self):
         rv = self.expression.get_collection_type()
         return rv
@@ -187,19 +187,19 @@
 class Alias(Term):
     identifier = None
     expression = None
-    
+
     def __init__(self, metadata, identifier, expression):
         self.metadata = metadata
         self.identifier = identifier
         self.expression = expression
-    
+
     def addSymbol(self):
         s = self.metadata.symbols.current()
         #TODO: that's not really good
         r = self.expression.get_collection_type()
-        
+
         s[self.identifier.name] = r
-    
+
     def get_collection_type(self):
         rv = self.expression.get_collection_type()
         #print self.expression.name,rv
@@ -211,7 +211,7 @@
 class Binary(Expression):
     left = None
     right = None
-        
+
     def __init__(self, metadata, left, right):
         self.metadata = metadata
         self.left = left
@@ -250,12 +250,12 @@
     def rewrite(self, algebra): # FIXME: Ezt gondold at...
         return algebra.Identifier(
             '.'.join([self.left.name, self.right.name]))
-    
+
     def get_class(self):
         t = self.left.get_class()
-        
+
         return t
-    
+
     def get_collection_type(self):
         t = self.left.get_class()
         try:
@@ -264,7 +264,7 @@
             from pub.dbgpclient import brk; brk()
 
         #print self.left.name+'.'+self.right.name,r
-        
+
         return r
 
 class Index(Binary):
@@ -297,7 +297,7 @@
 #
 class Unary(Expression):
     expression = None
-    
+
     def __init__(self, metadata, expression):
         self.metadata = metadata
         self.expression = expression
@@ -334,12 +334,12 @@
 class Quanted:
     quantor = None
     expression = None
-    
+
     def __init__(self, metadata, quantor, expression):
         self.metadata = metadata
         self.quantor = quantor
         self.expression = expression
-    
+
     def rewrite(self, algebra, expression, operator):
         return self.quantor.rewrite(algebra, expression, self.expression, operator)
 
@@ -347,7 +347,7 @@
 class Every(Quantor):
     def rewrite(self, algebra, expression, quanted, operator):
         ctype = quanted.get_collection_type()
-        
+
         return algebra.Reduce(
             ctype, # FIXME ?set? but which type() to take? quanted.expression?
             algebra.Identifier('True'),
@@ -383,7 +383,7 @@
 
 class Atmost(Quantor):
     expr = None
-    
+
     def __init__(self, metadata, expr):
         raise NotImplemented(self)
         self.metadata = metadata
@@ -391,7 +391,7 @@
 
 class Atleast(Quantor):
     expr = None
-    
+
     def __init__(self, metadata, expr):
         raise NotImplemented(self)
         self.metadata = metadata
@@ -399,7 +399,7 @@
 
 class Just(Quantor):
     expr = None
-    
+
     def __init__(self, metadata, expr):
         raise NotImplemented(self)
         self.metadata = metadata
@@ -409,7 +409,7 @@
 class Condition(Expression):
     left = None
     right = None
-        
+
     def __init__(self, metadata, left, right):
         self.metadata = metadata
         self.left = left

Modified: Sandbox/ocql-foliage/trunk/src/ocql/ocqlengine.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/ocql/ocqlengine.py	2008-05-27 14:39:09 UTC (rev 86983)
+++ Sandbox/ocql-foliage/trunk/src/ocql/ocqlengine.py	2008-05-27 14:46:16 UTC (rev 86984)
@@ -1,50 +1,51 @@
 from ocql.engine.runnablequery import RunnableQuery
+from ocql.engine.queryoptimizer import QueryOptimizer
+from ocql.engine.rewriter import Rewriter
+from ocql.engine.queryparser import QueryParser
+from ocql.engine.algebraoptimizer import AlgebraOptimizer
+from ocql.engine.algebracompiler import AlgebraCompiler
+from ocql.tests.database import TestMetadata
+from ocql.tests import algebra
 
+
 class EngineFactory:
     def __init__(self, engine):
         self.engine = engine
-        
+
     def get_query_optimizer(self):
-        from ocql.engine.queryoptimizer import QueryOptimizer
         return QueryOptimizer(self.engine)
-    
+
     def get_rewriter(self):
-        from ocql.engine.rewriter import Rewriter
         return Rewriter(self.engine)
-    
+
     def get_query_parser(self):
-        from ocql.engine.queryparser import QueryParser
         return QueryParser(self.engine)
 
     def get_algebra_optimizer(self):
-        from ocql.engine.algebraoptimizer import AlgebraOptimizer
         return AlgebraOptimizer(self.engine)
-    
+
     def get_metadata(self):
-        from testdb import TestMetadata
         return TestMetadata(self.engine)
-        
+
     def get_algebra_compiler(self):
-        from ocql.engine.algebracompiler import AlgebraCompiler
         return AlgebraCompiler(self.engine)
-    
+
     def get_algebra(self):
-        import testalgebra
-        return testalgebra
-    
+        return algebra
+
 class OCQLEngine:
     def __init__(self):
         factory = EngineFactory(self)
-        
+
         self.metadata = factory.get_metadata()
-        self.algebra_compiler = factory.get_algebra_compiler() 
+        self.algebra_compiler = factory.get_algebra_compiler()
         self.algebra_optimizer = factory.get_algebra_optimizer()
-        self.query_parser = factory.get_query_parser() 
+        self.query_parser = factory.get_query_parser()
         self.query_optimizer = factory.get_query_optimizer()
         self.rewriter = factory.get_rewriter()
-        
+
         self.algebra = factory.get_algebra()
-    
+
     def compile(self, query):
         algebra = self._compile_query(query)
         code = self._compile_algebra(algebra)

Added: Sandbox/ocql-foliage/trunk/src/ocql/tests/__init__.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/ocql/tests/__init__.py	                        (rev 0)
+++ Sandbox/ocql-foliage/trunk/src/ocql/tests/__init__.py	2008-05-27 14:46:16 UTC (rev 86984)
@@ -0,0 +1 @@
+#
\ No newline at end of file


Property changes on: Sandbox/ocql-foliage/trunk/src/ocql/tests/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Date Author Id Revision
Name: svn:eol-style
   + native

Added: Sandbox/ocql-foliage/trunk/src/ocql/tests/algebra.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/ocql/tests/algebra.py	                        (rev 0)
+++ Sandbox/ocql-foliage/trunk/src/ocql/tests/algebra.py	2008-05-27 14:46:16 UTC (rev 86984)
@@ -0,0 +1,396 @@
+#
+# Algebra operators
+#
+# decided to let these depend on the database
+# so this is the implementation
+# interface goes to ocql/engine/algebra.py
+#
+from ocql.engine.algebra import Algebra
+
+class BaseAlgebra(Algebra):
+    pass
+
+class Empty(BaseAlgebra):
+    """
+    >>> Empty(set,None).compile()
+    'set()'
+    >>> Empty(list,None).compile()
+    '[]'
+    """
+    def __init__(self, klass, expr):
+        self.klass = klass
+
+    def compile(self):
+        if self.klass==set:
+            return 'set()'
+        elif self.klass==list:
+            return '[]'
+
+    def __repr__(self):
+        return 'Empty(%s)'%(self.klass)
+
+    def walk(self):
+        yield self
+
+class Single(BaseAlgebra):
+    """
+    >>> Single(set,Constant('c')).compile()
+    'set(c)'
+    >>> Single(list,Constant('c')).compile()
+    '[c]'
+    """
+
+    def __init__(self, klass, expr):
+        self.klass = klass
+        self.expr = expr
+
+    def compile(self):
+        if self.klass==set:
+            return 'set(['+self.expr.compile()+'])'
+        elif self.klass==list:
+            return '['+self.expr.compile()+']'
+
+    def __repr__(self):
+        return 'Single(%s,%s)'%(self.klass, self.expr)
+
+    def walk(self):
+        yield self
+        for t in self.expr.walk():
+            yield t
+
+class Union(BaseAlgebra):
+    """
+    >>> Union(set,Empty(set,None),Single(set,Identifier('c'))).compile()
+    'set.union(set(),set(c))'
+    >>> Union(list,Empty(list,None),Single(list,Identifier('c'))).compile()
+    '([])+([c])'
+    """
+    def __init__(self, klass, coll1, coll2):
+        self.klass=klass
+        self.coll1=coll1
+        self.coll2=coll2
+
+    def compile(self):
+        if self.klass==set:
+            return 'set.union(%s,%s)' % (
+                self.coll1.compile(),
+                self.coll2.compile())
+        elif self.klass==list:
+            return '(%s)+(%s)'%(
+                self.coll1.compile(),
+                self.coll2.compile())
+
+    def __repr__(self):
+        return 'Union(%s,%s,%s)'%(self.klass, self.coll1, self.coll2)
+
+    def walk(self):
+        yield self
+        for t in self.coll1.walk():
+            yield t
+        for t in self.coll2.walk():
+            yield t
+
+#class Differ:
+#    def __init__(self, klass, start, end):
+#        self.klass = klass
+#        self.start = start
+#        self.end = end
+#
+#    def compile(self):
+#        if self.klass == set:
+#            return 'set(range(%s,%s))' % (self.start.compile(),self.end.compile())
+#        if self.klass == list:
+#            return 'range(%s,%s)' % (self.start.compile(),self.end.compile())
+
+
+class Iter(BaseAlgebra):
+    def __init__(self, klass, func, coll):
+        self.klass = klass
+        self.func = func
+        self.coll = coll
+
+    def compile(self):
+        if self.func is Lambda and \
+            self.coll is Collection and \
+            self.func.expr is If:
+
+            # You can place here some specialized code...
+            if self.klass == set:
+                return 'reduce(set.union, map(%s,%s) , set())' % \
+                    (self.func.compile(), self.coll.compile())
+            if self.klass == list:
+                return 'reduce(operator.add, map(%s,%s) , [])' % \
+                    (self.func.compile(), self.coll.compile())
+        else:
+            if self.klass == set:
+                return 'reduce(set.union, map(%s,%s) , set())' % \
+                    (self.func.compile(), self.coll.compile())
+            if self.klass == list:
+                return 'reduce(operator.add, map(%s,%s) , [])' % \
+                    (self.func.compile(), self.coll.compile())
+
+    def __repr__(self):
+        return "Iter(%s,%s,%s)"%(self.klass, self.func, self.coll)
+
+    def walk(self):
+        yield self
+        for t in self.func.walk():
+            yield t
+        for t in self.coll.walk():
+            yield t
+
+class Select(BaseAlgebra):
+    def __init__(self, klass, func, coll):
+        self.klass = klass
+        self.func = func
+        self.coll = coll
+
+    def compile(self):
+        if self.klass == set:
+            return 'set(filter(%s,%s))' % (
+                self.func.compile(),
+                self.coll.compile())
+        if self.klass == list:
+            return 'filter(%s,%s)' % (
+                self.func.compile(),
+                self.coll.compile())
+
+    def __repr__(self):
+        return "Select(%s,%s,%s)"%(self.klass, self.func, self.coll)
+
+    def walk(self):
+        yield self
+        for t in self.func.walk():
+            yield t
+        for t in self.coll.walk():
+            yield t
+
+class Reduce(BaseAlgebra):
+    def __init__(self, klass, expr, func, aggreg, coll):
+        self.klass = klass
+        self.expr = expr
+        self.func = func
+        self.aggreg = aggreg
+        self.coll = coll
+
+    def compile(self):
+        if self.klass == set:
+            return 'reduce(%s,map(%s,%s),%s)' % (
+                self.aggreg.compile(),
+                self.func.compile(),
+                self.coll.compile(),
+                self.expr.compile())
+        if self.klass == list:
+            return 'reduce(%s,map(%s,%s),%s)' % (
+                self.aggreg.compile(),
+                self.func.compile(),
+                self.coll.compile(),
+                self.expr.compile())
+
+    def __repr__(self):
+        return "Reduce(%s,%s,%s,%s,%s)"%(self.klass, self.expr, self.func, self.aggreg, self.coll)
+
+    def walk(self):
+        yield self
+        for t in self.expr.walk():
+            yield t
+        for t in self.func.walk():
+            yield t
+        for t in self.aggreg.walk():
+            yield t
+        for t in self.coll.walk():
+            yield t
+
+#class Equal:
+#    def __init__(self, klass, coll1, coll2):
+#        self.klass = klass
+#        self.coll1 = coll1
+#        self.coll2 = coll2
+#
+#    def compile(self):
+#        if self.klass == set:
+#            return 'set(filter(%s,%s))' % (self.coll1.compile(),self.coll1.compile())
+#        if self.klass == list:
+#            return 'filter(%s,%s)' % (self.coll1.compile(),self.coll2.compile())
+#
+class Range(BaseAlgebra):
+    def __init__(self, klass, start, enf):
+        self.klass = klass
+        self.start = start
+        self.end = end
+
+    def compile(self):
+        if self.klass == set:
+            return 'set(range(%s,%s))' % (
+                self.start.compile(),
+                self.end.compile())
+        if self.klass == list:
+            return 'range(%s,%s)' % (
+                self.start.compile(),
+                self.end.compile())
+
+    def walk(self):
+        yield self
+        for t in self.start.walk():
+            yield t
+        for t in self.end.walk():
+            yield t
+
+
+#class Index
+
+class Make(BaseAlgebra):
+    def __init__(self, coll1, coll2, expr):
+        self.expr = expr
+        self.coll1 = coll1
+        self.coll2 = coll2
+
+    def compile(self):
+        #TODO: no conversion??? or you just didn't know the from-to?
+        return '%s(metadata.getAll("%s"))' % (
+            self.coll1.__name__,
+            self.expr.compile())
+
+    def __repr__(self):
+        return "Make(%s,%s,%s)" %(self.coll1, self.coll2, self.expr)
+
+    def walk(self):
+        yield self
+        for t in self.expr.walk():
+            yield t
+
+#class And:
+#class Being:
+
+class If(BaseAlgebra):
+    def __init__(self, cond, expr1, expr2):
+        self.cond = cond
+        self.expr1 = expr1
+        self.expr2 = expr2
+
+    def compile(self):
+        #TODO: is this 100%?
+        return '((%s) and (%s) or (%s))' % (
+            self.cond.compile(),
+            self.expr1.compile(),
+            self.expr2.compile())
+
+    def __repr__(self):
+        return "If(%s,%s,%s)" % (self.cond, self.expr1, self.expr2)
+
+    def walk(self):
+        yield self
+        for t in self.cond.walk():
+            yield t
+        for t in self.expr1.walk():
+            yield t
+        for t in self.expr2.walk():
+            yield t
+
+#
+#
+#
+class Lambda(BaseAlgebra):
+    def __init__(self, var, expr):
+        self.var = var
+        self.expr = expr
+
+    def compile(self):
+        return 'lambda %s: %s'%(
+            self.var,
+            self.expr.compile())
+
+    def __repr__(self):
+        return "Lambda %s: %s" %(self.var, self.expr)
+
+    def walk(self):
+        yield self
+        for t in self.expr.walk():
+            yield t
+
+class Constant(BaseAlgebra):
+    def __init__(self, value):
+        self.value = value
+
+    def compile(self):
+        return '%s'%(self.value)
+
+    def __repr__(self):
+        return "`%s`" %(self.value)
+
+    def walk(self):
+        yield self
+
+class Identifier(BaseAlgebra):
+    def __init__(self, name):
+        self.name=name
+
+    def compile(self):
+        return self.name
+
+    def __repr__(self):
+        return "%s" % self.name
+
+    def walk(self):
+        yield self
+
+class Binary(BaseAlgebra):
+    def __init__(self, left, op, right):
+        self.left = left
+        self.op = op
+        self.right = right
+
+    def compile(self):
+        return '%s%s%s' % (self.left.compile(),
+                           self.op.op,
+                           self.right.compile())
+
+    def __repr__(self):
+        return "%s%s%s" % (self.left, self.op.op, self.right)
+
+    def walk(self):
+        yield self
+        for t in self.left.walk():
+            yield t
+        for t in self.right.walk():
+            yield t
+
+class Operator(BaseAlgebra):
+    ops = {
+            'or': 'operator.or_',
+            'and': 'operator.and_',
+            'not': 'operator.not_',
+            '+': 'operator.add', '-': 'operator.sub',
+            '*': 'operator.mul', '/': 'operator.div',
+            '<': 'operator.lt', '>': 'operator.gt',
+            '<=': 'operator.le', '>=': 'operator.ge',
+            '==': 'operator.eq', '~=': 'operator.ne',
+            }
+    def __init__(self, op):
+        self.op = op
+
+    def compile(self):
+        return self.ops[self.op]
+
+    def __repr__(self):
+        return self.op
+
+    def walk(self):
+        yield self
+#class Property:
+#   def __init__(self, left, right):
+#        self.left = left
+#        self.right = right
+#
+#    def compile(self):
+#        return '%s.%s' (self.left.compile(),self.right.compile())
+#
+#    def __repr__(self):
+#        return '%s.%s' (self.left,self.right)
+
+def _test():
+    import doctest
+    doctest.testmod()
+
+if __name__ == "__main__":
+    _test()


Property changes on: Sandbox/ocql-foliage/trunk/src/ocql/tests/algebra.py
___________________________________________________________________
Name: svn:keywords
   + Date Author Id Revision
Name: svn:eol-style
   + native

Added: Sandbox/ocql-foliage/trunk/src/ocql/tests/database.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/ocql/tests/database.py	                        (rev 0)
+++ Sandbox/ocql-foliage/trunk/src/ocql/tests/database.py	2008-05-27 14:46:16 UTC (rev 86984)
@@ -0,0 +1,112 @@
+from zope.interface import Interface, implements
+from zope.schema import TextLine, Set, Choice, Int, List
+from ocql.engine import metadata
+
+# schema
+class ICurses(Interface):
+    code = TextLine(
+        title=u"Course code",
+        required=True
+        )
+    runBy = List(
+        title=u"Run by",
+        value_type = Choice(
+            title=u"Department",
+            vocabulary="vocab_of_IDepartment",
+            )
+        )
+    credits = Int(
+        title=u"Credits",
+        )
+
+class IDepartments(Interface):
+    name = TextLine(
+        title=u"name",
+        required=True
+        )
+    address = Choice(
+        title=u"Street address",
+        vocabulary="vocab_of_IAddress",
+        required=True
+        )
+
+class MClass(metadata.MetaType):
+    #interface suspect thing
+    def __init__(self, klass):
+        self.klass = klass
+
+    def is_collection(self):
+        return True
+
+    def get_collection_type(self):
+        return set
+    
+    def get_contained(self):
+        return self.klass
+    
+    def __getitem__(self, name):
+        x = self.klass[name]._type
+        try:
+            return x[-1]
+        except TypeError:
+            return x
+    
+class MType(metadata.MetaType):
+    def __init__(self, klass, collection_type=None):
+        self.klass = klass
+        self.collection_type = collection_type
+
+    def is_collection(self):
+        return (self.collection_type is not None)
+
+    def get_collection_type(self):
+        return self.collection_type
+    
+    def get_contained(self):
+        return self.klass
+
+class Department(object):
+    implements(IDepartments)
+    
+    def __init__(self, name):
+        self.name = name
+
+class Curses(object):
+    implements(ICurses)
+    
+    def __init__(self, code, runBy, credits):
+        self.code = code
+        self.runBy = runBy
+        self.credits = credits
+
+D1 = Department("Computing Science")
+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, C3]
+        }
+    classes = {
+            'IDepartments': MClass(IDepartments),
+            'ICurses': MClass(ICurses),
+            }
+    
+    def getAll(self, klass):
+        x=self.db[klass]
+        return x
+    
+    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


Property changes on: Sandbox/ocql-foliage/trunk/src/ocql/tests/database.py
___________________________________________________________________
Name: svn:keywords
   + Date Author Id Revision
Name: svn:eol-style
   + native

Added: Sandbox/ocql-foliage/trunk/src/ocql/tests/manualtest.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/ocql/tests/manualtest.py	                        (rev 0)
+++ Sandbox/ocql-foliage/trunk/src/ocql/tests/manualtest.py	2008-05-27 14:46:16 UTC (rev 86984)
@@ -0,0 +1,30 @@
+from ocql import OCQLEngine
+engine = OCQLEngine()
+
+query = engine.compile("""set [ c in ICurses; d in IDepartments; d.name="Computing Science"; d = some c.runBy; 1<=c.credits; c.credits <= 3 | c ]""") 
+res = query.execute()
+
+for i in res:
+    print i.code
+
+#q=Iter(set, Lambda('d', 
+#        If(Eq(Identifier('d.name'),Identifier('"Computing Science"')),
+#            Single(set,Identifier('x')),
+#            Empty(set,None)
+#        )
+#    ), Collection('IDepartments'))
+#
+#q=Iter(set,
+#    If('d.name="Computing Science"',
+#        Select(set, Lambda('c',
+#            And(Reduce(set, 'False', Lambda('d','d=i'), Or, 'c.runBy'),
+#                '1<=c.credits',
+#                'c.credits<=3')),
+#            ICurses),
+#        Empty(set,None)), 
+#    Collection('IDepartments'))
+#
+#m = q.compile()
+#print m
+#c = compile(m,'','eval')
+#print eval(c)


Property changes on: Sandbox/ocql-foliage/trunk/src/ocql/tests/manualtest.py
___________________________________________________________________
Name: svn:keywords
   + Date Author Id Revision
Name: svn:eol-style
   + native

Added: Sandbox/ocql-foliage/trunk/src/ocql/tests/manualtest2.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/ocql/tests/manualtest2.py	                        (rev 0)
+++ Sandbox/ocql-foliage/trunk/src/ocql/tests/manualtest2.py	2008-05-27 14:46:16 UTC (rev 86984)
@@ -0,0 +1,455 @@
+import testdb
+from ocql.engine.queryobject import *
+from ocql.engine.queryparser import SymbolContainer
+import operator
+import testalgebra
+from ocql.ocqlengine import OCQLEngine
+from ocql.engine.runnablequery import RunnableQuery
+
+engine = OCQLEngine()
+
+def doone(query, qo, expected):
+    print "==============="
+    print "query:",query
+    
+    algebra=qo.rewrite(testalgebra)
+    
+    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 test2():
+    metadata = engine.metadata
+    metadata.symbols = SymbolContainer()
+    
+    #
+    # Simple empty query
+    #
+    # set [ ]
+    #
+    query = "set [ ]"
+    qo=Query(metadata,
+             set,
+             [] ,
+             Identifier(metadata,
+                        '') )
+    
+    doone(query, qo, set([]))
+        
+    
+    metadata.symbols = SymbolContainer()
+    #
+    # Simple SELECT ALL
+    #
+    # set [ c in ICurses | c ]
+    #
+    query = "[ c in ICurses | c ]"
+    qo=Query(
+        metadata,
+        set,
+        [
+            In(
+                metadata,
+                Identifier(metadata,'c'),
+                Identifier(metadata,'ICurses')),
+        ] ,Identifier(metadata,'c') )
+    
+    doone(query, qo, set([ "C1" , "C2", "C3" ]))
+    
+    
+    metadata.symbols = SymbolContainer()
+    #
+    # Selecting a property
+    #
+    # set [ c in ICurses | c.code ]
+    #
+    query = "[ c in ICurses | c.code ]"
+    qo=Query(
+        metadata,
+        set,
+        [
+            In(
+                metadata,
+                Identifier(metadata,'c'),
+                Identifier(metadata,'ICurses')),
+        ] ,Identifier(metadata,'c.code') )
+    
+    doone(query, qo, set([ "C1" , "C2", "C3"  ]))
+    
+    
+    metadata.symbols = SymbolContainer()
+    #
+    # Filtering -- empty result
+    #
+    # set [ c in ICurses , c.credits>3 | c.code ]
+    #
+    query = "[ c in ICurses, c.credits>3 | c.code ]"
+    qo=Query(
+        metadata,
+        set,
+        [
+            In(
+                metadata,
+                Identifier(metadata,'c'),
+                Identifier(metadata,'ICurses')),
+            Gt(
+                metadata,
+                Identifier(metadata,'c.credits'),
+                Constant(metadata,'3')),
+        ] ,Identifier(metadata, 'c.code') )
+    
+    doone(query, qo, set([]))
+    
+    
+    metadata.symbols = SymbolContainer()
+    #
+    # Filtering -- full result
+    #
+    # set [ c in ICurses , c.credits<=3 | c.code ]
+    #
+    query = "[ c in ICurses, c.credits<=3 | c.code ]"
+    qo=Query(
+        metadata,
+        set, [
+            In(
+                metadata,
+                Identifier(metadata,'c'),
+                Identifier(metadata,'ICurses')),
+            Le(metadata,
+                Identifier(metadata,'c.credits'),
+                Constant(metadata,'3')),
+        ] ,Identifier(metadata,'c.code'))
+    
+    doone(query, qo, set([ "C1" , "C2", "C3" ]))
+    
+    
+    metadata.symbols = SymbolContainer()
+    #
+    # Filtering -- one result
+    #
+    # set [ c in ICurses , c.credits=3 | c.code ]
+    #
+    query = "[ c in ICurses, c.credits=3 | c.code ]"
+    qo=Query(
+        metadata,
+        set,
+        [
+            In(
+                metadata,
+                Identifier(metadata,'c'),
+                Identifier(metadata,'ICurses')),
+            Eq(
+                metadata,
+                Identifier(metadata,'c.credits'),
+                Constant(metadata,'3')),
+        ] ,Identifier(metadata,'c.code'))
+    
+    doone(query, qo, set([ "C2", "C3" ]))
+    
+    
+    metadata.symbols = SymbolContainer()
+    #
+    # Two filters -- full results
+    #
+    # set [ c in ICurses , c.credits<5, c.credits >=1  | c.code ]
+    #
+    query = "[ c in ICurses, c.credits<3, c.credits>=1 | c.code ]"
+    qo=Query(
+        metadata,
+        set,
+        [
+            In(
+                metadata,
+                Identifier(metadata,'c'),
+                Identifier(metadata,'ICurses')),
+            Lt(
+                metadata,
+                Identifier(metadata,'c.credits'),
+                Constant(metadata,'5')),
+            Ge(
+                metadata,
+                Identifier(metadata,'c.credits'),
+                Constant(metadata,'1')),
+        ] ,Identifier(metadata, 'c.code'))
+    
+    doone(query, qo, set([ "C1", "C2", "C3" ]))
+    
+    
+    metadata.symbols = SymbolContainer()
+    #
+    # Two filters -- one result
+    #
+    # set [ c in ICurses , c.credits<=2, 2<=c.credits  | c.code ]
+    #
+    query = "[ c in ICurses, c.credits<=2, 2<=c.credits | c.code ]"
+    qo=Query(
+        metadata,
+        set, [
+            In(
+                metadata,
+                Identifier(metadata,'c'),
+                Identifier(metadata,'ICurses')),
+            Le(
+                metadata,
+                Identifier(metadata,'c.credits'),
+                Constant(metadata,'2')),
+            Le(
+                metadata,
+                Constant(metadata,'2'),
+                Identifier(metadata,'c.credits')),
+        ] ,Identifier(metadata,'c.code'))
+    
+    doone(query, qo, set([ "C1" ]))
+    
+    
+    metadata.symbols = SymbolContainer()
+    #
+    # Two filters -- one result
+    #
+    # set [ c in ICurses , c.credits>=2, 2>=c.credits  | c.code ]
+    #
+    query = "[ c in ICurses, c.credits>=2, 2>=c.credits | c.code ]"
+    qo=Query(
+        metadata,
+        set, [
+            In(
+                metadata,
+                Identifier(metadata,'c'),
+                Identifier(metadata,'ICurses')),
+            Ge(
+                metadata,
+                Identifier(metadata,'c.credits'),
+                Constant(metadata,'2')),
+            Ge(
+                metadata,
+                Constant(metadata,'2'),
+                Identifier(metadata,'c.credits')),
+        ] ,Identifier(metadata,'c.code'))
+    
+    doone(query, qo, set([ "C1" ]))
+    
+    
+    metadata.symbols = SymbolContainer()
+    #
+    # Two filters -- no result
+    #
+    # set [ c in ICurses , c.credits=3, c.credits!=3  | c.code ]
+    #
+    query = "[ c in ICurses, c.credits=3, c.credits!=3 | c.code ]"
+    qo=Query(
+        metadata,
+        set, [
+            In(
+                metadata,
+                Identifier(metadata,'c'),
+                Identifier(metadata,'ICurses')),
+            Eq(
+                metadata,
+                Identifier(metadata,'c.credits'),
+                Constant(metadata,'3')),
+            Ne(
+                metadata,
+                Identifier(metadata,'c.credits'),
+                Constant(metadata,'3')),
+        ] ,Identifier(metadata,'c.code'))
+    
+    doone(query, qo, set([]))
+    
+    
+    metadata.symbols = SymbolContainer()
+    #
+    # 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(
+        metadata,
+        set, [
+            In(
+                metadata,
+                Identifier(metadata,'c'),
+                Identifier(metadata,'ICurses')),
+            In(
+                metadata,
+                Identifier(metadata,'d'),
+                Identifier(metadata,'IDepartments')),
+            Eq(
+                metadata,
+                Identifier(metadata,'d'),
+                Quanted(metadata,
+                        Some(metadata),
+                        Property(metadata, 
+                                Identifier(metadata, 'c'),
+                                Identifier(metadata, 'runBy'))
+                            )),
+        ] ,Identifier(metadata,'d.name'))
+    
+    doone(query, qo, set(['Computing Science', 'Other Department']))
+    
+    
+    metadata.symbols = SymbolContainer()
+    #
+    # 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(
+        metadata,
+        set,
+        [
+            In(
+                metadata,
+                Identifier(metadata,'c'),
+                Identifier(metadata,'ICurses')),
+            In(
+                metadata,
+                Identifier(metadata,'d'),
+                Identifier(metadata,'IDepartments')),
+            Eq(
+                metadata,
+                Identifier(metadata,'c.credits'),
+                Constant(metadata,'3')),
+            Eq(
+                metadata,
+                Identifier(metadata,'d'),
+                Quanted(
+                    metadata,
+                    Some(metadata),
+                    Property(metadata, 
+                                Identifier(metadata, 'c'),
+                                Identifier(metadata, 'runBy'))
+                            )),
+        ] ,Identifier(metadata, 'd.name'))
+    
+    doone(query, qo, set(['Computing Science']))
+    
+    
+    metadata.symbols = SymbolContainer()
+    # join -- Departments running some not 3 credits curses
+    #
+    # [ d in IDepartments, c in ICurses, some c.runBy = d, some c.credits != 3| d.name ]
+    #
+    query = """[ d in IDepartments,
+    c in ICurses,
+    some c.runBy = d, c.credits != 3| d.name ]"""
+    qo=Query(
+        metadata,
+        set,
+        [
+            In(
+                metadata,
+                Identifier(metadata,'d'),
+                Identifier(metadata,'IDepartments')),
+            In(
+                metadata,
+                Identifier(metadata,'c'),
+                Identifier(metadata,'ICurses')),
+            Eq(
+                metadata,
+                Identifier(metadata,'d'),
+                Quanted(
+                    metadata,
+                    Some(metadata),
+                    Property(metadata, 
+                                Identifier(metadata, 'c'),
+                                Identifier(metadata, 'runBy'))
+                            )),
+            Ne(
+                metadata,
+                Constant(metadata,'3'),
+                Identifier(metadata,'c.credits')),
+        ] ,Identifier(metadata,'d.name'))
+    
+    doone(query, qo, set(['Other department','Computing Science']))
+    
+    
+    metadata.symbols = SymbolContainer()
+    #
+    #
+    # join -- Departments running just 2 credits curses
+    #
+    # set [ d in IDepartments, every 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(
+        metadata,
+        set, 
+        [
+            In(
+                metadata,
+                Identifier(metadata,'d'),
+                Identifier(metadata,'IDepartments')),
+            Eq(
+                metadata,
+                Quanted(
+                    metadata,
+                    Every(metadata),
+                    Query(
+                        metadata,
+                        set,
+                        [
+                            In(
+                                metadata,
+                                Identifier(metadata,'c'),
+                                Identifier(metadata,'ICurses')),
+                            Eq(
+                                metadata,
+                                Identifier(metadata,'d'),
+                                Quanted(
+                                    metadata,
+                                    Some(metadata),
+                                    Property(metadata, 
+                                        Identifier(metadata, 'c'),
+                                        Identifier(metadata, 'runBy'))
+                                    )),
+                        ], Identifier(metadata, 'c.credits')
+                        )
+                ),Constant(metadata,'2')),
+        ] ,Identifier(metadata,'d.name'))
+    
+    doone(query, qo, set(['Other department']))
+    
+    
+    #metadata.symbols = SymbolContainer()
+    ##
+    ##
+    ## alias
+    ##
+    ## set [ c in ICurses, a as c.code  | a ]
+    ##
+    #query = """set [ c in ICurses, a as c.code  | a ]"""
+    #
+    #qo=Query(
+    #    metadata,
+    #    set,
+    #    [
+    #        In(
+    #            metadata,
+    #            Identifier(metadata,'c'),
+    #            Identifier(metadata,'ICurses')),
+    #        Alias(
+    #            metadata,
+    #            Identifier(metadata,'a'),
+    #            Property(metadata, 
+    #                 Identifier(metadata, 'c'),
+    #                 Identifier(metadata, 'code')))
+    #    ] ,Identifier(metadata,'c') )
+    #
+    #doone(qo, set(['C1','C2','C3']))
+
+if __name__ == "__main__":
+    test2()


Property changes on: Sandbox/ocql-foliage/trunk/src/ocql/tests/manualtest2.py
___________________________________________________________________
Name: svn:keywords
   + Date Author Id Revision
Name: svn:eol-style
   + native

Added: Sandbox/ocql-foliage/trunk/src/ocql/tests/temp.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/ocql/tests/temp.py	                        (rev 0)
+++ Sandbox/ocql-foliage/trunk/src/ocql/tests/temp.py	2008-05-27 14:46:16 UTC (rev 86984)
@@ -0,0 +1,90 @@
+# -*- coding: UTF-8 -*-
+
+from testdb import TestMetadata
+import operator
+
+metadata = TestMetadata(None)
+
+#reduce(set.union,
+#    map(lambda c: reduce(set.union,
+#        map(lambda d: (
+#            (d.name=="Computing Science") and
+#            (((d==set(filter(lambda i: i.runBy,c))) and
+#                (((c.credits<=3) and (((1<=c.credits) and
+#                    (set([c])) or (set()))) or (set()))) or
+#                (set()))) or (set())),
+#            set(metadata.getAll("IDepartments"))) ,
+#        set()),set(metadata.getAll("ICurses"))) ,
+#    set())
+
+
+#map(lambda c: reduce(set.union,
+#    map(lambda d: ((d.name=="Computing Science")),
+#        set(metadata.getAll("IDepartments"))), set()),set(metadata.getAll("ICurses")))
+
+#x = reduce(set.union,
+#    map(lambda c: reduce(set.union,
+#        map(lambda d: (
+#            (d.name=="Computing Science")
+#            and (d==set(filter(lambda i: i.runBy,c)))
+#            and (set([c]))
+#            or (set())) ,
+#            set(metadata.getAll("IDepartments"))) ,
+#        set()),set(metadata.getAll("ICurses"))) ,
+#    set())
+
+#x = reduce(set.union,
+#    map(lambda c: reduce(set.union,
+#        map(lambda d: (
+#            (d.name=="Computing Science")
+#            and (set([c]))
+#            or (set())) ,
+#            set(metadata.getAll("IDepartments"))) ,
+#        set()),set(metadata.getAll("ICurses"))) ,
+#    set())
+
+#x=reduce(set.union,
+#    map(lambda c: reduce(set.union,
+#        map(lambda d: (
+#            (d.name=="Computing Science") and
+#            (((d==set(filter(lambda i: i.runBy,[c]))) and
+#                (
+#                    (
+#                        (c.credits<=3)
+#                        and (
+#                                (
+#                                    (1<=c.credits)
+#                                    and
+#                                    (set([c]))
+#                                    or (set())
+#                                )
+#                            ) or (set())
+#                    )
+#                ) or
+#                (set()))) or (set())),
+#            set(metadata.getAll("IDepartments"))) ,
+#        set()),set(metadata.getAll("ICurses"))) ,
+#    set())
+#
+#
+#x = reduce(set.union,
+#    map(lambda c: reduce(set.union,
+#        map(lambda d: (
+#            (d.name=="Computing Science") and
+#            ((((reduce(operator.or_, map(lambda i: i==d, c.runBy), False))) and
+#                ((((
+#                    (set([c])) or (set()))) or (set()))) or
+#                (set()))) or (set())),
+#            set(metadata.getAll("IDepartments"))) ,
+#        set()),set(metadata.getAll("ICurses"))) ,
+#    set())
+
+x = reduce(set.union, map(lambda c: reduce(set.union, map(lambda d:
+    ((d.name=="Computing Science") and (((reduce(operator.or_,map(lambda i:
+        i==d,c.runBy),False)) and (((c.credits<=3) and (((1<=c.credits) and
+            (set([c])) or (set()))) or (set()))) or (set()))) or
+        (set())),set(metadata.getAll("IDepartments"))) ,
+    set()),set(metadata.getAll("ICurses"))) , set())
+
+for i in x:
+    print i.name


Property changes on: Sandbox/ocql-foliage/trunk/src/ocql/tests/temp.py
___________________________________________________________________
Name: svn:keywords
   + Date Author Id Revision
Name: svn:eol-style
   + native

Added: Sandbox/ocql-foliage/trunk/src/ocql/tests/test_parser.py
===================================================================
--- Sandbox/ocql-foliage/trunk/src/ocql/tests/test_parser.py	                        (rev 0)
+++ Sandbox/ocql-foliage/trunk/src/ocql/tests/test_parser.py	2008-05-27 14:46:16 UTC (rev 86984)
@@ -0,0 +1,52 @@
+import unittest
+
+from ocql.ocqlengine import OCQLEngine
+
+class ElementTest(unittest.TestCase):
+    engine = OCQLEngine()
+
+    def generic_test(self, query, result):
+        print "Running query: `%s'"%query
+        q = self.engine.compile(query)
+        self.assertEqual(q.execute(), result)
+    
+    def generic_testl(self, query, result):
+        print "Running query: `%s'"%query
+        q = self.engine.compile(query)
+        self.assertEqual(len(q.execute()), result)
+
+    def test_set(self):
+        self.generic_test("set [ | 1 ]", set([1]))
+    
+#    def test_bag(self):
+#        self.generic_test("bag [ | 1 ]", bag([1]))
+
+#    def test_list(self):
+#        self.generic_test("list [ | 1 ]", [1])
+
+    def test_union(self):
+        self.generic_test("set [ | 1 ] union set [|2]", set([1, 2]))
+
+    def test_differ(self):
+        self.generic_test("set [ | 1 ] differ set [|2]", set([]))
+
+    def test_in(self):
+        self.generic_testl("set [ i in ICurses | i ]", 3)
+
+    def test_count(self):
+        self.generic_test("size set [ i in ICurses | i ]", 3)
+
+def test_suite():
+    tests=[]
+
+    tests.append(unittest.makeSuite(ElementTest))
+
+    return unittest.TestSuite(tests)
+
+if __name__=='__main__':
+    unittest.main(defaultTest='test_suite')
+    #engine = OCQLEngine()
+    #query="set [|1]"
+    #q = engine.compile(query)
+    #print q.execute()
+


Property changes on: Sandbox/ocql-foliage/trunk/src/ocql/tests/test_parser.py
___________________________________________________________________
Name: svn:keywords
   + Date Author Id Revision
Name: svn:eol-style
   + native



More information about the Checkins mailing list