Bug 1326826

Summary: SQL Server requires CAST when using NULL in anchor part of recursive CTE
Product: [JBoss] JBoss Data Virtualization 6 Reporter: Andrej Smigala <asmigala>
Component: TeiidAssignee: Van Halbert <vhalbert>
Status: CLOSED CURRENTRELEASE QA Contact: Andrej Smigala <asmigala>
Severity: high Docs Contact:
Priority: medium    
Version: 6.3.0CC: aszczucz, blafond, jolee, mbaluch, thauser, vhalbert
Target Milestone: ER3   
Target Release: 6.3.0   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2016-08-24 11:48:03 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Andrej Smigala 2016-04-13 13:30:16 UTC
Running the following query in teiid:

with a (intkey, stringcolumn, lvl) as

    (

    select intkey, NULL as stringcolumn, 0 as lvl from bqt1.smallb where intkey = 1

    union all 

    select n.intkey, n.stringkey as stringcolumn, rcte.lvl + 1 as lvl from bqt1.smallb n inner join a rcte on n.intkey = rcte.intkey + 1

    )

 select * from a

results in the following source query:

WITH a (intkey, stringcolumn, lvl) AS

    (

    SELECT SmallB.IntKey, NULL AS stringcolumn, 0 AS lvl FROM SmallB WHERE SmallB.IntKey = 1

    UNION ALL

    SELECT n.IntKey, n.StringKey AS stringcolumn, (rcte.lvl + 1) AS lvl FROM SmallB n INNER JOIN a rcte ON n.IntKey = (rcte.intkey + 1)

    )

SELECT a.intkey, a.stringcolumn, a.lvl FROM a

which fails on SQL Server with

Types don't match between the anchor and the recursive part in column "stringcolumn" of recursive query "a".


The source query should be

WITH a (intkey, stringcolumn, lvl) AS

    (

    SELECT SmallB.IntKey, CAST(NULL AS VARCHAR(10)) AS stringcolumn, 0 AS lvl FROM SmallB WHERE SmallB.IntKey = 1

    UNION ALL

    SELECT n.IntKey, n.StringKey AS stringcolumn, (rcte.lvl + 1) AS lvl FROM SmallB n INNER JOIN a rcte ON n.IntKey = (rcte.intkey + 1)

    )

SELECT a.intkey, a.stringcolumn, a.lvl FROM a

i.e. the NULL has to be cast to the precise type of the column in the recursive part of the query.

Comment 2 JBoss JIRA Server 2016-04-13 16:49:06 UTC
Steven Hawkins <shawkins> updated the status of jira TEIID-4133 to Resolved

Comment 3 JBoss JIRA Server 2016-06-05 23:43:59 UTC
Steven Hawkins <shawkins> updated the status of jira TEIID-4133 to Closed