[Checkins] SVN: Sandbox/adamg/ocql/trunk/src/ocql/ add more tests to improve coverage in parser
Charith Paranaliyanage
paranaliyanage at gmail.com
Fri Aug 22 14:55:59 EDT 2008
Log message for revision 90134:
add more tests to improve coverage in parser
Changed:
U Sandbox/adamg/ocql/trunk/src/ocql/parser/parser.txt
U Sandbox/adamg/ocql/trunk/src/ocql/parser/queryparser.py
U Sandbox/adamg/ocql/trunk/src/ocql/queryobject/interfaces.py
U Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.py
U Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.txt
U Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.py
U Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.txt
U Sandbox/adamg/ocql/trunk/src/ocql/testing/database.py
-=-
Modified: Sandbox/adamg/ocql/trunk/src/ocql/parser/parser.txt
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/parser/parser.txt 2008-08-22 17:02:39 UTC (rev 90133)
+++ Sandbox/adamg/ocql/trunk/src/ocql/parser/parser.txt 2008-08-22 18:55:58 UTC (rev 90134)
@@ -42,6 +42,9 @@
>>> QueryParser("set [ i in ICourse | i ]")(None)
Head(Query(<type 'set'>, In(Identifier(i), Identifier(ICourse)), Identifier(i)))
+ >>> QueryParser("set [ i for i in ICourse ]")(None)
+ Head(Query(<type 'set'>, In(Identifier(i), Identifier(ICourse)), Identifier(i)))
+
>>> QueryParser("list [ i in ICourse | i ]")(None)
Head(Query(<type 'list'>, In(Identifier(i), Identifier(ICourse)), Identifier(i)))
@@ -72,6 +75,9 @@
>>> QueryParser("set [ c in ICourse; c.credits <= 3 | c.code ]")(None)
Head(Query(<type 'set'>, In(Identifier(c), Identifier(ICourse)); Le(Property(Identifier(c), Identifier(credits)), Constant(3)), Property(Identifier(c), Identifier(code))))
+ >>> QueryParser("set [ c in ICourse; c.credits != 3 | c.code ]")(None)
+ Head(Query(<type 'set'>, In(Identifier(c), Identifier(ICourse)); Ne(Property(Identifier(c), Identifier(credits)), Constant(3)), Property(Identifier(c), Identifier(code))))
+
>>> QueryParser("set [ c in ICourse | c.code ]")(None)
Head(Query(<type 'set'>, In(Identifier(c), Identifier(ICourse)), Property(Identifier(c), Identifier(code))))
@@ -81,6 +87,9 @@
>>> QueryParser("set [ c in ICourse; c.code==2 or c.code==3 | c ]")(None)
Head(Query(<type 'set'>, In(Identifier(c), Identifier(ICourse)); Or(Eq(Property(Identifier(c), Identifier(code)), Constant(2)), Eq(Property(Identifier(c), Identifier(code)), Constant(3))), Identifier(c)))
+ >>> QueryParser("set [ c in ICourse; c.code==2 and c.code==3 | c ]")(None)
+ Head(Query(<type 'set'>, In(Identifier(c), Identifier(ICourse)); And(Eq(Property(Identifier(c), Identifier(code)), Constant(2)), Eq(Property(Identifier(c), Identifier(code)), Constant(3))), Identifier(c)))
+
>>> QueryParser("set [ c in ICourse; not (c.code==2 or c.code==3) | c ]")(None)
Head(Query(<type 'set'>, In(Identifier(c), Identifier(ICourse)); Not(Or(Eq(Property(Identifier(c), Identifier(code)), Constant(2)), Eq(Property(Identifier(c), Identifier(code)), Constant(3)))), Identifier(c)))
@@ -91,3 +100,6 @@
Head(Query(<type 'set'>, In(Identifier(s), Identifier(IStudents));
Alias(Identifier(a), Property(Identifier(s), Property(Identifier(major), Property(Identifier(address), Identifier(street)))));
Or(Eq(Identifier(a), Constant('Hillhead Street')), Eq(Identifier(a), Constant('Gibson Street'))), Identifier(s)))
+
+ >>> QueryParser("set [ i in IPerson; isinstance(i, Tutor) | i ]")(None)
+ Head(Query(<type 'set'>, In(Identifier(i), Identifier(IPerson)); Isinstace(Identifier(i), Tutor), Identifier(i)))
Modified: Sandbox/adamg/ocql/trunk/src/ocql/parser/queryparser.py
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/parser/queryparser.py 2008-08-22 17:02:39 UTC (rev 90133)
+++ Sandbox/adamg/ocql/trunk/src/ocql/parser/queryparser.py 2008-08-22 18:55:58 UTC (rev 90134)
@@ -302,9 +302,9 @@
#TODO add a test
def p_expr_for_query(self, t):
- r'''expression : collection SBRACKET_L qualifier FOR expression SBRACKET_R
+ r'''expression : collection SBRACKET_L expression FOR qualifier SBRACKET_R
'''
- t[0] = Query(self.metadata, self.symbols, t[1], t[3], t[5])
+ t[0] = Query(self.metadata, self.symbols, t[1], t[5], t[3])
if DEBUG: print 'reducing "collection SBRACKET_L qualifier FOR expression SBRACKET_R" to "expression"', t[0]
def p_expr_literal(self, t):
@@ -484,7 +484,7 @@
def p_condition_isinstance(self, t):
r'''condition : ISINSTANCE BRACKET_L expression COMMA IDENTIFIER BRACKET_R
'''
- raise NotImplementedError('isinstance')
+ t[0] = Isinstace(self.metadata, self.symbols, t[3], t[5])
if DEBUG: print 'reducing "ISINSTANCE BRACKET_L expression COMMA IDENTIFIER BRACKET_R" to "condition"', t[0]
def p_quantified_expression(self, t):
Modified: Sandbox/adamg/ocql/trunk/src/ocql/queryobject/interfaces.py
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/queryobject/interfaces.py 2008-08-22 17:02:39 UTC (rev 90133)
+++ Sandbox/adamg/ocql/trunk/src/ocql/queryobject/interfaces.py 2008-08-22 18:55:58 UTC (rev 90134)
@@ -22,6 +22,13 @@
Expression Query object
"""
+class IIsinstance(IExpression):
+ """Objects providing this interface represent the
+ isinstance Query object
+ """
+ objekt = Attribute('object')
+ tipe = Attribute('type')
+
class IhasClassWith(IExpression):
"""Objects providing this interface represent the
hasClassWith Query object
Modified: Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.py
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.py 2008-08-22 17:02:39 UTC (rev 90133)
+++ Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.py 2008-08-22 18:55:58 UTC (rev 90134)
@@ -105,6 +105,24 @@
#
# General
#
+class Isinstace(Expression):
+ implements(IIsinstance)
+
+ def __init__(self, metadata, symbols, objekt, tipe):
+ self.metadata = metadata
+ self.symbols = symbols
+ Child.__init__(self)
+ self.setProp('objekt', objekt)
+ self.setProp('tipe', tipe)
+
+ def __repr__(self):
+ return "%s(%s, %s)" % (
+ self.__class__.__name__,
+ str(self.objekt),
+ str(self.tipe)
+ )
+
+
class hasClassWith(Expression):
#NotImplementedError
implements(IhasClassWith)
@@ -274,15 +292,17 @@
return t
def get_collection_type(self):
- t = self.left.get_class()
- try:
- r = t[self.right.name]
- except:
- from pub.dbgpclient import brk; brk()
-
+ if isinstance(self.right, Identifier):
+ t = self.left.get_class()
+ try:
+ r = t[self.right.name]
+ except:
+ from pub.dbgpclient import brk; brk()
#print self.left.name+'.'+self.right.name,r
+ return r
- return r
+ else:
+ return self.right.get_collection_type()
class Index(Binary):
#NotImplementedError
Modified: Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.txt
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.txt 2008-08-22 17:02:39 UTC (rev 90133)
+++ Sandbox/adamg/ocql/trunk/src/ocql/queryobject/queryobject.txt 2008-08-22 18:55:58 UTC (rev 90134)
@@ -42,6 +42,11 @@
>>> 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))
Modified: Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.py
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.py 2008-08-22 17:02:39 UTC (rev 90133)
+++ Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.py 2008-08-22 18:55:58 UTC (rev 90134)
@@ -157,7 +157,7 @@
def __call__(self):
return Identifier(
- '.'.join([self.context.left.name, self.context.right.name]))
+ '.'.join([IRewriter(self.context.left)().name, IRewriter(self.context.right)().name]))
class AddRewriter(BinaryRewriter):
implements(IRewriter)
Modified: Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.txt
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.txt 2008-08-22 17:02:39 UTC (rev 90133)
+++ Sandbox/adamg/ocql/trunk/src/ocql/rewriter/rewriter.txt 2008-08-22 18:55:58 UTC (rev 90134)
@@ -117,7 +117,13 @@
>>> print str(alg)
Head(Iter(<type 'set'>, Lambda c: If(Not(<type 'set'>, c.code == `2` or c.code == `3`), Single(<type 'set'>, c), Empty(<type 'set'>)), Make(<type 'set'>, <type 'set'>, ICourse)))
-# >>> qo = QueryParser("set [ s in IStudents; a as s.major.address.street; a=='Hillhead Street' or a=='Gibson Street' | s ]")(TestMetadata())
+ >>> qo = QueryParser("set [ s in IStudents; s.major.address.street == 'Hillhead Street' | s ]")(TestMetadata())
+ >>> opt = QueryOptimizer(qo)()
+ >>> alg = Rewriter(opt)()
+ >>> print str(alg)
+ Head(Iter(<type 'set'>, Lambda s: If(s.major.address.street == `'Hillhead Street'`, Single(<type 'set'>, s), Empty(<type 'set'>)), Make(<type 'set'>, <type 'set'>, IStudents)))
+
+# >>> qo = QueryParser("set [ s in IStudents; a as s.major.address.street; a=='Hillhead Street' | s ]")(TestMetadata())
# >>> opt = QueryOptimizer(qo)()
# >>> alg = Rewriter(opt)()
# >>> print str(alg)
Modified: Sandbox/adamg/ocql/trunk/src/ocql/testing/database.py
===================================================================
--- Sandbox/adamg/ocql/trunk/src/ocql/testing/database.py 2008-08-22 17:02:39 UTC (rev 90133)
+++ Sandbox/adamg/ocql/trunk/src/ocql/testing/database.py 2008-08-22 18:55:58 UTC (rev 90134)
@@ -211,6 +211,7 @@
'IAddress': [A1, A2],
'IDepartments': [D1, D2],
'ICourse': [C1, C2, C3],
+ 'IPerson': [S1, S2, St1, St2, T1, V1],
'IStaff': [S1, S2],
'IStudents': [St1, St2],
'ITutors': [T1],
@@ -220,6 +221,7 @@
'IAddress': MClass(IAddress),
'IDepartments': MClass(IDepartments),
'ICourse': MClass(ICourse),
+ 'IPerson': MClass(IPerson),
'IStaff': MClass(IStaff),
'IStudents': MClass(IStudents),
'ITutors': MClass(ITutors),
More information about the Checkins
mailing list