benchmark_test.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package mysql
  2. import (
  3. "database/sql"
  4. "strings"
  5. "testing"
  6. )
  7. var (
  8. // dsn from driver_test.go
  9. sample = []byte(strings.Repeat("0123456789abcdef", 1024*1024))
  10. )
  11. func BenchmarkRoundtripText(b *testing.B) {
  12. db, err := sql.Open("mysql", dsn)
  13. if err != nil {
  14. b.Fatalf("crashed")
  15. }
  16. defer db.Close()
  17. var result string
  18. for i := 0; i < b.N; i++ {
  19. length := 16 + i%(4*b.N)
  20. test := string(sample[0:length])
  21. rows, err := db.Query("SELECT \"" + test + "\"")
  22. if err != nil {
  23. b.Fatalf("crashed")
  24. }
  25. if !rows.Next() {
  26. rows.Close()
  27. b.Fatalf("crashed")
  28. }
  29. err = rows.Scan(&result)
  30. if err != nil {
  31. rows.Close()
  32. b.Fatalf("crashed")
  33. }
  34. if result != test {
  35. rows.Close()
  36. b.Errorf("mismatch")
  37. }
  38. rows.Close()
  39. }
  40. }
  41. func BenchmarkRoundtripPrepared(b *testing.B) {
  42. db, err := sql.Open("mysql", dsn)
  43. if err != nil {
  44. b.Fatalf("crashed")
  45. }
  46. defer db.Close()
  47. var result string
  48. stmt, err := db.Prepare("SELECT ?")
  49. if err != nil {
  50. b.Fatalf("crashed")
  51. }
  52. for i := 0; i < b.N; i++ {
  53. length := 16 + i%(4*b.N)
  54. test := string(sample[0:length])
  55. rows, err := stmt.Query(test)
  56. if err != nil {
  57. b.Fatalf("crashed")
  58. }
  59. if !rows.Next() {
  60. rows.Close()
  61. b.Fatalf("crashed")
  62. }
  63. err = rows.Scan(&result)
  64. if err != nil {
  65. rows.Close()
  66. b.Fatalf("crashed")
  67. }
  68. if result != test {
  69. rows.Close()
  70. b.Errorf("mismatch")
  71. }
  72. rows.Close()
  73. }
  74. }