167ad203 by slene

orm #276

1 parent 558738ad
...@@ -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) {
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!