in spark/client/client.go [141:174]
func (s *sparkConnectClientImpl) Explain(ctx context.Context, plan *proto.Plan,
explainMode utils.ExplainMode,
) (*proto.AnalyzePlanResponse, error) {
var mode proto.AnalyzePlanRequest_Explain_ExplainMode
if explainMode == utils.ExplainModeExtended {
mode = proto.AnalyzePlanRequest_Explain_EXPLAIN_MODE_EXTENDED
} else if explainMode == utils.ExplainModeSimple {
mode = proto.AnalyzePlanRequest_Explain_EXPLAIN_MODE_SIMPLE
} else if explainMode == utils.ExplainModeCost {
mode = proto.AnalyzePlanRequest_Explain_EXPLAIN_MODE_COST
} else if explainMode == utils.ExplainModeFormatted {
mode = proto.AnalyzePlanRequest_Explain_EXPLAIN_MODE_FORMATTED
} else if explainMode == utils.ExplainModeCodegen {
mode = proto.AnalyzePlanRequest_Explain_EXPLAIN_MODE_CODEGEN
} else {
return nil, sparkerrors.WithType(fmt.Errorf("unsupported explain mode %v",
explainMode), sparkerrors.InvalidArgumentError)
}
request := s.newAnalyzePlanStub()
request.Analyze = &proto.AnalyzePlanRequest_Explain_{
Explain: &proto.AnalyzePlanRequest_Explain{
Plan: plan,
ExplainMode: mode,
},
}
// Append the other items to the request.
ctx = metadata.NewOutgoingContext(ctx, s.metadata)
response, err := s.client.AnalyzePlan(ctx, &request)
if se := sparkerrors.FromRPCError(err); se != nil {
return nil, sparkerrors.WithType(se, sparkerrors.ExecutionError)
}
return response, nil
}