From f00c41fd4e6af8cd0db80c118a3bb4abef09604e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 18 Oct 2024 17:54:26 -0300 Subject: Shoehorn project into default golang skeleton structure --- tests/functional/json/acudego.go | 98 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 tests/functional/json/acudego.go (limited to 'tests/functional/json/acudego.go') diff --git a/tests/functional/json/acudego.go b/tests/functional/json/acudego.go new file mode 100644 index 0000000..8f5e923 --- /dev/null +++ b/tests/functional/json/acudego.go @@ -0,0 +1,98 @@ +package acudego + +import ( + "database/sql" + "database/sql/driver" + "encoding/json" + "errors" + "log" + "os" +) + + + +type Tag struct { + Name string `json:"name"` + Place string `json:"place"` +} + +func (t *Tag) Scan(value interface{}) error { + return json.Unmarshal([]byte(value.(string)), t) +} + +func (t *Tag) Value() (driver.Value, error) { + b, err := json.Marshal(t) + return string(b), err +} + + + +func MainTest() { + os.Remove("json.db") + defer os.Remove("json.db") + + db, err := sql.Open(DriverName, "json.db") + if err != nil { + log.Fatal(err) + } + defer db.Close() + + _, err = db.Exec(`create table myjsontable (tag jsonb)`) + if err != nil { + log.Fatal(err) + } + + stmt, err := db.Prepare("insert into myjsontable(tag) values(?)") + if err != nil { + log.Fatal(err) + } + defer stmt.Close() + + _, err = stmt.Exec(`{"name": "name1", "place": "right-here"}`) + if err != nil { + log.Fatal(err) + } + + _, err = stmt.Exec(`{"name": "michael", "place": "usa"}`) + if err != nil { + log.Fatal(err) + } + + var place string + err = db.QueryRow("select tag->>'place' from myjsontable where tag->>'name' = 'name1'").Scan(&place) + if err != nil { + log.Fatal(err) + } + + if place != "right-here" { + log.Fatal(errors.New("expected right-here, got: " + place)) + } + + var tag Tag + err = db.QueryRow("select tag from myjsontable where tag->>'name' = 'name1'").Scan(&tag) + if err != nil { + log.Fatal(err) + } + + if tag.Name != "name1" { + log.Fatal(errors.New("expected name1, got: " + tag.Name)) + } + if tag.Place != "right-here" { + log.Fatal(errors.New("expected right-here, got: " + tag.Place)) + } + + tag.Place = "日本" + _, err = db.Exec(`update myjsontable set tag = ? where tag->>'name' == 'name1'`, &tag) + if err != nil { + log.Fatal(err) + } + + err = db.QueryRow("select tag->>'place' from myjsontable where tag->>'name' = 'name1'").Scan(&place) + if err != nil { + log.Fatal(err) + } + + if place != "日本" { + log.Fatal(errors.New("expected 日本, got: " + place)) + } +} -- cgit v1.2.3