Created
September 29, 2020 22:29
-
-
Save podhmo/cd8a7fd31a463ac8f050a509677c4029 to your computer and use it in GitHub Desktop.
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
--- main00.go 2020-09-30 07:02:35.000000000 +0900 | |
+++ main01.go 2020-09-30 07:11:17.000000000 +0900 | |
@@ -6,6 +6,9 @@ | |
"os" | |
_ "github.com/mattn/go-sqlite3" | |
+ "github.com/rs/zerolog" | |
+ sqldblogger "github.com/simukti/sqldb-logger" | |
+ "github.com/simukti/sqldb-logger/logadapter/zerologadapter" | |
) | |
func main() { | |
@@ -18,12 +21,24 @@ | |
dbSource = "sample.db" | |
} | |
+ var db *sql.DB | |
db, err := sql.Open(driver, dbSource) | |
if err != nil { | |
panic(err.Error()) // Just for example purpose. You should use proper error handling instead of panic | |
} | |
defer db.Close() | |
+ logger := zerolog.New( | |
+ zerolog.ConsoleWriter{Out: os.Stdout, NoColor: false}, | |
+ ) | |
+ // populate log pre-fields here before set to | |
+ db = sqldblogger.OpenDriver( | |
+ dbSource, | |
+ db.Driver(), | |
+ zerologadapter.New(logger), | |
+ // optional config... | |
+ ) | |
+ | |
// Prepare statement for inserting data | |
stmtIns, err := db.Prepare("INSERT INTO squareNum VALUES( ?, ? )") // ? = placeholder | |
if err != nil { |
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
--- main00.go 2020-09-30 07:02:35.000000000 +0900 | |
+++ main02.go 2020-09-30 07:24:16.000000000 +0900 | |
@@ -1,13 +1,35 @@ | |
package main | |
import ( | |
+ "bytes" | |
+ "context" | |
"database/sql" | |
"fmt" | |
+ "log" | |
"os" | |
_ "github.com/mattn/go-sqlite3" | |
+ sqldblogger "github.com/simukti/sqldb-logger" | |
) | |
+type logAdapter struct { | |
+ Logger *log.Logger | |
+} | |
+ | |
+func (a *logAdapter) Log( | |
+ ctx context.Context, | |
+ level sqldbLevel, | |
+ msg string, | |
+ data map[string]interface{}, | |
+) { | |
+ var b bytes.Buffer | |
+ fmt.Fprintf(&b, "level:%s msg:%s", level, msg) | |
+ for k, v := range data { | |
+ fmt.Fprintf(&b, " %v:%v", k, v) | |
+ } | |
+ a.Logger.Println(b.String()) | |
+} | |
+ | |
func main() { | |
driver := os.Getenv("DRIVER") | |
if driver == "" { | |
@@ -18,12 +40,19 @@ | |
dbSource = "sample.db" | |
} | |
+ var db *sql.DB | |
db, err := sql.Open(driver, dbSource) | |
if err != nil { | |
panic(err.Error()) // Just for example purpose. You should use proper error handling instead of panic | |
} | |
defer db.Close() | |
+ db = sqldblogger.OpenDriver( | |
+ dbSource, | |
+ db.Driver(), | |
+ &logAdapter{Logger: log.New(os.Stdout, "**", 0)}, | |
+ ) | |
+ | |
// Prepare statement for inserting data | |
stmtIns, err := db.Prepare("INSERT INTO squareNum VALUES( ?, ? )") // ? = placeholder | |
if err != nil { |
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
module m | |
go 1.15 | |
require ( | |
github.com/mattn/go-sqlite3 v1.14.3 // indirect | |
github.com/simukti/sqldb-logger v0.0.0-20200812042017-c462204a3317 // indirect | |
) |
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
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | |
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= | |
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | |
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | |
github.com/francoispqt/gojay v0.0.0-20181220093123-f2cc13a668ca/go.mod h1:H8Wgri1Asi1VevY3ySdpIK5+KCpqzToVswNq8g2xZj4= | |
github.com/francoispqt/onelog v0.0.0-20190306043706-8c2bb31b10a4/go.mod h1:v1Il1fkBpjiYPpEJcGxqgrPUPcHuTC7eHh9zBV3CLBE= | |
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= | |
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | |
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | |
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | |
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | |
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= | |
github.com/mattn/go-sqlite3 v1.14.3 h1:j7a/xn1U6TKA/PHHxqZuzh64CdtRc7rU9M+AvkOl5bA= | |
github.com/mattn/go-sqlite3 v1.14.3/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= | |
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | |
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | |
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= | |
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= | |
github.com/rs/zerolog v1.19.0 h1:hYz4ZVdUgjXTBUmrkrw55j1nHx68LfOKIQk5IYtyScg= | |
github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= | |
github.com/simukti/sqldb-logger v0.0.0-20200812042017-c462204a3317 h1:HlxdTaWqWKrsyzPgJVegVFAqU38iueOp47+XdaNvDQE= | |
github.com/simukti/sqldb-logger v0.0.0-20200812042017-c462204a3317/go.mod h1:S2r2jtBph6XWCYytnRMerRfmp6gwiWBsmEWTPbCJWCU= | |
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= | |
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | |
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= | |
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | |
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | |
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= | |
github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | |
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= | |
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= | |
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= | |
go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= | |
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | |
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | |
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= | |
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= | |
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | |
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | |
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | |
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | |
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | |
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | |
golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | |
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | |
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | |
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | |
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | |
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | |
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= | |
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | |
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | |
gopkg.in/yaml.v3 v3.0.0-20200601152816-913338de1bd2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | |
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= |
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
CREATE TABLE squareNum ( | |
number int PRIMARY KEY, | |
squareNumber int | |
); |
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" | |
"fmt" | |
"os" | |
_ "github.com/mattn/go-sqlite3" | |
) | |
func main() { | |
driver := os.Getenv("DRIVER") | |
if driver == "" { | |
driver = "sqlite3" | |
} | |
dbSource := os.Getenv("DB") | |
if dbSource == "" { | |
dbSource = "sample.db" | |
} | |
db, err := sql.Open(driver, dbSource) | |
if err != nil { | |
panic(err.Error()) // Just for example purpose. You should use proper error handling instead of panic | |
} | |
defer db.Close() | |
// Prepare statement for inserting data | |
stmtIns, err := db.Prepare("INSERT INTO squareNum VALUES( ?, ? )") // ? = placeholder | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
defer stmtIns.Close() // Close the statement when we leave main() / the program terminates | |
// Prepare statement for reading data | |
stmtOut, err := db.Prepare("SELECT squareNumber FROM squarenum WHERE number = ?") | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
defer stmtOut.Close() | |
// Insert square numbers for 0-24 in the database | |
for i := 0; i < 25; i++ { | |
_, err = stmtIns.Exec(i, (i * i)) // Insert tuples (i, i^2) | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
} | |
var squareNum int // we "scan" the result in here | |
// Query the square-number of 13 | |
err = stmtOut.QueryRow(13).Scan(&squareNum) // WHERE number = 13 | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
fmt.Printf("The square number of 13 is: %d\n", squareNum) | |
// Query another number.. 1 maybe? | |
err = stmtOut.QueryRow(1).Scan(&squareNum) // WHERE number = 1 | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
fmt.Printf("The square number of 1 is: %d\n", squareNum) | |
} |
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" | |
"fmt" | |
"os" | |
_ "github.com/mattn/go-sqlite3" | |
"github.com/rs/zerolog" | |
sqldblogger "github.com/simukti/sqldb-logger" | |
"github.com/simukti/sqldb-logger/logadapter/zerologadapter" | |
) | |
func main() { | |
driver := os.Getenv("DRIVER") | |
if driver == "" { | |
driver = "sqlite3" | |
} | |
dbSource := os.Getenv("DB") | |
if dbSource == "" { | |
dbSource = "sample.db" | |
} | |
var db *sql.DB | |
db, err := sql.Open(driver, dbSource) | |
if err != nil { | |
panic(err.Error()) // Just for example purpose. You should use proper error handling instead of panic | |
} | |
defer db.Close() | |
logger := zerolog.New( | |
zerolog.ConsoleWriter{Out: os.Stdout, NoColor: false}, | |
) | |
// populate log pre-fields here before set to | |
db = sqldblogger.OpenDriver( | |
dbSource, | |
db.Driver(), | |
zerologadapter.New(logger), | |
// optional config... | |
) | |
// Prepare statement for inserting data | |
stmtIns, err := db.Prepare("INSERT INTO squareNum VALUES( ?, ? )") // ? = placeholder | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
defer stmtIns.Close() // Close the statement when we leave main() / the program terminates | |
// Prepare statement for reading data | |
stmtOut, err := db.Prepare("SELECT squareNumber FROM squarenum WHERE number = ?") | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
defer stmtOut.Close() | |
// Insert square numbers for 0-24 in the database | |
for i := 0; i < 25; i++ { | |
_, err = stmtIns.Exec(i, (i * i)) // Insert tuples (i, i^2) | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
} | |
var squareNum int // we "scan" the result in here | |
// Query the square-number of 13 | |
err = stmtOut.QueryRow(13).Scan(&squareNum) // WHERE number = 13 | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
fmt.Printf("The square number of 13 is: %d\n", squareNum) | |
// Query another number.. 1 maybe? | |
err = stmtOut.QueryRow(1).Scan(&squareNum) // WHERE number = 1 | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
fmt.Printf("The square number of 1 is: %d\n", squareNum) | |
} |
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 ( | |
"bytes" | |
"context" | |
"database/sql" | |
"fmt" | |
"log" | |
"os" | |
_ "github.com/mattn/go-sqlite3" | |
sqldblogger "github.com/simukti/sqldb-logger" | |
) | |
type logAdapter struct { | |
Logger *log.Logger | |
} | |
func (a *logAdapter) Log( | |
ctx context.Context, | |
level sqldblogger.Level, | |
msg string, | |
data map[string]interface{}, | |
) { | |
var b bytes.Buffer | |
fmt.Fprintf(&b, "level:%s msg:%s", level, msg) | |
for k, v := range data { | |
fmt.Fprintf(&b, " %v:%v", k, v) | |
} | |
a.Logger.Println(b.String()) | |
} | |
func main() { | |
driver := os.Getenv("DRIVER") | |
if driver == "" { | |
driver = "sqlite3" | |
} | |
dbSource := os.Getenv("DB") | |
if dbSource == "" { | |
dbSource = "sample.db" | |
} | |
var db *sql.DB | |
db, err := sql.Open(driver, dbSource) | |
if err != nil { | |
panic(err.Error()) // Just for example purpose. You should use proper error handling instead of panic | |
} | |
defer db.Close() | |
db = sqldblogger.OpenDriver( | |
dbSource, | |
db.Driver(), | |
&logAdapter{Logger: log.New(os.Stdout, "**", 0)}, | |
) | |
// Prepare statement for inserting data | |
stmtIns, err := db.Prepare("INSERT INTO squareNum VALUES( ?, ? )") // ? = placeholder | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
defer stmtIns.Close() // Close the statement when we leave main() / the program terminates | |
// Prepare statement for reading data | |
stmtOut, err := db.Prepare("SELECT squareNumber FROM squarenum WHERE number = ?") | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
defer stmtOut.Close() | |
// Insert square numbers for 0-24 in the database | |
for i := 0; i < 25; i++ { | |
_, err = stmtIns.Exec(i, (i * i)) // Insert tuples (i, i^2) | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
} | |
var squareNum int // we "scan" the result in here | |
// Query the square-number of 13 | |
err = stmtOut.QueryRow(13).Scan(&squareNum) // WHERE number = 13 | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
fmt.Printf("The square number of 13 is: %d\n", squareNum) | |
// Query another number.. 1 maybe? | |
err = stmtOut.QueryRow(1).Scan(&squareNum) // WHERE number = 1 | |
if err != nil { | |
panic(err.Error()) // proper error handling instead of panic in your app | |
} | |
fmt.Printf("The square number of 1 is: %d\n", squareNum) | |
} |
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
00: clean sample.db | |
go run main$@.go | |
01: clean sample.db | |
diff -u main00.go main$@.go > 00$@.diff || : | |
go run main$@.go | |
02: clean sample.db | |
diff -u main00.go main$@.go > 00$@.diff || : | |
go run main$@.go | |
clean: | |
rm -rf sample.db | |
sample.db: | |
cat insert.sql | sqlite3 $@ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment