Code review comment: No, currently only direct rewriting of generated columns is supported.

Code under review:
public Scope visitSelect(SelectRelation selectRelation, Scope scope) {
            AnalyzeState analyzeState = new AnalyzeState();
            
            Set<TableName> aliasSet = new HashSet<>();
            Relation resolvedRelation = resolveTableRef(selectRelation.getRelation(), scope, aliasSet);
            if (resolvedRelation instanceof TableFunctionRelation) {
                throw unsupportedException("Table function must be used with lateral join");
            }
            selectRelation.setRelation(resolvedRelation);
            Scope sourceScope = process(resolvedRelation, scope);
            sourceScope.setParent(scope);

            Map<Expr, SlotRef> generatedExprToColumnRef = new HashMap<>();
            new AstVisitor<Void, Void>() {
                @Override
                public Void visitTable(TableRelation tableRelation, Void context) {
                    generatedExprToColumnRef.putAll(tableRelation.getGeneratedExprToColumnRef());
                    return null;
                }

                @Override
                public Void visitJoin(JoinRelation joinRelation, Void context) {
                    visit(joinRelation.getLeft());
                    visit(joinRelation.getRight());
                    return null;
                }
            }.visit(resolvedRelation);
            analyzeState.setGeneratedExprToColumnRef(generatedExprToColumnRef);

            SelectAnalyzer selectAnalyzer = new SelectAnalyzer(session);
            selectAnalyzer.analyze(
                    analyzeState,
                    selectRelation.getSelectList(),
                    selectRelation.getRelation(),
                    sourceScope,
                    selectRelation.getGroupByClause(),
                    selectRelation.getHavingClause(),
                    selectRelation.getWhereClause(),
                    selectRelation.getOrderBy(),
                    selectRelation.getLimit());

            selectRelation.fillResolvedAST(analyzeState);
            return analyzeState.getOutputScope();
        }

Line commented on: return null;

Revised code:
public Scope visitSelect(SelectRelation selectRelation, Scope scope) {
            AnalyzeState analyzeState = new AnalyzeState();
            
            Set<TableName> aliasSet = new HashSet<>();
            Relation resolvedRelation = resolveTableRef(selectRelation.getRelation(), scope, aliasSet);
            if (resolvedRelation instanceof TableFunctionRelation) {
                throw unsupportedException("Table function must be used with lateral join");
            }
            selectRelation.setRelation(resolvedRelation);
            Scope sourceScope = process(resolvedRelation, scope);
            sourceScope.setParent(scope);

            Map<Expr, SlotRef> generatedExprToColumnRef = new HashMap<>();
            new AstVisitor<Void, Void>() {
                @Override
                public Void visitTable(TableRelation tableRelation, Void context) {
                    generatedExprToColumnRef.putAll(tableRelation.getGeneratedExprToColumnRef());
                    return null;
                }

                @Override
                public Void visitJoin(JoinRelation joinRelation, Void context) {
                    visit(joinRelation.getLeft());
                    visit(joinRelation.getRight());
                    return null;
                }
            }.visit(resolvedRelation);
            analyzeState.setGeneratedExprToColumnRef(generatedExprToColumnRef);

            SelectAnalyzer selectAnalyzer = new SelectAnalyzer(session);
            selectAnalyzer.analyze(
                    analyzeState,
                    selectRelation.getSelectList(),
                    selectRelation.getRelation(),
                    sourceScope,
                    selectRelation.getGroupByClause(),
                    selectRelation.getHavingClause(),
                    selectRelation.getWhereClause(),
                    selectRelation.getOrderBy(),
                    selectRelation.getLimit());

            selectRelation.fillResolvedAST(analyzeState);
            return analyzeState.getOutputScope();
        }