Add whereSql for orm object

This commit is contained in:
Jinzhu 2013-10-26 14:10:47 +08:00
parent 3e7e110590
commit fb3da1f963
5 changed files with 29 additions and 8 deletions

View File

@ -4,8 +4,8 @@ Yet Another ORM library for Go, hope sucks less. (created for internal usage, AP
# TODO
Where("id =/>/</<> ?", string or int64).First(&user) (error)
Where("id in ?", map[]interface{}).First(&user) (error)
Where("id in ?", map[]interface{}).Find(&users) (error)
Where("id in (?)", map[]interface{}).First(&user) (error)
Where("id in (?)", map[]interface{}).Find(&users) (error)
Where(map[string]string{"id": "12", "name": "jinzhu"}).Find(&users) (error)
Order("").Limit(11).Or("").Count().Select("").Not("").Offset(11)

2
orm.go
View File

@ -17,7 +17,7 @@ type Orm struct {
SqlVars []interface{}
db *sql.DB
whereClause []interface{}
whereClause []map[string]interface{}
selectStr string
orderStr string
offsetInt int

View File

@ -38,8 +38,11 @@ func TestSaveAndFirst(t *testing.T) {
func TestWhere(t *testing.T) {
db := getDB()
orm := db.Where("id = $1", 1, 3, 4, []int64{1, 2, 3}).Where("name = $1", "jinzhu")
u := &User{Name: "jinzhu"}
db.Save(u)
user := &User{}
orm.First(user)
db.Where("Name = ?", "jinzhu").First(user)
fmt.Println(user)
}

19
sql.go
View File

@ -3,6 +3,7 @@ package gorm
import (
"fmt"
"reflect"
"strconv"
"strings"
)
@ -20,7 +21,7 @@ func (s *Orm) explain(value interface{}, operation string) *Orm {
}
func (s *Orm) querySql(out interface{}) {
s.Sql = "SELECT * from users limit 1"
s.Sql = fmt.Sprintf("SELECT * FROM %v %v", s.TableName, s.whereSql())
return
}
@ -36,7 +37,7 @@ func (s *Orm) query(out interface{}) {
dest_type = dest_out.Type().Elem()
}
rows, err := s.db.Query(s.Sql)
rows, err := s.db.Query(s.Sql, s.SqlVars...)
s.Error = err
for rows.Next() {
@ -75,6 +76,18 @@ func (s *Orm) deleteSql(value interface{}) {
}
func (s *Orm) whereSql() (sql string) {
sql = "1=1"
if len(s.whereClause) == 0 {
return
} else {
sql = "WHERE "
for _, clause := range s.whereClause {
sql += clause["query"].(string)
args := clause["args"].([]interface{})
for _, arg := range args {
s.SqlVars = append(s.SqlVars, arg.([]interface{})...)
sql = strings.Replace(sql, "?", "$"+strconv.Itoa(len(s.SqlVars)), 1)
}
}
}
return
}

View File

@ -34,3 +34,8 @@ func quoteMap(values []string) (results []string) {
}
return
}
func debug(value interface{}) {
fmt.Printf("***************\n")
fmt.Printf("%+v\n\n", value)
}