they were added before VirtualColumn was introduced and I think a better alternative now could be to have a extractionFn based VirtualColumn that could be used and expression based virtual column exists already.
That way, all the filter and aggregator implementations don't need to handle them in different places.