From 4add0224310f7632ec3c73752421eeefceb06715 Mon Sep 17 00:00:00 2001 From: Karl King Date: Fri, 6 Mar 2026 10:21:31 +0000 Subject: [PATCH 1/2] default null dates --- .gitignore | 1 + examples/Concurrent-Inserts.go | 3 +- examples/Insert-DateDefault.go | 33 ++++++++++++++- examples/Missing-Columns.go | 3 +- examples/Save-DateDefault.go | 60 ++++++++++++++++++++++++++++ examples/Save.go | 1 - examples/basic-Insert.go | 3 +- examples/basic-insert-withcounter.go | 3 +- main.go | 15 ++++--- 9 files changed, 108 insertions(+), 14 deletions(-) create mode 100644 examples/Save-DateDefault.go delete mode 100644 examples/Save.go diff --git a/.gitignore b/.gitignore index 20acd11..2c04d61 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .idea/* test.db profile.cov +.vscode/ diff --git a/examples/Concurrent-Inserts.go b/examples/Concurrent-Inserts.go index 3120447..5396fe8 100644 --- a/examples/Concurrent-Inserts.go +++ b/examples/Concurrent-Inserts.go @@ -20,7 +20,8 @@ func ConcurrentInserts() { textHandler := slog.NewTextHandler(os.Stdout, nil) l := slog.New(textHandler) - MySQL.New(DSN, l, context.Background()) + // MySQL.New(DSN, l, context.Background()) + MySQL.NewSQLite3(DSN, l, context.Background()) type InsertPerson struct { Id int `db:"column=id primarykey=yes table=Test"` diff --git a/examples/Insert-DateDefault.go b/examples/Insert-DateDefault.go index c161982..ea93336 100644 --- a/examples/Insert-DateDefault.go +++ b/examples/Insert-DateDefault.go @@ -23,7 +23,7 @@ func InsertDateDefault() { l := slog.New(textHandler) // MySQL.New(DSN, l, context.Background()) - MySQL.New(DSN, l, context.Background()) + MySQL.NewSQLite3(DSN, l, context.Background()) type InsertPersonNOW struct { Id int `db:"column=id primarykey=yes table=Test"` @@ -49,6 +49,14 @@ func InsertDateDefault() { Ignored int `db:"column=ignored omit=yes"` } + type InsertPersonNULL struct { + Id int `db:"column=id primarykey=yes table=Test"` + Name string `db:"column=name"` + Dtadded time.Time `db:"column=dtadded readdefault=null"` + Status int `db:"column=status"` + Ignored int `db:"column=ignored omit=yes"` + } + sqlQuery := "INSERT INTO Test(name) VALUES (X'54657374');" // Then execute the query @@ -78,6 +86,29 @@ func InsertDateDefault() { l.With("Date Should be DEFAULT", test3.Dtadded).Info("Date") } + nullEntry := InsertPersonNULL{ + Name: "Test", + Dtadded: time.Time{}, + Status: 1, + } + + nullInsertSQL, err6 := MySQL.DB.Insert(nullEntry) + if err6 != nil { + l.Error(err6.Error()) + } else { + nullInsertedID, _, err7 := MySQL.DB.Execute(nullInsertSQL) + if err7 != nil { + l.Error(err7.Error()) + } else { + test4, err8 := MySQL.QuerySingleStruct[InsertPersonNULL]("SELECT * FROM test WHERE id = ?", nullInsertedID) + if err8 != nil { + l.Error("Query error: " + err8.Error()) + } else { + l.With("Date Should be NULL/zero", test4.Dtadded).Info("Date") + } + } + } + l.Info(fmt.Sprintf("Item with ID %d was inserted. %d rows were affected", lastInsertedID, rowsAffected)) ctx.Done() diff --git a/examples/Missing-Columns.go b/examples/Missing-Columns.go index 74b5d3d..fef7779 100644 --- a/examples/Missing-Columns.go +++ b/examples/Missing-Columns.go @@ -19,7 +19,8 @@ func MissingColumns() { textHandler := slog.NewTextHandler(os.Stdout, nil) l := slog.New(textHandler) - MySQL.New(DSN, l, context.Background()) + // MySQL.New(DSN, l, context.Background()) + MySQL.NewSQLite3(DSN, l, context.Background()) type InsertPerson struct { Id int `db:"column=id primarykey=yes table=Test"` diff --git a/examples/Save-DateDefault.go b/examples/Save-DateDefault.go new file mode 100644 index 0000000..25cd23b --- /dev/null +++ b/examples/Save-DateDefault.go @@ -0,0 +1,60 @@ +package examples + +import ( + "context" + "fmt" + "log/slog" + "os" + "time" + + "github.com/joho/godotenv" + + MySQL "github.com/SpaceTent/GoStructDB/gsdb" +) + +func SaveReadDefaultNull() { + + godotenv.Load(".env") + DSN := os.Getenv("DSN") + textHandler := slog.NewTextHandler(os.Stdout, nil) + l := slog.New(textHandler) + + // MySQL.New(DSN, l, context.Background()) + MySQL.NewSQLite3(DSN, l, context.Background()) + + type SavePerson struct { + Id int `db:"column=id primarykey=yes table=Test"` + Name string `db:"column=name"` + Dtadded time.Time `db:"column=dtadded readdefault=null"` + Status int `db:"column=status"` + } + + entry := SavePerson{ + Name: "Save Null", + Dtadded: time.Time{}, + Status: 1, + } + + lastInsertedID, rowsAffected, err := MySQL.DB.Save(entry, entry.Id) + if err != nil { + l.Error(err.Error()) + return + } + + loaded, err := MySQL.QuerySingleStruct[SavePerson]("SELECT * FROM test WHERE id = ?", lastInsertedID) + if err != nil { + l.Error("Query error: " + err.Error()) + } else { + l.With("Date Should be NULL/zero", loaded.Dtadded).Info("Date") + } + + loaded.Status = 2 + loaded.Dtadded = time.Now() + + _, rowsAffectedUpdate, err := MySQL.DB.Save(loaded, loaded.Id) + if err != nil { + l.Error(err.Error()) + } + + l.Info(fmt.Sprintf("Save insert rows: %d, save update rows: %d", rowsAffected, rowsAffectedUpdate)) +} diff --git a/examples/Save.go b/examples/Save.go deleted file mode 100644 index c7842af..0000000 --- a/examples/Save.go +++ /dev/null @@ -1 +0,0 @@ -package examples diff --git a/examples/basic-Insert.go b/examples/basic-Insert.go index 86d5b3e..22629ab 100644 --- a/examples/basic-Insert.go +++ b/examples/basic-Insert.go @@ -21,7 +21,8 @@ func BasicInsert() { textHandler := slog.NewTextHandler(os.Stdout, nil) l := slog.New(textHandler) - MySQL.New(DSN, l, context.Background()) + // MySQL.New(DSN, l, context.Background()) + MySQL.NewSQLite3(DSN, l, context.Background()) type InsertPerson struct { Id int `db:"column=id primarykey=yes table=Test"` diff --git a/examples/basic-insert-withcounter.go b/examples/basic-insert-withcounter.go index 451fa33..482dc6b 100644 --- a/examples/basic-insert-withcounter.go +++ b/examples/basic-insert-withcounter.go @@ -19,7 +19,8 @@ func BasicInsertWithCounter() { textHandler := slog.NewTextHandler(os.Stdout, nil) l := slog.New(textHandler) - MySQL.New(DSN, l, context.Background()) + // MySQL.New(DSN, l, context.Background()) + MySQL.NewSQLite3(DSN, l, context.Background()) type InsertPerson struct { Id int `db:"column=id primarykey=yes table=Test"` diff --git a/main.go b/main.go index 666320e..2dfb951 100644 --- a/main.go +++ b/main.go @@ -1,16 +1,15 @@ package main -import ( - "github.com/SpaceTent/GoStructDB/examples" -) +import "github.com/SpaceTent/GoStructDB/examples" func main() { - examples.BasicInsert() - examples.BasicInsertWithCounter() - examples.ConcurrentInserts() + // examples.BasicInsert() + // examples.BasicInsertWithCounter() + // examples.ConcurrentInserts() examples.InsertDateDefault() - examples.MissingColumns() - examples.Lite3() + // examples.MissingColumns() + // examples.Lite3() + // examples.SaveReadDefaultNull() } From c2453c7d11c6cf310d4898d7d56218f3e142d01e Mon Sep 17 00:00:00 2001 From: Karl King Date: Fri, 6 Mar 2026 10:22:33 +0000 Subject: [PATCH 2/2] Removed commented code --- main.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/main.go b/main.go index 2dfb951..772f3f8 100644 --- a/main.go +++ b/main.go @@ -4,12 +4,11 @@ import "github.com/SpaceTent/GoStructDB/examples" func main() { - // examples.BasicInsert() - // examples.BasicInsertWithCounter() - // examples.ConcurrentInserts() + examples.BasicInsert() + examples.BasicInsertWithCounter() + examples.ConcurrentInserts() examples.InsertDateDefault() - // examples.MissingColumns() - // examples.Lite3() - // examples.SaveReadDefaultNull() - + examples.MissingColumns() + examples.Lite3() + examples.SaveReadDefaultNull() }