Hello,

We're currently integrating support for CTE in jOOQ and we're wondering if
we should support CTE for H2 at all. H2 has experimental CTE support, if
I'm not mistaken:
http://www.h2database.com/html/advanced.html?highlight=recursive&search=recursive#recursive_queries

This would be one of our test cases, and it seems to work for H2:

with recursive "t1"("f1", "f2") as (
  select
    1,
    'a'
  from dual
union all
  select
    ("t1"."f1" + 1),
    ("t1"."f2" || 'a')
  from "t1"
  where "t1"."f1" < 10
)
select
  "t1"."f1",
  "t1"."f2"
from "t1"


However, in standard SQL, I can declare several tables in the WITH clause,
e.g.:

with recursive "t1"("f1", "f2") as (...),

               "t2"("g1", "g2") as (...),
               ...

select ...


This doesn't seem to work right now for H2.

Am I right in thinking that:

1. Only RECURSIVE CTE are currently supported, although I can tweak a
synthetic UNION ALL clause into the query to make H2 believe that we have
the required syntax (see below)
2. The RECURSIVE keyword seems to be optional - probably to be Oracle
compatible as in Oracle, recursiveness is implicit
3. Only single-table CTE are currently supported
4. This is currently still not a priority for the H2 maintenance team? (as
this question occasionally pops up on the user-group) :-)

[From 1] Non-recursive tweak to comply with H2 syntax requirements:

with "t1"("f1", "f2") as (
  select
    1,
    'a'
  from dual
union all
  select null, null
  where false
)
select
  "t1"."f1",
  "t1"."f2"
from "t1"


Any feedback is very welcome.

Cheers
Lukas

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.

Reply via email to