Skip to content

Instantly share code, notes, and snippets.

@austin-millan
Created June 12, 2021 23:27
Show Gist options
  • Save austin-millan/35cf8a3b78f5d644bab510703669304b to your computer and use it in GitHub Desktop.
Save austin-millan/35cf8a3b78f5d644bab510703669304b to your computer and use it in GitHub Desktop.
Markdium-
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