I use this library to programmatically generate SQL. Recently, I am adding a feature in which I need to use recursive common table expressions. Fortunately, you support this with the With constructor of data type QueryExpr.
However, if there are more than one elements in the qeViews list, the generated sql forgets to put brackets when used as subquery in a QueryExprSetOp.
Currently, the query is output as:
select SrcA as src, TgtA as tgt
from r
where (SrcA = '_SRCATOM')
and ((SrcA is not null)
and (TgtA is not null))
union distinct
with recursive TheExpression as (/* EDcD r[A*A] */
/* Expression: r [A*A] */
/* Signature : [A*A] */
select SrcA as src, TgtA as tgt
from r
where (SrcA is not null)
and (TgtA is not null)),
TransitiveClosure as (select src as src, tgt as tgt from TheExpression
union distinct
select TransitiveClosure.src as src,
TheExpression.tgt as tgt
from TransitiveClosure,
TheExpression
where TheExpression.src = TransitiveClosure.tgt)
select src as src, tgt as tgt from TransitiveClosure where src = '_SRCATOM'
;
The brackets should be placed at the subquery that is the right hand side of the Union, like this:
select SrcA as src, TgtA as tgt
from r
where (SrcA = '_SRCATOM')
and ((SrcA is not null)
and (TgtA is not null))
union distinct
( with recursive TheExpression as (/* EDcD r[A*A] */
/* Expression: r [A*A] */
/* Signature : [A*A] */
select SrcA as src, TgtA as tgt
from r
where (SrcA is not null)
and (TgtA is not null)),
TransitiveClosure as (select src as src, tgt as tgt from TheExpression
union distinct
select TransitiveClosure.src as src,
TheExpression.tgt as tgt
from TransitiveClosure,
TheExpression
where TheExpression.src = TransitiveClosure.tgt)
select src as src, tgt as tgt from TransitiveClosure where src = '_SRCATOM'
);
I use this library to programmatically generate SQL. Recently, I am adding a feature in which I need to use recursive common table expressions. Fortunately, you support this with the
Withconstructor of data typeQueryExpr.However, if there are more than one elements in the
qeViewslist, the generated sql forgets to put brackets when used as subquery in aQueryExprSetOp.Currently, the query is output as:
The brackets should be placed at the subquery that is the right hand side of the Union, like this: