In some of our more recent code we are trying to map functions into a messaging data structure by inspecting the function symbol. However we have found that there are some inconsistencies in the symbols.
Namely that the capitalization and punctuation are not consistent, likely this cannot change as it would mean breaking many existing algebra examples/tests and systems like ours that use algebra strings internally.
The more concerning inconsistencies are that some functions report symbols without using the tag constants and so some queries written report symbols that don't match their tag constants.
BuilderExpr appears to get around this by doing case insensitive key lookup which seems very hacky
There is also at least one function (isNumeric) which has no Tag constant and no SSE builder defined for it so queries containing this cannot be decoded from algebra.
I plan to do two things:
- Make expression classes return their Tags constant where they don't already and particularly in the cases where the two values aren't exact matches
- Fix the isNumeric case (and any others I discover) where there is no registered builder for the symbol