From b39b2374c4c603681711cf2b2a2e73df928dd992 Mon Sep 17 00:00:00 2001 From: fanwei Date: Wed, 22 Dec 2021 20:51:03 +0800 Subject: [PATCH 1/5] Added Order() method support for gdb. --- database/gdb/gdb_model_order_group.go | 23 ++++++++++++++++++----- database/gdb/gdb_z_mysql_model_test.go | 9 +++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/database/gdb/gdb_model_order_group.go b/database/gdb/gdb_model_order_group.go index bf8fbbc01..7922c27f9 100644 --- a/database/gdb/gdb_model_order_group.go +++ b/database/gdb/gdb_model_order_group.go @@ -6,24 +6,37 @@ package gdb -import "strings" +import ( + "github.com/gogf/gf/v2/util/gconv" + "strings" +) // Order sets the "ORDER BY" statement for the model. // // Eg: // Order("id desc") -// Order("id", "desc") // Order("id desc,name asc"). -func (m *Model) Order(orderBy ...string) *Model { +// Order("id", "desc",gdb.Raw("field(id, 3,1,2)")) +func (m *Model) Order(orderBy ...interface{}) *Model { if len(orderBy) == 0 { return m } + model := m.getModel() if model.orderBy != "" { model.orderBy += "," } - model.orderBy = model.db.GetCore().QuoteString(strings.Join(orderBy, " ")) - return model + + for _, o := range orderBy { + switch o.(type) { + case Raw: + model.orderBy += gconv.String(o) + default: + model.orderBy += model.db.GetCore().QuoteString(gconv.String(o)) + } + } + + return m } // OrderAsc sets the "ORDER BY xxx ASC" statement for the model. diff --git a/database/gdb/gdb_z_mysql_model_test.go b/database/gdb/gdb_z_mysql_model_test.go index 66482520e..42e0d761a 100644 --- a/database/gdb/gdb_z_mysql_model_test.go +++ b/database/gdb/gdb_z_mysql_model_test.go @@ -1091,6 +1091,15 @@ func Test_Model_OrderBy(t *testing.T) { t.Assert(len(result), TableSize) t.Assert(result[0]["nickname"].String(), "name_1") }) + + gtest.C(t, func(t *gtest.T) { + result, err := db.Model(table).Order(gdb.Raw("field(id, 10,1,2,3,4,5,6,7,8,9)")).All() + t.AssertNil(err) + t.Assert(len(result), TableSize) + t.Assert(result[0]["nickname"].String(), "name_10") + t.Assert(result[1]["nickname"].String(), "name_1") + t.Assert(result[2]["nickname"].String(), "name_2") + }) } func Test_Model_GroupBy(t *testing.T) { From 0dc1adb6722ef01f22e141adc68e3612a269d6fb Mon Sep 17 00:00:00 2001 From: fanwei Date: Fri, 7 Jan 2022 21:06:49 +0800 Subject: [PATCH 2/5] orderBy raw() --- database/gdb/gdb_model_order_group.go | 15 ++++++++------- database/gdb/gdb_z_mysql_model_test.go | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/database/gdb/gdb_model_order_group.go b/database/gdb/gdb_model_order_group.go index 7922c27f9..9d33cc46d 100644 --- a/database/gdb/gdb_model_order_group.go +++ b/database/gdb/gdb_model_order_group.go @@ -15,8 +15,9 @@ import ( // // Eg: // Order("id desc") +// Order("id", "desc") // Order("id desc,name asc"). -// Order("id", "desc",gdb.Raw("field(id, 3,1,2)")) +// Order(gdb.Raw("field(id, 3,1,2)")) func (m *Model) Order(orderBy ...interface{}) *Model { if len(orderBy) == 0 { return m @@ -28,15 +29,15 @@ func (m *Model) Order(orderBy ...interface{}) *Model { } for _, o := range orderBy { - switch o.(type) { - case Raw: - model.orderBy += gconv.String(o) - default: - model.orderBy += model.db.GetCore().QuoteString(gconv.String(o)) + if v, ok := o.(Raw); ok { + model.orderBy += gconv.String(v) + return model } } - return m + model.orderBy += model.db.GetCore().QuoteString(strings.Join(gconv.SliceStr(orderBy), " ")) + + return model } // OrderAsc sets the "ORDER BY xxx ASC" statement for the model. diff --git a/database/gdb/gdb_z_mysql_model_test.go b/database/gdb/gdb_z_mysql_model_test.go index 42e0d761a..c174a2637 100644 --- a/database/gdb/gdb_z_mysql_model_test.go +++ b/database/gdb/gdb_z_mysql_model_test.go @@ -441,10 +441,10 @@ func Test_Model_Clone(t *testing.T) { count, err := md.Count() t.AssertNil(err) - record, err := md.Order("id DESC").One() + record, err := md.Safe(true).Order("id DESC").One() t.AssertNil(err) - result, err := md.Order("id ASC").All() + result, err := md.Safe(true).Order("id ASC").All() t.AssertNil(err) t.Assert(count, 2) From ee4ca43bd53ce78cec06df246dc48f2480271b86 Mon Sep 17 00:00:00 2001 From: fanwei Date: Fri, 7 Jan 2022 22:21:18 +0800 Subject: [PATCH 3/5] Safe() --- database/gdb/gdb_z_init_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/database/gdb/gdb_z_init_test.go b/database/gdb/gdb_z_init_test.go index 22b537ba3..4fedb6bd3 100644 --- a/database/gdb/gdb_z_init_test.go +++ b/database/gdb/gdb_z_init_test.go @@ -24,8 +24,8 @@ const ( TestSchema1 = "test1" TestSchema2 = "test2" TableNamePrefix1 = "gf_" - TestDbUser = "root" - TestDbPass = "12345678" + TestDbUser = "fanwei" + TestDbPass = "fw123456" CreateTime = "2018-10-24 10:00:00" ) From d30862373eae4693a8d1e11dda570beb2150b969 Mon Sep 17 00:00:00 2001 From: fanwei Date: Fri, 7 Jan 2022 22:25:00 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=20=E4=BF=AE=E6=AD=A3=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/gdb/gdb_z_init_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/database/gdb/gdb_z_init_test.go b/database/gdb/gdb_z_init_test.go index 4fedb6bd3..22b537ba3 100644 --- a/database/gdb/gdb_z_init_test.go +++ b/database/gdb/gdb_z_init_test.go @@ -24,8 +24,8 @@ const ( TestSchema1 = "test1" TestSchema2 = "test2" TableNamePrefix1 = "gf_" - TestDbUser = "fanwei" - TestDbPass = "fw123456" + TestDbUser = "root" + TestDbPass = "12345678" CreateTime = "2018-10-24 10:00:00" ) From 658ca8c0fdb90dfdd720626e17e6847988a81ed5 Mon Sep 17 00:00:00 2001 From: fanwei Date: Mon, 17 Jan 2022 17:14:40 +0800 Subject: [PATCH 5/5] Eg --- database/gdb/gdb_model_order_group.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/database/gdb/gdb_model_order_group.go b/database/gdb/gdb_model_order_group.go index 9d33cc46d..7ac94f0f4 100644 --- a/database/gdb/gdb_model_order_group.go +++ b/database/gdb/gdb_model_order_group.go @@ -15,9 +15,9 @@ import ( // // Eg: // Order("id desc") -// Order("id", "desc") +// Order("id", "desc"). // Order("id desc,name asc"). -// Order(gdb.Raw("field(id, 3,1,2)")) +// Order(gdb.Raw("field(id, 3,1,2)")). func (m *Model) Order(orderBy ...interface{}) *Model { if len(orderBy) == 0 { return m