package main

import (
	"PsycheEpic/src/config"
	"PsycheEpic/src/datasource"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
)

// 定义一个结构体，用于接收存储过程的输出参数
/*
type Result struct {
	OutParam int `xorm:"out_param"`
}
*/

func main() {
	config.InitConfig()
	datasource.InitMysql()
	// 创建一个存储过程，接收一个输入参数in_param，返回一个输出参数out_param
	// 存储过程的逻辑是将输入参数加10后赋值给输出参数
	sql := `CREATE PROCEDURE add_ten(IN in_param INT, OUT out_param INT)
	  BEGIN
	      SET out_param = in_param + 10;
	  END`

	_, err := datasource.Engine.Exec(sql)
	if err != nil {
		fmt.Println(err)
		return
	}

	// 调用存储过程，传入一个输入参数10，使用一个Result结构体变量接收输出参数
	var out_param int
	_, err = datasource.Engine.Exec("CALL add_ten(?,  @out_param)", 10)
	if err != nil {
		fmt.Println(err)
		return
	}
	// 从MySQL中获取存储过程的输出参数
	_, err = datasource.Engine.SQL("SELECT @out_param").Get(&out_param)
	if err != nil {
		fmt.Println(err)
		return
	}
	// 打印输出参数的值，应该是20
	fmt.Println(out_param)

}
