refactor: replace GetText() calls with AST-based parsing in visitor
Improves performance and resilience by eliminating unnecessary string conversions and text comparisons. Changes include:
- Use union.ALL() token check instead of string contains for UNION ALL
- Add hasWildcard() helper to check for '*' terminal nodes directly
- Add extractSimpleVariable() to validate simple variable expressions
- Add containsAggregateFunction() to recursively detect aggregates via AST
- Replace visitNotExpr text parsing with ctx.AllNOT() token counting
This reduces reliance on GetText() which performs text rendering of the AST, making the translator more efficient and less error-prone.