orm #276
Showing
2 changed files
with
37 additions
and
6 deletions
| ... | @@ -705,7 +705,13 @@ func (d *dbBase) ReadBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condi | ... | @@ -705,7 +705,13 @@ func (d *dbBase) ReadBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condi |
| 705 | ind.Set(mind) | 705 | ind.Set(mind) |
| 706 | } else { | 706 | } else { |
| 707 | if cnt == 0 { | 707 | if cnt == 0 { |
| 708 | slice = reflect.New(ind.Type()).Elem() | 708 | // you can use a empty & caped container list |
| 709 | // orm will not replace it | ||
| 710 | if ind.Len() != 0 { | ||
| 711 | // if container is not empty | ||
| 712 | // create a new one | ||
| 713 | slice = reflect.New(ind.Type()).Elem() | ||
| 714 | } | ||
| 709 | } | 715 | } |
| 710 | 716 | ||
| 711 | if isPtr { | 717 | if isPtr { |
| ... | @@ -718,8 +724,16 @@ func (d *dbBase) ReadBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condi | ... | @@ -718,8 +724,16 @@ func (d *dbBase) ReadBatch(q dbQuerier, qs *querySet, mi *modelInfo, cond *Condi |
| 718 | cnt++ | 724 | cnt++ |
| 719 | } | 725 | } |
| 720 | 726 | ||
| 721 | if one == false && cnt > 0 { | 727 | if one == false { |
| 722 | ind.Set(slice) | 728 | if cnt > 0 { |
| 729 | ind.Set(slice) | ||
| 730 | } else { | ||
| 731 | // when a result is empty and container is nil | ||
| 732 | // to set a empty container | ||
| 733 | if ind.IsNil() { | ||
| 734 | ind.Set(reflect.MakeSlice(ind.Type(), 0, 0)) | ||
| 735 | } | ||
| 736 | } | ||
| 723 | } | 737 | } |
| 724 | 738 | ||
| 725 | return cnt, nil | 739 | return cnt, nil |
| ... | @@ -1058,12 +1072,24 @@ func (d *dbBase) ReadValues(q dbQuerier, qs *querySet, mi *modelInfo, cond *Cond | ... | @@ -1058,12 +1072,24 @@ func (d *dbBase) ReadValues(q dbQuerier, qs *querySet, mi *modelInfo, cond *Cond |
| 1058 | ) | 1072 | ) |
| 1059 | 1073 | ||
| 1060 | typ := 0 | 1074 | typ := 0 |
| 1061 | switch container.(type) { | 1075 | switch v := container.(type) { |
| 1062 | case *[]Params: | 1076 | case *[]Params: |
| 1077 | d := *v | ||
| 1078 | if len(d) == 0 { | ||
| 1079 | maps = d | ||
| 1080 | } | ||
| 1063 | typ = 1 | 1081 | typ = 1 |
| 1064 | case *[]ParamsList: | 1082 | case *[]ParamsList: |
| 1083 | d := *v | ||
| 1084 | if len(d) == 0 { | ||
| 1085 | lists = d | ||
| 1086 | } | ||
| 1065 | typ = 2 | 1087 | typ = 2 |
| 1066 | case *ParamsList: | 1088 | case *ParamsList: |
| 1089 | d := *v | ||
| 1090 | if len(d) == 0 { | ||
| 1091 | list = d | ||
| 1092 | } | ||
| 1067 | typ = 3 | 1093 | typ = 3 |
| 1068 | default: | 1094 | default: |
| 1069 | panic(fmt.Errorf("unsupport read values type `%T`", container)) | 1095 | panic(fmt.Errorf("unsupport read values type `%T`", container)) | ... | ... |
| ... | @@ -696,8 +696,13 @@ func TestAll(t *testing.T) { | ... | @@ -696,8 +696,13 @@ func TestAll(t *testing.T) { |
| 696 | 696 | ||
| 697 | qs = dORM.QueryTable("user") | 697 | qs = dORM.QueryTable("user") |
| 698 | num, err = qs.Filter("user_name", "nothing").All(&users) | 698 | num, err = qs.Filter("user_name", "nothing").All(&users) |
| 699 | throwFail(t, err) | 699 | throwFailNow(t, err) |
| 700 | throwFail(t, AssertIs(num, 0)) | 700 | throwFailNow(t, AssertIs(num, 0)) |
| 701 | |||
| 702 | var users3 []*User | ||
| 703 | qs = dORM.QueryTable("user") | ||
| 704 | num, err = qs.Filter("user_name", "nothing").All(&users3) | ||
| 705 | throwFailNow(t, AssertIs(users3 == nil, false)) | ||
| 701 | } | 706 | } |
| 702 | 707 | ||
| 703 | func TestOne(t *testing.T) { | 708 | func TestOne(t *testing.T) { | ... | ... |
-
Please register or sign in to post a comment