[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