2722 Commits

Author SHA1 Message Date
Jack Christensen
e3519cfd75 Document supported versions 2020-05-09 10:24:58 -05:00
Jack Christensen
c4e6445cc7 Explicitly test supported Go and PostgreSQL versions 2020-05-09 10:19:39 -05:00
Jack Christensen
a66b09fbd8 Improve simple protocol / text format
Increased data type support for simple protocol. Improved test
coverage of simple protocol. This has the additional advantage of
exercising the text encoders and decoders.
2020-05-08 16:20:15 -05:00
Jack Christensen
97bbe6ae20 Add RegisterDefaultPgType
This allows registering a mapping of a Go type to a PostgreSQL type
name. If the OID of a value to be encoded or decoded is unknown, this
additional mapping will be used to determine a suitable data type.
2020-05-08 16:13:15 -05:00
Jack Christensen
c3381c6911 Replace t.Fatal with require where possible 2020-05-08 12:47:47 -05:00
Jack Christensen
ec53234e86 Rename ensureConnValid to ensureDBValid 2020-05-08 12:26:24 -05:00
Jack Christensen
c44cda4bb4 Clean up old Go 1.10 build tags
pgx requires Go modules which requires at least Go 1.11 so there is no
use in build tags to support older Go versions.
2020-05-08 12:18:09 -05:00
Jack Christensen
c03ac1519e Improve stdlib performance with large result sets
In a hot path type assertions are expensive. Cache the already correctly
typed interfaces. ~20% improvement with 1000 rows.

Before:

jack@glados ~/dev/pgx/stdlib ±master » PGX_BENCH_SELECT_ROWS_COUNTS='1 10 1000' got ./... -bench=SelectRows -benchmem
goos: darwin
goarch: amd64
pkg: github.com/jackc/pgx/v4/stdlib
BenchmarkSelectRowsScanSimple/1_rows-16         	   21465	     55060 ns/op	    1679 B/op	      40 allocs/op
BenchmarkSelectRowsScanSimple/10_rows-16        	   16692	     71176 ns/op	    3827 B/op	     148 allocs/op
BenchmarkSelectRowsScanSimple/1000_rows-16      	     800	   1369547 ns/op	  248855 B/op	   12938 allocs/op
BenchmarkSelectRowsScanNull/1_rows-16           	   20306	     57883 ns/op	    1940 B/op	      54 allocs/op
BenchmarkSelectRowsScanNull/10_rows-16          	   15942	     74729 ns/op	    4294 B/op	     171 allocs/op
BenchmarkSelectRowsScanNull/1000_rows-16        	     829	   1326788 ns/op	  261291 B/op	   13051 allocs/op
PASS
ok  	github.com/jackc/pgx/v4/stdlib	10.429s

After:

jack@glados ~/dev/pgx/stdlib ±master » PGX_BENCH_SELECT_ROWS_COUNTS='1 10 1000' got ./... -bench=SelectRows -benchmem
goos: darwin
goarch: amd64
pkg: github.com/jackc/pgx/v4/stdlib
BenchmarkSelectRowsScanSimple/1_rows-16         	   21327	     55097 ns/op	    2127 B/op	      43 allocs/op
BenchmarkSelectRowsScanSimple/10_rows-16        	   16724	     69496 ns/op	    4276 B/op	     151 allocs/op
BenchmarkSelectRowsScanSimple/1000_rows-16      	    1009	   1124573 ns/op	  250037 B/op	   12941 allocs/op
BenchmarkSelectRowsScanNull/1_rows-16           	   20577	     58117 ns/op	    2396 B/op	      57 allocs/op
BenchmarkSelectRowsScanNull/10_rows-16          	   16402	     72533 ns/op	    4750 B/op	     174 allocs/op
BenchmarkSelectRowsScanNull/1000_rows-16        	    1010	   1161437 ns/op	  261735 B/op	   13054 allocs/op
PASS
ok  	github.com/jackc/pgx/v4/stdlib	10.363s
2020-05-08 00:06:42 -05:00
Jack Christensen
dea915e605 Compare binary and text format through pgx
Make ID field bigger -- otherwise all ints are less than 4 digits and
get a bit too much of an advantage in text vs. binary
2020-05-07 22:28:46 -05:00
Jack Christensen
e439372d2a Add multi-row select benchmarks 2020-05-07 22:28:46 -05:00
Jack Christensen
f18351f61c Use ++ instead of += 1 2020-05-07 22:28:46 -05:00
Jack Christensen
f9ce8af5c9 Add explicit enum support 2020-05-07 22:28:46 -05:00
Jack Christensen
71fb93a96c Add CopyFrom with enum test 2020-05-07 22:28:46 -05:00
Jack Christensen
4a50a63f12 Refactor Scan optimization
Instead of hardcoding specific types and skipping type assertions based
on that, only check if a destination is a (sql.Scanner) after a failed
AssignTo.

This is slightly slower in the non-decoder case and *very* slightly
faster in the decoder. However, this approach is cleaner and has the
potential for further optimizations.
2020-05-07 19:48:48 -05:00
Jack Christensen
452511dfc5 Rename RecordFieldIter to CompositeBinaryScanner and adjust interface
Use interface similar to bufio.Scanner and pgx.Rows.
2020-05-07 13:38:19 -05:00
Jack Christensen
ff9bc5d68d Merge binary package into pgtype package 2020-05-07 10:15:23 -05:00
Jack Christensen
37e976192b ScanRowValue accepts interface{} dst 2020-05-06 14:56:25 -05:00
Jack Christensen
10838b39f6 Remove vscode settings 2020-05-06 14:45:55 -05:00
Jack Christensen
cce17427e1 Merge branch 'record-expect' of git://github.com/redbaron/pgtype into redbaron-record-expect 2020-05-06 14:43:10 -05:00
Jack Christensen
2938981516 Make EnumType implementation private 2020-05-06 10:30:43 -05:00
Jack Christensen
4d2b5a18c4 Clarify Value.Get() documentation
Specifying behavior for Status Null and Undefined is incorrect because
a Value is not required to have a Status. In addition, standard
behavior is to return nil, not pgtype.Null when the Status is
pgtype.Null.
2020-05-06 09:51:41 -05:00
Jack Christensen
3b7c47a2a7 Add EnumType 2020-05-05 13:23:14 -05:00
Jack Christensen
ab5e597826 Avoid type assertion in Scan
Before:
BenchmarkConnInfoScanInt4IntoBinaryDecoder-16           79859755                14.6 ns/op             0 B/op          0 allocs/op
BenchmarkConnInfoScanInt4IntoGoInt32-16                 38969991                30.0 ns/op             0 B/op          0 allocs/op

After:
BenchmarkConnInfoScanInt4IntoBinaryDecoder-16    	458046958	        13.3 ns/op	       0 B/op	       0 allocs/op
BenchmarkConnInfoScanInt4IntoGoInt32-16          	275791776	        20.6 ns/op	       0 B/op	       0 allocs/op
2020-05-02 20:30:58 -05:00
Jack Christensen
18c64dceee ConnInfo Scan optimizes common native types
This comes at a small expense to scanning into a type that implements
TextDecoder or BinaryDecoder but I think it is a good trade.

Before:
BenchmarkConnInfoScanInt4IntoBinaryDecoder-16    	88181061	        12.4 ns/op	       0 B/op	       0 allocs/op
BenchmarkConnInfoScanInt4IntoGoInt32-16          	30402768	        36.8 ns/op	       0 B/op	       0 allocs/op

After:
BenchmarkConnInfoScanInt4IntoBinaryDecoder-16    	79859755	        14.6 ns/op	       0 B/op	       0 allocs/op
BenchmarkConnInfoScanInt4IntoGoInt32-16          	38969991	        30.0 ns/op	       0 B/op	       0 allocs/op
2020-05-02 20:18:51 -05:00
Jack Christensen
6357d3b3f3 Avoid extra type assertion on native type Scan path
Before:
BenchmarkConnInfoScanInt4IntoBinaryDecoder-16    	89744814	        12.5 ns/op	       0 B/op	       0 allocs/op
BenchmarkConnInfoScanInt4IntoGoInt32-16          	27688370	        41.1 ns/op	       0 B/op	       0 allocs/op

After:
BenchmarkConnInfoScanInt4IntoBinaryDecoder-16    	88181061	        12.4 ns/op	       0 B/op	       0 allocs/op
BenchmarkConnInfoScanInt4IntoGoInt32-16          	30402768	        36.8 ns/op	       0 B/op	       0 allocs/op
2020-05-02 17:31:53 -05:00
Jack Christensen
a4dd4af756 Add benchmarks for scan into native type vs decoder 2020-05-02 17:31:34 -05:00
Jack Christensen
e6c6de9494 Improved ext/shopspring-numeric binary decoding performance
Before:
BenchmarkDecode/Zero-Binary-16       	 3944304	       292 ns/op	     128 B/op	       7 allocs/op
BenchmarkDecode/Small-Binary-16      	 2034132	       585 ns/op	     184 B/op	      13 allocs/op
BenchmarkDecode/Medium-Binary-16     	 1747191	       690 ns/op	     192 B/op	      12 allocs/op
BenchmarkDecode/Large-Binary-16      	 1334006	       899 ns/op	     304 B/op	      14 allocs/op
BenchmarkDecode/Huge-Binary-16       	  702382	      1590 ns/op	     584 B/op	      18 allocs/op

After:
BenchmarkDecode/Zero-Binary-16       	14592645	        80.1 ns/op	      64 B/op	       2 allocs/op
BenchmarkDecode/Small-Binary-16      	 5729318	       212 ns/op	     104 B/op	       7 allocs/op
BenchmarkDecode/Medium-Binary-16     	 4930009	       241 ns/op	      88 B/op	       5 allocs/op
BenchmarkDecode/Large-Binary-16      	 3369573	       344 ns/op	     144 B/op	       7 allocs/op
BenchmarkDecode/Huge-Binary-16       	 2587156	       453 ns/op	     216 B/op	       9 allocs/op
2020-05-02 11:34:14 -05:00
georgysavva
e27a6e71b5 Wrap stdlib Conn.Close() and Stmt.Close() with default 5 seconds timeout. 2020-05-02 16:57:39 +03:00
georgysavva
01a7510ae9 Reformat imports 2020-05-02 16:43:02 +03:00
georgysavva
2d5a17beab Add comment. 2020-05-02 16:39:51 +03:00
georgysavva
391e1ef2ce Parse connect timeout setting into Config. Restrict context timeout via Config.ConnectTimeout on .Connect() call. 2020-05-02 16:35:22 +03:00
georgysavva
e5920c3ad9 Merge branch 'master' of github.com:jackc/pgx 2020-05-02 15:01:11 +03:00
Maxim Ivanov
63c5d350a3 Add JSON benchmarks 2020-05-02 10:54:19 +01:00
Maxim Ivanov
700df0d05a Request binary format in Composite tests 2020-05-01 23:37:05 +01:00
Jack Christensen
3c5d72a8d9
Merge pull request #733 from dchenk/patch-1
Small typo fixed
2020-04-30 19:15:06 -05:00
Tobias Salzmann
8d9293e1e7
Update pgconn.go 2020-04-30 11:27:01 +02:00
Tobias Salzmann
8f3f335b0f
concludeCommand should not throw away fieldDescriptions 2020-04-30 11:22:43 +02:00
Dmitriy
830193dc36
Small typo fixed 2020-04-29 22:23:46 -07:00
Jack Christensen
63428b802d
Merge pull request #731 from felixge/patch-1
Fix typo in readme
2020-04-28 10:47:33 -05:00
Felix Geisendörfer
23a4edc0d7
Fix typo in readme 2020-04-28 11:33:33 +02:00
Maxim Ivanov
5f0d5f4255 Remove pgtype.Row(), introduce Composite.Scan()
pgtype.Row() was optimized for a single line use
without much ceremony at a cost of OID registration,
which is cumbersome. In practice it so much incovnenience
to create new Composite just before making a query.

So now there is just a Composite type and 2 helper methods:

- SetFields sets composite fields to values passed. This assignment
  fails if types passed are not assignable to Values pgtype is
  made of.

- Scan acts exactly like query.Scan, but for a composite value. Passed
  values are set to values from SQL composite.
2020-04-27 00:48:02 +01:00
Maxim Ivanov
e283f322e1 Composite().Row() helper for working with composites without registration 2020-04-20 22:38:20 +00:00
Maxim Ivanov
04ff904ff5 Add binary decoding benchmarks
```
BenchmarkBinaryDecodingManual-4         10479085               106 ns/op              40 B/op          2 allocs/op
BenchmarkBinaryDecodingHelpers-4         4485451               263 ns/op              64 B/op          4 allocs/op
BenchmarkBinaryDecodingRow-4             1999726               587 ns/op              96 B/op          5 allocs/op
```
2020-04-19 15:46:14 +00:00
Maxim Ivanov
72680d61f8 Move value createion outside of encoding benchmark 2020-04-19 11:30:21 +00:00
Maxim Ivanov
53e0f25a4e Make ScanRowValue error message clearer 2020-04-18 19:29:18 +00:00
Maxim Ivanov
b88a3e0765 Tighten ScanRowValue input types
ScanRowValue  needs not  Value, but BinaryEncoder
2020-04-18 14:08:31 +01:00
Maxim Ivanov
54a03cb143 Add benchmark for various composite encoder implementations
```
BenchmarkBinaryEncodingManual-12   824053234   28.9 ns/op    0 B/op     0 allocs/op
BenchmarkBinaryEncodingHelper-12   76815436    314 ns/op     192 B/op   5 allocs/op
BenchmarkBinaryEncodingRow-12      65302958    364 ns/op     192 B/op   5 allocs/op
```
2020-04-16 22:24:43 +01:00
Maxim Ivanov
2e13f2fe76 Move lowlevel binary routines into own package 2020-04-16 21:34:06 +01:00
georgysavva
5364a47e05 Update go.sum via go mod tidy 2020-04-13 21:20:24 +03:00
Maxim Ivanov
a6747b513f Split composite examples 2020-04-13 17:44:02 +01:00