|
@@ -3,13 +3,19 @@ package databaseutils
|
|
|
import (
|
|
import (
|
|
|
"database/sql"
|
|
"database/sql"
|
|
|
_ "github.com/go-sql-driver/mysql"
|
|
_ "github.com/go-sql-driver/mysql"
|
|
|
- "fmt"
|
|
|
|
|
|
|
+ "errors"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
var (
|
|
|
DBUtil *DBUtils
|
|
DBUtil *DBUtils
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+const (
|
|
|
|
|
+ ERR_EMPTY_RESULT = "ERR_EMPTY_RESULT"
|
|
|
|
|
+ ERR_NO_COLUMNS = "ERR_NO_COLUMNS"
|
|
|
|
|
+ ERR_FAILED_ROW_SCAN = "ERR_FAILED_ROW_SCAN"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
type DBUtils struct {
|
|
type DBUtils struct {
|
|
|
User string
|
|
User string
|
|
|
Password string
|
|
Password string
|
|
@@ -38,27 +44,27 @@ func (dbUtil DBUtils) Close() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (dbUtil DBUtils) GetString(what string, from string, where string, wherevalue string) string {
|
|
func (dbUtil DBUtils) GetString(what string, from string, where string, wherevalue string) string {
|
|
|
- var username string
|
|
|
|
|
|
|
+ var buf string
|
|
|
|
|
|
|
|
rows, err := dbUtil.Handle.Query("SELECT " + what + " FROM " + from + " WHERE " + where + " = " + wherevalue) // TODO Parse?
|
|
rows, err := dbUtil.Handle.Query("SELECT " + what + " FROM " + from + " WHERE " + where + " = " + wherevalue) // TODO Parse?
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- fmt.Println(err)
|
|
|
|
|
|
|
+ panic(err.Error()) // TODO
|
|
|
}
|
|
}
|
|
|
defer rows.Close()
|
|
defer rows.Close()
|
|
|
|
|
+
|
|
|
for rows.Next() {
|
|
for rows.Next() {
|
|
|
- err := rows.Scan(&username)
|
|
|
|
|
|
|
+ err := rows.Scan(&buf)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- fmt.Println(err)
|
|
|
|
|
|
|
+ panic(err.Error()) // TODO
|
|
|
}
|
|
}
|
|
|
- fmt.Println(username)
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
err = rows.Err()
|
|
err = rows.Err()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- fmt.Println(err)
|
|
|
|
|
|
|
+ panic(err.Error()) // TODO
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return username
|
|
|
|
|
-
|
|
|
|
|
|
|
+ return buf
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// GetRow(what, from, where, wherevalue)
|
|
// GetRow(what, from, where, wherevalue)
|
|
@@ -71,46 +77,45 @@ func (dbUtil DBUtils) GetRow(options ...string) ([]string, error) {
|
|
|
} else {
|
|
} else {
|
|
|
rows, err = dbUtil.Handle.Query("SELECT " + options[0] + " FROM " + options[1]) // TODO Parse?
|
|
rows, err = dbUtil.Handle.Query("SELECT " + options[0] + " FROM " + options[1]) // TODO Parse?
|
|
|
}
|
|
}
|
|
|
|
|
+ defer rows.Close()
|
|
|
|
|
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- fmt.Println(err)
|
|
|
|
|
|
|
+ panic(err.Error()) // TODO
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
cols, err := rows.Columns()
|
|
cols, err := rows.Columns()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- fmt.Println("Failed to get columns", err)
|
|
|
|
|
- var x []string;
|
|
|
|
|
- x[0] = "";
|
|
|
|
|
- return x, err
|
|
|
|
|
|
|
+ return []string{""}, errors.New(ERR_NO_COLUMNS)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // Result is your slice string.
|
|
|
|
|
- rawResult := make([][]byte, len(cols))
|
|
|
|
|
- result := make([]string, len(cols))
|
|
|
|
|
|
|
+ dest := make([]interface{}, len(cols)) // interface for scanning
|
|
|
|
|
+ result := make([]sql.NullString, len(cols)) // NullString to check if empty
|
|
|
|
|
+ results := make([]string, len(cols)) // final return-result
|
|
|
|
|
|
|
|
- dest := make([]interface{}, len(cols)) // A temporary interface{} slice
|
|
|
|
|
- for i, _ := range rawResult {
|
|
|
|
|
- dest[i] = &rawResult[i] // Put pointers to each string in the interface slice
|
|
|
|
|
|
|
+ for i, _ := range result {
|
|
|
|
|
+ dest[i] = &result[i] // Put pointers to each string in the interface slice
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- for rows.Next() {
|
|
|
|
|
- err = rows.Scan(dest...)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- fmt.Println("Failed to scan row", err)
|
|
|
|
|
- var x []string;
|
|
|
|
|
- x[0] = "";
|
|
|
|
|
- return x
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- for i, raw := range rawResult {
|
|
|
|
|
- if raw == nil {
|
|
|
|
|
- result[i] = "\\N"
|
|
|
|
|
- } else {
|
|
|
|
|
- result[i] = string(raw)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ for rows.Next() {
|
|
|
|
|
+ err = rows.Scan(dest...) // copy results in dest
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return []string{""}, errors.New(ERR_FAILED_ROW_SCAN)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ errcounter := 0 // count invalid results
|
|
|
|
|
|
|
|
- return result
|
|
|
|
|
|
|
+ for i, _ := range result {
|
|
|
|
|
+ if result[i].Valid {
|
|
|
|
|
+ results[i] = result[i].String
|
|
|
|
|
+ } else {
|
|
|
|
|
+ errcounter++
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if errcounter == len(cols) { // if nothings valid it's empty
|
|
|
|
|
+ return []string{""}, errors.New(ERR_EMPTY_RESULT)
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ return results, nil
|
|
|
}
|
|
}
|