refactor(infer): consolidate two main functions #912
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.