This repository has been archived on 2022-11-03. You can view files and clone it, but cannot push or open issues or pull requests.
DevOpsOpenHack/apis/trips/tripsgo/dataAccess.go

141 lines
3.2 KiB
Go
Raw Normal View History

2022-11-03 20:41:13 +00:00
package tripsgo
import (
"database/sql"
"encoding/json"
"flag"
"fmt"
"os"
"github.com/joho/godotenv"
)
//load .env locally for integration tests
//System Environment variables take precedence
var dbEnv = godotenv.Load()
func getEnv(key, fallback string) string {
if value, ok := os.LookupEnv(key); ok {
return value
}
return fallback
}
var (
debug = flag.Bool("debug", false, "enable debugging")
password = flag.String("password", getEnv("SQL_PASSWORD", "changeme"), "the database password")
port = flag.Int("port", 1433, "the database port")
server = flag.String("server", getEnv("SQL_SERVER", "changeme.database.windows.net"), "the database server")
user = flag.String("user", getEnv("SQL_USER", "YourUserName"), "the database user")
database = flag.String("d", getEnv("SQL_DBNAME", "mydrivingDB"), "db_name")
driver = flag.String("driver", getEnv("SQL_DRIVER", "mssql"), "db driver")
)
func RebindDataAccessEnvironmentVariables() {
s := getEnv("SQL_SERVER", "changeme.database.windows.net")
server = &s
dr := getEnv("SQL_DRIVER", "mssql")
driver = &dr
}
// ExecuteNonQuery - Execute a SQL query that has no records returned (Ex. Delete)
func ExecuteNonQuery(query string) (string, error) {
connString := fmt.Sprintf("server=%s;database=%s;user id=%s;password=%s;port=%d", *server, *database, *user, *password, *port)
if *debug {
message := fmt.Sprintf("connString:%s\n", connString)
logMessage(message)
}
conn, err := sql.Open(*driver, connString)
if err != nil {
return "", err
}
defer conn.Close()
statement, err := conn.Prepare(query)
if err != nil {
return "", err
}
defer statement.Close()
result, err := statement.Exec()
if err != nil {
return "", err
}
serializedResult, _ := json.Marshal(result)
return string(serializedResult), nil
}
// ExecuteQuery - Executes a query and returns the result set
func ExecuteQuery(query string) (*sql.Rows, error) {
connString := fmt.Sprintf("server=%s;database=%s;user id=%s;password=%s;port=%d", *server, *database, *user, *password, *port)
conn, err := sql.Open(*driver, connString)
if err != nil {
logError(err, "Failed to connect to database.")
return nil, err
}
defer conn.Close()
statement, err := conn.Prepare(query)
if err != nil {
return nil, err
// log.Fatal("Failed to query a trip: ", err.Error())
}
defer statement.Close()
rows, err := statement.Query()
if err != nil {
return nil, err
// log.Fatal("Error while running the query: ", err.Error())
}
return rows, nil
}
// FirstOrDefault - returns the first row of the result set.
func FirstOrDefault(query string) (*sql.Row, error) {
connString := fmt.Sprintf("server=%s;database=%s;user id=%s;password=%s;port=%d", *server, *database, *user, *password, *port)
if *debug {
message := fmt.Sprintf("connString:%s\n", connString)
logMessage(message)
}
conn, err := sql.Open(*driver, connString)
if err != nil {
return nil, err
// log.Fatal("Failed to connect to the database: ", err.Error())
}
defer conn.Close()
statement, err := conn.Prepare(query)
if err != nil {
return nil, err
// log.Fatal("Failed to query a trip: ", err.Error())
}
defer statement.Close()
row := statement.QueryRow()
return row, nil
}