Jack Christensen
42d327f660
Add text format jsonpath support
2023-02-14 19:52:47 -06:00
Jack Christensen
a6ace8969b
Fix: Prefer sql.Scanner before TryWrapScanPlanFuncs
...
This was already the case when the data type was unknown but should also
be the case when it is known.
2023-02-14 09:03:41 -06:00
Jack Christensen
2100a64dbe
Fix broken benchmarks
2023-02-10 20:26:18 -06:00
Jack Christensen
4484831550
Prefer binary format for arrays
...
This improves performance decoding text[].
2023-02-10 20:21:25 -06:00
Jack Christensen
1f43e2e490
Fix text format array decoding with a string of "NULL"
...
It was incorrectly being treated as NULL instead of 'NULL'.
fixes https://github.com/jackc/pgx/issues/1494
2023-02-10 19:59:03 -06:00
Felix Röhrich
a47e836471
make TestPointerPointerStructScan easier to read
2023-02-10 19:06:20 -06:00
Felix Röhrich
5cd8468b99
replace erroneous reflect.New with reflect.Zero in TryWrapStructScanPlan
2023-02-10 19:06:20 -06:00
Jack Christensen
c875abea84
Fix encode []any to array
...
https://github.com/jackc/pgx/issues/1488
2023-02-04 07:28:52 -06:00
Yumin Xia
766d2bba4f
add UnmarshalJSON for pgtype Numeric
2023-01-30 21:33:02 -06:00
Jack Christensen
42a47194a2
Memoize encode plans
...
This significantly reduces memory allocations in paths that repeatedly
encode the same type of values such as CopyFrom.
https://github.com/jackc/pgx/issues/1481
2023-01-27 20:19:06 -06:00
Alexey Palazhchenko
f839d501a7
Apply `gofmt -s`
...
And add CI check for that.
2023-01-24 07:55:00 -06:00
Jack Christensen
e48e7a7189
Fix scanning json column into **string
...
refs https://github.com/jackc/pgx/issues/1470
2023-01-20 18:38:11 -06:00
Mark Chambers
c46d792c93
Numeric numberTextBytes() workaround...
...
This seems a bit of a hack. It fixes the problems demonstrated in my previous commit.
Maybe there's a cleaner way?
Associated: https://github.com/jackc/pgx/issues/1426
2023-01-14 08:42:42 -06:00
Mark Chambers
37c6f97b11
pgtype.Numeric numberTextBytes() encoding bug
...
Demonstrate the problem with the tests:
...for negative decimal values e.g. -0.01
This causes errors when encoding to JSON:
"json: error calling MarshalJSON for type pgtype.Numeric"
It also causes scan failures of sql.NullFloat64:
"converting driver.Value type string ("0.-1") to a float64"
As reported here: https://github.com/jackc/pgx/issues/1426
2023-01-14 08:42:42 -06:00
Jack Christensen
d4fcd4a897
Support sql.Scanner on renamed base type
...
https://github.com/jackc/pgtype/issues/197
2022-12-23 14:22:59 -06:00
Jack Christensen
e66ad1bcec
Fix encode to json ignoring driver.Valuer
...
https://github.com/jackc/pgx/issues/1430
2022-12-23 13:44:09 -06:00
Jack Christensen
456a242f5c
Unregistered OIDs are handled the same as unknown OIDs
...
This improves handling of unregistered types. In general, they should
"just work". But there are performance benefits gained and some edge
cases avoided by registering types. Updated documentation to mention
this.
https://github.com/jackc/pgx/issues/1445
2022-12-23 13:14:56 -06:00
Jack Christensen
d737852654
Fix: driver.Value representation of bytea should be []byte not string
...
https://github.com/jackc/pgx/issues/1445
2022-12-21 17:54:42 -06:00
Jack Christensen
f42af35884
Add support for single dimensional arrays
...
https://github.com/jackc/pgx/issues/1442
2022-12-20 20:12:12 -06:00
Mark Chambers
1ce3e0384a
pgtype Int fix minimum error message.
...
Previously on the minimum condition the error would be:
"is greater than maximum"
Also add encoding/json import into the .erb template as the import was
missing after running rake generate.
2022-12-17 09:10:02 -06:00
Jack Christensen
279c3c0a20
Fix: json values work with sql.Scanner
...
https://github.com/jackc/pgx/issues/1418
2022-12-06 19:44:55 -06:00
Jack Christensen
f0a73424b1
Fix: Scan uint and uint64 ScanNumeric
...
fixes https://github.com/jackc/pgx/issues/1414
2022-12-05 20:34:46 -06:00
Jack Christensen
b265fedd75
Correct error message
2022-11-12 07:06:54 -06:00
Jack Christensen
871f14e43b
Fix text decoding of dates with 5 digit years
2022-11-12 07:01:11 -06:00
Jack Christensen
071d1c9467
DateCodec.DecodeValue can return pgtype.InfinityModifier
...
Previously, an infinite value was returned as a string. Other types
that can be infinite such as Timestamptz return a
pgtype.InfinityModifier. This change brings them into alignment.
2022-11-12 06:27:41 -06:00
Jack Christensen
29109487ec
DateCodec.DecodeDatabaseSQLValue returns time.Time when possible
...
Previously it returned a string. However, this was an unintended
behavior change from pgx v4.
89f69aaea9 (commitcomment-89173737)
2022-11-12 06:21:48 -06:00
Jack Christensen
daf570c752
Date text encoding pads year with 0 for at least 4 digits
...
e.g. 0007-01-02 instead of 7-01-02
89f69aaea9 (commitcomment-89173737)
2022-11-12 06:14:04 -06:00
Jack Christensen
6fabd8f5b1
Fix encoding uint64 larger than math.MaxInt64 into numeric
...
fixes https://github.com/jackc/pgx/issues/1357
2022-10-29 08:47:12 -05:00
Jack Christensen
48b4807b33
Fix some reflect Kind checks to first check for nil
...
fixes https://github.com/jackc/pgx/issues/1335
2022-10-22 08:57:49 -05:00
Jack Christensen
f2e7c8144d
reflect.TypeOf can return nil. Check before using
...
https://github.com/jackc/pgx/issues/1331
2022-10-12 20:03:51 -05:00
Jack Christensen
aff180b192
Remove dead code
2022-10-12 19:58:06 -05:00
Jack Christensen
a581124dea
Encode with driver.Valuer after trying TryWrapEncodePlanFuncs
...
However, all builtin TryWrapEncodePlanFuncs check for driver.Valuer and
skip themselves if it is found.
2022-10-12 19:52:57 -05:00
Jack Christensen
c4407fb36e
Prevent infinite loop for driver.Valuer / Codec edge case
...
A `driver.Valuer()` results in a `string` that the `Codec` for the
PostgreSQL type doesn't know how to handle. That string is scanned into
whatever the default type for that `Codec` is. That new value is
encoded. If the new value is the same type as the original type than an
infinite loop occured. Check that the types are different.
https://github.com/jackc/pgx/issues/1331
2022-10-12 19:46:15 -05:00
Jack Christensen
af0b896290
Allow scanning null even if PG and Go types are incompatible
...
refs https://github.com/jackc/pgx/issues/1326
2022-10-08 09:10:43 -05:00
Jack Christensen
5655f9d593
Fix scan to pointer to pointer to renamed type
...
refs https://github.com/jackc/pgx/issues/1326
2022-10-08 08:10:40 -05:00
Jack Christensen
222e3b37bc
Prefer driver.Value over wrap plans when encoding
...
This is tricky due to driver.Valuer returning any. For example, we can
plan for fmt.Stringer because it always returns a string.
Because of this driver.Valuer was always handled as the last option. But
with pgx v5 now having the ability to find underlying types like a
string and supporting fmt.Stringer it meant that driver.Valuer was
often not getting called because something else was found first.
This change tries driver.Valuer immediately after the initial PlanScan
for the Codec. So a type that directly implements a pgx interface should
be used, but driver.Valuer will be prefered before all the attempts to
handle renamed types, pointer deferencing, etc.
fixes https://github.com/jackc/pgx/issues/1319
fixes https://github.com/jackc/pgx/issues/1311
2022-10-01 12:20:23 -05:00
Jack Christensen
89f69aaea9
Date text encoding includes leading zero for month and day
...
e.g. 2000-01-01 instead of 2000-1-1. PostgreSQL accepted it without
zeroes but our text decoder didn't. This caused a problem when we needed
to take a value and encode to text so something else could parse it as
if it had come from the PostgreSQL server in text format. e.g.
database/sql compatibility.
2022-10-01 10:41:40 -05:00
Jack Christensen
335c8621ff
Fix sqlScannerWrapper NULL handling
...
https://github.com/jackc/pgx/issues/1312
2022-09-24 10:30:12 -05:00
Jack Christensen
ac9d4f4d96
Encode text for Lseg includes [ and ]
...
https://github.com/jackc/pgtype/issues/187
2022-09-24 10:30:12 -05:00
yogipristiawan
72e4b88e56
feat: add marshalJSON for float8 type
2022-09-24 10:00:40 -05:00
Jack Christensen
f8d088cfb6
Fix JSON scan not completely overwriting destination
...
See https://github.com/jackc/pgtype/pull/185 for original report in
pgx v4 / pgtype.
2022-09-02 18:37:02 -05:00
Jack Christensen
fe3a4f3150
Standardize casing for NULL in error messages
2022-08-22 21:01:18 -05:00
Jack Christensen
2e73d1e8ee
Improve error message when failing to scan a NULL::json
2022-08-22 20:56:36 -05:00
Jack Christensen
0d5d8e0137
Fallback to other format when encoding query arguments
...
The preferred format may not be possible for certain arguments. For
example, the preferred format for numeric is binary. But if
shopspring/decimal is being used without jackc/pgx-shopspring-decimal
then it will use the database/sql/driver.Valuer interface. This will
return a string. That string should be sent in the text format.
A similar case occurs when encoding a []string into a non-text
PostgreSQL array such as uuid[].
2022-08-22 20:26:38 -05:00
Jack Christensen
02d9a5acd8
Fix naming of some tests
2022-08-13 08:41:06 -05:00
Jack Christensen
8256ab147f
Add build tag to skip default PG type registration
...
https://github.com/jackc/pgx/issues/1273#issuecomment-1207338136
2022-08-13 08:09:44 -05:00
Jack Christensen
c3258b7f52
Fix scan pointer to pointer to nil slice
...
https://github.com/jackc/pgx/issues/1263
2022-07-30 09:10:50 -05:00
Jack Christensen
2da0a11c52
Skip some examples on CockroachDB
2022-07-23 10:52:35 -05:00
Jack Christensen
ce378b4d9c
Skip example on Cockroach DB
2022-07-23 10:21:01 -05:00
Jack Christensen
5cee04a026
Add child records docs and examples
2022-07-23 10:11:13 -05:00
Jack Christensen
3595561d9a
More doc improvements
2022-07-23 09:29:25 -05:00
Jack Christensen
759e47dba3
Merge branch 'master' into v5-dev
2022-07-12 07:26:00 -05:00
Jack Christensen
d5807f01ed
Restore test from v4
2022-07-12 06:57:56 -05:00
Jack Christensen
224393188d
Fix InetCodec.DecodeValue
2022-07-11 08:07:23 -05:00
Jack Christensen
e7eb8a3250
Use netip package for representing inet and cidr types
2022-07-10 14:31:55 -05:00
Jack Christensen
7974a102fc
Improve Scan error messages
2022-07-09 21:47:39 -05:00
Jack Christensen
b662ab6767
Better encode error message
2022-07-09 21:40:44 -05:00
Jack Christensen
90c2dc6f68
Rename ForEachScannedRow to ForEachRow
2022-07-09 16:47:28 -05:00
Jack Christensen
76946fb5a3
Replace QueryFunc with ForEachScannedRow
2022-07-07 20:29:04 -05:00
Jack Christensen
82ca09e645
Numeric infinity only supported on PG 14+
...
Move to PG 14+ specific test
2022-06-25 13:33:09 -05:00
Jack Christensen
c0a4d1b9ce
Add a few tests
2022-06-20 20:43:56 -05:00
Jack Christensen
989a4835de
Remove rune to text conversion
...
Because rune is an alias for int32 this caused some very surprising
results. e.g. inserting int32(65) into text would insert "A" instead of
"65".
2022-05-12 17:13:49 -05:00
Jack Christensen
01190e5d78
Update ScanPlan.Scan documentation
2022-04-30 08:29:51 -05:00
Jack Christensen
0c6266ef30
Fix scanning null did not overwrite slice
2022-04-26 14:52:01 -05:00
Jack Christensen
7427820aba
Scan binary UUID to string
...
https://github.com/jackc/pgx/issues/1191
2022-04-26 08:37:10 -05:00
Jack Christensen
f9857b73d9
Skip multirange tests on PG < 14
2022-04-23 16:55:24 -05:00
Jack Christensen
dfb681d716
Build / rewrite / port multirange support
2022-04-23 12:50:18 -05:00
Jack Christensen
126b582f19
Make range helpers private
2022-04-23 11:10:04 -05:00
Jack Christensen
cb45e85954
Merge remote-tracking branch 'pgtype/master' into v5-dev
2022-04-23 11:00:07 -05:00
Jack Christensen
468b793282
Skip tests with unsupported types on CockroachDB
2022-04-23 10:34:53 -05:00
Jack Christensen
cc7de81d3b
Make array helpers private
2022-04-16 14:21:40 -05:00
Jack Christensen
a01a9ee6df
Automatically register Array and FlatArray
2022-04-16 14:04:25 -05:00
Jack Christensen
fccaebc93d
Add pgtype.Map.SQLScanner
...
This enables compatibility with database/sql for types that cannot
implement Scan themselves.
2022-04-16 13:38:27 -05:00
Jack Christensen
f1a4ae3070
Add Array and FlatArray container types
2022-04-16 11:33:45 -05:00
Jack Christensen
d4abe83edb
Revert use generics for RangeCodec
...
Reverted almost all of 976b1e0
.
Still may consider a way to get DecodeValue to be strongly typed but
that feature isn't worth the complications of generics. Especially in
that applying this style to ArrayCodec would make Conn.LoadType
impossible for arrays.
2022-04-16 10:39:12 -05:00
Jack Christensen
976b1e03a9
Use generics for RangeCodec
...
This allows DecodeValue to return a more strongly typed value.
2022-04-09 10:21:17 -05:00
Jack Christensen
c8025fd79a
Use generics for Range values
2022-04-09 09:34:37 -05:00
Jack Christensen
f14fb3d692
Replace interface{} with any
2022-04-09 09:12:55 -05:00
Jack Christensen
829babcea9
Better number to string handling
...
Avoid ambiguity of stringWrapper implementing Int64Scanner and
Float64Scanner.
2022-04-09 09:09:46 -05:00
Jack Christensen
8cf6721d66
Better int64 / numeric compat and text fixes
2022-04-02 16:55:05 -05:00
Jack Christensen
53ec52aa17
Fix out of date pgtype/int_test.go.erb
2022-04-02 14:41:33 -05:00
Jack Christensen
ee93440ac1
pgtype uses pgxtest
...
Added ValueRoundTripTest to pgxtest
Removed pgtype/testutil
pgtype tests now run with all (applicable) query modes. This gives
better coverage than before and revealed several bugs which are also
fixed in this commit.
2022-04-02 14:34:19 -05:00
Jack Christensen
e392908c72
Remove Int64Valuer implementation from stringWrapper
2022-04-02 08:24:55 -05:00
Jack Christensen
500c0721d7
Improve error messages for query argument encoding
2022-04-01 18:00:25 -05:00
Jack Christensen
3a6d9490e5
Only test numeric infinity on PG 14+
2022-03-26 11:38:31 -05:00
Jack Christensen
600c4fd931
Skip test for Cockroach CI
2022-03-22 20:44:17 -05:00
Jack Christensen
103dfe145e
Test should always close rows
2022-03-22 20:41:05 -05:00
Jack Christensen
e04b35bfcb
Make pgtype test compat with CockroachDB when possible
2022-03-22 20:33:24 -05:00
Jack Christensen
be5a6cc9c0
Remove obsolete test
2022-03-22 20:33:24 -05:00
Jack Christensen
5ca048ed2d
Fix crash with pointer to nil struct
2022-03-22 20:33:24 -05:00
Jack Christensen
8c18d7808b
Add documentation
2022-03-19 17:01:12 -05:00
Jack Christensen
0c166c7620
Fix BC dates in text format
2022-03-12 12:47:01 -06:00
Jack Christensen
c4b08378f2
Handle driver.Valuers inside Map.Encode
2022-03-05 21:27:17 -06:00
Jack Christensen
0905d1f452
Register more default types and handle unknown types better
2022-03-05 21:19:58 -06:00
Jack Christensen
e5685a34fc
Simplify encoding extended query arguments
2022-03-05 20:16:57 -06:00
Jack Christensen
1cef9075d9
Simply typed nil and driver.Valuer handling
...
* Convert typed nils to untyped nils at beginning of encoding process.
* Restore v4 json/jsonb null behavior
* Add anynil internal package
2022-03-05 19:53:59 -06:00
Jack Christensen
2885b039d5
Rename Uint32 field to include bit size
...
i.e. Uint renamed to Uint32. This matches the pattern set by the
database/sql types.
2022-03-05 09:23:25 -06:00
Jack Christensen
84a3d91322
pgtype Float4 and Float8 fields include bit size
...
e.g. Instead of Float it is Float64. This matches the pattern set by the
database/sql types.
2022-03-05 09:20:03 -06:00
Jack Christensen
d723a4ab6f
pgtype Int2, Int4, and Int8 fields include bit size
...
e.g. Instead of Int it is Int64. This matches the pattern set by the
database/sql types.
2022-03-05 09:17:31 -06:00
Jack Christensen
872a7a9315
Fix pgtype/int.go.erb
2022-03-05 09:08:14 -06:00
Jack Christensen
e7f90ba6e4
Remove unused pgtype.Map field
2022-03-05 09:00:49 -06:00
Jack Christensen
ec8f7c4204
Add comment for FormatCodeForOID
2022-03-05 08:56:41 -06:00
Jack Christensen
45a8b00271
Do not recursively call public PlanScan that caches
...
Otherwise, wrapper types get cached. Wrapper types are expected to fail
most of the time. These failures should not be cached. In addition,
wrappers wrap multiple different types so it doesn't make sense to cache
results of a wrapper.
2022-03-04 11:04:46 -06:00
Jack Christensen
a8f6674a07
TextCodec specifically supports scanning to BytesScanner
...
This lets it support DriverBytes and PreallocatedBytes.
2022-02-26 20:28:15 -06:00
Jack Christensen
ffc5a692cb
Detect unsafe pgtype.DriverBytes usage
...
Add test for unsafe usage and test for correct usage that ensures driver
memory is actually used.
2022-02-26 20:23:35 -06:00
Jack Christensen
d13f651810
Finish importing pgio as internal package
2022-02-21 14:35:20 -06:00
Jack Christensen
43083cb0e3
Memoize pgtype.Map.PlanScan
2022-02-21 10:10:16 -06:00
Jack Christensen
9c538cd4a9
Remove actualTarget argument
2022-02-21 09:30:01 -06:00
Jack Christensen
f3defbc150
Rename pgtype.None to pgtype.Finite
2022-02-21 09:25:30 -06:00
Jack Christensen
1f2f239d09
Renamed pgtype.ConnInfo to pgtype.Map
2022-02-21 09:13:09 -06:00
Jack Christensen
bda10b2ec9
Rename pgtype.DataType to pgtype.Type
2022-02-21 09:01:48 -06:00
Jack Christensen
a3c351d11a
RegisterDataType now accepts *DataType
2022-02-21 08:49:04 -06:00
Jack Christensen
f861d83a17
Fix range types not clearing unbounded or empty
2022-02-08 16:48:17 -06:00
Jack Christensen
0306ce3a19
Fix scanning negative ints into Int64Scanner
2022-02-08 14:13:06 -06:00
Jack Christensen
1334d45d71
Parse array header to empty slices instead of nils
2022-02-08 11:35:40 -06:00
Jack Christensen
bcc0af3f56
Fix scan empty array into multi-dimension slice
2022-02-08 11:12:05 -06:00
Jack Christensen
7193e48923
Restore multi-dimensional slices
...
Move ArrayCode to use pgtype wrapper pattern as well
2022-02-08 10:07:40 -06:00
Jack Christensen
02372f1c3c
Add DecodeValue to composites
2022-02-05 15:12:09 -06:00
Jack Christensen
3a94113118
Add composite to arbitrary struct encoding and decoding
2022-02-05 14:24:34 -06:00
Jack Christensen
727fc19cb7
Another error message improvement
2022-02-05 13:10:58 -06:00
Jack Christensen
28ea2cd190
Better error messages
2022-02-05 13:05:23 -06:00
Jack Christensen
6ebf54b62b
Fix EnumCodec caching and add tests
2022-02-05 09:57:40 -06:00
Jack Christensen
288080c58c
Add test documenting typed nil json encoding
...
Encoded into json null not SQL NULL.
2022-02-05 09:34:39 -06:00
Jack Christensen
0355d2ffea
Add Float8range
...
PostgreSQL doesn't define float8range out of the box though it can
easily be created by the user. However, it is still convenient to treat
a numrange as a float8range.
2022-02-05 08:54:38 -06:00
Jack Christensen
a74ebc9e51
pgtype.Numeric implements Float64Valuer
2022-02-05 08:39:53 -06:00
Jack Christensen
a280f4db8a
Float4 and Float8 implement Int64 Scanner and Valuer
2022-02-03 20:19:52 -06:00
Jack Christensen
ba4583cf4c
Add range array types
2022-02-02 08:47:56 -06:00
Jack Christensen
cebe44ee85
Restore range support
2022-02-02 08:40:42 -06:00
Jack Christensen
11223497b3
Restore record support
2022-01-31 20:42:12 -06:00
Jack Christensen
ef7114a8ce
Add DecodeValue and DecodeDatabaseSQLValue for ArrayCodec
2022-01-31 20:39:50 -06:00
Jack Christensen
558748ef9c
ArrayCodec contains element DataType
2022-01-29 16:41:07 -06:00
Jack Christensen
b5bf9d7bb9
Move LoadDataType to pgx.Conn
2022-01-29 16:32:05 -06:00
Jack Christensen
f5c3eeb813
Initial rebuilt composite support
2022-01-29 15:43:18 -06:00
Jack Christensen
dc77e7c2da
Add QueryRow warning to DriverBytes
2022-01-29 08:17:50 -06:00
Jack Christensen
47345e0d1e
ArrayHeader.EncodeBinary doesn't need ci parameter
2022-01-25 20:21:28 -06:00
Jack Christensen
551d26ca41
Change ArrayHeader.ElementOID to uint32
2022-01-25 20:19:02 -06:00
Jack Christensen
0ddf9e3b4b
Try wrapping scan target before sql.Scanner
...
This allows wrappers to directly avoid the slow sql.Scanner interface.
2022-01-22 18:40:46 -06:00
Jack Christensen
5ed95dcd1c
Expose wrap functions on ConnInfo
...
- Remove rarely used ScanPlan.Scan arguments
- Plus other refactorings and fixes that fell out of this change.
- Plus rows Scan now handles checking for changed type.
2022-01-22 17:50:19 -06:00
Jack Christensen
322bfedc60
Remove old SQL scanner integration
2022-01-22 16:20:37 -06:00
Jack Christensen
aedf7d63e5
Expose try wrap functions in ConnInfo
2022-01-22 16:19:32 -06:00
Jack Christensen
2b395f3730
pgtype.DataType.Codec can never be nil
2022-01-22 12:21:16 -06:00
Jack Christensen
db95cee40c
Remove pgtype.Value interface
2022-01-22 12:18:40 -06:00
Jack Christensen
4cf6dc9447
Remove BinaryEncoder and TextEncoder
2022-01-22 12:16:02 -06:00
Jack Christensen
3a90c6c879
Removed TextEncoder and BinaryEncoder
...
Restructured / fixed a lot of tests along the way.
2022-01-22 12:07:35 -06:00
Jack Christensen
eb0a4c9626
Replace some old database/sql compatibility
2022-01-22 11:21:12 -06:00
Jack Christensen
ad785d8134
Remove TypeValue interface
2022-01-22 10:56:56 -06:00
Jack Christensen
8d2c87b5e5
Remove old typed array code gen
2022-01-22 10:54:54 -06:00
Jack Christensen
740263c0d4
Convert UUID to Codec
2022-01-22 10:53:47 -06:00
Jack Christensen
b9b5e35d0f
Convert numeric to Codec
2022-01-22 09:31:59 -06:00
Jack Christensen
0056156904
Add time array
2022-01-21 16:51:53 -06:00