Add whereSql for orm object
This commit is contained in:
		
							parent
							
								
									3e7e110590
								
							
						
					
					
						commit
						fb3da1f963
					
				| @ -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
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								orm.go
									
									
									
									
									
								
							| @ -17,7 +17,7 @@ type Orm struct { | ||||
| 	SqlVars    []interface{} | ||||
| 
 | ||||
| 	db          *sql.DB | ||||
| 	whereClause []interface{} | ||||
| 	whereClause []map[string]interface{} | ||||
| 	selectStr   string | ||||
| 	orderStr    string | ||||
| 	offsetInt   int | ||||
|  | ||||
| @ -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
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								sql.go
									
									
									
									
									
								
							| @ -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 | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu