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..772f3f8 100644 --- a/main.go +++ b/main.go @@ -1,8 +1,6 @@ package main -import ( - "github.com/SpaceTent/GoStructDB/examples" -) +import "github.com/SpaceTent/GoStructDB/examples" func main() { @@ -12,5 +10,5 @@ func main() { examples.InsertDateDefault() examples.MissingColumns() examples.Lite3() - + examples.SaveReadDefaultNull() }