[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