From 17233084f1de8e4c8436ac29a75b699d3602ce8c Mon Sep 17 00:00:00 2001 From: yys <4752017@qq.com> Date: Sat, 13 Mar 2021 14:07:22 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=B8=BAgtime=E6=B7=BB=E5=8A=A0scanner?= =?UTF-8?q?=E5=92=8Cvaluer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- os/gtime/gtime_sql.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 os/gtime/gtime_sql.go diff --git a/os/gtime/gtime_sql.go b/os/gtime/gtime_sql.go new file mode 100644 index 000000000..142448d98 --- /dev/null +++ b/os/gtime/gtime_sql.go @@ -0,0 +1,17 @@ +package gtime + +import ( + "database/sql/driver" +) + +//add Scanner +func (t *Time) Scan(value interface{}) error { + newTime := New(value) + t.Time = newTime.Time + return nil +} + +//add valuer +func (t *Time) Value() (driver.Value, error) { + return t.Time, nil +} From 7c51ff47075625fbf56a0a5c18ffb30de7e55557 Mon Sep 17 00:00:00 2001 From: yys <4752017@qq.com> Date: Thu, 25 Mar 2021 13:38:59 +0800 Subject: [PATCH 2/3] =?UTF-8?q?gtime=20=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- os/gtime/gtime_sql.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/os/gtime/gtime_sql.go b/os/gtime/gtime_sql.go index 142448d98..dc810ffe9 100644 --- a/os/gtime/gtime_sql.go +++ b/os/gtime/gtime_sql.go @@ -13,5 +13,8 @@ func (t *Time) Scan(value interface{}) error { //add valuer func (t *Time) Value() (driver.Value, error) { + if t == nil { + return nil, nil + } return t.Time, nil } From ed71d2b2acb9d359a545939ad3078aed7c02a4d2 Mon Sep 17 00:00:00 2001 From: yys <4752017@qq.com> Date: Wed, 31 Mar 2021 14:07:28 +0800 Subject: [PATCH 3/3] add test --- os/gtime/gtime_sql.go | 13 ++++++++-- os/gtime/gtime_z_unit_sql_test.go | 41 +++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 os/gtime/gtime_z_unit_sql_test.go diff --git a/os/gtime/gtime_sql.go b/os/gtime/gtime_sql.go index dc810ffe9..5f7a7709b 100644 --- a/os/gtime/gtime_sql.go +++ b/os/gtime/gtime_sql.go @@ -4,17 +4,26 @@ import ( "database/sql/driver" ) -//add Scanner +//Scanner is an interface used by Scan. +//Scan value from database +//database/sql func (t *Time) Scan(value interface{}) error { + if t == nil { + return nil + } newTime := New(value) t.Time = newTime.Time return nil } -//add valuer +// Valuer is the interface providing the Value method. database/sql/driver +// Value insert into mysql need this function. func (t *Time) Value() (driver.Value, error) { if t == nil { return nil, nil } + if t.IsZero() { + return nil, nil + } return t.Time, nil } diff --git a/os/gtime/gtime_z_unit_sql_test.go b/os/gtime/gtime_z_unit_sql_test.go new file mode 100644 index 000000000..fa40e71fd --- /dev/null +++ b/os/gtime/gtime_z_unit_sql_test.go @@ -0,0 +1,41 @@ +package gtime_test + +import ( + "github.com/gogf/gf/os/gtime" + "github.com/gogf/gf/test/gtest" + "testing" +) + +func TestTime_Scan(t1 *testing.T) { + gtest.C(t1, func(t *gtest.T) { + tt := gtime.Time{} + //test string + s := gtime.Now().String() + t.Assert(tt.Scan(s), nil) + t.Assert(tt.String(), s) + //test nano + n := gtime.TimestampNano() + t.Assert(tt.Scan(n), nil) + t.Assert(tt.TimestampNano(), n) + //test nil + none := (*gtime.Time)(nil) + t.Assert(none.Scan(nil), nil) + t.Assert(none, nil) + }) + +} + +func TestTime_Value(t1 *testing.T) { + gtest.C(t1, func(t *gtest.T) { + tt := gtime.Now() + s, err := tt.Value() + t.Assert(err, nil) + t.Assert(s, tt.Time) + //test nil + none := (*gtime.Time)(nil) + s, err = none.Value() + t.Assert(err, nil) + t.Assert(s, nil) + + }) +}