[Checkins] SVN: Sandbox/adamg/ocql/trunk/src/ocql/q improving docs, cleaning up
Adam Groszer
agroszer at gmail.com
Tue Aug 26 03:57:59 EDT 2008
Log message for revision 90263:
improving docs, cleaning up
Changed:
U Sandbox/adamg/ocql/trunk/src/ocql/qoptimizer/qoptimizer.txt
U Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.py
U Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.txt
A Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject_checks.txt
U Sandbox/adamg/ocql/trunk/src/ocql/queryobject/tests.py
-=-
Modified: Sandbox/adamg/ocql/trunk/src/ocql/qoptimizer/qoptimizer.txt
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/qoptimizer/qoptimizer.txt 2008-08-26 07:56:39 UTC (rev 90262)
+++ Sandbox/adamg/ocql/trunk/src/ocql/qoptimizer/qoptimizer.txt 2008-08-26 07:57:58 UTC (rev 90263)
@@ -2,6 +2,16 @@
Queryobject optimizer
=====================
+Input: Queryobject tree
+Output: Queryobject tree
+
+The task of the Queryobject optimizer is to do optimizations on the queryobject
+tree.
+Some basic optimizations can be done based on equivalence.
+Those decisions can be based on static properties of the database.
+Like which class is derived from which one. See the 1994 paper.
+Definitely no dynamic properties can be taken into account, like objects in an index.
+
>>> from ocql.qoptimizer.qoptimizer import QueryOptimizer
>>> from ocql.interfaces import IOptimizedObjectQuery
@@ -24,6 +34,4 @@
'foo-bar'
>>> IOptimizedObjectQuery.providedBy(out)
- True
-
-There are some options to optimize the queryobject tree.
+ True
\ No newline at end of file
Modified: Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.py
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.py 2008-08-26 07:56:39 UTC (rev 90262)
+++ Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.py 2008-08-26 07:57:58 UTC (rev 90263)
@@ -26,7 +26,7 @@
class Head(Location):
implements(IObjectQueryHead)
def __init__(self, tree):
- self.name = 'head'
+ self.__name__ = 'head'
self.tree = tree
locate(tree, self, 'tree')
@@ -49,12 +49,10 @@
setattr(self, name, value)
for term in value:
if ILocation.providedBy(term):
- locate(term, self, 'term')
+ locate(term, self, name)
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
implements(IObjectQuery)
metadata = None
@@ -124,7 +122,6 @@
class hasClassWith(Expression):
- #NotImplementedError
implements(IhasClassWith)
expression = None
Modified: Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.txt
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.txt 2008-08-26 07:56:39 UTC (rev 90262)
+++ Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.txt 2008-08-26 07:57:58 UTC (rev 90263)
@@ -1,238 +1,61 @@
-Checks here make sure that Interfaces are properly implemented
+Queryobject
+===========
-#TODO: extend for all Interfaces and classes
+Where is it used:
+* output of the parser
+* input of the queryoptimizer
+* output of the queryoptimizer
+* input of the rewriter
- >>> from ocql.interfaces import IObjectQuery
- >>> from ocql.interfaces import IObjectQueryHead
- >>> from ocql.queryobject.interfaces import *
+These classes make up the representation of the query.
+Instances of the classes are placed in a tree.
+This tree organization is needed in first place for the optimization.
+It is a lot easier to look for a pattern is a sub-tree and replace that subtree.
- >>> from ocql.queryobject.queryobject import *
- >>> from ocql.testing.database import TestMetadata
- >>> from ocql.parser.queryparser import SymbolContainer
+To make life easier we'll use the parser to produce our sample queryobject
+trees:
- >>> from zope.interface.verify import verifyClass, verifyObject
+ >>> from ocql.parser.queryparser import QueryParser
- >>> child = Child()
- >>> metadata = TestMetadata()
- >>> symbols = SymbolContainer()
+Let's take a fairly simple one:
- >>> verifyClass(IObjectQueryHead, Head)
- True
- >>> verifyObject(IObjectQueryHead, Head(child))
- True
+ >>> head = QueryParser("set [ c in ICourse; c.credits <= 3 | c.code ]")(None)
+ >>> head
+ Head(Query(<type 'set'>,
+ In(Identifier(c), Identifier(ICourse));
+ Le(Property(Identifier(c), Identifier(credits)),
+ Constant(3)), Property(Identifier(c), Identifier(code))))
- >>> verifyClass(IObjectQueryChild, Child)
- True
- >>> verifyObject(IObjectQueryChild, child)
- True
+There is always a Head element, which contains the complete tree:
- >>> verifyClass(IObjectQuery, QueryObject)
- True
- >>> verifyObject(IObjectQuery, QueryObject(metadata, symbols))
- True
+ >>> head.tree
+ Query(<type 'set'>,
+ In(Identifier(c), Identifier(ICourse));
+ Le(...), Property(...))
- >>> verifyClass(ITerm, Term)
- True
- >>> verifyObject(ITerm, Term(metadata, symbols, child, child))
- True
+All tree elements know about their child elements:
- >>> verifyClass(IExpression, Expression)
- True
- >>> verifyObject(IExpression, Expression(metadata, symbols, child, child))
- True
+ >>> head.tree.children
+ [In(Identifier(c), Identifier(ICourse)), Le(...), Property(...)]
- >>> verifyClass(IIsinstance, Isinstance)
- True
- >>> verifyObject(IIsinstance, Isinstance(metadata, symbols, child, Child))
- True
+And all child elements know about their parents:
- >>> verifyClass(IhasClassWith, hasClassWith)
- True
- >>> verifyObject(IhasClassWith, hasClassWith(metadata, symbols, child, set, child))
- True
+ >>> head.tree.__parent__
+ Head(...)
- >>> verifyClass(IIdentifier, Identifier)
- True
- >>> verifyObject(IIdentifier, Identifier(metadata, symbols, child))
- True
+They also know their 'name' or 'role':
- >>> verifyClass(IConstant, Constant)
- True
- >>> verifyObject(IConstant, Constant(metadata, symbols, child))
- True
+ >>> head.tree.__name__
+ 'tree'
- >>> verifyClass(IQuery, Query)
- True
- >>> verifyObject(IQuery, Query(metadata, symbols, set, [child], child))
- True
+Though built-in types don't get into the tree:
+(as you might noticed, this is also not in children list)
- >>> verifyClass(IIn, In)
- True
- >>> verifyObject(IIn, In(metadata, symbols, child, child))
- True
+ >>> head.tree.collection_type
+ <type 'set'>
- >>> verifyClass(IAlias, Alias)
- True
- >>> verifyObject(IAlias, Alias(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IBinary, Binary)
- True
- >>> verifyObject(IBinary, Binary(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IUnion, Union)
- True
- >>> verifyObject(IUnion, Union(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IDiffer, Differ)
- True
- >>> verifyObject(IDiffer, Differ(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IAnd, And)
- True
- >>> verifyObject(IAnd, And(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IOr, Or)
- True
- >>> verifyObject(IOr, Or(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IProperty, Property)
- True
- >>> verifyObject(IProperty, Property(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IIndex, Index)
- True
- >>> verifyObject(IIndex, Index(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IArithmetic, Arithmetic)
- True
- >>> verifyObject(IArithmetic, Arithmetic(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IAdd, Add)
- True
- >>> verifyObject(IAdd, Add(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IMul, Mul)
- True
- >>> verifyObject(IMul, Mul(metadata, symbols, child, child))
- True
-
- >>> verifyClass(ISub, Sub)
- True
- >>> verifyObject(ISub, Sub(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IDiv, Div)
- True
- >>> verifyObject(IDiv, Div(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IUnary, Unary)
- True
- >>> verifyObject(IUnary, Unary(metadata, symbols, child))
- True
-
- >>> verifyClass(INot, Not)
- True
- >>> verifyObject(INot , Not(metadata, symbols, child))
- True
-
- >>> verifyClass(IAggregate, Aggregate)
- True
- >>> verifyObject(IAggregate, Aggregate(metadata, symbols, child))
- True
-
- >>> verifyClass(ICount, Count)
- True
- >>> verifyObject(ICount, Count(metadata, symbols, child))
- True
-
- >>> verifyClass(ISum, Sum)
- True
- >>> verifyObject(ISum, Sum(metadata, symbols, child))
- True
-
- >>> verifyClass(IQuantor, Quantor)
- True
- >>> verifyObject(IQuantor, Quantor(metadata, symbols, child))
- True
-
- >>> verifyClass(INumericalQuantor, NumericalQuantor)
- True
- >>> verifyObject(INumericalQuantor, NumericalQuantor(metadata, symbols, 2, child))
- True
-
- >>> verifyClass(IQuanted, Quanted)
- True
- >>> verifyObject(IQuanted, Quanted(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IEvery, Every)
- True
- >>> verifyObject(IEvery, Every(metadata, symbols, child))
- True
-
- >>> verifyClass(ISome, Some)
- True
- >>> verifyObject(ISome, Some(metadata, symbols, child))
- True
-
- >>> verifyClass(IAtmost, Atmost)
- True
- >>> verifyObject(IAtmost, Atmost(metadata, symbols, 2, child))
- True
-
- >>> verifyClass(IAtleast, Atleast)
- True
- >>> verifyObject(IAtleast, Atleast(metadata, symbols, 2, child))
- True
-
- >>> verifyClass(IJust, Just)
- True
- >>> verifyObject(IJust, Just(metadata, symbols, 2, child))
- True
-
- >>> verifyClass(ICondition, Condition)
- True
- >>> verifyObject(ICondition, Condition(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IEq, Eq)
- True
- >>> verifyObject(IEq, Eq(metadata, symbols, child, child))
- True
-
- >>> verifyClass(INe, Ne)
- True
- >>> verifyObject(INe, Ne(metadata, symbols, child, child))
- True
-
- >>> verifyClass(ILt, Lt)
- True
- >>> verifyObject(ILt, Lt(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IGt, Gt)
- True
- >>> verifyObject(IGt, Gt(metadata, symbols, child, child))
- True
-
- >>> verifyClass(ILe, Le)
- True
- >>> verifyObject(ILe, Le(metadata, symbols, child, child))
- True
-
- >>> verifyClass(IGe, Ge)
- True
- >>> verifyObject(IGe, Ge(metadata, symbols, child, child))
- True
+ >>> head.tree.collection_type.__parent__
+ Traceback (most recent call last):
+ ...
+ AttributeError: type object 'set' has no attribute '__parent__'
Added: Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject_checks.txt
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject_checks.txt (rev 0)
+++ Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject_checks.txt 2008-08-26 07:57:58 UTC (rev 90263)
@@ -0,0 +1,238 @@
+
+Checks here make sure that Interfaces are properly implemented
+
+#TODO: extend for all Interfaces and classes
+
+ >>> from ocql.interfaces import IObjectQuery
+ >>> from ocql.interfaces import IObjectQueryHead
+ >>> from ocql.queryobject.interfaces import *
+
+ >>> from ocql.queryobject.queryobject import *
+ >>> from ocql.testing.database import TestMetadata
+ >>> from ocql.parser.queryparser import SymbolContainer
+
+ >>> from zope.interface.verify import verifyClass, verifyObject
+
+ >>> child = Child()
+ >>> metadata = TestMetadata()
+ >>> symbols = SymbolContainer()
+
+ >>> verifyClass(IObjectQueryHead, Head)
+ True
+ >>> verifyObject(IObjectQueryHead, Head(child))
+ True
+
+ >>> verifyClass(IObjectQueryChild, Child)
+ True
+ >>> verifyObject(IObjectQueryChild, child)
+ True
+
+ >>> verifyClass(IObjectQuery, QueryObject)
+ True
+ >>> verifyObject(IObjectQuery, QueryObject(metadata, symbols))
+ True
+
+ >>> verifyClass(ITerm, Term)
+ True
+ >>> verifyObject(ITerm, Term(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IExpression, Expression)
+ True
+ >>> verifyObject(IExpression, Expression(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IIsinstance, Isinstance)
+ True
+ >>> verifyObject(IIsinstance, Isinstance(metadata, symbols, child, Child))
+ True
+
+ >>> verifyClass(IhasClassWith, hasClassWith)
+ True
+ >>> verifyObject(IhasClassWith, hasClassWith(metadata, symbols, child, set, child))
+ True
+
+ >>> verifyClass(IIdentifier, Identifier)
+ True
+ >>> verifyObject(IIdentifier, Identifier(metadata, symbols, child))
+ True
+
+ >>> verifyClass(IConstant, Constant)
+ True
+ >>> verifyObject(IConstant, Constant(metadata, symbols, child))
+ True
+
+ >>> verifyClass(IQuery, Query)
+ True
+ >>> verifyObject(IQuery, Query(metadata, symbols, set, [child], child))
+ True
+
+ >>> verifyClass(IIn, In)
+ True
+ >>> verifyObject(IIn, In(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IAlias, Alias)
+ True
+ >>> verifyObject(IAlias, Alias(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IBinary, Binary)
+ True
+ >>> verifyObject(IBinary, Binary(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IUnion, Union)
+ True
+ >>> verifyObject(IUnion, Union(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IDiffer, Differ)
+ True
+ >>> verifyObject(IDiffer, Differ(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IAnd, And)
+ True
+ >>> verifyObject(IAnd, And(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IOr, Or)
+ True
+ >>> verifyObject(IOr, Or(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IProperty, Property)
+ True
+ >>> verifyObject(IProperty, Property(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IIndex, Index)
+ True
+ >>> verifyObject(IIndex, Index(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IArithmetic, Arithmetic)
+ True
+ >>> verifyObject(IArithmetic, Arithmetic(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IAdd, Add)
+ True
+ >>> verifyObject(IAdd, Add(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IMul, Mul)
+ True
+ >>> verifyObject(IMul, Mul(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(ISub, Sub)
+ True
+ >>> verifyObject(ISub, Sub(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IDiv, Div)
+ True
+ >>> verifyObject(IDiv, Div(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IUnary, Unary)
+ True
+ >>> verifyObject(IUnary, Unary(metadata, symbols, child))
+ True
+
+ >>> verifyClass(INot, Not)
+ True
+ >>> verifyObject(INot , Not(metadata, symbols, child))
+ True
+
+ >>> verifyClass(IAggregate, Aggregate)
+ True
+ >>> verifyObject(IAggregate, Aggregate(metadata, symbols, child))
+ True
+
+ >>> verifyClass(ICount, Count)
+ True
+ >>> verifyObject(ICount, Count(metadata, symbols, child))
+ True
+
+ >>> verifyClass(ISum, Sum)
+ True
+ >>> verifyObject(ISum, Sum(metadata, symbols, child))
+ True
+
+ >>> verifyClass(IQuantor, Quantor)
+ True
+ >>> verifyObject(IQuantor, Quantor(metadata, symbols, child))
+ True
+
+ >>> verifyClass(INumericalQuantor, NumericalQuantor)
+ True
+ >>> verifyObject(INumericalQuantor, NumericalQuantor(metadata, symbols, 2, child))
+ True
+
+ >>> verifyClass(IQuanted, Quanted)
+ True
+ >>> verifyObject(IQuanted, Quanted(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IEvery, Every)
+ True
+ >>> verifyObject(IEvery, Every(metadata, symbols, child))
+ True
+
+ >>> verifyClass(ISome, Some)
+ True
+ >>> verifyObject(ISome, Some(metadata, symbols, child))
+ True
+
+ >>> verifyClass(IAtmost, Atmost)
+ True
+ >>> verifyObject(IAtmost, Atmost(metadata, symbols, 2, child))
+ True
+
+ >>> verifyClass(IAtleast, Atleast)
+ True
+ >>> verifyObject(IAtleast, Atleast(metadata, symbols, 2, child))
+ True
+
+ >>> verifyClass(IJust, Just)
+ True
+ >>> verifyObject(IJust, Just(metadata, symbols, 2, child))
+ True
+
+ >>> verifyClass(ICondition, Condition)
+ True
+ >>> verifyObject(ICondition, Condition(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IEq, Eq)
+ True
+ >>> verifyObject(IEq, Eq(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(INe, Ne)
+ True
+ >>> verifyObject(INe, Ne(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(ILt, Lt)
+ True
+ >>> verifyObject(ILt, Lt(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IGt, Gt)
+ True
+ >>> verifyObject(IGt, Gt(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(ILe, Le)
+ True
+ >>> verifyObject(ILe, Le(metadata, symbols, child, child))
+ True
+
+ >>> verifyClass(IGe, Ge)
+ True
+ >>> verifyObject(IGe, Ge(metadata, symbols, child, child))
+ True
Modified: Sandbox/adamg/ocql/trunk/src/ocql/queryobject/tests.py
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/queryobject/tests.py 2008-08-26 07:56:39 UTC (rev 90262)
+++ Sandbox/adamg/ocql/trunk/src/ocql/queryobject/tests.py 2008-08-26 07:57:58 UTC (rev 90263)
@@ -5,6 +5,8 @@
def test_suite():
flags = doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS
return unittest.TestSuite((
+ DocFileSuite('queryobject_checks.txt',
+ optionflags=flags),
DocFileSuite('queryobject.txt',
optionflags=flags),
))
More information about the Checkins
mailing list