Compare commits
	
		
			2 Commits
		
	
	
		
			510a126f4b
			...
			0ebe3a2a3a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 0ebe3a2a3a | |||
| f56df39be8 | 
							
								
								
									
										11
									
								
								document.go
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								document.go
									
									
									
									
									
								
							| @ -301,9 +301,9 @@ func (d *Document) Populate(fields ...string) { | |||||||
| 		for _, field := range fields { | 		for _, field := range fields { | ||||||
| 			// 0 = fieldname, 1 = typename, 2 = bson name
 | 			// 0 = fieldname, 1 = typename, 2 = bson name
 | ||||||
| 
 | 
 | ||||||
| 			r, _ := readFields(field, cm) | 			r, refOk := cm.references[field] | ||||||
| 
 | 
 | ||||||
| 			if r.exists { | 			if refOk { | ||||||
| 				// get self
 | 				// get self
 | ||||||
| 				// get ptr
 | 				// get ptr
 | ||||||
| 				// find
 | 				// find
 | ||||||
| @ -328,8 +328,11 @@ func (d *Document) Populate(fields ...string) { | |||||||
| 					asIDocument.markPopulated(field) | 					asIDocument.markPopulated(field) | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				tmp1 = populate(r, refColl.collection, rawDoc, field, reflect.ValueOf(d.self).Interface()) | 				v := reflect.ValueOf(d.self) | ||||||
| 				d.self = tmp1 | 				tt := v.Elem().Type() | ||||||
|  | 				tmp1 = populate(r, refColl.collection, rawDoc, field, d.self) | ||||||
|  | 				nv := reflect.NewAt(tt, v.UnsafePointer()) | ||||||
|  | 				nv.Elem().Set(reflect.ValueOf(tmp1).Elem()) | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | |||||||
							
								
								
									
										8
									
								
								query.go
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								query.go
									
									
									
									
									
								
							| @ -611,10 +611,18 @@ func (q *Query) Exec(result interface{}) { | |||||||
| 			imodel, ok := cur.Interface().(IDocument) | 			imodel, ok := cur.Interface().(IDocument) | ||||||
| 			if ok { | 			if ok { | ||||||
| 				imodel.setExists(true) | 				imodel.setExists(true) | ||||||
|  | 				imodel.SetSelf(imodel) | ||||||
| 				doc.Elem().Index(i).Set(reflect.ValueOf(imodel)) | 				doc.Elem().Index(i).Set(reflect.ValueOf(imodel)) | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	if idoc, ok := q.doc.(IDocument); ok { | ||||||
|  | 		idoc.SetSelf(result) | ||||||
|  | 	} | ||||||
|  | 	if rdoc, ok2 := result.(IDocument); ok2 { | ||||||
|  | 		rdoc.SetSelf(result) | ||||||
|  | 	} | ||||||
| 	reflect.ValueOf(result).Elem().Set(reflect.ValueOf(q.doc).Elem()) | 	reflect.ValueOf(result).Elem().Set(reflect.ValueOf(q.doc).Elem()) | ||||||
| 	q.done = true | 	q.done = true | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user