github.com/knetic/go-namedParameterQuery@v0.0.0-20150709205813-b7327e472dfd/benchmarks_test.go (about)

     1  package namedParameterQuery
     2  
     3  import (
     4    "testing"
     5    "bytes"
     6    "fmt"
     7  )
     8  
     9  func BenchmarkSimpleParsing(bench *testing.B) {
    10  
    11    query := "SELECT [foo] FROM bar WHERE [baz] = :quux"
    12    for i := 0; i < bench.N; i++ {
    13  
    14      NewNamedParameterQuery(query)
    15    }
    16  }
    17  
    18  func BenchmarkMultiOccurrenceParsing(bench *testing.B) {
    19  
    20    query := "SELECT [foo] FROM bar WHERE [baz] = :quux " +
    21              "AND [something] = :quux " +
    22              "OR [otherStuff] NOT :quux"
    23  
    24    for i := 0; i < bench.N; i++ {
    25  
    26      NewNamedParameterQuery(query)
    27    }
    28  }
    29  
    30  func BenchmarkMultiParameterParsing(bench *testing.B) {
    31  
    32    query := "SELECT [foo] FROM bar WHERE [baz] = :quux " +
    33              "AND [something] = :quux2 " +
    34              "OR [otherStuff] NOT :quux3"
    35  
    36    for i := 0; i < bench.N; i++ {
    37  
    38      NewNamedParameterQuery(query)
    39    }
    40  }
    41  
    42  /*
    43    Benchmarks returning a query which has no parameters
    44  */
    45  func BenchmarkNoReplacement(bench *testing.B) {
    46  
    47    query := "SELECT [foo] FROM bar WHERE [baz] = quux"
    48    replacer := NewNamedParameterQuery(query)
    49  
    50    for i := 0; i < bench.N; i++ {
    51  
    52      replacer.GetParsedParameters()
    53    }
    54  }
    55  
    56  /*
    57    Benchmarks returning a query which uses exactly one parameter
    58  */
    59  func BenchmarkSingleReplacement(bench *testing.B) {
    60  
    61    query := "SELECT [foo] FROM bar WHERE [baz] = :quux"
    62    replacer := NewNamedParameterQuery(query)
    63  
    64    for i := 0; i < bench.N; i++ {
    65  
    66      replacer.SetValue("quux", bench.N)
    67      replacer.GetParsedParameters()
    68    }
    69  }
    70  
    71  /*
    72    Benchmarks returning a query which has multiple occurrences of one parameter
    73  */
    74  func BenchmarkMultiOccurrenceReplacement(bench *testing.B) {
    75  
    76    query := "SELECT [foo] FROM bar WHERE [baz] = :quux " +
    77              "AND [something] = :quux " +
    78              "OR [otherStuff] NOT :quux"
    79    replacer := NewNamedParameterQuery(query)
    80  
    81    for i := 0; i < bench.N; i++ {
    82  
    83      replacer.SetValue("quux", bench.N)
    84      replacer.GetParsedParameters()
    85    }
    86  }
    87  
    88  /*
    89    Benchmarks returning a query which has multiple parameters
    90  */
    91  func BenchmarkMultiParameterReplacement(bench *testing.B) {
    92  
    93    query := "SELECT [foo] FROM bar WHERE [baz] = :quux " +
    94              "AND [something] = :quux2 " +
    95              "OR [otherStuff] NOT :quux3 "
    96    replacer := NewNamedParameterQuery(query)
    97  
    98    for i := 0; i < bench.N; i++ {
    99  
   100      replacer.SetValue("quux", bench.N)
   101      replacer.SetValue("quux2", bench.N)
   102      replacer.SetValue("quux3", bench.N)
   103      replacer.GetParsedParameters()
   104    }
   105  }
   106  
   107  func Benchmark16ParameterReplacement(bench *testing.B) {
   108      benchmarkMultiParameter(bench, 16)
   109  }
   110  
   111  func Benchmark32ParameterReplacement(bench *testing.B) {
   112      benchmarkMultiParameter(bench, 32)
   113  }
   114  
   115  func Benchmark64ParameterReplacement(bench *testing.B) {
   116      benchmarkMultiParameter(bench, 64)
   117  }
   118  
   119  func Benchmark128ParameterReplacement(bench *testing.B) {
   120      benchmarkMultiParameter(bench, 128)
   121  }
   122  
   123  /*
   124    Benchmarks returning a query which has multiple parameters
   125  */
   126  func benchmarkMultiParameter(bench *testing.B, parameterCount int) {
   127  
   128    var queryBuffer bytes.Buffer
   129    var parameterName string
   130  
   131    queryBuffer.WriteString("SELECT [foo] FROM bar WHERE [baz] = :quux ")
   132    queryLine := "AND [something] = :quux%d "
   133  
   134    for i := 0; i < parameterCount; i++ {
   135  
   136      queryBuffer.WriteString(fmt.Sprintf(queryLine, i))
   137    }
   138  
   139    replacer := NewNamedParameterQuery(queryBuffer.String())
   140  
   141    for i := 0; i < bench.N; i++ {
   142  
   143      for n := 0; n < parameterCount; n++ {
   144        parameterName = fmt.Sprintf("quux%d", n)
   145        replacer.SetValue(parameterName, bench.N)
   146      }
   147  
   148      replacer.GetParsedParameters()
   149    }
   150  }