Created
June 12, 2021 23:27
-
-
Save austin-millan/35cf8a3b78f5d644bab510703669304b to your computer and use it in GitHub Desktop.
Markdium-
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"database/sql" | |
"encoding/json" | |
"fmt" | |
"strings" | |
"github.com/jmoiron/sqlx" | |
) | |
// A used for `sometable` row | |
type A struct { | |
Id int `json:"ID"` | |
ValA int `json:"valA"` | |
ValB int `json:"valB"` | |
} | |
func (a *A) Insert(sqldb *sqlx.DB) (int64, error) { | |
var rslt sql.Result | |
var err error | |
if rslt, err = sqldb.Exec(fmt.Sprintf("INSERT INTO sometable (valA, valB) VALUES (%d, %d) ", a.ValA, a.ValB)); err != nil { | |
return 0, err | |
} else if rslt == nil { | |
return 0, fmt.Errorf("no result") | |
} | |
id, err := rslt.LastInsertId() | |
if err != nil { | |
return 0, err | |
} | |
return id, nil | |
} | |
func (a *A) Query(sqldb *sqlx.DB, id int64, columns []string) (err error) { | |
var row *sql.Row | |
if len(columns) == 0 { | |
return nil | |
} | |
if row = sqldb.QueryRow(fmt.Sprintf("SELECT %s from sometable where ID=%d", strings.Join(columns, ","), id)); err != nil { | |
return err | |
} else if row == nil { | |
return sql.ErrNoRows | |
} | |
if err = row.Scan(a); err != nil { | |
return err | |
} | |
return nil | |
} | |
func main() { | |
input := A{ | |
ValA: 1, | |
ValB: 1, | |
} | |
db, _ := sqlx.Open("mysql", "root:root") | |
id, _ := input.Insert(db) | |
db.Exec(` | |
CREATE TABLE sometable ( | |
ID int, | |
valA varchar(255), | |
valA varchar(255), | |
); | |
`) | |
input.ValA = 0 | |
input.ValB = 0 | |
input.Query(db, id, []string{"valA"}) // query only one column causing omitted data returned | |
output, _ := json.Marshal(input) | |
fmt.Println(string(output)) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment