when the infer function was developed, it grew quite fast and some functions were tailor made for very specific use cases. While separation of concerns is a good practice w.r.t. maintainability, the wheel must not be re-invented for each minor deviation in behavior.
That being said, the two function inferQueryElement and attachRefLinksToArg are doing essentially the same. They both walk an arg which is - generally spoken - an expression. That might be a simple ref, func, val or a (nested) xpr.
inferQueryElement was used for the columns of a query. Each column was resolved to a query element. All elements together formed the set of query elements. The other main part of the function is the attachment of the infamous $refLinks next to each ref array. Moreover, there was a flag insertIntoQueryElements which could be set to false, if the arg must not be inserted into the queries elements. This is the case for nested xpr, the where, having, with, groupBy and orderBy clause of the query.
attachRefLinksToArg does exactly what the name implies, it attaches $refLinks to an arg but does not resolve the arg to a query element. This function was used for the from clause of the query.
It is obvious that both functions have significant shared logic. This change removes the usage of the attachRefLinksToArg function.
[ ] stakeholder tests are all green with this branch
[x] cds tests are all green with this branch → /cap/cds/actions/runs/9483245
Rework #617
when the
infer
function was developed, it grew quite fast and some functions were tailor made for very specific use cases. While separation of concerns is a good practice w.r.t. maintainability, the wheel must not be re-invented for each minor deviation in behavior.That being said, the two function
inferQueryElement
andattachRefLinksToArg
are doing essentially the same. They both walk anarg
which is - generally spoken - an expression. That might be a simpleref
,func
,val
or a (nested)xpr
.inferQueryElement
was used for thecolumns
of a query. Each column was resolved to a query element. All elements together formed the set of query elements. The other main part of the function is the attachment of the infamous$refLinks
next to eachref
array. Moreover, there was a flaginsertIntoQueryElements
which could be set tofalse
, if thearg
must not be inserted into the queries elements. This is the case for nestedxpr
, thewhere
,having
,with
,groupBy
andorderBy
clause of the query.attachRefLinksToArg
does exactly what the name implies, it attaches$refLinks
to anarg
but does not resolve thearg
to a query element. This function was used for thefrom
clause of the query.It is obvious that both functions have significant shared logic. This change removes the usage of the
attachRefLinksToArg
function.