Browse Source

go: Use interpolateParams=true for MySQL

INADA Naoki 10 years ago
parent
commit
b677d3d782
1 changed files with 12 additions and 24 deletions
  1. 12 24
      frameworks/Go/go/src/hello/hello.go

+ 12 - 24
frameworks/Go/go/src/hello/hello.go

@@ -30,7 +30,7 @@ type Fortune struct {
 
 
 const (
 const (
 	// Database
 	// Database
-	connectionString   = "benchmarkdbuser:benchmarkdbpass@tcp(localhost:3306)/hello_world"
+	connectionString   = "benchmarkdbuser:benchmarkdbpass@tcp(localhost:3306)/hello_world?interpolateParams=true"
 	worldSelect        = "SELECT id, randomNumber FROM World WHERE id = ?"
 	worldSelect        = "SELECT id, randomNumber FROM World WHERE id = ?"
 	worldUpdate        = "UPDATE World SET randomNumber = ? WHERE id = ?"
 	worldUpdate        = "UPDATE World SET randomNumber = ? WHERE id = ?"
 	fortuneSelect      = "SELECT id, message FROM Fortune;"
 	fortuneSelect      = "SELECT id, message FROM Fortune;"
@@ -45,9 +45,7 @@ var (
 	tmpl = template.Must(template.ParseFiles("templates/layout.html", "templates/fortune.html"))
 	tmpl = template.Must(template.ParseFiles("templates/layout.html", "templates/fortune.html"))
 
 
 	// Database
 	// Database
-	worldStatement   *sql.Stmt
-	fortuneStatement *sql.Stmt
-	updateStatement  *sql.Stmt
+	db *sql.DB
 
 
 	helloWorldBytes = []byte(helloWorldString)
 	helloWorldBytes = []byte(helloWorldString)
 )
 )
@@ -55,23 +53,12 @@ var (
 func main() {
 func main() {
 	runtime.GOMAXPROCS(runtime.NumCPU())
 	runtime.GOMAXPROCS(runtime.NumCPU())
 
 
-	db, err := sql.Open("mysql", connectionString)
+	var err error
+	db, err = sql.Open("mysql", connectionString)
 	if err != nil {
 	if err != nil {
 		log.Fatalf("Error opening database: %v", err)
 		log.Fatalf("Error opening database: %v", err)
 	}
 	}
 	db.SetMaxIdleConns(maxConnectionCount)
 	db.SetMaxIdleConns(maxConnectionCount)
-	worldStatement, err = db.Prepare(worldSelect)
-	if err != nil {
-		log.Fatal(err)
-	}
-	fortuneStatement, err = db.Prepare(fortuneSelect)
-	if err != nil {
-		log.Fatal(err)
-	}
-	updateStatement, err = db.Prepare(worldUpdate)
-	if err != nil {
-		log.Fatal(err)
-	}
 
 
 	http.HandleFunc("/db", dbHandler)
 	http.HandleFunc("/db", dbHandler)
 	http.HandleFunc("/queries", queriesHandler)
 	http.HandleFunc("/queries", queriesHandler)
@@ -91,7 +78,7 @@ func jsonHandler(w http.ResponseWriter, r *http.Request) {
 // Test 2: Single database query
 // Test 2: Single database query
 func dbHandler(w http.ResponseWriter, r *http.Request) {
 func dbHandler(w http.ResponseWriter, r *http.Request) {
 	var world World
 	var world World
-	err := worldStatement.QueryRow(rand.Intn(worldRowCount)+1).Scan(&world.Id, &world.RandomNumber)
+	err := db.QueryRow(worldSelect, rand.Intn(worldRowCount)+1).Scan(&world.Id, &world.RandomNumber)
 	if err != nil {
 	if err != nil {
 		log.Fatalf("Error scanning world row: %s", err.Error())
 		log.Fatalf("Error scanning world row: %s", err.Error())
 	}
 	}
@@ -114,7 +101,7 @@ func queriesHandler(w http.ResponseWriter, r *http.Request) {
 
 
 	world := make([]World, n)
 	world := make([]World, n)
 	for i := 0; i < n; i++ {
 	for i := 0; i < n; i++ {
-		err := worldStatement.QueryRow(rand.Intn(worldRowCount)+1).Scan(&world[i].Id, &world[i].RandomNumber)
+		err := db.QueryRow(worldSelect, rand.Intn(worldRowCount)+1).Scan(&world[i].Id, &world[i].RandomNumber)
 		if err != nil {
 		if err != nil {
 			log.Fatalf("Error scanning world row: %s", err.Error())
 			log.Fatalf("Error scanning world row: %s", err.Error())
 		}
 		}
@@ -126,7 +113,7 @@ func queriesHandler(w http.ResponseWriter, r *http.Request) {
 
 
 // Test 4: Fortunes
 // Test 4: Fortunes
 func fortuneHandler(w http.ResponseWriter, r *http.Request) {
 func fortuneHandler(w http.ResponseWriter, r *http.Request) {
-	rows, err := fortuneStatement.Query()
+	rows, err := db.Query(fortuneSelect)
 	if err != nil {
 	if err != nil {
 		log.Fatalf("Error preparing statement: %v", err)
 		log.Fatalf("Error preparing statement: %v", err)
 	}
 	}
@@ -139,6 +126,7 @@ func fortuneHandler(w http.ResponseWriter, r *http.Request) {
 		}
 		}
 		fortunes = append(fortunes, &fortune)
 		fortunes = append(fortunes, &fortune)
 	}
 	}
+	rows.Close()
 	fortunes = append(fortunes, &Fortune{Message: "Additional fortune added at request time."})
 	fortunes = append(fortunes, &Fortune{Message: "Additional fortune added at request time."})
 
 
 	sort.Sort(ByMessage{fortunes})
 	sort.Sort(ByMessage{fortunes})
@@ -160,18 +148,18 @@ func updateHandler(w http.ResponseWriter, r *http.Request) {
 
 
 	if n <= 1 {
 	if n <= 1 {
 		var world World
 		var world World
-		worldStatement.QueryRow(rand.Intn(worldRowCount)+1).Scan(&world.Id, &world.RandomNumber)
+		db.QueryRow(worldSelect, rand.Intn(worldRowCount)+1).Scan(&world.Id, &world.RandomNumber)
 		world.RandomNumber = uint16(rand.Intn(worldRowCount) + 1)
 		world.RandomNumber = uint16(rand.Intn(worldRowCount) + 1)
-		updateStatement.Exec(world.RandomNumber, world.Id)
+		db.Exec(worldUpdate, world.RandomNumber, world.Id)
 		encoder.Encode(&world)
 		encoder.Encode(&world)
 	} else {
 	} else {
 		world := make([]World, n)
 		world := make([]World, n)
 		for i := 0; i < n; i++ {
 		for i := 0; i < n; i++ {
-			if err := worldStatement.QueryRow(rand.Intn(worldRowCount)+1).Scan(&world[i].Id, &world[i].RandomNumber); err != nil {
+			if err := db.QueryRow(worldSelect, rand.Intn(worldRowCount)+1).Scan(&world[i].Id, &world[i].RandomNumber); err != nil {
 				log.Fatalf("Error scanning world row: %s", err.Error())
 				log.Fatalf("Error scanning world row: %s", err.Error())
 			}
 			}
 			world[i].RandomNumber = uint16(rand.Intn(worldRowCount) + 1)
 			world[i].RandomNumber = uint16(rand.Intn(worldRowCount) + 1)
-			if _, err := updateStatement.Exec(world[i].RandomNumber, world[i].Id); err != nil {
+			if _, err := db.Exec(worldUpdate, world[i].RandomNumber, world[i].Id); err != nil {
 				log.Fatalf("Error updating world row: %s", err.Error())
 				log.Fatalf("Error updating world row: %s", err.Error())
 			}
 			}
 		}
 		}