cacdb322 by slene Committed by asta.xie

orm add operator `between` #518

1 parent d0949b64
...@@ -35,7 +35,7 @@ var ( ...@@ -35,7 +35,7 @@ var (
35 "istartswith": true, 35 "istartswith": true,
36 "iendswith": true, 36 "iendswith": true,
37 "in": true, 37 "in": true,
38 // "range": true, 38 "between": true,
39 // "year": true, 39 // "year": true,
40 // "month": true, 40 // "month": true,
41 // "day": true, 41 // "day": true,
...@@ -916,13 +916,19 @@ func (d *dbBase) GenerateOperatorSql(mi *modelInfo, fi *fieldInfo, operator stri ...@@ -916,13 +916,19 @@ func (d *dbBase) GenerateOperatorSql(mi *modelInfo, fi *fieldInfo, operator stri
916 } 916 }
917 arg := params[0] 917 arg := params[0]
918 918
919 if operator == "in" { 919 switch operator {
920 case "in":
920 marks := make([]string, len(params)) 921 marks := make([]string, len(params))
921 for i, _ := range marks { 922 for i, _ := range marks {
922 marks[i] = "?" 923 marks[i] = "?"
923 } 924 }
924 sql = fmt.Sprintf("IN (%s)", strings.Join(marks, ", ")) 925 sql = fmt.Sprintf("IN (%s)", strings.Join(marks, ", "))
925 } else { 926 case "between":
927 if len(params) != 2 {
928 panic(fmt.Errorf("operator `%s` need 2 args not %d", operator, len(params)))
929 }
930 sql = "BETWEEN ? AND ?"
931 default:
926 if len(params) > 1 { 932 if len(params) > 1 {
927 panic(fmt.Errorf("operator `%s` need 1 args not %d", operator, len(params))) 933 panic(fmt.Errorf("operator `%s` need 1 args not %d", operator, len(params)))
928 } 934 }
......
...@@ -653,6 +653,14 @@ func TestOperators(t *testing.T) { ...@@ -653,6 +653,14 @@ func TestOperators(t *testing.T) {
653 num, err = qs.Filter("status__in", []*int{&n1}, &n2).Count() 653 num, err = qs.Filter("status__in", []*int{&n1}, &n2).Count()
654 throwFail(t, err) 654 throwFail(t, err)
655 throwFail(t, AssertIs(num, 2)) 655 throwFail(t, AssertIs(num, 2))
656
657 num, err = qs.Filter("id__between", 2, 3).Count()
658 throwFail(t, err)
659 throwFail(t, AssertIs(num, 2))
660
661 num, err = qs.Filter("id__between", []int{2, 3}).Count()
662 throwFail(t, err)
663 throwFail(t, AssertIs(num, 2))
656 } 664 }
657 665
658 func TestSetCond(t *testing.T) { 666 func TestSetCond(t *testing.T) {
...@@ -1611,7 +1619,6 @@ func TestDelete(t *testing.T) { ...@@ -1611,7 +1619,6 @@ func TestDelete(t *testing.T) {
1611 throwFail(t, err) 1619 throwFail(t, err)
1612 throwFail(t, AssertIs(num, 4)) 1620 throwFail(t, AssertIs(num, 4))
1613 1621
1614 fmt.Println("...")
1615 qs = dORM.QueryTable("comment") 1622 qs = dORM.QueryTable("comment")
1616 num, err = qs.Filter("Post__User", 3).Delete() 1623 num, err = qs.Filter("Post__User", 3).Delete()
1617 throwFail(t, err) 1624 throwFail(t, err)
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!