The criteria for function or signature selection is crude. It tends to be mostly about return types and argument types, or argument counts.
The classification of functions is also crude: it's simply done based on setting weights in query profiles. The name of the weights are arbitrary as are the members inside.
You can end up with strange situations here, such as at https://gerrit.cloudera.org/#/c/3720/3 . The heuristic in QueryGenerator for picking a so-called "relational function" is simply: 2 arguments and returns a Boolean type. This includes And and Or. This means they need to be included as weights for relational functions. But And and Or are also defined in other weights, like the conjunct_disjuncts weighting.
It shouldn't be up to the query profiles to decide what's a relational function, or what's a conjunct. That's set by the nature of the functions themselves.
Another approach would be to support optional metadata attributes for each of these functions. When we choose signatures or functions, we can then inspect these attributes for inclusion or exclusion.