浏览代码

add Execute function

xormplus 9 年之前
父节点
当前提交
860a80ba4c
共有 1 个文件被更改,包括 30 次插入7 次删除
  1. 30 7
      sessionplus.go

+ 30 - 7
sessionplus.go

@@ -226,11 +226,11 @@ func (session *Session) Query() ResultMap {
 	i := len(params)
 	var result []map[string]interface{}
 	var err error
-	if i == 1  {
+	if i == 1 {
 		vv := reflect.ValueOf(params[0])
 		if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map {
 			result, err = session.queryAll(sql, params...)
-		}else{
+		} else {
 			result, err = session.queryAllByMap(sql, params[0])
 		}
 	} else {
@@ -247,11 +247,11 @@ func (session *Session) QueryWithDateFormat(dateFormat string) ResultMap {
 	i := len(params)
 	var result []map[string]interface{}
 	var err error
-	if i == 1  {
+	if i == 1 {
 		vv := reflect.ValueOf(params[0])
 		if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map {
 			result, err = session.queryAllWithDateFormat(dateFormat, sql, params...)
-		}else{
+		} else {
 			result, err = session.queryAllByMapWithDateFormat(dateFormat, sql, params[0])
 		}
 	} else {
@@ -261,6 +261,29 @@ func (session *Session) QueryWithDateFormat(dateFormat string) ResultMap {
 	return r
 }
 
+// Execute raw sql
+func (session *Session) Execute() (sql.Result, error) {
+	sqlStr := session.Statement.RawSQL
+	params := session.Statement.RawParams
+	defer session.resetStatement()
+	if session.IsAutoClose {
+		defer session.Close()
+	}
+
+	i := len(params)
+	if i == 1 {
+		vv := reflect.ValueOf(params[0])
+		if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map {
+			return session.exec(sqlStr, params...)
+		} else {
+			sqlStr1, args, _ := core.MapToSlice(sqlStr, params[0])
+			return session.exec(sqlStr1, args...)
+		}
+	} else {
+		return session.exec(sqlStr, params...)
+	}
+}
+
 // =============================
 // for Object
 // =============================
@@ -593,7 +616,7 @@ func (session *Session) _row2BeanWithDateFormat(dateFormat string, rows *core.Ro
 
 						fieldValue.Set(reflect.ValueOf(t).Convert(fieldType))
 					} else if rawValueType == core.IntType || rawValueType == core.Int64Type ||
-					rawValueType == core.Int32Type {
+						rawValueType == core.Int32Type {
 						hasAssigned = true
 						var tz *time.Location
 						if col.TimeZone == nil {
@@ -828,8 +851,8 @@ func (session *Session) _row2BeanWithDateFormat(dateFormat string, rows *core.Ro
 					}
 					hasAssigned = true
 				} // switch fieldType
-			// default:
-			// 	session.Engine.LogError("unsupported type in Scan: ", reflect.TypeOf(v).String())
+				// default:
+				// 	session.Engine.LogError("unsupported type in Scan: ", reflect.TypeOf(v).String())
 			} // switch fieldType.Kind()
 
 			// !nashtsai! for value can't be assigned directly fallback to convert to []byte then back to value