### Description

For certain mappings the following query:
```
POST _query?error_trace
{
  “query”: “”"
  from * [metadata _index] | limit 10000
  “”"
}
```

triggers a CCE:
```
{ "error": {
    "root_cause": [
      {
        "type": "class_cast_exception",
        "reason": "class org.elasticsearch.xpack.ql.type.UnsupportedEsField cannot be cast to class org.elasticsearch.xpack.ql.type.InvalidMappedField (org.elasticsearch.xpack.ql.type.UnsupportedEsField and org.elasticsearch.xpack.ql.type.InvalidMappedField are in unnamed module of loader java.net.FactoryURLClassLoader @6eb5b9e7)",
        "stack_trace": """org.elasticsearch.ElasticsearchException$1: class org.elasticsearch.xpack.ql.type.UnsupportedEsField cannot be cast to class org.elasticsearch.xpack.ql.type.InvalidMappedField (org.elasticsearch.xpack.ql.type.UnsupportedEsField and org.elasticsearch.xpack.ql.type.InvalidMappedField are in unnamed module of loader java.net.FactoryURLClassLoader @6eb5b9e7)

Caused by: java.lang.ClassCastException: class org.elasticsearch.xpack.ql.type.UnsupportedEsField cannot be cast to class 
org.elasticsearch.xpack.ql.type.InvalidMappedField (org.elasticsearch.xpack.ql.type.UnsupportedEsField and org.elasticsearch.xpack.ql.type.InvalidMappedField are in unnamed module of loader java.net.FactoryURLClassLoader @6eb5b9e7)
	at org.elasticsearch.xpack.ql.index.IndexResolver.buildIndices(IndexResolver.java:771)
	at org.elasticsearch.xpack.ql.index.IndexResolver.mergedMappings(IndexResolver.java:466)
	at org.elasticsearch.xpack.ql.index.IndexResolver.lambda$resolveAsMergedMapping$8(IndexResolver.java:381)
	at org.elasticsearch.server@8.11.0/org.elasticsearch.action.ActionListenerImplementations$ResponseWrappingActionListener.onResponse(ActionListenerImplementations.java:236)
	... 21 more
```
x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/analysis/index/IndexResolverTests.java
assertEquals(indicesCount, actualIndices.size());
        for (int i = 0; i < indicesCount; i++) {
            assertEqualsMaps(expectedIndices[i].mapping(), actualIndices.get(i).mapping());
            assertEquals(Set.of(expectedIndices[i].name()), actualIndices.get(i).concreteIndices());
        }
    }
    public void testMergeConcreteIndices() {
        int indicesCount = randomIntBetween(2, 15);
        EsIndex[] expectedIndices = new EsIndex[indicesCount];
        Set<String> indexNames = new HashSet<>();
        for (int i = 0; i < indicesCount; i++) {
            Map<String, EsField> mapping = Maps.newMapWithExpectedSize(1);
            String fieldName = "field" + (i + 1);
            mapping.put(fieldName, new KeywordEsField(fieldName));
            String indexName = "index" + (i + 1);
            expectedIndices[i] = new EsIndex(indexName, mapping, Set.of(indexName));
            indexNames.add(indexName);
        }
        IndexResolution resolution = merge(expectedIndices);
        assertEquals(indicesCount, resolution.get().mapping().size());
        assertEquals(indexNames, resolution.get().concreteIndices());
    }
    public void testIndexWithNoMapping() {
        Map<String, Map<String, FieldCapabilities>> versionFC = singletonMap(
            "_version",
            singletonMap(
                "_index",
                new FieldCapabilities("_version", "_version", true, false, false, null, null, null, Collections.emptyMap())
            )
        );