incorrect result recursive query in SQL query if more than one branch bypass
----------------------------------------------------------------------------

                 Key: CORE-4240
                 URL: http://tracker.firebirdsql.org/browse/CORE-4240
             Project: Firebird Core
          Issue Type: Bug
          Components: Engine
    Affects Versions: 3.0 Alpha 1
            Reporter: Simonov Denis


The following query produces different results on 2.5 and 3.0

[SRC sql]WITH RECURSIVE H
AS (SELECT 1 AS CODE_HORSE,
           2 AS CODE_FATHER,
           3 AS CODE_MOTHER
    FROM RDB$DATABASE
    UNION ALL
    SELECT 2 AS CODE_HORSE,
           4 AS CODE_FATHER,
           5 AS CODE_MOTHER
    FROM RDB$DATABASE
    UNION ALL
    SELECT 3 AS CODE_HORSE,
           4 AS CODE_FATHER,
           5 AS CODE_MOTHER
    FROM RDB$DATABASE
    UNION ALL
    SELECT 4 AS CODE_HORSE,
           NULL AS CODE_FATHER,
           NULL AS CODE_MOTHER
    FROM RDB$DATABASE
    UNION ALL
    SELECT 5 AS CODE_HORSE,
           NULL AS CODE_FATHER,
           NULL AS CODE_MOTHER
    FROM RDB$DATABASE),
R
AS (SELECT H.CODE_HORSE AS CODE_HORSE,
           H.CODE_FATHER AS CODE_FATHER,
           H.CODE_MOTHER AS CODE_MOTHER,
           CAST('' AS VARCHAR(10)) AS MARK,
           0 AS DEPTH
    FROM H
    WHERE H.CODE_HORSE = 1
    UNION ALL
    SELECT H.CODE_HORSE AS CODE_HORSE,
           H.CODE_FATHER AS CODE_FATHER,
           H.CODE_MOTHER AS CODE_MOTHER,
           'F' || R.MARK AS MARK,
           R.DEPTH + 1 AS DEPTH
    FROM R
    JOIN H ON R.CODE_FATHER = H.CODE_HORSE
    WHERE R.DEPTH < 5
    UNION ALL
    SELECT H.CODE_HORSE AS CODE_HORSE,
           H.CODE_FATHER AS CODE_FATHER,
           H.CODE_MOTHER AS CODE_MOTHER,
           'M' || R.MARK AS MARK,
           R.DEPTH + 1 AS DEPTH
    FROM R
    JOIN H ON R.CODE_MOTHER = H.CODE_HORSE
    WHERE R.DEPTH < 5)
SELECT *
FROM R [/SRC]  

Result FB 2.5

[FIXED]CODE_HORSE  CODE_FATHER  CODE_MOTHER  MARK  DEPTH
         1            2            3            0  
         2            4            5  F         1  
         4                            FF        2  
         5                            MF        2  
         3            4            5  M         1  
         4                            FM        2  
         5                            MM        2  [/FIXED]

Result  FB 3.0

[FIXED]CODE_HORSE  CODE_FATHER  CODE_MOTHER  MARK  DEPTH
         1            2            3            0  
         2            4            5  F         1  
         4                            FF        2  [/FIXED]

In Firebird 3 result is not correct. Optimizer for some reason does not bypass 
second branch of the recursive query.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134791&iu=/4140/ostg.clktrk
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to