orm add operator `between` #518
Showing
2 changed files
with
17 additions
and
4 deletions
| ... | @@ -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) | ... | ... |
-
Please register or sign in to post a comment