gorm/sql.go
2013-10-26 11:59:58 +08:00

65 lines
1.2 KiB
Go

package gorm
import (
"reflect"
"strings"
"fmt"
)
func (s *Orm) explain(value interface{}, operation string) *Orm {
s.setModel(value)
switch operation {
case "Save":
s.saveSql(value)
case "Delete":
s.deleteSql(value)
case "Query":
s.querySql(value)
}
return s
}
func (s *Orm) querySql(out interface{}) {
s.Sql = "SELECT * from users limit 1"
return
}
func (s *Orm) query(out interface{}) {
rows, err := s.db.Query(s.Sql)
s.Error = err
for rows.Next() {
dest := reflect.ValueOf(out).Elem()
fmt.Printf("%+v", dest)
columns, _ := rows.Columns()
var values []interface{}
for _, value := range columns {
values = append(values, dest.FieldByName(value).Addr().Interface())
}
s.Error = rows.Scan(values...)
}
return
}
func (s *Orm) saveSql(value interface{}) {
columns, values := modelValues(value)
s.Sql = fmt.Sprintf(
"INSERT INTO \"%v\" (%v) VALUES (%v)",
s.TableName,
strings.Join(quoteMap(columns), ","),
valuesToBinVar(values),
)
s.SqlVars = values
return
}
func (s *Orm) deleteSql(value interface{}) {
s.Sql = fmt.Sprintf("DELETE FROM %v WHERE %v", s.TableName, s.whereSql)
return
}
func (s *Orm) whereSql() (sql string) {
sql = "1=1"
return
}