github.com/Vlad161/go-namedParameterQuery@v0.0.0-20221005124944-53b82cc674c2/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 }