diff --git a/amex-2022-10-20/0_setup/db.db b/amex-2022-10-20/0_setup/db.db new file mode 100644 index 0000000..e69de29 diff --git a/amex-2022-10-20/0_setup/go.mod b/amex-2022-10-20/0_setup/go.mod index 39884f1..51e3620 100644 --- a/amex-2022-10-20/0_setup/go.mod +++ b/amex-2022-10-20/0_setup/go.mod @@ -1,3 +1,5 @@ module 0_setup go 1.18 + +require github.com/mattn/go-sqlite3 v1.14.15 diff --git a/amex-2022-10-20/0_setup/go.sum b/amex-2022-10-20/0_setup/go.sum new file mode 100644 index 0000000..252cb10 --- /dev/null +++ b/amex-2022-10-20/0_setup/go.sum @@ -0,0 +1,2 @@ +github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= +github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= diff --git a/amex-2022-10-20/0_setup/main.go b/amex-2022-10-20/0_setup/main.go index 9514e4e..57f13e3 100644 --- a/amex-2022-10-20/0_setup/main.go +++ b/amex-2022-10-20/0_setup/main.go @@ -3,8 +3,11 @@ package main import ( "database/sql" "flag" + "fmt" "log" "strings" + + _ "github.com/mattn/go-sqlite3" ) func main() { @@ -17,10 +20,38 @@ func main() { panic(err) } - if strings.HasPrefix(strings.ToUpper(strings.TrimSpace(*q)), "SELECT") { - panic("not impl") + query := strings.Trim(strings.TrimSpace(*q), ";") + ";" + + if strings.HasPrefix(strings.ToUpper(strings.TrimSpace(query)), "SELECT") { + rows, err := db.Query(query) + if err != nil { + panic(err) + } + defer rows.Close() + + columns, err := rows.Columns() + if err != nil { + panic(err) + } + + ptrs := make([]any, len(columns)) + for i := range ptrs { + var v interface{} + ptrs[i] = &v + } + + for rows.Next() { + if err := rows.Scan(ptrs...); err != nil { + panic(err) + } + for i := range ptrs { + ptr := ptrs[i].(*interface{}) + columns[i] = fmt.Sprint(*ptr) + } + log.Println(columns) + } } else { - stmt, err := db.Prepare(*q) + stmt, err := db.Prepare(query) if err != nil { panic(err) }