|
|
@@ -0,0 +1,221 @@
|
|
|
+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
|
|
|
+//}
|