# HG changeset patch # User Sylvain Thénault # Date 1296551324 -3600 # Node ID e9464d97590818a6084795638c89b6f76f3ddf84 # Parent 62b8ef1e859acab9efdc8a5b336720173cc9b05a [rql2sql] fix bug with NOT in "fake" having terms diff -r 62b8ef1e859a -r e9464d975908 server/sources/rql2sql.py --- a/server/sources/rql2sql.py Tue Feb 01 10:29:56 2011 +0100 +++ b/server/sources/rql2sql.py Tue Feb 01 10:08:44 2011 +0100 @@ -416,7 +416,7 @@ p = compnode.parent oor = None while not isinstance(p, Select): - if isinstance(p, Or): + if isinstance(p, (Or, Not)): oor = p p = p.parent if oor is not None: @@ -434,7 +434,7 @@ while not isinstance(p, Select): if p in ors or p is None: # p is None for nodes already in fakehaving break - if isinstance(p, Or): + if isinstance(p, (Or, Not)): oor = p p = p.parent else: diff -r 62b8ef1e859a -r e9464d975908 server/test/unittest_rql2sql.py --- a/server/test/unittest_rql2sql.py Tue Feb 01 10:29:56 2011 +0100 +++ b/server/test/unittest_rql2sql.py Tue Feb 01 10:08:44 2011 +0100 @@ -183,7 +183,7 @@ ] -ADVANCED= [ +ADVANCED = [ ("Societe S WHERE S nom 'Logilab' OR S nom 'Caesium'", '''SELECT _S.cw_eid FROM cw_Societe AS _S @@ -572,6 +572,11 @@ ('Any 1 WHERE X in_group G, X is CWUser', '''SELECT 1 FROM in_group_relation AS rel_in_group0'''), + + ('CWEType X WHERE X name CV, X description V HAVING NOT V=CV AND NOT V = "parent"', + '''SELECT _X.cw_eid +FROM cw_CWEType AS _X +WHERE NOT (EXISTS(SELECT 1 WHERE _X.cw_description=parent)) AND NOT (EXISTS(SELECT 1 WHERE _X.cw_description=_X.cw_name))'''), ]