Also remove PrepareEx. It's primary usage was for context. Supplying
parameter OIDs is unnecessary when you can type cast in the query SQL.
If it does become necessary or desirable to add options back it can be
added in a backwards compatible way by adding a varargs as last
argument.
Instead of needing to instrospect the database on connection preload the
standard OID / type map. Types from extensions (like hstore) and custom
types can be registered by the application developer. Otherwise, they
will be treated as strings.
It is impossible to guarantee that the a query executed with the simple
protocol will behave the same as with the extended protocol. This is
because the normal pgx path relies on knowing the OID of query
parameters. Without this encoding a value can only be determined by the
value instead of the combination of value and PostgreSQL type. For
example, how should a []int32 be encoded? It might be encoded into a
PostgreSQL int4[] or json.
Removal also simplifies the core query path.
The primary reason for the simple protocol is for servers like PgBouncer
that may not be able to support normal prepared statements. After
further research it appears that issuing a "flush" instead "sync" after
preparing the unnamed statement would allow PgBouncer to work.
The one round trip mode can be better handled with prepared statements.
As a last resort, all original server functionality can still be accessed by
dropping down to PgConn.
AssignTo can only assign NULL to a **string. Previous code tried to
assign nil to a *string, which did nothing. Correct behavior is to
detect this as an error.
JSON(B) automatically marshals any value. Avoid marshalling values of
pgtype.JSON and pgtype.JSONB. The caller certainly meant to call on a
pointer.
See https://github.com/jackc/pgx/issues/350 for discussion.
refs #350
They now take ownership of the src argument.
Needed to change Scan to make a copy of []byte arguments as lib/pq apparently
gives Scan a shared memory buffer.
PGX_TEST_DATABASE is much less likely to collide with another environment
variable. This is especially valuable when using direnv to automatically set
environment variables.
This adds PostgreSQL numeric mapping to and from
github.com/shopspring/decimal.
Makes pgtype.NullAssignTo public as external types need this functionality.
Begin extraction of pgtype testing functionality so it can easily be used by
external types.
Because reading a record type requires the decoder to be able to look up oid
to type mapping and types such as hstore have types that are not fixed between
different PostgreSQL servers it was necessary to restructure the pgtype system
so all encoders and decodes take a *ConnInfo that includes oid/name/type
information.
Set having the capability to assign an object of the same type was
inconsistently implemented. Some places it was not implemented at all, some
places it was a shallow copy, some places a deep copy. Given that it doesn't
seem likely to ever be used, and if it is needed it is easy enough to do
outside of the library this code has been removed.
Though this doesn't follow Go naming conventions exactly it makes names more
consistent with PostgreSQL and it is easier to read. For example, TIDOID becomes
TidOid. In addition this is one less breaking change in the move to V3.
To aid in composability, these methods no longer write their own length. This
is especially useful for text formatted arrays and may be useful for future
database/sql compatibility. It also makes the code a little simpler as the
types no longer have to compute their own size.
Along with this, these methods cannot encode NULL. They now return a boolean
if they are NULL. This also benefits text array encoding as numeric arrays
require NULL to be exactly `NULL` while string arrays require NULL to be
`"NULL"`.
Squashed commit of the following:
commit c19454582b
Author: Jack Christensen <jack@jackchristensen.com>
Date: Fri Mar 3 15:24:47 2017 -0600
Add AssignTo to pgtype.Timestamptz
Also handle infinity for pgtype.Date
commit 7329933610
Author: Jack Christensen <jack@jackchristensen.com>
Date: Fri Mar 3 15:12:18 2017 -0600
Implement AssignTo for most pgtypes
commit cc3d1e4af8
Author: Jack Christensen <jack@jackchristensen.com>
Date: Thu Mar 2 21:19:07 2017 -0600
Use pgtype.Int2Array in pgx
commit 36da5cc217
Author: Jack Christensen <jack@jackchristensen.com>
Date: Tue Feb 28 21:45:33 2017 -0600
Add text array transcoding
commit 1b0f18d99f
Author: Jack Christensen <jack@jackchristensen.com>
Date: Mon Feb 27 19:28:55 2017 -0600
Add ParseUntypedTextArray
commit 0f50ce3e83
Author: Jack Christensen <jack@jackchristensen.com>
Date: Mon Feb 27 18:54:20 2017 -0600
wip
commit d934f27362
Author: Jack Christensen <jack@jackchristensen.com>
Date: Sun Feb 26 17:14:32 2017 -0600
WIP - beginning text format array parsing
commit 7276ad33ce
Author: Jack Christensen <jack@jackchristensen.com>
Date: Sat Feb 25 22:50:11 2017 -0600
Beginning binary arrays
commit 917faa5a31
Author: Jack Christensen <jack@jackchristensen.com>
Date: Sat Feb 25 19:36:35 2017 -0600
Fix incomplete tests
commit de8c140cfb
Author: Jack Christensen <jack@jackchristensen.com>
Date: Sat Feb 25 19:32:22 2017 -0600
Add timestamptz null and infinity
commit 7d9f954de4
Author: Jack Christensen <jack@jackchristensen.com>
Date: Sat Feb 25 18:19:38 2017 -0600
Add infinity to pgtype.Date
commit 7bf783ae20
Author: Jack Christensen <jack@jackchristensen.com>
Date: Sat Feb 25 17:19:55 2017 -0600
Add Status to pgtype.Date
commit 984500455c
Author: Jack Christensen <jack@jackchristensen.com>
Date: Sat Feb 25 16:54:01 2017 -0600
Add status to Int4 and Int8
commit 6fe76fcfc2
Author: Jack Christensen <jack@jackchristensen.com>
Date: Sat Feb 25 16:40:27 2017 -0600
Extract testSuccessfulTranscode
commit 001647c1da
Author: Jack Christensen <jack@jackchristensen.com>
Date: Sat Feb 25 16:15:51 2017 -0600
Add Status to pgtype.Int2
commit 720451f06d
Author: Jack Christensen <jack@jackchristensen.com>
Date: Sat Feb 25 15:56:44 2017 -0600
Add status to pgtype.Bool
commit 325f700b6e
Author: Jack Christensen <jack@jackchristensen.com>
Date: Fri Feb 24 17:28:15 2017 -0600
Add date to conversion system
commit 4a9343e45d
Author: Jack Christensen <jack@jackchristensen.com>
Date: Fri Feb 24 16:28:35 2017 -0600
Add bool to oid based encoding
commit d984fcafab
Author: Jack Christensen <jack@jackchristensen.com>
Date: Fri Feb 24 16:15:38 2017 -0600
Add pgtype interfaces
commit 0f93bfc2de
Author: Jack Christensen <jack@jackchristensen.com>
Date: Fri Feb 24 14:48:34 2017 -0600
Begin introduction of Convert
commit e5707023ca
Author: Jack Christensen <jack@jackchristensen.com>
Date: Fri Feb 24 14:10:56 2017 -0600
Move bool to pgtype
commit bb764d2129
Author: Jack Christensen <jack@jackchristensen.com>
Date: Fri Feb 24 13:45:05 2017 -0600
Add Int2 test
commit 08c49437f4
Author: Jack Christensen <jack@jackchristensen.com>
Date: Fri Feb 24 13:44:09 2017 -0600
Add Int4 test
commit 1672295222
Author: Jack Christensen <jack@jackchristensen.com>
Date: Fri Feb 24 08:56:59 2017 -0600
Add int8 tests
commit 83a5447cd2
Author: Jack Christensen <jack@jackchristensen.com>
Date: Wed Feb 22 18:08:05 2017 -0600
wip
commit 0ca0ee7206
Author: Jack Christensen <jack@jackchristensen.com>
Date: Mon Feb 20 18:56:52 2017 -0600
wip
commit d2c2baf4ea
Author: Jack Christensen <jack@jackchristensen.com>
Date: Mon Feb 20 18:46:10 2017 -0600
wip
commit f78371da00
Author: Jack Christensen <jack@jackchristensen.com>
Date: Mon Feb 20 17:43:39 2017 -0600
wip
commit 3366699bea
Author: Jack Christensen <jack@jackchristensen.com>
Date: Mon Feb 20 14:07:47 2017 -0600
wip
commit 66b79e9408
Author: Jack Christensen <jack@jackchristensen.com>
Date: Mon Feb 20 13:35:37 2017 -0600
Extract pgio
commit 8b07d97d13
Author: Jack Christensen <jack@jackchristensen.com>
Date: Mon Feb 20 13:20:00 2017 -0600
wip
commit 62f1adb342
Author: Jack Christensen <jack@jackchristensen.com>
Date: Mon Feb 20 12:08:46 2017 -0600
wip
commit a712d25469
Author: Jack Christensen <jack@jackchristensen.com>
Date: Mon Feb 20 09:30:52 2017 -0600
wip
commit 4faf97cc58
Author: Jack Christensen <jack@jackchristensen.com>
Date: Fri Feb 17 22:20:18 2017 -0600
wip