[Checkins] SVN: Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/
half way through the rewriter adaptaion. Add head,
parent child relation to the query object tree and made adjustments
in adapters.
Charith Paranaliyanage
paranaliyanage at gmail.com
Tue Jul 22 15:02:19 EDT 2008
Log message for revision 88726:
half way through the rewriter adaptaion. Add head,parent child relation to the query object tree and made adjustments in adapters.
Changed:
U Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/parser/parser.txt
U Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/parser/queryparser.py
U Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/qoptimizer/qoptimizer.py
U Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/queryobject/queryobject.py
U Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/rewriter/rewriter.py
U Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/tests/test_old.py
U Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/tests/test_zope.py
-=-
Modified: Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/parser/parser.txt
===================================================================
--- Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/parser/parser.txt 2008-07-22 18:56:41 UTC (rev 88725)
+++ Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/parser/parser.txt 2008-07-22 19:02:19 UTC (rev 88726)
@@ -5,26 +5,26 @@
#FAILS, why?
- >>> QueryParser("set [ ]")(None)
+ >>> QueryParser("set [ ]")(None).tree
Query(<type 'set'>, , None)
- >>> QueryParser("set [ | 1 ]")(None)
+ >>> QueryParser("set [ | 1 ]")(None).tree
Query(<type 'set'>, , Constant(1))
#FAILS, why?
- >>> QueryParser("list [ | 1 ]")(None)
+ >>> QueryParser("list [ | 1 ]")(None).tree
Query(<type 'list'>, , Constant(1))
- >>> QueryParser("set [ | 1 ] union set [|2]")(None)
+ >>> QueryParser("set [ | 1 ] union set [|2]")(None).tree
Union(Query(<type 'set'>, , Constant(1)), Query(<type 'set'>, , Constant(2)))
- >>> QueryParser("set [ | 1 ] differ set [|2]")(None)
+ >>> QueryParser("set [ | 1 ] differ set [|2]")(None).tree
Differ(Query(<type 'set'>, , Constant(1)), Query(<type 'set'>, , Constant(2)))
- >>> QueryParser("set [ i in ICourse | i ]")(None)
+ >>> QueryParser("set [ i in ICourse | i ]")(None).tree
Query(<type 'set'>, In(Identifier(i), Identifier(ICourse)), Identifier(i))
- >>> QueryParser("size set [ i in ICourse | i ]")(None)
+ >>> QueryParser("size set [ i in ICourse | i ]")(None).tree
Count(Query(<type 'set'>, In(Identifier(i), Identifier(ICourse)), Identifier(i)))
#FAILS, see raise "Help"
Modified: Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/parser/queryparser.py
===================================================================
--- Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/parser/queryparser.py 2008-07-22 18:56:41 UTC (rev 88725)
+++ Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/parser/queryparser.py 2008-07-22 19:02:19 UTC (rev 88726)
@@ -551,5 +551,7 @@
def __call__(self, metadata):
strg = self.context
- return parse(strg, metadata)
+ tree = parse(strg, metadata)
+ head = Head(tree)
+ return head
#return parse(strg, None)
Modified: Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/qoptimizer/qoptimizer.py
===================================================================
--- Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/qoptimizer/qoptimizer.py 2008-07-22 18:56:41 UTC (rev 88725)
+++ Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/qoptimizer/qoptimizer.py 2008-07-22 19:02:19 UTC (rev 88726)
@@ -14,7 +14,7 @@
from ocql.interfaces import IQueryOptimizer
-from ocql.interfaces import IObjectQuery
+from ocql.interfaces import IObjectQueryHead
from ocql.interfaces import IOptimizedObjectQuery
def addMarkerIF(obj, marker):
@@ -24,7 +24,7 @@
class QueryOptimizer(object):
implements(IQueryOptimizer)
- adapts(IObjectQuery)
+ adapts(IObjectQueryHead)
def __init__(self, context):
self.context = context
Modified: Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/queryobject/queryobject.py
===================================================================
--- Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/queryobject/queryobject.py 2008-07-22 18:56:41 UTC (rev 88725)
+++ Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/queryobject/queryobject.py 2008-07-22 19:02:19 UTC (rev 88726)
@@ -14,6 +14,7 @@
from zope.interface import implements
from zope.location import locate, Location
+from zope.location.interfaces import ILocation
from ocql.interfaces import IObjectQuery
from ocql.interfaces import IObjectQueryHead
@@ -26,14 +27,33 @@
self.tree = tree
locate(tree, self, 'tree')
+ def __repr__(self):
+ return ('%s') % (self.tree)
- def rewrite(self):
+ def rewrite(self, algebra):
return self.tree
+
class Child(Location):
implements(IObjectQueryChild)
- children = []
+ def __init__(self):
+ self.children = []
+
+ def setProp(self, name, value):
+ setattr(self, name, value)
+ if ILocation.providedBy(value):
+ locate(value, self, name)
+ self.children.append(value)
+
+ def setProperties(self, name, value):
+ setattr(self, name, value)
+ for term in value:
+ if ILocation.providedBy(term):
+ locate(term, self, 'term')
+ self.children.extend(value)
+
+
class QueryObject(Child):
#TODO: this is dirty here, at the end we'll need to have a tree of
#QueryObject's whose topmost element will only get this IF
@@ -81,11 +101,9 @@
def __init__(self, metadata, symbols, identifier, expression):
self.metadata = metadata
self.symbols = symbols
- self.identifier = identifier
- self.expression = expression
- locate(identifier, self, 'identifier')
- locate(expression, self, 'expression')
- self.children.extend([identifier, expression])
+ Child.__init__(self)
+ self.setProp('identifier', identifier)
+ self.setProp('expression', expression)
class Expression(Term, QueryObject):
@@ -105,14 +123,12 @@
def __init__(self, metadata, symbols, expr, klass, conditional):
self.metadata = metadata
self.symbols = symbols
- self.expression = expr
- self.klass = klass
- self.conditional = conditional
- locate(expr, self, 'expr')
- locate(klass, self, 'klass')
- locate(conditional, self, 'conditional')
- self.children.extend([expr, klass, conditional])
+ Child.__init__(self)
+ self.setProp('expr', expr)
+ self.setProp('klass', klass)
+ self.setProp('conditional', conditional)
+
class Identifier(Expression):
implements(IIdentifier)
name = None
@@ -120,8 +136,8 @@
def __init__(self, metadata, symbols, name):
self.metadata = metadata
self.symbols = symbols
- self.name = name
- self.children.append(name)
+ Child.__init__(self)
+ self.setProp('name', name)
def __repr__(self):
return "%s(%s)" % (
@@ -129,8 +145,8 @@
str(self.name),
)
- def rewrite(self, algebra):
- return algebra.Identifier(self.name)
+# def rewrite(self, algebra):
+# return algebra.Identifier(self.name)
class Constant(Expression):
implements(IConstant)
@@ -140,15 +156,15 @@
def __init__(self, metadata, symbols, value):
self.metadata = metadata
self.symbols = symbols
- self.value=value
- self.children.append(value)
+ Child.__init__(self)
+ self.setProp('value', value)
def __repr__(self):
return "%s(%s)" % (
self.__class__.__name__, self.value)
- def rewrite(self, algebra):
- return algebra.Constant(self.value)
+# def rewrite(self, algebra):
+# return algebra.Constant(self.value)
class StringConstant(Constant):
pass
@@ -173,14 +189,10 @@
def __init__(self, metadata, symbols, collection_type, terms, target):
self.metadata = metadata
self.symbols = symbols
- self.collection_type = collection_type
- self.terms = terms
- self.target = target
- for term in terms:
- locate(term, self, 'term')
- if target is not None: locate(target, self, 'target')
- self.children.extend(terms)
- self.children.extend([collection_type,target])
+ Child.__init__(self)
+ self.setProp('collection_type', collection_type)
+ self.setProperties('terms', terms)
+ self.setProp('target', target)
def __repr__(self):
return "%s(%s, %s, %s)" % (
@@ -305,11 +317,9 @@
def __init__(self, metadata, symbols, left, right):
self.metadata = metadata
self.symbols = symbols
- self.left = left
- self.right = right
- locate(left, self, 'left')
- locate(right, self, 'right')
- self.children.extend([left, right])
+ Child.__init__(self)
+ self.setProp('left', left)
+ self.setProp('right', right)
def __repr__(self):
return "%s(%s, %s)" % (
@@ -411,9 +421,8 @@
def __init__(self, metadata, symbols, expression):
self.metadata = metadata
self.symbols = symbols
- self.expression = expression
- locate(expression, self, 'expression')
- self.children.append(expression)
+ Child.__init__(self)
+ self.setProp('expression', expression)
def __repr__(self):
return "%s(%s)" % (
@@ -454,8 +463,8 @@
def __init__(self, metadata, symbols, expr):
self.metadata = metadata
self.symbols = symbols
- self.expr = expr
- self.children.append(expr)
+ Child.__init__(self)
+ self.setProp('expr', expr)
def __repr__(self):
return "(%s)" % (
@@ -473,11 +482,9 @@
def __init__(self, metadata, symbols, quantor, expression):
self.metadata = metadata
self.symbols = symbols
- self.quantor = quantor
- self.expression = expression
- locate(quantor, self, 'quantor')
- locate(expression, self, 'expression')
- self.children.extend([quantor, expression])
+ Child.__init__(self)
+ self.setProp('quantor', quantor)
+ self.setProp('expression', expression)
def rewrite(self, algebra, expression, operator):
return self.quantor.rewrite(algebra, expression, self.expression, operator)
@@ -564,11 +571,9 @@
def __init__(self, metadata, symbols, left, right):
self.metadata = metadata
self.symbols = symbols
- self.left = left
- self.right = right
- locate(left, self, 'left')
- locate(right, self, 'right')
- self.children.extend([left, right])
+ Child.__init__(self)
+ self.setProp('left', left)
+ self.setProp('right', right)
def rewrite(self, algebra):
if isinstance(self.left, Quanted):
Modified: Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/rewriter/rewriter.py
===================================================================
--- Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/rewriter/rewriter.py 2008-07-22 18:56:41 UTC (rev 88725)
+++ Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/rewriter/rewriter.py 2008-07-22 19:02:19 UTC (rev 88726)
@@ -12,10 +12,11 @@
from zope.component import adapts
from zope.interface import implements
from zope.location import locate
-
+from zope.component import provideAdapter
from ocql.interfaces import IRewriter
from ocql.interfaces import IOptimizedObjectQuery
from ocql.rewriter.algebra import Head
+from ocql.queryobject.interfaces import *
from ocql.rewriter import algebra as target_algebra
@@ -27,8 +28,108 @@
self.context = context
def __call__(self):
- query = self.context
- alg = query.rewrite(target_algebra)
+ query = self.context.tree
+# import pydevd;pydevd.settrace()
+ adapter = IRewriter(query)
+ alg = adapter()
+ #alg = query.rewrite(target_algebra)
head = Head(alg)
return head
-
\ No newline at end of file
+
+
+class ChildRewriter(object):
+ def __init__(self, context):
+ self.context = context
+
+
+class IdentifierRewriter(ChildRewriter):
+ implements(IRewriter)
+ adapts(IIdentifier)
+
+ def __call__(self):
+ return IRewriter(self.context.name)()
+
+
+class ConstantRewriter(ChildRewriter):
+ implements(IRewriter)
+ adapts(IConstant)
+
+ def __call__(self):
+ return IRewriter(self.context.value)()
+
+
+class QueryRewriter(ChildRewriter):
+ implements(IRewriter)
+ adapts(IQuery)
+
+ def __call__(self):
+ return IRewriter(
+ self.context.symbols.addlevel()
+ )
+
+class BinaryRewriter(ChildRewriter):
+ implements(IRewriter)
+ adapts(IBinary)
+
+ def __call__(self):
+ return IRewriter(self.context.)
+
+class UnionRewriter(ChildRewriter):
+ implements(IRewriter)
+ adapts(IUnion)
+
+
+class DifferRewriter(ChildRewriter):
+ implements(IRewriter)
+ adapts(IDiffer)
+
+
+class PropertyRewriter(ChildRewriter):
+ implements(IRewriter)
+ adapts(IProperty)
+
+
+class NotRewriter(ChildRewriter):
+ implements(IRewriter)
+ adapts(INot)
+
+
+class CountRewriter(ChildRewriter):
+ implements(IRewriter)
+ adapts(ICount)
+
+
+class QuentedRewriter(ChildRewriter):
+ implements(IRewriter)
+ adapts(IQuanted)
+
+
+class EveryRewriter(ChildRewriter):
+ implements(IRewriter)
+ adapts(IEvery)
+
+
+class SomeRewriter(ChildRewriter):
+ implements(IRewriter)
+ adapts(ISome)
+
+
+class Condition(ChildRewriter):
+ implements(IRewriter)
+ adapts(ICondition)
+
+
+def registerAdapters():
+ provideAdapter(IdentifierRewriter)
+ provideAdapter(ConstantRewriter)
+ provideAdapter(QueryRewriter)
+ provideAdapter(BinaryRewriter)
+ provideAdapter(UnionRewriter)
+ provideAdapter(DifferRewriter)
+ provideAdapter(PropertyRewriter)
+ provideAdapter(NotRewriter)
+ provideAdapter(CountRewriter)
+ provideAdapter(QuentedRewriter)
+ provideAdapter(EveryRewriter)
+ provideAdapter(SomeRewriter)
+ provideAdapter(ConstantRewriter)
\ No newline at end of file
Modified: Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/tests/test_old.py
===================================================================
--- Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/tests/test_old.py 2008-07-22 18:56:41 UTC (rev 88725)
+++ Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/tests/test_old.py 2008-07-22 19:02:19 UTC (rev 88726)
@@ -27,6 +27,7 @@
from ocql.testing.database import TestMetadata
from ocql.compiler.compiler import registerAdapters
+import ocql.rewriter.rewriter
from ocql.testing.database import C1, C2, C3
from ocql.testing.database import D1, D2, D3
@@ -58,6 +59,7 @@
provideAdapter(AlgebraCompiler)
provideAdapter(TestMetadata)
registerAdapters()
+ ocql.rewriter.rewriter.registerAdapters()
self.engine = OCQLEngine()
Modified: Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/tests/test_zope.py
===================================================================
--- Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/tests/test_zope.py 2008-07-22 18:56:41 UTC (rev 88725)
+++ Sandbox/adamg/ocql/branches/qo-compiler/src/ocql/tests/test_zope.py 2008-07-22 19:02:19 UTC (rev 88726)
@@ -8,6 +8,7 @@
from ocql.aoptimizer.aoptimizer import AlgebraOptimizer
from ocql.compiler.compiler import AlgebraCompiler
from ocql.compiler.compiler import registerAdapters
+import ocql.rewriter.rewriter
from ocql.database import metadata
from ocql.database.metadata import Metadata
from ocql.engine import OCQLEngine
@@ -35,6 +36,7 @@
provideAdapter(AlgebraCompiler)
provideAdapter(Metadata)
registerAdapters()
+ ocql.rewriter.rewriter.registerAdapters()
setupInterfaces(self)
setupCatalog(self)
More information about the Checkins
mailing list