Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "database/sql"
- "fmt"
- "log"
- "reflect"
- "strconv"
- _ "github.com/denisenkom/go-mssqldb"
- )
- //work in progress database class
- type conn struct {
- *sql.DB //you know, provides access to everyhing, 42
- }
- func connect() *conn {
- server := "HOST"
- user := "sa"
- password := "PASSWORD"
- port := 1433
- database := "IAMADATABASE"
- connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s", server, user, password, port, database)
- if *debug {
- fmt.Printf(" connString:%s\n", connString)
- }
- dbconn, err := sql.Open("mssql", connString)
- fmt.Printf(reflect.TypeOf(dbconn).String())
- if err != nil {
- log.Fatal("Open connection failed:", err.Error())
- }
- retcon := new(conn)
- retcon.DB = dbconn
- return retcon
- }
- func (db *conn) fetchAll(query string) ([]map[string]interface{}, error) {
- rows, err := db.DB.Query(query)
- if err != nil {
- return nil, err //most likely a query error
- }
- defer rows.Close() // close when we leave the method..
- columnTypes, err := rows.ColumnTypes()
- columnNames, err := rows.Columns()
- var resRows []map[string]interface{} //row container
- rawResult := make([][]byte, len(columnNames)) // Result is our slice string/int/whatever.
- dest := make([]interface{}, len(columnNames)) // An interface{} slice
- for i := range rawResult {
- dest[i] = &rawResult[i] // pointers to each string in the result interface slice
- }
- for rows.Next() {
- err = rows.Scan(dest...)
- if err != nil {
- fmt.Println("Failed to scan row", err)
- return nil, err
- }
- resRow := make(map[string]interface{})
- for i, raw := range rawResult {
- if raw == nil {
- resRow[columnNames[i]] = "" // usually NULL value, output "" (lazy)
- } else {
- switch columnTypes[i].DatabaseTypeName() { //handle database types. i guess there's a better way through columnTypes[i].scan.., but i need to get it working now
- case "NVARCHAR":
- resRow[columnNames[i]] = string(raw)
- case "INT":
- s := string(raw)
- ss, err := strconv.Atoi(s)
- if err != nil {
- fmt.Printf("cant convert to int")
- }
- resRow[columnNames[i]] = ss
- default:
- resRow[columnNames[i]] = string(raw) //tired to website
- }
- }
- }
- resRows = append(resRows, resRow)
- }
- err = rows.Err()
- if err != nil {
- log.Fatal(err)
- }
- return resRows, nil
- }
Add Comment
Please, Sign In to add comment