[orm] QueryTable with nil ptr struct
Showing
3 changed files
with
12 additions
and
3 deletions
| ... | @@ -274,9 +274,7 @@ func (o *orm) QueryTable(ptrStructOrTableName interface{}) (qs QuerySeter) { | ... | @@ -274,9 +274,7 @@ func (o *orm) QueryTable(ptrStructOrTableName interface{}) (qs QuerySeter) { |
| 274 | qs = newQuerySet(o, mi) | 274 | qs = newQuerySet(o, mi) |
| 275 | } | 275 | } |
| 276 | } else { | 276 | } else { |
| 277 | val := reflect.ValueOf(ptrStructOrTableName) | 277 | name = getFullName(indirectType(reflect.TypeOf(ptrStructOrTableName))) |
| 278 | ind := reflect.Indirect(val) | ||
| 279 | name = getFullName(ind.Type()) | ||
| 280 | if mi, ok := modelCache.getByFN(name); ok { | 278 | if mi, ok := modelCache.getByFN(name); ok { |
| 281 | qs = newQuerySet(o, mi) | 279 | qs = newQuerySet(o, mi) |
| 282 | } | 280 | } | ... | ... |
| ... | @@ -473,6 +473,7 @@ The program—and web server—godoc processes Go source files to extract docume | ... | @@ -473,6 +473,7 @@ The program—and web server—godoc processes Go source files to extract docume |
| 473 | func TestExpr(t *testing.T) { | 473 | func TestExpr(t *testing.T) { |
| 474 | user := &User{} | 474 | user := &User{} |
| 475 | qs := dORM.QueryTable(user) | 475 | qs := dORM.QueryTable(user) |
| 476 | qs = dORM.QueryTable((*User)(nil)) | ||
| 476 | qs = dORM.QueryTable("User") | 477 | qs = dORM.QueryTable("User") |
| 477 | qs = dORM.QueryTable("user") | 478 | qs = dORM.QueryTable("user") |
| 478 | num, err := qs.Filter("UserName", "slene").Filter("user_name", "slene").Filter("profile__Age", 28).Count() | 479 | num, err := qs.Filter("UserName", "slene").Filter("user_name", "slene").Filter("profile__Age", 28).Count() | ... | ... |
| ... | @@ -231,3 +231,13 @@ func timeParse(dateString, format string) (time.Time, error) { | ... | @@ -231,3 +231,13 @@ func timeParse(dateString, format string) (time.Time, error) { |
| 231 | func timeFormat(t time.Time, format string) string { | 231 | func timeFormat(t time.Time, format string) string { |
| 232 | return t.Format(format) | 232 | return t.Format(format) |
| 233 | } | 233 | } |
| 234 | |||
| 235 | func indirectType(v reflect.Type) reflect.Type { | ||
| 236 | switch v.Kind() { | ||
| 237 | case reflect.Ptr: | ||
| 238 | return indirectType(v.Elem()) | ||
| 239 | default: | ||
| 240 | return v | ||
| 241 | } | ||
| 242 | return v | ||
| 243 | } | ... | ... |
-
Please register or sign in to post a comment