-
-func nsVal(ns sql.NullString) string {
- if ns.Valid {
- return ns.String
- }
- return ""
-}
-
-func openDb(user, pass, dbName string) (*sql.DB) {
- db, err := sql.Open("postgres","user=" + user + " password=" + pass + " dbname=" + dbName + " sslmode=disable")
- if nil != err {
- fmt.Println("Error: DB arguments incorrect?", err)
- return nil
- }
-
- err = db.Ping()
- if nil != err {
- fmt.Println("Error: could not connect to DB.", err)
- db.Close()
- return nil
- }
-
- return db
-}
-
-func queryBooksByIds(db *sql.DB, ids []int) []Book {
- query := `SELECT s.age,a.grouping,a.reading,a.sort,c.ddc,b.description,s.genre,c.lcc,s.descr,b.title,b.volume
- FROM Authors a
- INNER JOIN Books b ON a.id=b.author
- LEFT OUTER JOIN Classifications c ON c.id=b.classification
- LEFT OUTER JOIN Series s ON s.id=b.series
- WHERE b.id=$1`
-
- ps, err := db.Prepare(query)
- if nil != err {
- fmt.Println("Error: failed to prepare statement: " + query)
- return nil
- }
- defer ps.Close()
-
- res := make([]Book, len(ids))
-
- for n, id := range ids {
- row := ps.QueryRow(id)
-
- var age, grouping, reading, sort, ddc, description, genre, lcc, name, title, volume sql.NullString
-
- err = row.Scan(&age, &grouping, &reading, &sort, &ddc, &description, &genre, &lcc, &name, &title, &volume)
- if err != nil {
- fmt.Println("Error: Failed to read book:", id, ":", err)
- } else {
- var b Book
- b.Id = id
- b.Age = nsVal(age)
- b.AuthorGrouping = nsVal(grouping)
- b.AuthorReading = nsVal(reading)
- b.AuthorSort = nsVal(sort)
- b.DDC = nsVal(ddc)
- b.Description = nsVal(description)
- b.Genre = nsVal(genre)
- b.LCC = nsVal(lcc)
- b.SeriesName = nsVal(name)
- b.Title = nsVal(title)
- b.Volume = nsVal(volume)
-
- res[n] = b
- }
- }
-
- return res
-}
-