func()

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
}