```
show functions | keep description, *on | mv_expand description
```

```
{
    "error": {
        "root_cause": [
            {
                "type": "unresolved_exception",
                "reason": "Invalid call to dataType on an unresolved object ?description"
            }
        ],
        "type": "unresolved_exception",
        "reason": "Invalid call to dataType on an unresolved object ?description"
    },
    "status": 500
}
```

```
org.elasticsearch.xpack.ql.capabilities.UnresolvedException: Invalid call to dataType on an unresolved object ?description
        at org.elasticsearch.xpack.ql.expression.UnresolvedAttribute.dataType(UnresolvedAttribute.java:90)
        at org.elasticsearch.xpack.esql.analysis.Analyzer$ResolveRefs.resolveMvExpand(Analyzer.java:350)
        at org.elasticsearch.xpack.esql.analysis.Analyzer$ResolveRefs.doRule(Analyzer.java:334)
        at org.elasticsearch.xpack.ql.analyzer.AnalyzerRules$BaseAnalyzerRule.rule(AnalyzerRules.java:120)
        at org.elasticsearch.xpack.ql.analyzer.AnalyzerRules$AnalyzerRule.lambda$apply$0(AnalyzerRules.java:85)
```

It should throw a VerificationException and propagate the unresolved attribute message instead
x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/analysis/Analyzer.java
}
        private static Expression stringToDate(Expression stringExpression) {
            var str = stringExpression.fold().toString();
            Long millis = null;
            
            try {
                millis = str == null ? null : DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER.parseMillis(str);
            } catch (Exception ex) { 
            }
            var source = stringExpression.source();
            Expression result;
            if (millis == null) {
                var errorMessage = format(null, "Invalid date [{}]", str);
                result = new UnresolvedAttribute(source, source.text(), null, errorMessage);
            } else {
                result = new Literal(source, millis, DATETIME);
            }
            return result;
        }
    }
    private BitSet gatherPreAnalysisMetrics(LogicalPlan plan, BitSet b) {
        
        if (plan.collectFirstChildren(Limit.class::isInstance).isEmpty() == false) {
            b.set(LIMIT.ordinal());
        }
        plan.forEachDown(p -> FeatureMetric.set(p, b));
        return b;
    }
}