Jack Christensen
fafefa6063
Merge branch 'improve-connect-timeout' of git://github.com/georgysavva/pgconn into georgysavva-improve-connect-timeout
2020-05-13 07:43:15 -05:00
Jack Christensen
fb54a80edf
Merge pull request #36 from Eun/patch-1
...
concludeCommand should not throw away fieldDescriptions
2020-05-13 07:38:08 -05:00
Jack Christensen
6a1a9d05bc
Add pgxtype package for simpler type registration
2020-05-13 07:34:10 -05:00
Jack Christensen
f8471ebfa8
ArrayType requires element OID
2020-05-13 07:11:10 -05:00
Jack Christensen
ee0e207ee4
CompositeType fields contain name and oid
2020-05-13 07:09:52 -05:00
Jack Christensen
0e2bc3467a
Fix ext/gofrs-uuid AssignTo *uuid.UUID
2020-05-12 21:01:06 -05:00
Jack Christensen
b3e1355a46
CompositeType can assign to struct via reflection
2020-05-12 16:58:16 -05:00
Jack Christensen
9a3923b6e0
EncodeRow is superceded by CompositeFields
2020-05-12 15:51:27 -05:00
Jack Christensen
506ea36835
Do not export quoteCompositeFieldIfNeeded
2020-05-12 15:47:44 -05:00
Jack Christensen
eebc6975de
Add EncodeText support for CompositeType
2020-05-12 15:45:16 -05:00
Jack Christensen
e45ef46424
Refactor and add CompositeTextBuilder
2020-05-12 15:42:26 -05:00
Jack Christensen
fcb385dccb
Add ScanDecoder and ScanValue to composite scanners.
...
Rename Scan to Next to disambiguate.
2020-05-12 15:04:14 -05:00
Jack Christensen
e51cb1ef09
Add CompositeBinaryBuilder
2020-05-12 14:04:11 -05:00
Jack Christensen
2186634638
Add CompositeFields encoders
2020-05-12 11:55:24 -05:00
Jack Christensen
e92ee69901
Expose EnumType directly instead of behind interface
2020-05-12 10:41:50 -05:00
Jack Christensen
9cdd928cb8
CompositeType implements TypeValue
2020-05-12 10:40:13 -05:00
Jack Christensen
e5992d0aed
TypeValue should include Value
2020-05-12 10:28:13 -05:00
Jack Christensen
682201a4fc
Rename CloneTypeValue to NewTypeValue
2020-05-12 10:26:51 -05:00
Jack Christensen
bff2829b0f
Move ComposteType.Scan functionality into AssignTo
...
Also remove adapter functions that are no longer used.
2020-05-12 10:19:41 -05:00
Jack Christensen
247043b597
Merge SetFields functionality into Set
2020-05-12 08:35:45 -05:00
Jack Christensen
c41160bcbb
Make CompositeType status private
2020-05-12 08:01:10 -05:00
Jack Christensen
4a6bd41a36
Rename Composite to CompositeType.
...
This harmonizes the naming with EnumType and ArrayType.
2020-05-12 07:58:10 -05:00
Lukas Vogel
08d071c094
Handle IPv6 in connection URLs
...
Previously IPv6 addresses were wrongly split and lead to a parse error.
This commit fixes the behavior.
2020-05-12 10:39:35 +02:00
Jack Christensen
036101deb5
Allow scanning to nil as no-op
2020-05-11 17:41:20 -05:00
Jack Christensen
36dbbd983d
Add CompositeFields type
...
This adds support for the text format and removes the need for the
ScanRowValue function.
2020-05-11 17:21:21 -05:00
Jack Christensen
1b3d694469
Add ArrayType
2020-05-10 19:37:25 -05:00
Jack Christensen
6cef4638ad
Update pgx dependency for tests
2020-05-10 14:11:24 -05:00
Jack Christensen
94ba730bb1
Use simplified pgtype ScanPlan
2020-05-10 14:09:26 -05:00
Jack Christensen
38dd42de4b
Support new pgtype format preferences
2020-05-10 14:09:02 -05:00
Jack Christensen
8cd94a14c7
Allow types to specify preference format result and param formats
...
This will be useful for array and composite types that may have to
support elements that may not support binary encoding.
It also is slightly more convenient for text-ish types to have a default
format of text.
2020-05-10 14:05:16 -05:00
Jack Christensen
cc4d1eafe0
Doc tweaks and renames
2020-05-10 12:45:12 -05:00
Jack Christensen
a71c179ce3
Extract nullAssignmentError
2020-05-10 12:28:47 -05:00
Jack Christensen
52729c1b77
Back off some aggressive PlanScan optimizations
...
PlanScan used to require the exact same value be used every time. While
this was great for performance, on further consideration I think it is
too much of a potential foot-gun.
This moves back in the other direction. A plan tolerates a change in
destination. It even detects a change in destination type and falls
back to a new plan.
Perfectly matched hot scan paths (e.g. PG int4 to Go int32) are still
much faster than they were before this set of optimizations. The first
scan of a destination that uses a decoder is faster due to not
allocating. It's a little bit slower on subsequent runs than before
this set of optimizations. But it is preferable to optimize for the
most common scan targets (e.g. *int32, *int64, *string) over generic
decoder destinations.
In addition this fees pgx.connRows.Scan from having to check that
the destination is unchanged.
2020-05-10 09:37:15 -05:00
Jack Christensen
aabe5538a8
Optimize large result sets
2020-05-09 23:57:20 -05:00
Jack Christensen
7e66ab1e14
Add scan plan system
...
This can improve performance now and will be useful for the future
transcoder system.
2020-05-09 23:52:48 -05:00
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