db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Craig L Russell <Craig.Russ...@Sun.COM>
Subject Re: [jira] Commented: (JDO-245) JPOX must throw JDOUserException for queries specifying having clause refering fields which are not part of the result clause.
Date Tue, 03 Jan 2006 23:09:59 GMT
Hi Michael,

On Jan 3, 2006, at 1:42 PM, Michael Bouschen (JIRA) wrote:

>     [ http://issues.apache.org/jira/browse/JDO-245? 
> page=comments#action_12361678 ]
>
> Michael Bouschen commented on JDO-245:
> --------------------------------------
>
> A lot of comments, I'll try to give answers.

A lot of answers; I'll try to give more questions.
>
> CLR:  There is only one thing wrong with this query: the HAVING  
> clause is not a boolean expression. It's ok to have SUM(salary) in  
> the SELECT clause because you can SELECT terms that are either in  
> the GROUPING clause or are aggregates.
>
> MBO: I think the HAVING clause "HAVING firstname" is invalid for  
> two reasons:

You give three reasons

> it is not a boolean expression and

right

> uses a field firstname w/o aggregate

right

> that is not part of the grouping.

This doesn't matter. You can have a HAVING term that isn't a grouped  
term. Maybe we are just in violent agreement. I'll assume so.

> These are the two errors Andy and I were referring to.
>
> CLR: And another negative test for HAVING that uses a term that's  
> not an aggregate.
> SELECT department, AVG(weeklyhours) FROM Employee GROUP BY  
> department HAVING middlename != NULL
>
> MBO: OK, then we are back to the original negative query which had  
> a HAVING clause: HAVING firstname = 'emp1first'. But I can add  
> this, too.

Yes, please. It's a different negative test from others because it's  
a boolean expression (ok) using non-aggregate terms (bad).

Craig

>
>> JPOX must throw JDOUserException for queries specifying having  
>> clause refering fields which are not part of the result clause.
>> --------------------------------------------------------------------- 
>> ---------------------------------------------------------
>>
>>          Key: JDO-245
>>          URL: http://issues.apache.org/jira/browse/JDO-245
>>      Project: JDO
>>         Type: Bug
>>   Components: tck20
>>     Reporter: Michael Watzek
>>     Assignee: Andy Jefferson
>
>>
>> The test case Having fails for the query below. Query compilation  
>> is expected to throw a JDOUserException because the having clause  
>> contains field firstname which is not part of the result clause.
>> 14:22:53,437 (main) DEBUG [org.apache.jdo.tck] - Compiling API  
>> query: SELECT department, SUM(salary) FROM  
>> org.apache.jdo.tck.pc.company.Employee GROUP BY department HAVING  
>> firstname == 'emp1First'
>> 14:22:53,453 (main) DEBUG [org.apache.jdo.tck] - Query compilation  
>> must throw JDOUserException: null
>> 14:22:53,453 (main) INFO  [org.apache.jdo.tck] - Exception during  
>> setUp or runtest:
>> junit.framework.AssertionFailedError: Assertion A14.6.10-2  
>> (Having) failed:
>> Query compilation must throw JDOUserException: null
>> 	at junit.framework.Assert.fail(Assert.java:47)
>> 	at org.apache.jdo.tck.JDO_Test.fail(JDO_Test.java:546)
>> 	at org.apache.jdo.tck.query.QueryTest.compile(QueryTest.java:915)
>> 	at org.apache.jdo.tck.query.QueryTest.compile(QueryTest.java:878)
>> 	at org.apache.jdo.tck.query.QueryTest.compileAPIQuery 
>> (QueryTest.java:793)
>> 	at org.apache.jdo.tck.query.result.Having.testNegative 
>> (Having.java:120)
>> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> 	at sun.reflect.NativeMethodAccessorImpl.invoke 
>> (NativeMethodAccessorImpl.java:39)
>> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke 
>> (DelegatingMethodAccessorImpl.java:25)
>> 	at java.lang.reflect.Method.invoke(Method.java:324)
>> 	at junit.framework.TestCase.runTest(TestCase.java:154)
>> 	at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:204)
>> 	at junit.framework.TestResult$1.protect(TestResult.java:106)
>> 	at junit.framework.TestResult.runProtected(TestResult.java:124)
>> 	at junit.framework.TestResult.run(TestResult.java:109)
>> 	at junit.framework.TestCase.run(TestCase.java:118)
>> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
>> 	at junit.framework.TestSuite.run(TestSuite.java:203)
>> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
>> 	at junit.framework.TestSuite.run(TestSuite.java:203)
>> 	at junit.textui.TestRunner.doRun(TestRunner.java:116)
>> 	at junit.textui.TestRunner.doRun(TestRunner.java:109)
>> 	at org.apache.jdo.tck.util.BatchTestRunner.start 
>> (BatchTestRunner.java:120)
>> 	at org.apache.jdo.tck.util.BatchTestRunner.main 
>> (BatchTestRunner.java:95)
>
> -- 
> This message is automatically generated by JIRA.
> -
> If you think it was sent incorrectly contact one of the  
> administrators:
>    http://issues.apache.org/jira/secure/Administrators.jspa
> -
> For more information on JIRA, see:
>    http://www.atlassian.com/software/jira
>

Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!


Mime
View raw message