Changes | 115 |
META.yml | 33 |
Makefile.PL | 23 |
Pg.pm | 3738 |
Pg.xs | 04 |
README | 11 |
README.dev | 20 |
SIGNATURE | 1818 |
dbdimp.c | 820 |
lib/Bundle/DBD/Pg.pm | 11 |
t/01constants.t | 04 |
t/02attribs.t | 22 |
t/12placeholders.t | 11 |
t/dbdpg_test_setup.pl | 11 |
types.c | 126134 |
types.h | 04 |
16 files changed (This is a version diff) | 203249 |
@@ -1,7 +1,21 @@
'GSM' is Greg Sabino Mullane, greg@turnstep.com
-Version 3.0.0
+Version 3.1.1 Released April 6, 2014 (git commit d337f93133e67267d54b65dc22a23f06e6883ad0)
+
+ - Minor adjustments so tests pass in varying locales.
+
+
+Version 3.1.0 Released April 4, 2014 (git commit 26517a3531f93de79375a02da45a79789cd3caae)
+
+ - Make sure UTF-8 enabled notifications are handled correctly
+ [Greg Sabino Mullane]
+
+ - Allow "WITH" and "VALUES" as valid words starting a DML statement
+ [Greg Sabino Mullane] (CPAN bug #92724)
+
+
+Version 3.0.0 Released February 3, 2014 (git commit 9725314f27a8d65fc05bdeda3da8ce9c251f79bd)
- Major change in UTF-8 handling. If client_encoding is set to UTF-8,
always mark returned Perl strings as utf8. See the pg_enable_utf8 docs
@@ -1,6 +1,6 @@
--- #YAML:1.0
name : DBD-Pg
-version : 3.0.0
+version : 3.1.1
abstract : DBI PostgreSQL interface
author:
- Greg Sabino Mullane <greg@turnstep.com>
@@ -30,10 +30,10 @@ recommends:
provides:
DBD::Pg:
file : Pg.pm
- version : 3.0.0
+ version : 3.1.1
Bundle::DBD::Pg:
file : lib/Bundle/DBD/Pg.pm
- version : 3.0.0
+ version : 3.1.1
keywords:
- Postgres
@@ -5,7 +5,7 @@ use warnings;
use 5.008001;
## No version.pm for this one, as the prereqs are not loaded yet.
-my $VERSION = '3.0.0';
+my $VERSION = '3.1.1';
## App::Info is stored inside t/lib
## Create a proper path so we can use it below
@@ -109,7 +109,8 @@ $POSTGRES_INCLUDE = $ENV{POSTGRES_INCLUDE} || $pg->inc_dir;
if (! defined $POSTGRES_INCLUDE) {
if (! defined $ENV{POSTGRES_HOME}) {
- die "No POSTGRES_HOME defined, cannot find automatically\n";
+ warn "No POSTGRES_HOME defined, cannot find automatically\n";
+ exit 0;
}
$POSTGRES_INCLUDE = "$ENV{POSTGRES_HOME}/include";
}
@@ -16,7 +16,7 @@ use 5.008001;
{
package DBD::Pg;
- use version; our $VERSION = qv('3.0.0');
+ use version; our $VERSION = qv('3.1.1');
use DBI ();
use DynaLoader ();
@@ -41,25 +41,26 @@ use 5.008001;
PG_INT2ARRAY PG_INT2VECTOR PG_INT2VECTORARRAY PG_INT4 PG_INT4ARRAY
PG_INT4RANGE PG_INT4RANGEARRAY PG_INT8 PG_INT8ARRAY PG_INT8RANGE
PG_INT8RANGEARRAY PG_INTERNAL PG_INTERVAL PG_INTERVALARRAY PG_JSON
- PG_JSONARRAY PG_LANGUAGE_HANDLER PG_LINE PG_LINEARRAY PG_LSEG
- PG_LSEGARRAY PG_MACADDR PG_MACADDRARRAY PG_MONEY PG_MONEYARRAY
- PG_NAME PG_NAMEARRAY PG_NUMERIC PG_NUMERICARRAY PG_NUMRANGE
- PG_NUMRANGEARRAY PG_OID PG_OIDARRAY PG_OIDVECTOR PG_OIDVECTORARRAY
- PG_OPAQUE PG_PATH PG_PATHARRAY PG_PG_ATTRIBUTE PG_PG_CLASS
- PG_PG_NODE_TREE PG_PG_PROC PG_PG_TYPE PG_POINT PG_POINTARRAY
- PG_POLYGON PG_POLYGONARRAY PG_RECORD PG_RECORDARRAY PG_REFCURSOR
- PG_REFCURSORARRAY PG_REGCLASS PG_REGCLASSARRAY PG_REGCONFIG PG_REGCONFIGARRAY
- PG_REGDICTIONARY PG_REGDICTIONARYARRAY PG_REGOPER PG_REGOPERARRAY PG_REGOPERATOR
- PG_REGOPERATORARRAY PG_REGPROC PG_REGPROCARRAY PG_REGPROCEDURE PG_REGPROCEDUREARRAY
- PG_REGTYPE PG_REGTYPEARRAY PG_RELTIME PG_RELTIMEARRAY PG_SMGR
- PG_TEXT PG_TEXTARRAY PG_TID PG_TIDARRAY PG_TIME
- PG_TIMEARRAY PG_TIMESTAMP PG_TIMESTAMPARRAY PG_TIMESTAMPTZ PG_TIMESTAMPTZARRAY
- PG_TIMETZ PG_TIMETZARRAY PG_TINTERVAL PG_TINTERVALARRAY PG_TRIGGER
- PG_TSQUERY PG_TSQUERYARRAY PG_TSRANGE PG_TSRANGEARRAY PG_TSTZRANGE
- PG_TSTZRANGEARRAY PG_TSVECTOR PG_TSVECTORARRAY PG_TXID_SNAPSHOT PG_TXID_SNAPSHOTARRAY
- PG_UNKNOWN PG_UUID PG_UUIDARRAY PG_VARBIT PG_VARBITARRAY
- PG_VARCHAR PG_VARCHARARRAY PG_VOID PG_XID PG_XIDARRAY
- PG_XML PG_XMLARRAY
+ PG_JSONARRAY PG_JSONB PG_JSONBARRAY PG_LANGUAGE_HANDLER PG_LINE
+ PG_LINEARRAY PG_LSEG PG_LSEGARRAY PG_MACADDR PG_MACADDRARRAY
+ PG_MONEY PG_MONEYARRAY PG_NAME PG_NAMEARRAY PG_NUMERIC
+ PG_NUMERICARRAY PG_NUMRANGE PG_NUMRANGEARRAY PG_OID PG_OIDARRAY
+ PG_OIDVECTOR PG_OIDVECTORARRAY PG_OPAQUE PG_PATH PG_PATHARRAY
+ PG_PG_ATTRIBUTE PG_PG_CLASS PG_PG_LSN PG_PG_LSNARRAY PG_PG_NODE_TREE
+ PG_PG_PROC PG_PG_TYPE PG_POINT PG_POINTARRAY PG_POLYGON
+ PG_POLYGONARRAY PG_RECORD PG_RECORDARRAY PG_REFCURSOR PG_REFCURSORARRAY
+ PG_REGCLASS PG_REGCLASSARRAY PG_REGCONFIG PG_REGCONFIGARRAY PG_REGDICTIONARY
+ PG_REGDICTIONARYARRAY PG_REGOPER PG_REGOPERARRAY PG_REGOPERATOR PG_REGOPERATORARRAY
+ PG_REGPROC PG_REGPROCARRAY PG_REGPROCEDURE PG_REGPROCEDUREARRAY PG_REGTYPE
+ PG_REGTYPEARRAY PG_RELTIME PG_RELTIMEARRAY PG_SMGR PG_TEXT
+ PG_TEXTARRAY PG_TID PG_TIDARRAY PG_TIME PG_TIMEARRAY
+ PG_TIMESTAMP PG_TIMESTAMPARRAY PG_TIMESTAMPTZ PG_TIMESTAMPTZARRAY PG_TIMETZ
+ PG_TIMETZARRAY PG_TINTERVAL PG_TINTERVALARRAY PG_TRIGGER PG_TSQUERY
+ PG_TSQUERYARRAY PG_TSRANGE PG_TSRANGEARRAY PG_TSTZRANGE PG_TSTZRANGEARRAY
+ PG_TSVECTOR PG_TSVECTORARRAY PG_TXID_SNAPSHOT PG_TXID_SNAPSHOTARRAY PG_UNKNOWN
+ PG_UUID PG_UUIDARRAY PG_VARBIT PG_VARBITARRAY PG_VARCHAR
+ PG_VARCHARARRAY PG_VOID PG_XID PG_XIDARRAY PG_XML
+ PG_XMLARRAY
)]
);
@@ -1775,7 +1776,7 @@ DBD::Pg - PostgreSQL database driver for the DBI module
=head1 VERSION
-This documents version 3.0.0 of the DBD::Pg module
+This documents version 3.1.1 of the DBD::Pg module
=head1 DESCRIPTION
@@ -3406,22 +3407,22 @@ The current list of Postgres data types exported is:
PG_INET PG_INETARRAY PG_INT2 PG_INT2ARRAY PG_INT2VECTOR PG_INT2VECTORARRAY
PG_INT4 PG_INT4ARRAY PG_INT4RANGE PG_INT4RANGEARRAY PG_INT8 PG_INT8ARRAY
PG_INT8RANGE PG_INT8RANGEARRAY PG_INTERNAL PG_INTERVAL PG_INTERVALARRAY PG_JSON
- PG_JSONARRAY PG_LANGUAGE_HANDLER PG_LINE PG_LINEARRAY PG_LSEG PG_LSEGARRAY
- PG_MACADDR PG_MACADDRARRAY PG_MONEY PG_MONEYARRAY PG_NAME PG_NAMEARRAY
- PG_NUMERIC PG_NUMERICARRAY PG_NUMRANGE PG_NUMRANGEARRAY PG_OID PG_OIDARRAY
- PG_OIDVECTOR PG_OIDVECTORARRAY PG_OPAQUE PG_PATH PG_PATHARRAY PG_PG_ATTRIBUTE
- PG_PG_CLASS PG_PG_NODE_TREE PG_PG_PROC PG_PG_TYPE PG_POINT PG_POINTARRAY
- PG_POLYGON PG_POLYGONARRAY PG_RECORD PG_RECORDARRAY PG_REFCURSOR PG_REFCURSORARRAY
- PG_REGCLASS PG_REGCLASSARRAY PG_REGCONFIG PG_REGCONFIGARRAY PG_REGDICTIONARY PG_REGDICTIONARYARRAY
- PG_REGOPER PG_REGOPERARRAY PG_REGOPERATOR PG_REGOPERATORARRAY PG_REGPROC PG_REGPROCARRAY
- PG_REGPROCEDURE PG_REGPROCEDUREARRAY PG_REGTYPE PG_REGTYPEARRAY PG_RELTIME PG_RELTIMEARRAY
- PG_SMGR PG_TEXT PG_TEXTARRAY PG_TID PG_TIDARRAY PG_TIME
- PG_TIMEARRAY PG_TIMESTAMP PG_TIMESTAMPARRAY PG_TIMESTAMPTZ PG_TIMESTAMPTZARRAY PG_TIMETZ
- PG_TIMETZARRAY PG_TINTERVAL PG_TINTERVALARRAY PG_TRIGGER PG_TSQUERY PG_TSQUERYARRAY
- PG_TSRANGE PG_TSRANGEARRAY PG_TSTZRANGE PG_TSTZRANGEARRAY PG_TSVECTOR PG_TSVECTORARRAY
- PG_TXID_SNAPSHOT PG_TXID_SNAPSHOTARRAY PG_UNKNOWN PG_UUID PG_UUIDARRAY PG_VARBIT
- PG_VARBITARRAY PG_VARCHAR PG_VARCHARARRAY PG_VOID PG_XID PG_XIDARRAY
- PG_XML PG_XMLARRAY
+ PG_JSONARRAY PG_JSONB PG_JSONBARRAY PG_LANGUAGE_HANDLER PG_LINE PG_LINEARRAY
+ PG_LSEG PG_LSEGARRAY PG_MACADDR PG_MACADDRARRAY PG_MONEY PG_MONEYARRAY
+ PG_NAME PG_NAMEARRAY PG_NUMERIC PG_NUMERICARRAY PG_NUMRANGE PG_NUMRANGEARRAY
+ PG_OID PG_OIDARRAY PG_OIDVECTOR PG_OIDVECTORARRAY PG_OPAQUE PG_PATH
+ PG_PATHARRAY PG_PG_ATTRIBUTE PG_PG_CLASS PG_PG_LSN PG_PG_LSNARRAY PG_PG_NODE_TREE
+ PG_PG_PROC PG_PG_TYPE PG_POINT PG_POINTARRAY PG_POLYGON PG_POLYGONARRAY
+ PG_RECORD PG_RECORDARRAY PG_REFCURSOR PG_REFCURSORARRAY PG_REGCLASS PG_REGCLASSARRAY
+ PG_REGCONFIG PG_REGCONFIGARRAY PG_REGDICTIONARY PG_REGDICTIONARYARRAY PG_REGOPER PG_REGOPERARRAY
+ PG_REGOPERATOR PG_REGOPERATORARRAY PG_REGPROC PG_REGPROCARRAY PG_REGPROCEDURE PG_REGPROCEDUREARRAY
+ PG_REGTYPE PG_REGTYPEARRAY PG_RELTIME PG_RELTIMEARRAY PG_SMGR PG_TEXT
+ PG_TEXTARRAY PG_TID PG_TIDARRAY PG_TIME PG_TIMEARRAY PG_TIMESTAMP
+ PG_TIMESTAMPARRAY PG_TIMESTAMPTZ PG_TIMESTAMPTZARRAY PG_TIMETZ PG_TIMETZARRAY PG_TINTERVAL
+ PG_TINTERVALARRAY PG_TRIGGER PG_TSQUERY PG_TSQUERYARRAY PG_TSRANGE PG_TSRANGEARRAY
+ PG_TSTZRANGE PG_TSTZRANGEARRAY PG_TSVECTOR PG_TSVECTORARRAY PG_TXID_SNAPSHOT PG_TXID_SNAPSHOTARRAY
+ PG_UNKNOWN PG_UUID PG_UUIDARRAY PG_VARBIT PG_VARBITARRAY PG_VARCHAR
+ PG_VARCHARARRAY PG_VOID PG_XID PG_XIDARRAY PG_XML PG_XMLARRAY
Data types are "sticky," in that once a data type is set to a certain placeholder,
it will remain for that placeholder, unless it is explicitly set to something
@@ -85,6 +85,8 @@ constant(name=Nullch)
PG_INTERVALARRAY = 1187
PG_JSON = 114
PG_JSONARRAY = 199
+ PG_JSONB = 3802
+ PG_JSONBARRAY = 3807
PG_LANGUAGE_HANDLER = 2280
PG_LINE = 628
PG_LINEARRAY = 629
@@ -109,6 +111,8 @@ constant(name=Nullch)
PG_PATHARRAY = 1019
PG_PG_ATTRIBUTE = 75
PG_PG_CLASS = 83
+ PG_PG_LSN = 3220
+ PG_PG_LSNARRAY = 3221
PG_PG_NODE_TREE = 194
PG_PG_PROC = 81
PG_PG_TYPE = 71
@@ -5,7 +5,7 @@ DBD::Pg -- the DBI PostgreSQL interface for Perl
DESCRIPTION:
------------
-This is version 3.0.0 of DBD::Pg, the Perl interface to Postgres using DBI.
+This is version 3.1.1 of DBD::Pg, the Perl interface to Postgres using DBI.
The web site for this interface, and the latest version, can be found at:
http://search.cpan.org/dist/DBD-Pg/
@@ -653,8 +653,6 @@ to the Changes files. Then commit the Changes file.
* Announce to the "public" lists
-dbd-pg@perl.org
-pgsql-interfaces@postgresql.org
dbi-users@perl.org, dbi-dev@perl.org, dbi-announce@perl.org
The format for DBI announcements:
@@ -15,31 +15,31 @@ not run its Makefile.PL or Build.PL.
Hash: RIPEMD160
SHA1 6f4143600430e0bc949c17b05ac34844e5fb3ee4 .perlcriticrc
-SHA1 d72d91475fca75358450a7700227a32ec8ec9d71 Changes
+SHA1 a0fded098274e0e7874a3f658d1a3b7eb6dd3fa4 Changes
SHA1 21bc5f3c797d4d5b72285198ffeb1e4e1f0a2902 LICENSES/artistic.txt
SHA1 06877624ea5c77efe3b7e39b0f909eda6e25a4ec LICENSES/gpl-2.0.txt
SHA1 9c2b33069c9ceb7cd57ea0aeb7b8de144ab75672 MANIFEST
SHA1 8d2857ee9a6326c08507d8552f86709dd068fbe5 MANIFEST.SKIP
-SHA1 4e64a7d9e86342edd82697bb1d88c61ab483e727 META.yml
-SHA1 8d1eed8f0642df88f41954c7d38663d8bd6fafaa Makefile.PL
+SHA1 c5e62c6346bf78aa662e61af3ab3294f96ddf265 META.yml
+SHA1 1ff5b59d2ec8e9be3b83c725a9edb102de4b033c Makefile.PL
SHA1 92b6c5da08942e820f090ee1adb4e55c1f46fe8c Pg.h
-SHA1 d736608d0e4879eb69f06396eb62fc043f754323 Pg.pm
-SHA1 bf8c21b2e067ed6e502f33ec3e9a85cdf3b779cd Pg.xs
-SHA1 9825fffa72d6df311d6a372c155b89a3be9af3ee README
-SHA1 5a5a01848ab503ad1d880136caa32d12370bd488 README.dev
+SHA1 f8ddef88bb344a536178ca58f161607e6d7ae1ea Pg.pm
+SHA1 27ff80390a0518b5d24dd15b90b8cdd7710d76dc Pg.xs
+SHA1 0fd29ac2a3601b13ad5566253b7664fc99e45087 README
+SHA1 34036e0b0dc15d899f561e8177227661eaaef2f1 README.dev
SHA1 7e213bf90f513595b59c0a2c4ef94fea1592efcf README.win32
SHA1 3aac8fa93676046f9fa31d8fd05914bf638b6c1f TODO
-SHA1 7f507f2a4206c0c3af3ab0b4b6511873b37c486b dbdimp.c
+SHA1 843e1fe7942a17f4d185c14936fea9008ea49dba dbdimp.c
SHA1 07640e7e761d0aca573f11c777294a9c0576c25c dbdimp.h
SHA1 6c33bcf138e577722283bef02fceb8cbce4d100d dbivport.h
-SHA1 ae9659421d204fd0d10b7eeef53abf2885527453 lib/Bundle/DBD/Pg.pm
+SHA1 5a44ec0cc890ecee7f8e4de8066af43c0f30ad10 lib/Bundle/DBD/Pg.pm
SHA1 7e97b01e2facd3e71a79d400979357e609cc922c quote.c
SHA1 7ccff1056809e35bcc1a3ff4f5a3d337f207681f quote.h
SHA1 93aa7e8cae0a361d1e6163dea0281ebff41f3c5f t/00_signature.t
SHA1 4691376dd83eef11b59ee6b1bb4ce2eb951e1920 t/00basic.t
SHA1 1f50adea4f2c7a5110eca34dc8b6d5dc9d4121ed t/01connect.t
-SHA1 2fd22727c3a0e830769de82b0dae875a0f243366 t/01constants.t
-SHA1 2817d1860ea516a58afc7954051f9c7578093993 t/02attribs.t
+SHA1 42b566f777c15a3d07e41d4bca55be435349376c t/01constants.t
+SHA1 eebcef07f13442996ab8dfd033d315f3eb588cae t/02attribs.t
SHA1 664fb661b7f70a32468f801471f9dd413c8df25a t/03dbmethod.t
SHA1 57cc8220ca257509b5ece583602d88111c0b38f0 t/03smethod.t
SHA1 dd47bd1ac55072177a57f856daca98904939112c t/04misc.t
@@ -47,11 +47,11 @@ SHA1 9113f062bf144a5768e9e4e98a0f140f498caee1 t/06bytea.t
SHA1 c4c43b2229411c3850de0a9cb9bae8e5ccc7d822 t/07copy.t
SHA1 e6fe3d9c739d31f344c4a56382004a97202e4d51 t/08async.t
SHA1 3ead013fa8268caf62b6401a00969d70d0596d06 t/09arrays.t
-SHA1 2c368e5fc76bb0aa3892689f6f4fd972f77cc608 t/12placeholders.t
+SHA1 330b60d4794fee82c64b4e2876dcb43f065a8edc t/12placeholders.t
SHA1 81558ca5c783ea6792fd103444a04df615a8d127 t/20savepoints.t
SHA1 e27c7167fdca6072b68f7b0b465504b1de5f27bc t/30unicode.t
SHA1 b1e1d98917296def69afa730d963a3d16c23def1 t/99cleanup.t
-SHA1 7d0d82ae8fa897313d49126ca20eb1f95fde6cfd t/dbdpg_test_setup.pl
+SHA1 c058b306c90de0d6b2830b9a517ac7f1a65ebe60 t/dbdpg_test_setup.pl
SHA1 0e196509e83b3ca603478d994a0837edd51b841d t/lib/App/Info.pm
SHA1 e02b0b5206c37280f9259e6a02839cbfc10be53f t/lib/App/Info/Handler.pm
SHA1 cc5d256a57f1fe0ddc587685a0cd64f812bb1ce9 t/lib/App/Info/Handler/Print.pm
@@ -61,12 +61,12 @@ SHA1 e30faf1a65a0c61c975f1594fb848b764b82ea79 t/lib/App/Info/RDBMS/PostgreSQL.pm
SHA1 967e270789d36c0fd70b28d564ed621c9efb5f28 t/lib/App/Info/Request.pm
SHA1 cc065cffdcbb3f95349b37d34c2d203c7ea77bf2 t/lib/App/Info/Util.pm
SHA1 09f4174a3ec321ae75112429da9d3a4667d6cf3c testme.tmp.pl
-SHA1 dc0d31bcac05ab861fa53fe3109e8d064a327f2c types.c
-SHA1 25681797cc3cbb67e556610ca0f7f35037dfe573 types.h
+SHA1 e2ff9705f94b93aa62fa763368b551d309fb188d types.c
+SHA1 3b6cb08c1f652a8648a5939751bbc380b3939504 types.h
SHA1 f07cd5ecaeb854c81ceb9206364979cf607e6546 win32.mak
-----BEGIN PGP SIGNATURE-----
-iEYEAREDAAYFAlLwPD0ACgkQvJuQZxSWSsiesgCg9NLFR0CLJ2RG5CcvrJtKTC9F
-TYAAoLEr3BmIjG4b5d7CSFa+4NNKASrO
-=brrX
+iEYEAREDAAYFAlNBUyoACgkQvJuQZxSWSshRYwCg8dQpAlnHHQSQujX2nLWSxDMX
+nwgAnAsrAX/om2XuLcFfh5CiRIaxSFOG
+=8GAU
-----END PGP SIGNATURE-----
@@ -405,7 +405,7 @@ static ExecStatusType _sqlstate(pTHX_ imp_dbh_t * imp_dbh, PGresult * result)
if (!sqlstate) {
/* Do our best to map the status result to a sqlstate code */
- switch (status) {
+ switch ((int)status) {
case PGRES_EMPTY_QUERY:
case PGRES_COMMAND_OK:
case PGRES_TUPLES_OK:
@@ -1474,11 +1474,21 @@ SV * pg_db_pg_notifies (SV * dbh, imp_dbh_t * imp_dbh)
}
ret=newAV();
- av_push(ret, newSVpv(notify->relname,0) );
+
+ SV *relnamesv = newSVpv(notify->relname, 0);
+ if (imp_dbh->pg_utf8_flag) {
+ SvUTF8_on(relnamesv);
+ }
+ av_push(ret, relnamesv);
+
av_push(ret, newSViv(notify->be_pid) );
- av_push(ret, newSVpv(notify->extra,0) );
- /* Think about utf-8 in payloads someday... */
-
+
+ SV *payloadsv = newSVpv(notify->extra, 0);
+ if (imp_dbh->pg_utf8_flag) {
+ SvUTF8_on(payloadsv);
+ }
+ av_push(ret, payloadsv);
+
TRACE_PQFREEMEM;
PQfreemem(notify);
@@ -1580,7 +1590,9 @@ int dbd_st_prepare (SV * sth, imp_sth_t * imp_sth, char * statement, SV * attrib
if (0 == strcasecmp(imp_sth->firstword, "SELECT") ||
0 == strcasecmp(imp_sth->firstword, "INSERT") ||
0 == strcasecmp(imp_sth->firstword, "UPDATE") ||
- 0 == strcasecmp(imp_sth->firstword, "DELETE")
+ 0 == strcasecmp(imp_sth->firstword, "DELETE") ||
+ 0 == strcasecmp(imp_sth->firstword, "VALUES") ||
+ 0 == strcasecmp(imp_sth->firstword, "WITH")
) {
imp_sth->is_dml = DBDPG_TRUE;
}
@@ -2905,7 +2917,7 @@ int pg_quickexec (SV * dbh, const char * sql, const int asyncflag)
imp_dbh->copystate = 0; /* Assume not in copy mode until told otherwise */
if (TRACE4_slow) TRC(DBILOGFP, "%sGot a status of %d\n", THEADER_slow, status);
- switch (status) {
+ switch ((int)status) {
case PGRES_TUPLES_OK:
TRACE_PQNTUPLES;
rows = PQntuples(result);
@@ -4822,7 +4834,7 @@ int pg_db_result (SV *h, imp_dbh_t *imp_dbh)
while ((result = PQgetResult(imp_dbh->conn)) != NULL) {
/* TODO: Better multiple result-set handling */
status = _sqlstate(aTHX_ imp_dbh, result);
- switch (status) {
+ switch ((int)status) {
case PGRES_TUPLES_OK:
TRACE_PQNTUPLES;
rows = PQntuples(result);
@@ -4,7 +4,7 @@ package Bundle::DBD::Pg;
use strict;
use warnings;
-$VERSION = '3.0.0';
+$VERSION = '3.1.1';
1;
@@ -73,6 +73,8 @@ is (PG_INTERVAL , 1186, 'PG_INTERVAL returns correct value');
is (PG_INTERVALARRAY , 1187, 'PG_INTERVALARRAY returns correct value');
is (PG_JSON , 114, 'PG_JSON returns correct value');
is (PG_JSONARRAY , 199, 'PG_JSONARRAY returns correct value');
+is (PG_JSONB , 3802, 'PG_JSONB returns correct value');
+is (PG_JSONBARRAY , 3807, 'PG_JSONBARRAY returns correct value');
is (PG_LANGUAGE_HANDLER , 2280, 'PG_LANGUAGE_HANDLER returns correct value');
is (PG_LINE , 628, 'PG_LINE returns correct value');
is (PG_LINEARRAY , 629, 'PG_LINEARRAY returns correct value');
@@ -97,6 +99,8 @@ is (PG_PATH , 602, 'PG_PATH returns correct value');
is (PG_PATHARRAY , 1019, 'PG_PATHARRAY returns correct value');
is (PG_PG_ATTRIBUTE , 75, 'PG_PG_ATTRIBUTE returns correct value');
is (PG_PG_CLASS , 83, 'PG_PG_CLASS returns correct value');
+is (PG_PG_LSN , 3220, 'PG_PG_LSN returns correct value');
+is (PG_PG_LSNARRAY , 3221, 'PG_PG_LSNARRAY returns correct value');
is (PG_PG_NODE_TREE , 194, 'PG_PG_NODE_TREE returns correct value');
is (PG_PG_PROC , 81, 'PG_PG_PROC returns correct value');
is (PG_PG_TYPE , 71, 'PG_PG_TYPE returns correct value');
@@ -251,7 +251,7 @@ is ($value, 1, $t);
{
-local $SIG{__WARN__} = sub { $warning = shift; };
+local $SIG{__WARN__} = sub { $warning .= shift; };
$dbh->do(q{SET client_min_messages = 'DEBUG1'});
$t='DB handle attribute "PrintWarn" works when on';
@@ -1642,7 +1642,7 @@ SKIP: {
$val = $sth->fetchall_arrayref()->[0][0];
is ($val, $answer, $t);
# Let the child exit first
- select(undef,undef,undef,0.3);
+ select(undef,undef,undef,0.5);
}
else { # Child
$dbh->{InactiveDestroy} = $destroy;
@@ -586,7 +586,7 @@ for my $char (qw!+ / : @ [ `!) { ## six characters
$sth->execute();
$sth->finish();
};
- like ($@, qr{syntax error}, $t);
+ like ($@, qr{syntax error}, "$t: char=$char");
}
$t='Dollar quotes with valid characters are parsed as identifiers';
@@ -117,7 +117,7 @@ version: $version
1;
};
- if ($@ =~ /invalid connection option/ or $@ =~ /failed:.*"dbbarf"/) {
+ if ($@ =~ /invalid connection option/ or $@ =~ /"dbbarf"/) {
return $helpconnect, $@, undef;
}
@@ -41,6 +41,7 @@ static sql_type_info_t pg_types[] = {
{PG_INT8RANGEARRAY ,"_int8range" ,1,',',"array_out" ,quote_string,dequote_string,{0},0},
{PG_INTERVALARRAY ,"_interval" ,1,',',"array_out" ,quote_string,dequote_string,{0},0},
{PG_JSONARRAY ,"_json" ,1,',',"array_out" ,quote_string,dequote_string,{0},0},
+ {PG_JSONBARRAY ,"_jsonb" ,1,',',"array_out" ,quote_string,dequote_string,{0},0},
{PG_LINEARRAY ,"_line" ,1,',',"array_out" ,quote_string,dequote_string,{0},0},
{PG_LSEGARRAY ,"_lseg" ,1,',',"array_out" ,quote_string,dequote_string,{0},0},
{PG_MACADDRARRAY ,"_macaddr" ,1,',',"array_out" ,quote_string,dequote_string,{0},0},
@@ -51,6 +52,7 @@ static sql_type_info_t pg_types[] = {
{PG_OIDARRAY ,"_oid" ,1,',',"array_out" ,quote_string,dequote_string,{0},1},
{PG_OIDVECTORARRAY ,"_oidvector" ,1,',',"array_out" ,quote_string,dequote_string,{0},0},
{PG_PATHARRAY ,"_path" ,1,',',"array_out" ,quote_string,dequote_string,{0},0},
+ {PG_PG_LSNARRAY ,"_pg_lsn" ,1,',',"array_out" ,quote_string,dequote_string,{0},0},
{PG_POINTARRAY ,"_point" ,1,',',"array_out" ,quote_string,dequote_string,{0},0},
{PG_POLYGONARRAY ,"_polygon" ,1,',',"array_out" ,quote_string,dequote_string,{0},0},
{PG_RECORDARRAY ,"_record" ,1,',',"array_out" ,quote_string,dequote_string,{0},0},
@@ -116,6 +118,7 @@ static sql_type_info_t pg_types[] = {
{PG_INTERNAL ,"internal" ,1,',',"internal_out" ,quote_string,dequote_string,{0},0},
{PG_INTERVAL ,"interval" ,1,',',"interval_out" ,quote_string,dequote_string,{0},0},
{PG_JSON ,"json" ,1,',',"json_out" ,quote_string,dequote_string,{0},0},
+ {PG_JSONB ,"jsonb" ,1,',',"jsonb_out" ,quote_string,dequote_string,{0},0},
{PG_LANGUAGE_HANDLER ,"language_handler" ,1,',',"language_handler_out",quote_string,dequote_string,{0},0},
{PG_LINE ,"line" ,1,',',"line_out" ,quote_geom ,dequote_string,{0},0},
{PG_LSEG ,"lseg" ,1,',',"lseg_out" ,quote_geom ,dequote_string,{0},0},
@@ -130,6 +133,7 @@ static sql_type_info_t pg_types[] = {
{PG_PATH ,"path" ,1,',',"path_out" ,quote_path ,dequote_string,{0},0},
{PG_PG_ATTRIBUTE ,"pg_attribute" ,1,',',"record_out" ,quote_string,dequote_string,{0},0},
{PG_PG_CLASS ,"pg_class" ,1,',',"record_out" ,quote_string,dequote_string,{0},0},
+ {PG_PG_LSN ,"pg_lsn" ,1,',',"pg_lsn_out" ,quote_string,dequote_string,{0},0},
{PG_PG_NODE_TREE ,"pg_node_tree" ,1,',',"pg_node_tree_out" ,quote_string,dequote_string,{0},0},
{PG_PG_PROC ,"pg_proc" ,1,',',"record_out" ,quote_string,dequote_string,{0},0},
{PG_PG_TYPE ,"pg_type" ,1,',',"record_out" ,quote_string,dequote_string,{0},0},
@@ -201,132 +205,136 @@ sql_type_info_t* pg_type_data(int sql_type)
case PG_INT8RANGEARRAY: return &pg_types[23];
case PG_INTERVALARRAY: return &pg_types[24];
case PG_JSONARRAY: return &pg_types[25];
- case PG_LINEARRAY: return &pg_types[26];
- case PG_LSEGARRAY: return &pg_types[27];
- case PG_MACADDRARRAY: return &pg_types[28];
- case PG_MONEYARRAY: return &pg_types[29];
- case PG_NAMEARRAY: return &pg_types[30];
- case PG_NUMERICARRAY: return &pg_types[31];
- case PG_NUMRANGEARRAY: return &pg_types[32];
- case PG_OIDARRAY: return &pg_types[33];
- case PG_OIDVECTORARRAY: return &pg_types[34];
- case PG_PATHARRAY: return &pg_types[35];
- case PG_POINTARRAY: return &pg_types[36];
- case PG_POLYGONARRAY: return &pg_types[37];
- case PG_RECORDARRAY: return &pg_types[38];
- case PG_REFCURSORARRAY: return &pg_types[39];
- case PG_REGCLASSARRAY: return &pg_types[40];
- case PG_REGCONFIGARRAY: return &pg_types[41];
- case PG_REGDICTIONARYARRAY: return &pg_types[42];
- case PG_REGOPERARRAY: return &pg_types[43];
- case PG_REGOPERATORARRAY: return &pg_types[44];
- case PG_REGPROCARRAY: return &pg_types[45];
- case PG_REGPROCEDUREARRAY: return &pg_types[46];
- case PG_REGTYPEARRAY: return &pg_types[47];
- case PG_RELTIMEARRAY: return &pg_types[48];
- case PG_TEXTARRAY: return &pg_types[49];
- case PG_TIDARRAY: return &pg_types[50];
- case PG_TIMEARRAY: return &pg_types[51];
- case PG_TIMESTAMPARRAY: return &pg_types[52];
- case PG_TIMESTAMPTZARRAY: return &pg_types[53];
- case PG_TIMETZARRAY: return &pg_types[54];
- case PG_TINTERVALARRAY: return &pg_types[55];
- case PG_TSQUERYARRAY: return &pg_types[56];
- case PG_TSRANGEARRAY: return &pg_types[57];
- case PG_TSTZRANGEARRAY: return &pg_types[58];
- case PG_TSVECTORARRAY: return &pg_types[59];
- case PG_TXID_SNAPSHOTARRAY: return &pg_types[60];
- case PG_UUIDARRAY: return &pg_types[61];
- case PG_VARBITARRAY: return &pg_types[62];
- case PG_VARCHARARRAY: return &pg_types[63];
- case PG_XIDARRAY: return &pg_types[64];
- case PG_XMLARRAY: return &pg_types[65];
- case PG_ABSTIME: return &pg_types[66];
- case PG_ACLITEM: return &pg_types[67];
- case PG_ANY: return &pg_types[68];
- case PG_ANYARRAY: return &pg_types[69];
- case PG_ANYELEMENT: return &pg_types[70];
- case PG_ANYENUM: return &pg_types[71];
- case PG_ANYNONARRAY: return &pg_types[72];
- case PG_ANYRANGE: return &pg_types[73];
- case PG_BIT: return &pg_types[74];
- case PG_BOOL: return &pg_types[75];
- case PG_BOX: return &pg_types[76];
- case PG_BPCHAR: return &pg_types[77];
- case PG_BYTEA: return &pg_types[78];
- case PG_CHAR: return &pg_types[79];
- case PG_CID: return &pg_types[80];
- case PG_CIDR: return &pg_types[81];
- case PG_CIRCLE: return &pg_types[82];
- case PG_CSTRING: return &pg_types[83];
- case PG_DATE: return &pg_types[84];
- case PG_DATERANGE: return &pg_types[85];
- case PG_EVENT_TRIGGER: return &pg_types[86];
- case PG_FDW_HANDLER: return &pg_types[87];
- case PG_FLOAT4: return &pg_types[88];
- case PG_FLOAT8: return &pg_types[89];
- case PG_GTSVECTOR: return &pg_types[90];
- case PG_INET: return &pg_types[91];
- case PG_INT2: return &pg_types[92];
- case PG_INT2VECTOR: return &pg_types[93];
- case PG_INT4: return &pg_types[94];
- case PG_INT4RANGE: return &pg_types[95];
- case PG_INT8: return &pg_types[96];
- case PG_INT8RANGE: return &pg_types[97];
- case PG_INTERNAL: return &pg_types[98];
- case PG_INTERVAL: return &pg_types[99];
- case PG_JSON: return &pg_types[100];
- case PG_LANGUAGE_HANDLER: return &pg_types[101];
- case PG_LINE: return &pg_types[102];
- case PG_LSEG: return &pg_types[103];
- case PG_MACADDR: return &pg_types[104];
- case PG_MONEY: return &pg_types[105];
- case PG_NAME: return &pg_types[106];
- case PG_NUMERIC: return &pg_types[107];
- case PG_NUMRANGE: return &pg_types[108];
- case PG_OID: return &pg_types[109];
- case PG_OIDVECTOR: return &pg_types[110];
- case PG_OPAQUE: return &pg_types[111];
- case PG_PATH: return &pg_types[112];
- case PG_PG_ATTRIBUTE: return &pg_types[113];
- case PG_PG_CLASS: return &pg_types[114];
- case PG_PG_NODE_TREE: return &pg_types[115];
- case PG_PG_PROC: return &pg_types[116];
- case PG_PG_TYPE: return &pg_types[117];
- case PG_POINT: return &pg_types[118];
- case PG_POLYGON: return &pg_types[119];
- case PG_RECORD: return &pg_types[120];
- case PG_REFCURSOR: return &pg_types[121];
- case PG_REGCLASS: return &pg_types[122];
- case PG_REGCONFIG: return &pg_types[123];
- case PG_REGDICTIONARY: return &pg_types[124];
- case PG_REGOPER: return &pg_types[125];
- case PG_REGOPERATOR: return &pg_types[126];
- case PG_REGPROC: return &pg_types[127];
- case PG_REGPROCEDURE: return &pg_types[128];
- case PG_REGTYPE: return &pg_types[129];
- case PG_RELTIME: return &pg_types[130];
- case PG_SMGR: return &pg_types[131];
- case PG_TEXT: return &pg_types[132];
- case PG_TID: return &pg_types[133];
- case PG_TIME: return &pg_types[134];
- case PG_TIMESTAMP: return &pg_types[135];
- case PG_TIMESTAMPTZ: return &pg_types[136];
- case PG_TIMETZ: return &pg_types[137];
- case PG_TINTERVAL: return &pg_types[138];
- case PG_TRIGGER: return &pg_types[139];
- case PG_TSQUERY: return &pg_types[140];
- case PG_TSRANGE: return &pg_types[141];
- case PG_TSTZRANGE: return &pg_types[142];
- case PG_TSVECTOR: return &pg_types[143];
- case PG_TXID_SNAPSHOT: return &pg_types[144];
- case PG_UNKNOWN: return &pg_types[145];
- case PG_UUID: return &pg_types[146];
- case PG_VARBIT: return &pg_types[147];
- case PG_VARCHAR: return &pg_types[148];
- case PG_VOID: return &pg_types[149];
- case PG_XID: return &pg_types[150];
- case PG_XML: return &pg_types[151];
+ case PG_JSONBARRAY: return &pg_types[26];
+ case PG_LINEARRAY: return &pg_types[27];
+ case PG_LSEGARRAY: return &pg_types[28];
+ case PG_MACADDRARRAY: return &pg_types[29];
+ case PG_MONEYARRAY: return &pg_types[30];
+ case PG_NAMEARRAY: return &pg_types[31];
+ case PG_NUMERICARRAY: return &pg_types[32];
+ case PG_NUMRANGEARRAY: return &pg_types[33];
+ case PG_OIDARRAY: return &pg_types[34];
+ case PG_OIDVECTORARRAY: return &pg_types[35];
+ case PG_PATHARRAY: return &pg_types[36];
+ case PG_PG_LSNARRAY: return &pg_types[37];
+ case PG_POINTARRAY: return &pg_types[38];
+ case PG_POLYGONARRAY: return &pg_types[39];
+ case PG_RECORDARRAY: return &pg_types[40];
+ case PG_REFCURSORARRAY: return &pg_types[41];
+ case PG_REGCLASSARRAY: return &pg_types[42];
+ case PG_REGCONFIGARRAY: return &pg_types[43];
+ case PG_REGDICTIONARYARRAY: return &pg_types[44];
+ case PG_REGOPERARRAY: return &pg_types[45];
+ case PG_REGOPERATORARRAY: return &pg_types[46];
+ case PG_REGPROCARRAY: return &pg_types[47];
+ case PG_REGPROCEDUREARRAY: return &pg_types[48];
+ case PG_REGTYPEARRAY: return &pg_types[49];
+ case PG_RELTIMEARRAY: return &pg_types[50];
+ case PG_TEXTARRAY: return &pg_types[51];
+ case PG_TIDARRAY: return &pg_types[52];
+ case PG_TIMEARRAY: return &pg_types[53];
+ case PG_TIMESTAMPARRAY: return &pg_types[54];
+ case PG_TIMESTAMPTZARRAY: return &pg_types[55];
+ case PG_TIMETZARRAY: return &pg_types[56];
+ case PG_TINTERVALARRAY: return &pg_types[57];
+ case PG_TSQUERYARRAY: return &pg_types[58];
+ case PG_TSRANGEARRAY: return &pg_types[59];
+ case PG_TSTZRANGEARRAY: return &pg_types[60];
+ case PG_TSVECTORARRAY: return &pg_types[61];
+ case PG_TXID_SNAPSHOTARRAY: return &pg_types[62];
+ case PG_UUIDARRAY: return &pg_types[63];
+ case PG_VARBITARRAY: return &pg_types[64];
+ case PG_VARCHARARRAY: return &pg_types[65];
+ case PG_XIDARRAY: return &pg_types[66];
+ case PG_XMLARRAY: return &pg_types[67];
+ case PG_ABSTIME: return &pg_types[68];
+ case PG_ACLITEM: return &pg_types[69];
+ case PG_ANY: return &pg_types[70];
+ case PG_ANYARRAY: return &pg_types[71];
+ case PG_ANYELEMENT: return &pg_types[72];
+ case PG_ANYENUM: return &pg_types[73];
+ case PG_ANYNONARRAY: return &pg_types[74];
+ case PG_ANYRANGE: return &pg_types[75];
+ case PG_BIT: return &pg_types[76];
+ case PG_BOOL: return &pg_types[77];
+ case PG_BOX: return &pg_types[78];
+ case PG_BPCHAR: return &pg_types[79];
+ case PG_BYTEA: return &pg_types[80];
+ case PG_CHAR: return &pg_types[81];
+ case PG_CID: return &pg_types[82];
+ case PG_CIDR: return &pg_types[83];
+ case PG_CIRCLE: return &pg_types[84];
+ case PG_CSTRING: return &pg_types[85];
+ case PG_DATE: return &pg_types[86];
+ case PG_DATERANGE: return &pg_types[87];
+ case PG_EVENT_TRIGGER: return &pg_types[88];
+ case PG_FDW_HANDLER: return &pg_types[89];
+ case PG_FLOAT4: return &pg_types[90];
+ case PG_FLOAT8: return &pg_types[91];
+ case PG_GTSVECTOR: return &pg_types[92];
+ case PG_INET: return &pg_types[93];
+ case PG_INT2: return &pg_types[94];
+ case PG_INT2VECTOR: return &pg_types[95];
+ case PG_INT4: return &pg_types[96];
+ case PG_INT4RANGE: return &pg_types[97];
+ case PG_INT8: return &pg_types[98];
+ case PG_INT8RANGE: return &pg_types[99];
+ case PG_INTERNAL: return &pg_types[100];
+ case PG_INTERVAL: return &pg_types[101];
+ case PG_JSON: return &pg_types[102];
+ case PG_JSONB: return &pg_types[103];
+ case PG_LANGUAGE_HANDLER: return &pg_types[104];
+ case PG_LINE: return &pg_types[105];
+ case PG_LSEG: return &pg_types[106];
+ case PG_MACADDR: return &pg_types[107];
+ case PG_MONEY: return &pg_types[108];
+ case PG_NAME: return &pg_types[109];
+ case PG_NUMERIC: return &pg_types[110];
+ case PG_NUMRANGE: return &pg_types[111];
+ case PG_OID: return &pg_types[112];
+ case PG_OIDVECTOR: return &pg_types[113];
+ case PG_OPAQUE: return &pg_types[114];
+ case PG_PATH: return &pg_types[115];
+ case PG_PG_ATTRIBUTE: return &pg_types[116];
+ case PG_PG_CLASS: return &pg_types[117];
+ case PG_PG_LSN: return &pg_types[118];
+ case PG_PG_NODE_TREE: return &pg_types[119];
+ case PG_PG_PROC: return &pg_types[120];
+ case PG_PG_TYPE: return &pg_types[121];
+ case PG_POINT: return &pg_types[122];
+ case PG_POLYGON: return &pg_types[123];
+ case PG_RECORD: return &pg_types[124];
+ case PG_REFCURSOR: return &pg_types[125];
+ case PG_REGCLASS: return &pg_types[126];
+ case PG_REGCONFIG: return &pg_types[127];
+ case PG_REGDICTIONARY: return &pg_types[128];
+ case PG_REGOPER: return &pg_types[129];
+ case PG_REGOPERATOR: return &pg_types[130];
+ case PG_REGPROC: return &pg_types[131];
+ case PG_REGPROCEDURE: return &pg_types[132];
+ case PG_REGTYPE: return &pg_types[133];
+ case PG_RELTIME: return &pg_types[134];
+ case PG_SMGR: return &pg_types[135];
+ case PG_TEXT: return &pg_types[136];
+ case PG_TID: return &pg_types[137];
+ case PG_TIME: return &pg_types[138];
+ case PG_TIMESTAMP: return &pg_types[139];
+ case PG_TIMESTAMPTZ: return &pg_types[140];
+ case PG_TIMETZ: return &pg_types[141];
+ case PG_TINTERVAL: return &pg_types[142];
+ case PG_TRIGGER: return &pg_types[143];
+ case PG_TSQUERY: return &pg_types[144];
+ case PG_TSRANGE: return &pg_types[145];
+ case PG_TSTZRANGE: return &pg_types[146];
+ case PG_TSVECTOR: return &pg_types[147];
+ case PG_TXID_SNAPSHOT: return &pg_types[148];
+ case PG_UNKNOWN: return &pg_types[149];
+ case PG_UUID: return &pg_types[150];
+ case PG_VARBIT: return &pg_types[151];
+ case PG_VARCHAR: return &pg_types[152];
+ case PG_VOID: return &pg_types[153];
+ case PG_XID: return &pg_types[154];
+ case PG_XML: return &pg_types[155];
default: return NULL;
}
}
@@ -53,6 +53,7 @@ sql_type_info_t* sql_type_data(int);
#define PG_INTERNAL 2281
#define PG_INTERVAL 1186
#define PG_JSON 114
+#define PG_JSONB 3802
#define PG_LANGUAGE_HANDLER 2280
#define PG_LINE 628
#define PG_LSEG 601
@@ -67,6 +68,7 @@ sql_type_info_t* sql_type_data(int);
#define PG_PATH 602
#define PG_PG_ATTRIBUTE 75
#define PG_PG_CLASS 83
+#define PG_PG_LSN 3220
#define PG_PG_NODE_TREE 194
#define PG_PG_PROC 81
#define PG_PG_TYPE 71
@@ -132,6 +134,7 @@ sql_type_info_t* sql_type_data(int);
#define PG_INT8RANGEARRAY 3927
#define PG_INTERVALARRAY 1187
#define PG_JSONARRAY 199
+#define PG_JSONBARRAY 3807
#define PG_LINEARRAY 629
#define PG_LSEGARRAY 1018
#define PG_MACADDRARRAY 1040
@@ -142,6 +145,7 @@ sql_type_info_t* sql_type_data(int);
#define PG_OIDARRAY 1028
#define PG_OIDVECTORARRAY 1013
#define PG_PATHARRAY 1019
+#define PG_PG_LSNARRAY 3221
#define PG_POINTARRAY 1017
#define PG_POLYGONARRAY 1027
#define PG_RECORDARRAY 2287