@@ -19,7 +19,7 @@ import (
1919)
2020
2121func BenchmarkConnectClose (b * testing.B ) {
22- for i := 0 ; i < b . N ; i ++ {
22+ for b . Loop () {
2323 conn , err := pgx .Connect (context .Background (), os .Getenv ("PGX_TEST_DATABASE" ))
2424 if err != nil {
2525 b .Fatal (err )
@@ -43,8 +43,7 @@ func BenchmarkMinimalUnpreparedSelectWithoutStatementCache(b *testing.B) {
4343
4444 var n int64
4545
46- b .ResetTimer ()
47- for i := 0 ; i < b .N ; i ++ {
46+ for i := 0 ; b .Loop (); i ++ {
4847 err := conn .QueryRow (context .Background (), "select $1::int8" , i ).Scan (& n )
4948 if err != nil {
5049 b .Fatal (err )
@@ -67,8 +66,7 @@ func BenchmarkMinimalUnpreparedSelectWithStatementCacheModeDescribe(b *testing.B
6766
6867 var n int64
6968
70- b .ResetTimer ()
71- for i := 0 ; i < b .N ; i ++ {
69+ for i := 0 ; b .Loop (); i ++ {
7270 err := conn .QueryRow (context .Background (), "select $1::int8" , i ).Scan (& n )
7371 if err != nil {
7472 b .Fatal (err )
@@ -91,8 +89,7 @@ func BenchmarkMinimalUnpreparedSelectWithStatementCacheModePrepare(b *testing.B)
9189
9290 var n int64
9391
94- b .ResetTimer ()
95- for i := 0 ; i < b .N ; i ++ {
92+ for i := 0 ; b .Loop (); i ++ {
9693 err := conn .QueryRow (context .Background (), "select $1::int8" , i ).Scan (& n )
9794 if err != nil {
9895 b .Fatal (err )
@@ -115,8 +112,7 @@ func BenchmarkMinimalPreparedSelect(b *testing.B) {
115112
116113 var n int64
117114
118- b .ResetTimer ()
119- for i := 0 ; i < b .N ; i ++ {
115+ for i := 0 ; b .Loop (); i ++ {
120116 err = conn .QueryRow (context .Background (), "ps1" , i ).Scan (& n )
121117 if err != nil {
122118 b .Fatal (err )
@@ -141,8 +137,7 @@ func BenchmarkMinimalPgConnPreparedSelect(b *testing.B) {
141137
142138 encodedBytes := make ([]byte , 8 )
143139
144- b .ResetTimer ()
145- for i := 0 ; i < b .N ; i ++ {
140+ for b .Loop () {
146141
147142 rr := pgConn .ExecPrepared (context .Background (), "ps1" , [][]byte {encodedBytes }, []int16 {1 }, []int16 {1 })
148143 if err != nil {
@@ -172,8 +167,7 @@ func BenchmarkPointerPointerWithNullValues(b *testing.B) {
172167 b .Fatal (err )
173168 }
174169
175- b .ResetTimer ()
176- for i := 0 ; i < b .N ; i ++ {
170+ for b .Loop () {
177171 var record struct {
178172 id int32
179173 userName string
@@ -232,8 +226,7 @@ func BenchmarkPointerPointerWithPresentValues(b *testing.B) {
232226 b .Fatal (err )
233227 }
234228
235- b .ResetTimer ()
236- for i := 0 ; i < b .N ; i ++ {
229+ for b .Loop () {
237230 var record struct {
238231 id int32
239232 userName string
@@ -383,9 +376,7 @@ func benchmarkWriteNRowsViaInsert(b *testing.B, n int) {
383376 b .Fatal (err )
384377 }
385378
386- b .ResetTimer ()
387-
388- for i := 0 ; i < b .N ; i ++ {
379+ for b .Loop () {
389380 src := newBenchmarkWriteTableCopyFromSrc (n )
390381
391382 tx , err := conn .Begin (context .Background ())
@@ -417,9 +408,7 @@ func benchmarkWriteNRowsViaBatchInsert(b *testing.B, n int) {
417408 b .Fatal (err )
418409 }
419410
420- b .ResetTimer ()
421-
422- for i := 0 ; i < b .N ; i ++ {
411+ for b .Loop () {
423412 src := newBenchmarkWriteTableCopyFromSrc (n )
424413
425414 batch := & pgx.Batch {}
@@ -528,9 +517,7 @@ func benchmarkWriteNRowsViaMultiInsert(b *testing.B, n int) {
528517 b .Fatal (err )
529518 }
530519
531- b .ResetTimer ()
532-
533- for i := 0 ; i < b .N ; i ++ {
520+ for b .Loop () {
534521 src := newBenchmarkWriteTableCopyFromSrc (n )
535522
536523 _ , err := multiInsert (conn , "t" ,
@@ -562,9 +549,7 @@ func benchmarkWriteNRowsViaCopy(b *testing.B, n int) {
562549
563550 mustExec (b , conn , benchmarkWriteTableCreateSQL )
564551
565- b .ResetTimer ()
566-
567- for i := 0 ; i < b .N ; i ++ {
552+ for b .Loop () {
568553 src := newBenchmarkWriteTableCopyFromSrc (n )
569554
570555 _ , err := conn .CopyFrom (context .Background (),
@@ -724,9 +709,9 @@ func BenchmarkMultipleQueriesNonBatchDescribeStatementCache(b *testing.B) {
724709}
725710
726711func benchmarkMultipleQueriesNonBatch (b * testing.B , conn * pgx.Conn , queryCount int ) {
727- b . ResetTimer ()
728- for i := 0 ; i < b . N ; i ++ {
729- for j := 0 ; j < queryCount ; j ++ {
712+
713+ for b . Loop () {
714+ for range queryCount {
730715 rows , err := conn .Query (context .Background (), "select n from generate_series(0, 5) n" )
731716 if err != nil {
732717 b .Fatal (err )
@@ -786,16 +771,16 @@ func BenchmarkMultipleQueriesBatchDescribeStatementCache(b *testing.B) {
786771}
787772
788773func benchmarkMultipleQueriesBatch (b * testing.B , conn * pgx.Conn , queryCount int ) {
789- b . ResetTimer ()
790- for i := 0 ; i < b . N ; i ++ {
774+
775+ for b . Loop () {
791776 batch := & pgx.Batch {}
792- for j := 0 ; j < queryCount ; j ++ {
777+ for range queryCount {
793778 batch .Queue ("select n from generate_series(0,5) n" )
794779 }
795780
796781 br := conn .SendBatch (context .Background (), batch )
797782
798- for j := 0 ; j < queryCount ; j ++ {
783+ for range queryCount {
799784 rows , err := br .Query ()
800785 if err != nil {
801786 b .Fatal (err )
@@ -838,9 +823,8 @@ func BenchmarkSelectManyUnknownEnum(b *testing.B) {
838823 _ , err = tx .Exec (ctx , `create type color as enum ('blue', 'green', 'orange')` )
839824 require .NoError (b , err )
840825
841- b .ResetTimer ()
842826 var x , y , z string
843- for i := 0 ; i < b . N ; i ++ {
827+ for b . Loop () {
844828 rows , err := conn .Query (ctx , "select 'blue'::color, 'green'::color, 'orange'::color from generate_series(1,10)" )
845829 if err != nil {
846830 b .Fatal (err )
@@ -890,9 +874,8 @@ func BenchmarkSelectManyRegisteredEnum(b *testing.B) {
890874
891875 conn .TypeMap ().RegisterType (& pgtype.Type {Name : "color" , OID : oid , Codec : & pgtype.EnumCodec {}})
892876
893- b .ResetTimer ()
894877 var x , y , z string
895- for i := 0 ; i < b . N ; i ++ {
878+ for b . Loop () {
896879 rows , err := conn .Query (ctx , "select 'blue'::color, 'green'::color, 'orange'::color from generate_series(1,10)" )
897880 if err != nil {
898881 b .Fatal (err )
@@ -926,7 +909,7 @@ func getSelectRowsCounts(b *testing.B) []int64 {
926909 {
927910 s := os .Getenv ("PGX_BENCH_SELECT_ROWS_COUNTS" )
928911 if s != "" {
929- for _ , p := range strings .Split (s , " " ) {
912+ for p := range strings .SplitSeq (s , " " ) {
930913 n , err := strconv .ParseInt (p , 10 , 64 )
931914 if err != nil {
932915 b .Fatalf ("Bad PGX_BENCH_SELECT_ROWS_COUNTS value: %v" , err )
@@ -964,7 +947,7 @@ func BenchmarkSelectRowsScanSimple(b *testing.B) {
964947 for _ , rowCount := range rowCounts {
965948 b .Run (fmt .Sprintf ("%d rows" , rowCount ), func (b * testing.B ) {
966949 br := & BenchRowSimple {}
967- for i := 0 ; i < b . N ; i ++ {
950+ for b . Loop () {
968951 rows , err := conn .Query (context .Background (), "select n, 'Adam', 'Smith ' || n, 'male', '1952-06-16'::date, 258, 72, '{foo,bar,baz}'::text[], '2001-01-28 01:02:03-05'::timestamptz from generate_series(100001, 100000 + $1) n" , rowCount )
969952 if err != nil {
970953 b .Fatal (err )
@@ -1003,7 +986,7 @@ func BenchmarkSelectRowsScanStringBytes(b *testing.B) {
1003986 for _ , rowCount := range rowCounts {
1004987 b .Run (fmt .Sprintf ("%d rows" , rowCount ), func (b * testing.B ) {
1005988 br := & BenchRowStringBytes {}
1006- for i := 0 ; i < b . N ; i ++ {
989+ for b . Loop () {
1007990 rows , err := conn .Query (context .Background (), "select n, 'Adam', 'Smith ' || n, 'male', '1952-06-16'::date, 258, 72, '{foo,bar,baz}'::text[], '2001-01-28 01:02:03-05'::timestamptz from generate_series(100001, 100000 + $1) n" , rowCount )
1008991 if err != nil {
1009992 b .Fatal (err )
@@ -1051,7 +1034,7 @@ func BenchmarkSelectRowsScanDecoder(b *testing.B) {
10511034 for _ , format := range formats {
10521035 b .Run (format .name , func (b * testing.B ) {
10531036 br := & BenchRowDecoder {}
1054- for i := 0 ; i < b . N ; i ++ {
1037+ for b . Loop () {
10551038 rows , err := conn .Query (
10561039 context .Background (),
10571040 "select n, 'Adam', 'Smith ' || n, 'male', '1952-06-16'::date, 258, 72, '{foo,bar,baz}'::text[], '2001-01-28 01:02:03-05'::timestamptz from generate_series(100001, 100000 + $1) n" ,
@@ -1084,7 +1067,7 @@ func BenchmarkSelectRowsPgConnExecText(b *testing.B) {
10841067
10851068 for _ , rowCount := range rowCounts {
10861069 b .Run (fmt .Sprintf ("%d rows" , rowCount ), func (b * testing.B ) {
1087- for i := 0 ; i < b . N ; i ++ {
1070+ for b . Loop () {
10881071 mrr := conn .PgConn ().Exec (context .Background (), fmt .Sprintf ("select n, 'Adam', 'Smith ' || n, 'male', '1952-06-16'::date, 258, 72, '{foo,bar,baz}'::text[], '2001-01-28 01:02:03-05'::timestamptz from generate_series(100001, 100000 + %d) n" , rowCount ))
10891072 for mrr .NextResult () {
10901073 rr := mrr .ResultReader ()
@@ -1119,7 +1102,7 @@ func BenchmarkSelectRowsPgConnExecParams(b *testing.B) {
11191102 }
11201103 for _ , format := range formats {
11211104 b .Run (format .name , func (b * testing.B ) {
1122- for i := 0 ; i < b . N ; i ++ {
1105+ for b . Loop () {
11231106 rr := conn .PgConn ().ExecParams (
11241107 context .Background (),
11251108 "select n, 'Adam', 'Smith ' || n, 'male', '1952-06-16'::date, 258, 72, '{foo,bar,baz}'::text[], '2001-01-28 01:02:03-05'::timestamptz from generate_series(100001, 100000 + $1) n" ,
@@ -1151,7 +1134,7 @@ func BenchmarkSelectRowsSimpleCollectRowsRowToStructByPos(b *testing.B) {
11511134
11521135 for _ , rowCount := range rowCounts {
11531136 b .Run (fmt .Sprintf ("%d rows" , rowCount ), func (b * testing.B ) {
1154- for i := 0 ; i < b . N ; i ++ {
1137+ for b . Loop () {
11551138 rows , _ := conn .Query (context .Background (), "select n, 'Adam', 'Smith ' || n, 'male', '1952-06-16'::date, 258, 72, '{foo,bar,baz}'::text[], '2001-01-28 01:02:03-05'::timestamptz from generate_series(100001, 100000 + $1) n" , rowCount )
11561139 benchRows , err := pgx .CollectRows (rows , pgx .RowToStructByPos [BenchRowSimple ])
11571140 if err != nil {
@@ -1174,7 +1157,7 @@ func BenchmarkSelectRowsSimpleAppendRowsRowToStructByPos(b *testing.B) {
11741157 for _ , rowCount := range rowCounts {
11751158 b .Run (fmt .Sprintf ("%d rows" , rowCount ), func (b * testing.B ) {
11761159 benchRows := make ([]BenchRowSimple , 0 , rowCount )
1177- for i := 0 ; i < b . N ; i ++ {
1160+ for b . Loop () {
11781161 benchRows = benchRows [:0 ]
11791162 rows , _ := conn .Query (context .Background (), "select n, 'Adam', 'Smith ' || n, 'male', '1952-06-16'::date, 258, 72, '{foo,bar,baz}'::text[], '2001-01-28 01:02:03-05'::timestamptz from generate_series(100001, 100000 + $1) n" , rowCount )
11801163 var err error
@@ -1198,7 +1181,7 @@ func BenchmarkSelectRowsSimpleCollectRowsRowToStructByName(b *testing.B) {
11981181
11991182 for _ , rowCount := range rowCounts {
12001183 b .Run (fmt .Sprintf ("%d rows" , rowCount ), func (b * testing.B ) {
1201- for i := 0 ; i < b . N ; i ++ {
1184+ for b . Loop () {
12021185 rows , _ := conn .Query (context .Background (), "select n as id, 'Adam' as first_name, 'Smith ' || n as last_name, 'male' as sex, '1952-06-16'::date as birth_date, 258 as weight, 72 as height, '{foo,bar,baz}'::text[] as tags, '2001-01-28 01:02:03-05'::timestamptz as update_time from generate_series(100001, 100000 + $1) n" , rowCount )
12031186 benchRows , err := pgx .CollectRows (rows , pgx .RowToStructByName [BenchRowSimple ])
12041187 if err != nil {
@@ -1221,7 +1204,7 @@ func BenchmarkSelectRowsSimpleAppendRowsRowToStructByName(b *testing.B) {
12211204 for _ , rowCount := range rowCounts {
12221205 b .Run (fmt .Sprintf ("%d rows" , rowCount ), func (b * testing.B ) {
12231206 benchRows := make ([]BenchRowSimple , 0 , rowCount )
1224- for i := 0 ; i < b . N ; i ++ {
1207+ for b . Loop () {
12251208 benchRows = benchRows [:0 ]
12261209 rows , _ := conn .Query (context .Background (), "select n, 'Adam', 'Smith ' || n, 'male', '1952-06-16'::date, 258, 72, '{foo,bar,baz}'::text[], '2001-01-28 01:02:03-05'::timestamptz from generate_series(100001, 100000 + $1) n" , rowCount )
12271210 var err error
@@ -1259,7 +1242,7 @@ func BenchmarkSelectRowsPgConnExecPrepared(b *testing.B) {
12591242 }
12601243 for _ , format := range formats {
12611244 b .Run (format .name , func (b * testing.B ) {
1262- for i := 0 ; i < b . N ; i ++ {
1245+ for b . Loop () {
12631246 rr := conn .PgConn ().ExecPrepared (
12641247 context .Background (),
12651248 "ps1" ,
@@ -1376,7 +1359,7 @@ func BenchmarkSelectRowsRawPrepared(b *testing.B) {
13761359 buf := make ([]byte , qr .readCount )
13771360
13781361 b .ResetTimer ()
1379- for i := 0 ; i < b . N ; i ++ {
1362+ for b . Loop () {
13801363 _ , err := qr .conn .Write (qr .writeBuf )
13811364 if err != nil {
13821365 b .Fatal (err )
0 commit comments