func (p *Procedure) Schema() sql.Schema {
	return p.Body.Schema()
}
Schema implements the sql.Node interface.
package plan
import (
	"fmt"
	"strings"
	"time"
	"github.com/dolthub/go-mysql-server/sql"
)
type ProcedureSecurityContext byte
const (
	ProcedureSecurityContext_Definer ProcedureSecurityContext = iota
	ProcedureSecurityContext_Invoker
)
type ProcedureParamDirection byte
const (
	ProcedureParamDirection_In ProcedureParamDirection = iota
	ProcedureParamDirection_Inout
	ProcedureParamDirection_Out
)
type ProcedureParam struct {
	Direction ProcedureParamDirection  
	Name      string                   
	Type      sql.Type                 
}
type Characteristic byte
const (
	Characteristic_LanguageSql Characteristic = iota
	Characteristic_Deterministic
	Characteristic_NotDeterministic
	Characteristic_ContainsSql
	Characteristic_NoSql
	Characteristic_ReadsSqlData
	Characteristic_ModifiesSqlData
)
type Procedure struct {
	Name                  string
	Definer               string
	Params                []ProcedureParam
	SecurityContext       ProcedureSecurityContext
	Comment               string
	Characteristics       []Characteristic
	CreateProcedureString string
	Body                  sql.Node
	CreatedAt             time.Time
	ModifiedAt            time.Time
}
var _ sql.Node = (*Procedure)(nil)
var _ sql.DebugStringer = (*Procedure)(nil)
func NewProcedure(
	name string,
	definer string,
	params []ProcedureParam,
	securityContext ProcedureSecurityContext,
	comment string,
	characteristics []Characteristic,
	createProcedureString string,
	body sql.Node,
	createdAt time.Time,
	modifiedAt time.Time,
) *Procedure {
	lowercasedParams := make([]ProcedureParam, len(params))
	for i, param := range params {
		lowercasedParams[i] = ProcedureParam{
			Direction: param.Direction,
			Name:      strings.ToLower(param.Name),
			Type:      param.Type,
		}
	}
	return &Procedure{
		Name:                  strings.ToLower(name),
		Definer:               definer,
		Params:                lowercasedParams,
		SecurityContext:       securityContext,
		Comment:               comment,
		Characteristics:       characteristics,
		CreateProcedureString: createProcedureString,
		Body:                  body,
		CreatedAt:             createdAt,
		ModifiedAt:            modifiedAt,
	}
}
func (p *Procedure) Resolved() bool {
	return p.Body.Resolved()
}
func (p *Procedure) String() string {
	return p.Body.String()
}
func (p *Procedure) DebugString() string {
	return sql.DebugString(p.Body)
}