add RawMap
This commit is contained in:
parent
6842b49a1a
commit
7155023d16
35
main.go
35
main.go
@ -443,6 +443,41 @@ func (s *DB) Raw(sql string, values ...interface{}) *DB {
|
|||||||
return s.clone().search.Raw(true).Where(sql, values...).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
|
// Exec execute raw sql
|
||||||
func (s *DB) Exec(sql string, values ...interface{}) *DB {
|
func (s *DB) Exec(sql string, values ...interface{}) *DB {
|
||||||
scope := s.NewScope(nil)
|
scope := s.NewScope(nil)
|
||||||
|
14
main_test.go
14
main_test.go
@ -11,7 +11,6 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/erikstmartin/go-testdb"
|
|
||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
_ "github.com/jinzhu/gorm/dialects/mssql"
|
_ "github.com/jinzhu/gorm/dialects/mssql"
|
||||||
_ "github.com/jinzhu/gorm/dialects/mysql"
|
_ "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) {
|
func TestGroup(t *testing.T) {
|
||||||
rows, err := DB.Select("name").Table("users").Group("name").Rows()
|
rows, err := DB.Select("name").Table("users").Group("name").Rows()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user