[DBD::Pg] Make sure we respect our "canonical SQL version" flag when automagically building our mapping list of internal PG data types to SQL types. This was causing a bug in which a SQL_CHAR type was getting mapped to a pg "char" (single character) rather than the expected bpchar (both map back to SQL_CHAR). This was causing bind_param to fail, if it was using the returned types. Per email to dbi-dev list from H.Merijn Brand 2013/03/04.

dbdpg-commits-gENoVmVU/[email protected] Sun, 1 Sep 2013 00:16:01 -0400
Newsgroups gmane.comp.db.postgresql.dbdpg.cvs
Message-ID <[email protected]>
Committed by Greg Sabino Mullane <greg-O9fzpki4YnJWk0Htik3J/[email protected]>

Make sure we respect our "canonical SQL version" flag when automagically building our mapping list of internal PG data types to SQL types. This was causing a bug in which a SQL_CHAR type was getting mapped to a pg "char" (single character) rather than the expected bpchar (both map back to SQL_CHAR). This was causing bind_param to fail, if it was using the returned types. Per email to dbi-dev list from H.Merijn Brand 2013/03/04.

---
 types.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/types.c b/types.c
index 00e5894..9171e12 100644
--- a/types.c
+++ b/types.c
@@ -360,8 +360,8 @@ sql_type_info_t* sql_type_data(int sql_type)
 
 	switch(sql_type) {
 		case SQL_BOOLEAN:                      return &sql_types[0];
+		case SQL_CHAR:                         return &sql_types[1];
 		case SQL_VARBINARY:                    return &sql_types[2];
-		case SQL_CHAR:                         return &sql_types[3];
 		case SQL_TYPE_DATE:                    return &sql_types[4];
 		case SQL_FLOAT:                        return &sql_types[5];
 		case SQL_DOUBLE:                       return &sql_types[6];
@@ -712,7 +712,8 @@ for my $name (sort { $a cmp $b } keys %pgtype) {
 		## {SQL_VARCHAR, "SQL_VARCHAR", quote_string, dequote_string, {VARCHAROID}, DBDPG_TRUE },
 		printf $newfh qq! {%s,"%s",1,',', "none", $pgtype{$name}{quote}, $pgtype{$name}{dequote}, \{$pgtype{$name}{define}\}, $pgtype{$name}{svtype}\},\n!, $sql, $sql;
 		$maxlen = length $sql if length $sql > $maxlen;
-		$pos{$sql} = $item++;
+		$pos{$sql} = $item if $pgtype{$name}{sqlc};
+		$item++;
 	}
 }
 print $newfh "\};\n\n";
-- 
1.7.1