From 6ca30386b8bd74d64d073d596e8516d179fc592b Mon Sep 17 00:00:00 2001 From: slene Date: Mon, 10 Mar 2014 20:18:57 +0800 Subject: [PATCH] orm add operator `between` #518 --- orm/db.go | 12 +++++++++--- orm/orm_test.go | 9 ++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/orm/db.go b/orm/db.go index decc8fc2..dfb53621 100644 --- a/orm/db.go +++ b/orm/db.go @@ -35,7 +35,7 @@ var ( "istartswith": true, "iendswith": true, "in": true, - // "range": true, + "between": true, // "year": true, // "month": true, // "day": true, @@ -916,13 +916,19 @@ func (d *dbBase) GenerateOperatorSql(mi *modelInfo, fi *fieldInfo, operator stri } arg := params[0] - if operator == "in" { + switch operator { + case "in": marks := make([]string, len(params)) for i, _ := range marks { marks[i] = "?" } sql = fmt.Sprintf("IN (%s)", strings.Join(marks, ", ")) - } else { + case "between": + if len(params) != 2 { + panic(fmt.Errorf("operator `%s` need 2 args not %d", operator, len(params))) + } + sql = "BETWEEN ? AND ?" + default: if len(params) > 1 { panic(fmt.Errorf("operator `%s` need 1 args not %d", operator, len(params))) } diff --git a/orm/orm_test.go b/orm/orm_test.go index 060cd65c..90f2ec80 100644 --- a/orm/orm_test.go +++ b/orm/orm_test.go @@ -653,6 +653,14 @@ func TestOperators(t *testing.T) { num, err = qs.Filter("status__in", []*int{&n1}, &n2).Count() throwFail(t, err) throwFail(t, AssertIs(num, 2)) + + num, err = qs.Filter("id__between", 2, 3).Count() + throwFail(t, err) + throwFail(t, AssertIs(num, 2)) + + num, err = qs.Filter("id__between", []int{2, 3}).Count() + throwFail(t, err) + throwFail(t, AssertIs(num, 2)) } func TestSetCond(t *testing.T) { @@ -1611,7 +1619,6 @@ func TestDelete(t *testing.T) { throwFail(t, err) throwFail(t, AssertIs(num, 4)) - fmt.Println("...") qs = dORM.QueryTable("comment") num, err = qs.Filter("Post__User", 3).Delete() throwFail(t, err)