diff options
author | EuAndreh <eu@euandre.org> | 2024-10-01 15:50:33 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2024-10-01 15:50:33 -0300 |
commit | bf67f44cfbc551b644542e25b953566ee383d5bd (patch) | |
tree | ac36f31e50850bf1a11b79fc344b4d685fff469c /tests/functional/json.go | |
parent | tests/golite.go: Enable slow tests (diff) | |
download | golite-bf67f44cfbc551b644542e25b953566ee383d5bd.tar.gz golite-bf67f44cfbc551b644542e25b953566ee383d5bd.tar.xz |
Turn example files into tests under tests/functional/
Diffstat (limited to 'tests/functional/json.go')
-rw-r--r-- | tests/functional/json.go | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/tests/functional/json.go b/tests/functional/json.go new file mode 100644 index 0000000..54954f7 --- /dev/null +++ b/tests/functional/json.go @@ -0,0 +1,96 @@ +package main + +import ( + "database/sql" + "database/sql/driver" + "encoding/json" + "errors" + "log" + "os" + + _ "golite" +) + +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 main() { + os.Remove("json.db") + defer os.Remove("json.db") + + db, err := sql.Open("sqlite3", "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)) + } +} |