add RawMap

This commit is contained in:
jetereting 2018-04-24 11:10:01 +08:00
parent 6842b49a1a
commit 7155023d16
2 changed files with 48 additions and 1 deletions

35
main.go
View File

@ -443,6 +443,41 @@ func (s *DB) Raw(sql string, values ...interface{}) *DB {
return s.clone().search.Raw(true).Where(sql, values...).db
}
// RawMap sql查询返回[]map[string]string类型
func (s *DB) RawMap(sqlQuery string, sqlValues ...interface{}) (result []map[string]string, err error) {
rows, err := s.Raw(sqlQuery, sqlValues...).Rows()
if err != nil {
return
}
cols, err := rows.Columns()
if err != nil {
return
}
values := make([]sql.RawBytes, len(cols))
scanArgs := make([]interface{}, len(values))
for i := range values {
scanArgs[i] = &values[i]
}
for rows.Next() {
err = rows.Scan(scanArgs...)
if err != nil {
return
}
var value string
resultC := map[string]string{}
for i, col := range values {
if col == nil {
value = "NULL"
} else {
value = string(col)
}
resultC[cols[i]] = value
}
result = append(result, resultC)
}
return
}
// Exec execute raw sql
func (s *DB) Exec(sql string, values ...interface{}) *DB {
scope := s.NewScope(nil)

View File

@ -11,7 +11,6 @@ import (
"testing"
"time"
"github.com/erikstmartin/go-testdb"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mssql"
_ "github.com/jinzhu/gorm/dialects/mysql"
@ -511,6 +510,19 @@ func TestRaw(t *testing.T) {
}
}
func TestRawMap(t *testing.T) {
user1 := User{Name: "ExecRawSqlUser1", Age: 1, Birthday: parseTime("2000-1-1")}
user2 := User{Name: "ExecRawSqlUser2", Age: 10, Birthday: parseTime("2010-1-1")}
user3 := User{Name: "ExecRawSqlUser3", Age: 20, Birthday: parseTime("2020-1-1")}
DB.Save(&user1).Save(&user2).Save(&user3)
datas, err := DB.TestRawMap("SELECT name, age FROM users WHERE name = ? or name = ?", user2.Name, user3.Name)
if err != nil {
t.Errorf("somethings wrong:%s", err.Error())
return
}
fmt.Println("datas:", datas)
}
func TestGroup(t *testing.T) {
rows, err := DB.Select("name").Table("users").Group("name").Rows()