```
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
if (context.indexResolution().matches(table.index()) == false) {
                new EsqlUnresolvedRelation(
                    plan.source(),
                    plan.table(),
                    plan.metadataFields(),
                    "invalid [" + table + "] resolution to [" + context.indexResolution() + "]"
                );
            }
            EsIndex esIndex = context.indexResolution().get();
            var attributes = mappingAsAttributes(plan.source(), esIndex.mapping());
            attributes.addAll(plan.metadataFields());
            return new EsRelation(plan.source(), esIndex, attributes.isEmpty() ? NO_FIELDS : attributes);
        }
    }
    /**
     * Specific flattening method, different from the default EsRelation that:
     * 1. takes care of data type widening (for certain types)
     * 2. drops the object and keyword hierarchy
     */
    private static List<Attribute> mappingAsAttributes(Source source, Map<String, EsField> mapping) {
        var list = new ArrayList<Attribute>();
        mappingAsAttributes(list, source, null, mapping);
        list.sort(Comparator.comparing(Attribute::qualifiedName));
        return list;
    }
    private static void mappingAsAttributes(List<Attribute> list, Source source, String parentName, Map<String, EsField> mapping) {
        for (Map.Entry<String, EsField> entry : mapping.entrySet()) {
            String name = entry.getKey();
            EsField t = entry.getValue();
            if (t != null) {