Skip to content

SQL: 500 from analyzer, checkClientSupportsDataTypes seemingly called on an UnresolvedAlias #122751

Open
@alex-spies

Description

@alex-spies

Stack trace:

        "org.elasticsearch.xpack.ql.capabilities.UnresolvedException: Invalid call to attribute on an unresolved object ?* AS ?    
  \tat org.elasticsearch.xpack.ql.expression.UnresolvedNamedExpression.toAttribute(UnresolvedNamedExpression.java:44)
  \tat org.elasticsearch.xpack.ql.expression.Expressions.asAttributes(Expressions.java:40)    
  \tat org.elasticsearch.xpack.ql.plan.logical.Project.output(Project.java:62)    
  \tat org.elasticsearch.xpack.sql.analysis.analyzer.Verifier.checkClientSupportsDataTypes(Verifier.java:1002)    
  \tat org.elasticsearch.xpack.sql.analysis.analyzer.Verifier.verify(Verifier.java:243)    
  \tat org.elasticsearch.xpack.sql.analysis.analyzer.Analyzer.verify(Analyzer.java:139)    
  \tat org.elasticsearch.xpack.sql.analysis.analyzer.Analyzer.analyze(Analyzer.java:131)    
  \tat org.elasticsearch.xpack.sql.session.SqlSession.lambda$analyzedPlan$0(SqlSession.java:124)    
  \tat org.elasticsearch.xpack.sql.session.SqlSession.lambda$preAnalyze$2(SqlSession.java:169)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.action.ActionListenerImplementations$ResponseWrappingActionListener.onResponse(ActionListenerImplementations.java:247)    
  \tat org.elasticsearch.xpack.ql.index.IndexResolver.lambda$resolveAsMergedMapping$7(IndexResolver.java:402)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.action.ActionListenerImplementations$ResponseWrappingActionListener.onResponse(ActionListenerImplementations.java:247)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.tasks.TaskManager$1.onResponse(TaskManager.java:203)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.tasks.TaskManager$1.onResponse(TaskManager.java:197)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.action.ActionListenerImplementations$RunBeforeActionListener.onResponse(ActionListenerImplementations.java:336)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.action.support.ContextPreservingActionListener.onResponse(ContextPreservingActionListener.java:33)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.action.ActionListenerImplementations$MappedActionListener.onResponse(ActionListenerImplementations.java:97)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.action.ActionListener.completeWith(ActionListener.java:362)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.action.fieldcaps.TransportFieldCapabilitiesAction.mergeIndexResponses(TransportFieldCapabilitiesAction.java:337)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.action.fieldcaps.TransportFieldCapabilitiesAction.lambda$doExecuteForked$7(TransportFieldCapabilitiesAction.java:236)    
  \tat org.elasticsearch.base@9.1.0/org.elasticsearch.core.AbstractRefCounted$1.closeInternal(AbstractRefCounted.java:125)    
  \tat org.elasticsearch.base@9.1.0/org.elasticsearch.core.AbstractRefCounted.decRef(AbstractRefCounted.java:77)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.action.support.RefCountingRunnable.close(RefCountingRunnable.java:113)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.common.util.concurrent.RunOnce.run(RunOnce.java:41)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.action.fieldcaps.RequestDispatcher.innerExecute(RequestDispatcher.java:158)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.action.fieldcaps.RequestDispatcher$1.doRun(RequestDispatcher.java:127)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:27)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:34)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:1044)    
  \tat org.elasticsearch.server@9.1.0/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:27)    
  \tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)    
  \tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)    
  \tat java.base/java.lang.Thread.run(Thread.java:1575)

checkClientSupportsDataTypes calls Project.output(), even though the Project (probably corresponding to a SELECT clause) still has an UnresolvedNamedExpression - which looks to be an UnresolvedAlias going by the toString of it being ?* AS ?. (This matches UnresolvedAlias.toString() when the child is an unresolved attribute called *.)

Either

  • there should have been a check before checkClientSupportsDataTypes was called to see if the plan is even resolved, or
  • we should never have reached there in the first place because the presumed unresolved alias should've caused a failure earlier on.

Metadata

Metadata

Assignees

No one assigned

    Labels

    :Analytics/SQLSQL querying>bugTeam:AnalyticsMeta label for analytical engine team (ESQL/Aggs/Geo)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions