| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- package xorm
- import (
- "strings"
- "time"
- )
- type SqlExecutor struct {
- session *Session
- sqls interface{}
- parmas interface{}
- err error
- }
- func (sqlExecutor *SqlExecutor) Execute() ([][]map[string]interface{}, map[string][]map[string]interface{}, error) {
- if sqlExecutor.err != nil {
- return nil, nil, sqlExecutor.err
- }
- switch sqlExecutor.sqls.(type) {
- case string:
- sqlstr := strings.TrimLeft(sqlExecutor.sqls.(string), " \n")
- sqlCmd := strings.ToLower(strings.Split(sqlstr, " ")[0])
- if sqlExecutor.parmas == nil {
- switch sqlCmd {
- case "select", "desc":
- rsults := sqlExecutor.session.Sql(sqlstr).Query()
- if rsults.Error != nil {
- return nil, nil, rsults.Error
- }
- resultSlice := make([][]map[string]interface{}, 1)
- resultSlice[0] = rsults.Results
- return resultSlice, nil, nil
- case "insert", "delete", "update":
- rsults, err := sqlExecutor.session.Sql(sqlstr).Execute()
- if err != nil {
- return nil, nil, err
- }
- resultSlice := make([][]map[string]interface{}, 1)
- resultMap := make([]map[string]interface{}, 1)
- resultMap[0] = make(map[string]interface{})
- //todo all database support LastInsertId
- LastInsertId, _ := rsults.LastInsertId()
- resultMap[0]["LastInsertId"] = LastInsertId
- RowsAffected, err := rsults.RowsAffected()
- if err != nil {
- return nil, nil, err
- }
- resultMap[0]["RowsAffected"] = RowsAffected
- resultSlice[0] = resultMap
- return resultSlice, nil, nil
- }
- } else {
- switch sqlExecutor.parmas.(type) {
- case []map[string]interface{}:
- parmaMap, ok := sqlExecutor.parmas.([]map[string]interface{})
- if !ok {
- return nil, nil, ErrParamsType
- }
- switch sqlCmd {
- case "select", "desc":
- rsults := sqlExecutor.session.Sql(sqlstr, &parmaMap[0]).Query()
- if rsults.Error != nil {
- return nil, nil, rsults.Error
- }
- resultSlice := make([][]map[string]interface{}, 1)
- resultSlice[0] = rsults.Results
- return resultSlice, nil, nil
- case "insert", "delete", "update":
- rsults, err := sqlExecutor.session.Sql(sqlstr, &parmaMap[0]).Execute()
- if err != nil {
- return nil, nil, err
- }
- resultSlice := make([][]map[string]interface{}, 1)
- resultMap := make([]map[string]interface{}, 1)
- resultMap[0] = make(map[string]interface{})
- LastInsertId, _ := rsults.LastInsertId()
- resultMap[0]["LastInsertId"] = LastInsertId
- RowsAffected, err := rsults.RowsAffected()
- if err != nil {
- return nil, nil, err
- }
- resultMap[0]["RowsAffected"] = RowsAffected
- resultSlice[0] = resultMap
- return resultSlice, nil, nil
- }
- case map[string]interface{}:
- parmaMap, ok := sqlExecutor.parmas.(map[string]interface{})
- if !ok {
- return nil, nil, ErrParamsType
- }
- switch sqlCmd {
- case "select", "desc":
- key := NewV4().String() + time.Now().String()
- sqlExecutor.session.Engine.AddSql(key, sqlstr)
- rsults := sqlExecutor.session.SqlMapClient(key, &parmaMap).Query()
- sqlExecutor.session.Engine.RemoveSql(key)
- if rsults.Error != nil {
- return nil, nil, rsults.Error
- }
- resultSlice := make([][]map[string]interface{}, 1)
- resultSlice[0] = rsults.Results
- return resultSlice, nil, nil
- case "insert", "delete", "update":
- rsults, err := sqlExecutor.session.Sql(sqlstr, &parmaMap).Execute()
- if err != nil {
- return nil, nil, err
- }
- resultSlice := make([][]map[string]interface{}, 1)
- resultMap := make([]map[string]interface{}, 1)
- resultMap[0] = make(map[string]interface{})
- LastInsertId, _ := rsults.LastInsertId()
- resultMap[0]["LastInsertId"] = LastInsertId
- RowsAffected, err := rsults.RowsAffected()
- if err != nil {
- return nil, nil, err
- }
- resultMap[0]["RowsAffected"] = RowsAffected
- resultSlice[0] = resultMap
- return resultSlice, nil, nil
- }
- default:
- return nil, nil, ErrParamsType
- }
- }
- case []string:
- if sqlExecutor.session.IsSqlFuc == true {
- err := sqlExecutor.session.Begin()
- if err != nil {
- return nil, nil, err
- }
- }
- case map[string]string:
- if sqlExecutor.session.IsSqlFuc == true {
- err := sqlExecutor.session.Begin()
- if err != nil {
- return nil, nil, err
- }
- }
- }
- return nil, nil, nil
- }
- //func (sqlExecutor *SqlExecutor) Execute() (interface{}, error) {
- // switch sqlExecutor.sqls.(type) {
- // case string:
- // sqlstr := strings.TrimLeft(sqlExecutor.sqls.(string), " \n")
- // sqlCmd := strings.ToLower(strings.Split(sqlstr, " ")[0])
- // switch sqlExecutor.parmasCount {
- // case 0:
- // switch sqlCmd {
- // case "select", "desc":
- // rsults := sqlExecutor.session.Sql(sqlstr).Query()
- // if rsults.Error != nil {
- // return nil, rsults.Error
- // }
- // return rsults.Results, nil
- // case "insert", "delete", "update":
- // return sqlExecutor.session.Sql(sqlstr).Execute()
- // }
- // case 1:
- // switch sqlExecutor.parmas.(type) {
- // case map[string]interface{}:
- // switch sqlCmd {
- // case "select", "desc":
- // case "insert", "delete", "update":
- // }
- // default:
- // switch sqlCmd {
- // case "select", "desc":
- // case "insert", "delete", "update":
- // }
- // }
- // default:
- // switch sqlCmd {
- // case "select", "desc":
- // case "insert", "delete", "update":
- // }
- // }
- // case []string:
- // if sqlExecutor.session.IsSqlFuc == true {
- // err := sqlExecutor.session.Begin()
- // if err != nil {
- // return nil, err
- // }
- // }
- // case map[string]string:
- // if sqlExecutor.session.IsSqlFuc == true {
- // err := sqlExecutor.session.Begin()
- // if err != nil {
- // return nil, err
- // }
- // }
- // }
- // return 1, nil
- //}
|