11package main
22
33import (
4+ "flag"
45 "fmt"
56 "log"
67 "net/http"
78
8- _ "github.com/go-sql-driver/mysql"
99 "github.com/google/sqlcommenter/go/core"
1010 gosql "github.com/google/sqlcommenter/go/database/sql"
1111 httpnet "github.com/google/sqlcommenter/go/net/http"
1212 "go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
1313 sdktrace "go.opentelemetry.io/otel/sdk/trace"
14+
15+ "sqlcommenter-http/mysqldb"
16+ "sqlcommenter-http/pgdb"
1417)
1518
16- func Index ( w http. ResponseWriter , r * http. Request ) {
19+ var db * gosql. DB
1720
18- connection := "root:root@/gotest"
21+ func Index ( w http. ResponseWriter , r * http. Request ) {
1922 exp , _ := stdouttrace .New (stdouttrace .WithPrettyPrint ())
2023 bsp := sdktrace .NewSimpleSpanProcessor (exp ) // You should use batch span processor in prod
2124 tp := sdktrace .NewTracerProvider (
@@ -26,16 +29,24 @@ func Index(w http.ResponseWriter, r *http.Request) {
2629 ctx , span := tp .Tracer ("foo" ).Start (r .Context (), "parent-span-name" )
2730 defer span .End ()
2831
29- db , err := gosql .Open ("mysql" , connection , core.CommenterOptions {EnableDBDriver : true , EnableRoute : true , EnableAction : true , EnableFramework : true , EnableTraceparent : true })
32+ db .ExecContext (ctx , "Select 1" )
33+ db .Exec ("Select 2" )
34+
35+ stmt1 , err := db .Prepare ("Select 3" )
36+ if err != nil {
37+ log .Fatal (err )
38+ }
39+ stmt1 .QueryRow ()
40+
41+ stmt2 , err := db .PrepareContext (ctx , "Select 4" )
3042 if err != nil {
31- fmt .Println (err )
32- } else {
33- db .ExecContext (ctx , "Select 11;" )
34- db .Exec ("Select 2;" )
35- db .Prepare ("Select 10" )
36- db .PrepareContext (ctx , "Select 10" )
43+ log .Fatal (err )
3744 }
38- fmt .Fprintf (w , "Hello World!" )
45+ stmt2 .QueryRow ()
46+
47+ db .QueryContext (ctx , "Select 5" )
48+
49+ fmt .Fprintf (w , "Hello World!\r \n " )
3950}
4051
4152// middleware is used to intercept incoming HTTP calls and apply general functions upon them.
@@ -47,9 +58,47 @@ func middleware(next http.Handler) http.Handler {
4758 })
4859}
4960
50- func main () {
61+ func runForMysql () * gosql.DB {
62+ connection := "root:password@/sqlcommenter_db"
63+ db = mysqldb .ConnectMySQL (connection )
64+
65+ mux := http .NewServeMux ()
66+ finalHandler := http .HandlerFunc (Index )
67+ mux .Handle ("/" , middleware ((finalHandler )))
68+ log .Fatal (http .ListenAndServe (":8080" , mux ))
69+ return db
70+ return db
71+ }
72+
73+ func runForPg () * gosql.DB {
74+ connection := "postgres://dev:dev@localhost/sqlcommenter_db?sslmode=disable"
75+ db = pgdb .ConnectPG (connection )
76+
5177 mux := http .NewServeMux ()
5278 finalHandler := http .HandlerFunc (Index )
5379 mux .Handle ("/" , middleware ((finalHandler )))
5480 log .Fatal (http .ListenAndServe (":8080" , mux ))
81+ return db
82+ }
83+
84+ func main () {
85+ var engine string
86+
87+ flag .StringVar (& engine , "db_engine" , "mysql" , "db-engine to run the sample on" )
88+ flag .Parse ()
89+
90+ if engine != "mysql" && engine != "pg" {
91+ log .Fatalf ("invalid engine: %s" , engine )
92+ }
93+
94+ var db * gosql.DB
95+
96+ switch engine {
97+ case "mysql" :
98+ db = runForMysql ()
99+ case "pg" :
100+ db = runForPg ()
101+ }
102+
103+ db .Close ()
55104}
0 commit comments