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!