1
0
Fork 0

All queries successfully returned as JSON

master
Philip O'Toole 10 years ago
parent 85f1612df4
commit 325291d092

@ -19,6 +19,9 @@ type DB struct {
dbConn *sql.DB dbConn *sql.DB
} }
type RowResult map[string]string
type RowResults []map[string]string
// Creates a new database. // Creates a new database.
func New(dir string) *DB { func New(dir string) *DB {
path := path.Join(dir, dbName) path := path.Join(dir, dbName)
@ -35,16 +38,17 @@ func New(dir string) *DB {
} }
// Executes the query. // Executes the query.
func (db *DB) Query(query string) string { func (db *DB) Query(query string) RowResults {
rows, err := db.dbConn.Query(query) rows, err := db.dbConn.Query(query)
if err != nil { if err != nil {
fmt.Println(err.Error()) fmt.Println(err.Error())
} }
defer rows.Close() defer rows.Close()
results := make(RowResults, 0)
columns, _ := rows.Columns() columns, _ := rows.Columns()
rawResult := make([][]byte, len(columns)) rawResult := make([][]byte, len(columns))
result := make([]string, len(columns))
dest := make([]interface{}, len(columns)) // A temporary interface{} slice dest := make([]interface{}, len(columns)) // A temporary interface{} slice
for i, _ := range rawResult { for i, _ := range rawResult {
dest[i] = &rawResult[i] // Put pointers to each string in the interface slice dest[i] = &rawResult[i] // Put pointers to each string in the interface slice
@ -53,20 +57,20 @@ func (db *DB) Query(query string) string {
for rows.Next() { for rows.Next() {
err = rows.Scan(dest...) err = rows.Scan(dest...)
if err != nil { if err != nil {
fmt.Println("Failed to scan row", err) log.Fatal("Failed to scan row", err)
} }
r := make(RowResult)
for i, raw := range rawResult { for i, raw := range rawResult {
if raw == nil { if raw == nil {
result[i] = "null" r[columns[i]] = "null"
} else { } else {
result[i] = string(raw) r[columns[i]] = string(raw)
} }
} }
results = append(results, r)
fmt.Printf("%#v\n", result)
} }
return "query complete response" // Inefficient? return results
} }
// Sets the value for a given key. // Sets the value for a given key.

@ -164,8 +164,12 @@ func (s *Server) readHandler(w http.ResponseWriter, req *http.Request) {
w.WriteHeader(http.StatusBadRequest) w.WriteHeader(http.StatusBadRequest)
return return
} }
value := s.db.Query(string(b)) b, err = json.Marshal(s.db.Query(string(b)))
w.Write([]byte(value)) if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Write([]byte(b))
} }
func (s *Server) writeHandler(w http.ResponseWriter, req *http.Request) { func (s *Server) writeHandler(w http.ResponseWriter, req *http.Request) {

Loading…
Cancel
Save