The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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