db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel John Debrunner (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-3301) Incorrect result from query with nested EXIST
Date Wed, 19 Mar 2008 22:16:24 GMT

    [ https://issues.apache.org/jira/browse/DERBY-3301?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12580586#action_12580586
] 

Daniel John Debrunner commented on DERBY-3301:
----------------------------------------------

Looks better, I think the "Summary of the Change" section is incorrect:

> Derby can return fewer rows than expected.

That describes the old bug not a change, well it doesn't really describe anything since it's
so vague. :-)

Is the summary more along the lines of:

Queries with nested EXIST clauses now return correct results.

???

Maybe someone more familiar with the issue could come up with the correct wording?

I'm not really sure that such changes require release notes, looking at this:

> Applications that depended on the previous incorrect behavior will need to be updated.

what does that really mean? How would such an application be updated?

Maybe a release note is good, but not suggesting application changes. More along the
lines of:

 > Applications using nested EXISTS may have previously returned incorrect results.

which is what the Symptoms section is for (and says) so maybe these two sections are
not required for wrong result fixes:

Incompatibilities with Previous Release
Application Changes Required

To reduce to a simple case, if the expression x + 2 actually returned x + 3 for any x, then
would it make sense
to have a release note that effectively said "applications that depended on the incorrect
addition of 2 need to be updated"?? 


> Incorrect result from query with nested EXIST
> ---------------------------------------------
>
>                 Key: DERBY-3301
>                 URL: https://issues.apache.org/jira/browse/DERBY-3301
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.1.3.1, 10.2.1.6, 10.3.2.1
>            Reporter: Craig Russell
>            Assignee: Thomas Nielsen
>             Fix For: 10.4.0.0
>
>         Attachments: d3301-queryplan.log, derby-3301-1.diff, derby-3301-1.stat, derby-3301-2.diff,
derby-3301-3.diff, derby-3301-3b.diff, derby-3301-4.diff, derby-3301-4b.diff, derby-3301-4b.stat,
derby-3301-4c.diff, derby-3301-5.diff, derby-3301-6.diff, derby-3301-7.diff, derby-3301-8.diff,
derby-3301-extra.sql, derby-3301-test-1.diff, derby-3301-test-1.stat, derby-3301-test-2.diff,
derby-3301-test-3.diff, derby-3301-test-3.stat, derby-3301-test-master-2.diff, derby-3301-test-master-3.diff,
derby-3301-test-master-3.stat, derby-3301-test-master.diff, derby-3301-test-master.stat, Derby-3301.html,
derby-3301.sql, releaseNote.html
>
>
> Derby returns unexpected results from a query with embedded EXIST clauses. The query
SQL is generated by the JPOX jdo implementation and is supposed to return all of the PERSONS
and PROJECTS where there is an entry in the join table. This query works as expected when
using MySQL.
> Here's the query:
> SELECT UNBOUND_E.PERSONID, UNBOUND_P.PROJID 
> FROM applicationidentity0.DEPARTMENTS THIS, 
>      applicationidentity0.PERSONS UNBOUND_E, 
>      applicationidentity0.PROJECTS UNBOUND_P 
> WHERE EXISTS ( 
>     SELECT 1 FROM applicationidentity0.PERSONS THIS_EMPLOYEES_E 
>     WHERE EXISTS ( 
>         SELECT 1 FROM applicationidentity0.PROJECT_MEMBER THIS_EMPLOYEES_E_PROJECTS_P

>         WHERE THIS_EMPLOYEES_E_PROJECTS_P."MEMBER" = THIS_EMPLOYEES_E.PERSONID 
>         AND THIS_EMPLOYEES_E_PROJECTS_P."MEMBER" = THIS_EMPLOYEES_E.PERSONID 
>         AND THIS_EMPLOYEES_E.DEPARTMENT = THIS.ID 
>         AND THIS_EMPLOYEES_E.DEPARTMENT = THIS.ID 
>         AND UNBOUND_P.PROJID = THIS_EMPLOYEES_E_PROJECTS_P.PROJID 
>         AND UNBOUND_E.PERSONID = THIS_EMPLOYEES_E.PERSONID) 
>     );
> PERSONID   |PROJID     
> -----------------------
> 3          |1          
> 5          |3          
> 4          |3          
> 2          |1          
> 1          |1          
> 5 rows selected
> I'm expecting 7 rows to be returned here, one row for each row in the join table. 
> Here's the schema:
> CREATE TABLE departments (
>     ID INTEGER NOT NULL,
>     NAME VARCHAR(32) NOT NULL,
>     EMP_OF_THE_MONTH INTEGER,
>     COMPANYID INTEGER,
>     DISCRIMINATOR VARCHAR(255),
>     CONSTRAINT DEPTS_COMP_FK FOREIGN KEY (COMPANYID) REFERENCES companies,
>     CONSTRAINT DEPTS_PK PRIMARY KEY (ID)
> );
> CREATE TABLE persons (
>     PERSONID INTEGER NOT NULL,
>     FIRSTNAME VARCHAR(32) NOT NULL,
>     LASTNAME VARCHAR(32) NOT NULL,
>     MIDDLENAME VARCHAR(32),
>     BIRTHDATE TIMESTAMP NOT NULL,
>     ADDRID INTEGER,
>     STREET VARCHAR(64),
>     CITY VARCHAR(64),
>     STATE CHAR(2),
>     ZIPCODE CHAR(5),
>     COUNTRY VARCHAR(64),
>     HIREDATE TIMESTAMP,
>     WEEKLYHOURS REAL,
>     DEPARTMENT INTEGER,
>     FUNDINGDEPT INTEGER,
>     MANAGER INTEGER,
>     MENTOR INTEGER,
>     HRADVISOR INTEGER,
>     SALARY REAL,
>     WAGE REAL,
>     DISCRIMINATOR varchar(255) NOT NULL,
>     CONSTRAINT PERS_DEPT_FK FOREIGN KEY (DEPARTMENT) REFERENCES departments,
>     CONSTRAINT PERS_FUNDDEPT_FK FOREIGN KEY (FUNDINGDEPT) REFERENCES departments,
>     CONSTRAINT PERS_MANAGER_FK FOREIGN KEY (MANAGER) REFERENCES persons,
>     CONSTRAINT PERS_MENTOR_FK FOREIGN KEY (MENTOR) REFERENCES persons,
>     CONSTRAINT PERS_HRADVISOR_FK FOREIGN KEY (HRADVISOR) REFERENCES persons,
>     CONSTRAINT EMPS_PK PRIMARY KEY (PERSONID)
> );
> CREATE TABLE projects (
>     PROJID INTEGER NOT NULL,
>     NAME VARCHAR(32) NOT NULL,
>     BUDGET DECIMAL(11,2) NOT NULL,
>     DISCRIMINATOR VARCHAR(255),
>     CONSTRAINT PROJS_PK PRIMARY KEY (PROJID)
> );
> CREATE TABLE project_member (
>     PROJID INTEGER REFERENCES projects NOT NULL,
>     MEMBER INTEGER REFERENCES persons NOT NULL
> );
> ij> connect 'jdbc:derby:/Users/clr/apache/jdo/trunk/tck2/target/database/derby/jdotckdb';
> ij> set schema applicationidentity0;
> 0 rows inserted/updated/deleted
> ij> select * from persons;
> PERSONID   |FIRSTNAME                       |LASTNAME                        |MIDDLENAME
                     |BIRTHDATE                 |ADDRID     |STREET                      
                                   |CITY                                                 
          |STA&|ZIPC&|COUNTRY                                                    
    |HIREDATE                  |WEEKLYHOURS  |DEPARTMENT |FUNDINGDEPT|MANAGER    |MENTOR 
   |HRADVISOR  |SALARY       |WAGE         |DISCRIMINATOR                                
                                                                                  
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> 1          |emp1First                       |emp1Last                        |emp1Middle
                     |1970-06-09 21:00:00.0     |NULL       |NULL                        
                                   |NULL                                                 
          |NULL|NULL |NULL                                                            |1998-12-31
21:00:00.0     |40.0         |NULL       |NULL       |NULL       |NULL       |NULL       |20000.0
     |NULL         |org.apache.jdo.tck.pc.company.FullTimeEmployee                       
                                                          
> 2          |emp2First                       |emp2Last                        |emp2Middle
                     |1975-12-21 21:00:00.0     |NULL       |NULL                        
                                   |NULL                                                 
          |NULL|NULL |NULL                                                            |2003-06-30
21:00:00.0     |40.0         |NULL       |NULL       |NULL       |NULL       |NULL       |10000.0
     |NULL         |org.apache.jdo.tck.pc.company.FullTimeEmployee                       
                                                          
> 3          |emp3First                       |emp3Last                        |emp3Middle
                     |1972-09-04 21:00:00.0     |NULL       |NULL                        
                                   |NULL                                                 
          |NULL|NULL |NULL                                                            |2002-08-14
21:00:00.0     |19.0         |NULL       |NULL       |NULL       |NULL       |NULL       |NULL
        |15.0         |org.apache.jdo.tck.pc.company.PartTimeEmployee                    
                                                             
> 4          |emp4First                       |emp4Last                        |emp4Middle
                     |1973-09-05 21:00:00.0     |NULL       |NULL                        
                                   |NULL                                                 
          |NULL|NULL |NULL                                                            |2001-04-14
21:00:00.0     |0.0          |NULL       |NULL       |NULL       |NULL       |NULL       |NULL
        |13.0         |org.apache.jdo.tck.pc.company.PartTimeEmployee                    
                                                             
> 5          |emp5First                       |emp5Last                        |emp5Middle
                     |1962-07-04 21:00:00.0     |NULL       |NULL                        
                                   |NULL                                                 
          |NULL|NULL |NULL                                                            |1998-08-14
21:00:00.0     |0.0          |NULL       |NULL       |NULL       |NULL       |NULL       |45000.0
     |NULL         |org.apache.jdo.tck.pc.company.FullTimeEmployee                       
                                                          
> 5 rows selected
> ij> select * from projects;
> PROJID     |NAME                            |BUDGET       |DISCRIMINATOR            
                                                                                         
            
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> 1          |orange                          |2500000.99   |org.apache.jdo.tck.pc.company.Project
                                                                                         

> 2          |blue                            |50000.00     |org.apache.jdo.tck.pc.company.Project
                                                                                         

> 3          |green                           |2000.99      |org.apache.jdo.tck.pc.company.Project
                                                                                         

> 3 rows selected
> ij> select * from project_member;
> PROJID     |MEMBER     
> -----------------------
> 2          |3          
> 1          |3          
> 2          |2          
> 3          |5          
> 3          |4          
> 1          |2          
> 1          |1          
> 7 rows selected

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message