"database/sql"
"fmt"
_ "github.com/lib/pq"
+ "strings"
"strconv"
"sync"
)
g_mutex.Lock()
defer g_mutex.Unlock()
if nil == g_db {
- config := getConfig()
+ config := GetConfig()
g_db = openDb(config.user, config.pass, config.dbName)
}
}
return res
}
+func queryBookPathById(id int) (string) {
+ query := "SELECT b.path FROM Books b WHERE b.id=$1"
+
+ ps, err := getDb().Prepare(query)
+ if nil != err {
+ report("Failed to Prepare query: " + query, err)
+ return ""
+ }
+ defer ps.Close()
+
+ row := ps.QueryRow(id)
+ var path sql.NullString
+ err = row.Scan(&path)
+ if nil != err {
+ report(fmt.Sprintf("Failed to retrieve path for book id %v: ", id), err)
+ return ""
+ }
+
+ return nsVal(path)
+}
+
func queryIds(criteria []SearchTerm) []int {
query := "SELECT b.id FROM Books b" +
" INNER JOIN Authors a ON a.id=b.author" +
- " LEFT OUTER JOIN Series s ON s.id=b.series"
+ " LEFT OUTER JOIN Series s ON s.id=b.series"
args := make([]interface{}, len(criteria))
} else {
query += " AND "
}
+
+ text := criterion.Text
+
switch criterion.Attribute {
case Author:
- query += " a.grouping LIKE $" + strconv.Itoa(i + 1)
+ query += " UPPER(a.grouping) LIKE UPPER($" + strconv.Itoa(i + 1) + ")"
+ text = strings.Replace(text, " ", "", -1) // Remove spaces
case Series:
- query += " s.descr LIKE $" + strconv.Itoa(i + 1)
+ query += " UPPER(s.descr) LIKE UPPER($" + strconv.Itoa(i + 1) + ")"
case Title:
- query += " b.title LIKE $" + strconv.Itoa(i + 1)
+ query += " UPPER(b.title) LIKE UPPER($" + strconv.Itoa(i + 1) + ")"
default:
report("Error: unrecognized search field in queryIds(): " + criterion.Attribute.String(), nil)
return nil
}
- args[i] = criterion.Text
+ args[i] = text
}
+ query += " ORDER BY b.path"
+
res := []int{}
ps, err := getDb().Prepare(query)
}
defer rows.Close()
- for rows.Next(); rows.Next(); {
+ for rows.Next() {
var id int
rows.Scan(&id)
res = append(res, id)