Author: turnstep
Date: Tue Mar 10 15:49:27 2009
New Revision: 12596

Modified:
   DBD-Pg/trunk/Changes
   DBD-Pg/trunk/Pg.pm
   DBD-Pg/trunk/Pg.xs
   DBD-Pg/trunk/dbdimp.c
   DBD-Pg/trunk/t/01constants.t
   DBD-Pg/trunk/t/09arrays.t
   DBD-Pg/trunk/t/dbdpg_test_setup.pl
   DBD-Pg/trunk/types.c
   DBD-Pg/trunk/types.h

Log:
Handle dequoting of boolean arrays properly (Armando Santos)
Write tests for the same, and update types.c with new type info.


Modified: DBD-Pg/trunk/Changes
==============================================================================
--- DBD-Pg/trunk/Changes        (original)
+++ DBD-Pg/trunk/Changes        Tue Mar 10 15:49:27 2009
@@ -1,8 +1,9 @@
 ('GSM' is Greg Sabino Mullane, [email protected])
 
-??
+2.11.9
 
-  - Fixed minor bug in POD docs. [Tim Mattison]
+  - Do proper dequoting of boolean arrays [Armando Santos]
+  - Fix minor bug in POD docs. [Tim Mattison]
 
 2.11.8 Released December 28, 2008
 

Modified: DBD-Pg/trunk/Pg.pm
==============================================================================
--- DBD-Pg/trunk/Pg.pm  (original)
+++ DBD-Pg/trunk/Pg.pm  Tue Mar 10 15:49:27 2009
@@ -45,18 +45,18 @@
                        PG_NAMEARRAY PG_NUMERIC PG_NUMERICARRAY PG_OID 
PG_OIDARRAY
                        PG_OIDVECTOR PG_OIDVECTORARRAY PG_OPAQUE PG_PATH 
PG_PATHARRAY
                        PG_PG_ATTRIBUTE PG_PG_CLASS PG_PG_PROC PG_PG_TYPE 
PG_POINT
-                       PG_POINTARRAY PG_POLYGON PG_POLYGONARRAY PG_RECORD 
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_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_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_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
                )]
        );
 
@@ -3263,16 +3263,16 @@
  PG_NAMEARRAY PG_NUMERIC PG_NUMERICARRAY PG_OID PG_OIDARRAY PG_OIDVECTOR
  PG_OIDVECTORARRAY PG_OPAQUE PG_PATH PG_PATHARRAY PG_PG_ATTRIBUTE PG_PG_CLASS
  PG_PG_PROC PG_PG_TYPE PG_POINT PG_POINTARRAY PG_POLYGON PG_POLYGONARRAY
- PG_RECORD 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_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_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_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

Modified: DBD-Pg/trunk/Pg.xs
==============================================================================
--- DBD-Pg/trunk/Pg.xs  (original)
+++ DBD-Pg/trunk/Pg.xs  Tue Mar 10 15:49:27 2009
@@ -104,6 +104,7 @@
        PG_POLYGON            = 604
        PG_POLYGONARRAY       = 1027
        PG_RECORD             = 2249
+       PG_RECORDARRAY        = 2287
        PG_REFCURSOR          = 1790
        PG_REFCURSORARRAY     = 2201
        PG_REGCLASS           = 2205

Modified: DBD-Pg/trunk/dbdimp.c
==============================================================================
--- DBD-Pg/trunk/dbdimp.c       (original)
+++ DBD-Pg/trunk/dbdimp.c       Tue Mar 10 15:49:27 2009
@@ -2577,6 +2577,8 @@
                                        av_push(currentav, 
newSViv(SvIV(newSVpvn(string,section_size))));
                                else if (2 == coltype->svtype)
                                        av_push(currentav, 
newSVnv(SvNV(newSVpvn(string,section_size))));
+                               else if (3 == coltype->svtype)
+                                       av_push(currentav, newSViv('t' == 
*string ? 1 : 0));
                                else {
                                        SV *sv = newSVpvn(string, section_size);
 #ifdef is_utf8_string

Modified: DBD-Pg/trunk/t/01constants.t
==============================================================================
--- DBD-Pg/trunk/t/01constants.t        (original)
+++ DBD-Pg/trunk/t/01constants.t        Tue Mar 10 15:49:27 2009
@@ -91,6 +91,7 @@
 is (PG_POLYGON              ,   604, 'PG_POLYGON returns correct value');
 is (PG_POLYGONARRAY         ,  1027, 'PG_POLYGONARRAY returns correct value');
 is (PG_RECORD               ,  2249, 'PG_RECORD returns correct value');
+is (PG_RECORDARRAY          ,  2287, 'PG_RECORDARRAY returns correct value');
 is (PG_REFCURSOR            ,  1790, 'PG_REFCURSOR returns correct value');
 is (PG_REFCURSORARRAY       ,  2201, 'PG_REFCURSORARRAY returns correct 
value');
 is (PG_REGCLASS             ,  2205, 'PG_REGCLASS returns correct value');

Modified: DBD-Pg/trunk/t/09arrays.t
==============================================================================
--- DBD-Pg/trunk/t/09arrays.t   (original)
+++ DBD-Pg/trunk/t/09arrays.t   Tue Mar 10 15:49:27 2009
@@ -18,7 +18,7 @@
 if (! defined $dbh) {
        plan skip_all => 'Connection to database failed, cannot continue 
testing';
 }
-plan tests => 242;
+plan tests => 248;
 
 isnt ($dbh, undef, 'Connect to database for array testing');
 
@@ -39,12 +39,18 @@
 $SQL = q{INSERT INTO dbd_pg_test(id,pname,testarray2) VALUES (99,'Array 
Testing',?)};
 my $addarray_int = $dbh->prepare($SQL);
 
+$SQL = q{INSERT INTO dbd_pg_test(id,pname,testarray3) VALUES (99,'Array 
Testing',?)};
+my $addarray_bool = $dbh->prepare($SQL);
+
 $SQL = q{SELECT testarray FROM dbd_pg_test WHERE pname= 'Array Testing'};
 my $getarray = $dbh->prepare($SQL);
 
 $SQL = q{SELECT testarray2 FROM dbd_pg_test WHERE pname= 'Array Testing'};
 my $getarray_int = $dbh->prepare($SQL);
 
+$SQL = q{SELECT testarray3 FROM dbd_pg_test WHERE pname= 'Array Testing'};
+my $getarray_bool = $dbh->prepare($SQL);
+
 my $array_tests =
 q!['']
 {""}
@@ -310,6 +316,8 @@
 $result = $getarray->fetchall_arrayref();
 is_deeply ($result, [[['']]], $t);
 
+## Test non-string array variants
+
 $t=q{Integer array with no items returns empty array};
 $cleararray->execute();
 $addarray_int->execute('{}');
@@ -317,6 +325,44 @@
 $result = $getarray_int->fetchall_arrayref();
 is_deeply ($result, [[[]]], $t);
 
+$t=q{Boolean array with no items returns empty array};
+$cleararray->execute();
+$addarray_bool->execute('{}');
+$getarray_bool->execute();
+$result = $getarray_bool->fetchall_arrayref();
+is_deeply ($result, [[[]]], $t);
+
+$t=q{Boolean array gets created and returned correctly};
+$cleararray->execute();
+$addarray_bool->execute('{1}');
+$getarray_bool->execute();
+$result = $getarray_bool->fetchall_arrayref();
+is_deeply ($result, [[[1]]], $t);
+
+$cleararray->execute();
+$addarray_bool->execute('{0}');
+$getarray_bool->execute();
+$result = $getarray_bool->fetchall_arrayref();
+is_deeply ($result, [[[0]]], $t);
+
+$cleararray->execute();
+$addarray_bool->execute('{t}');
+$getarray_bool->execute();
+$result = $getarray_bool->fetchall_arrayref();
+is_deeply ($result, [[[1]]], $t);
+
+$cleararray->execute();
+$addarray_bool->execute('{f}');
+$getarray_bool->execute();
+$result = $getarray_bool->fetchall_arrayref();
+is_deeply ($result, [[[0]]], $t);
+
+$cleararray->execute();
+$addarray_bool->execute('{f,t,f,0,1,1}');
+$getarray_bool->execute();
+$result = $getarray_bool->fetchall_arrayref();
+is_deeply ($result, [[[0,1,0,0,1,1]]], $t);
+
 ## Pure string to array conversion testing
 
 my $array_tests_out =
@@ -421,11 +467,11 @@
 Deep nesting
 
 1::bool
-['t']
+[1]
 Test of boolean type
 
 1::bool,0::bool,'true'::boolean
-['t','f','t']
+[1,0,1]
 Test of boolean types
 
 1::oid

Modified: DBD-Pg/trunk/t/dbdpg_test_setup.pl
==============================================================================
--- DBD-Pg/trunk/t/dbdpg_test_setup.pl  (original)
+++ DBD-Pg/trunk/t/dbdpg_test_setup.pl  Tue Mar 10 15:49:27 2009
@@ -536,6 +536,7 @@
   pdate      timestamp default now(),
   testarray  text[][],
   testarray2 int[],
+  testarray3 bool[],
   "CaseTest" boolean,
   expo       numeric(6,2),
   bytetest   bytea

Modified: DBD-Pg/trunk/types.c
==============================================================================
--- DBD-Pg/trunk/types.c        (original)
+++ DBD-Pg/trunk/types.c        Tue Mar 10 15:49:27 2009
@@ -20,7 +20,7 @@
  {PG_ABSTIMEARRAY      ,"_abstime"         ,1,',',"array_out"       
,quote_string,dequote_string,{0},0},
  {PG_ACLITEMARRAY      ,"_aclitem"         ,1,',',"array_out"       
,quote_string,dequote_string,{0},0},
  {PG_BITARRAY          ,"_bit"             ,1,',',"array_out"       
,quote_string,dequote_string,{0},0},
- {PG_BOOLARRAY         ,"_bool"            ,1,',',"array_out"       
,quote_string,dequote_string,{0},0},
+ {PG_BOOLARRAY         ,"_bool"            ,1,',',"array_out"       
,quote_string,dequote_string,{0},3},
  {PG_BOXARRAY          ,"_box"             ,1,';',"array_out"       
,quote_string,dequote_string,{0},0},
  {PG_BPCHARARRAY       ,"_bpchar"          ,1,',',"array_out"       
,quote_string,dequote_string,{0},0},
  {PG_BYTEAARRAY        ,"_bytea"           ,1,',',"array_out"       
,quote_string,dequote_string,{0},0},
@@ -50,6 +50,7 @@
  {PG_PATHARRAY         ,"_path"            ,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},
  {PG_REFCURSORARRAY    ,"_refcursor"       ,1,',',"array_out"       
,quote_string,dequote_string,{0},0},
  {PG_REGCLASSARRAY     ,"_regclass"        ,1,',',"array_out"       
,quote_string,dequote_string,{0},0},
  {PG_REGCONFIGARRAY    ,"_regconfig"       ,1,',',"array_out"       
,quote_string,dequote_string,{0},0},
@@ -83,7 +84,7 @@
  {PG_ANYENUM           ,"anyenum"          ,1,',',"anyenum_out"     
,quote_string,dequote_string,{0},0},
  {PG_ANYNONARRAY       ,"anynonarray"      ,1,',',"anynonarray_out" 
,quote_string,dequote_string,{0},0},
  {PG_BIT               ,"bit"              ,1,',',"bit_out"         
,quote_string,dequote_string,{0},0},
- {PG_BOOL              ,"bool"             ,1,',',"boolout"         
,quote_bool  ,dequote_bool  ,{SQL_BOOLEAN},0},
+ {PG_BOOL              ,"bool"             ,1,',',"boolout"         
,quote_bool  ,dequote_bool  ,{SQL_BOOLEAN},3},
  {PG_BOX               ,"box"              ,1,';',"box_out"         
,quote_geom  ,dequote_string,{0},0},
  {PG_BPCHAR            ,"bpchar"           ,1,',',"bpcharout"       
,quote_string,dequote_char  ,{SQL_CHAR},0},
  {PG_BYTEA             ,"bytea"            ,1,',',"byteaout"        
,quote_bytea ,dequote_bytea ,{SQL_VARBINARY},0},
@@ -191,112 +192,113 @@
                case PG_PATHARRAY:          return &pg_types[30];
                case PG_POINTARRAY:         return &pg_types[31];
                case PG_POLYGONARRAY:       return &pg_types[32];
-               case PG_REFCURSORARRAY:     return &pg_types[33];
-               case PG_REGCLASSARRAY:      return &pg_types[34];
-               case PG_REGCONFIGARRAY:     return &pg_types[35];
-               case PG_REGDICTIONARYARRAY: return &pg_types[36];
-               case PG_REGOPERARRAY:       return &pg_types[37];
-               case PG_REGOPERATORARRAY:   return &pg_types[38];
-               case PG_REGPROCARRAY:       return &pg_types[39];
-               case PG_REGPROCEDUREARRAY:  return &pg_types[40];
-               case PG_REGTYPEARRAY:       return &pg_types[41];
-               case PG_RELTIMEARRAY:       return &pg_types[42];
-               case PG_TEXTARRAY:          return &pg_types[43];
-               case PG_TIDARRAY:           return &pg_types[44];
-               case PG_TIMEARRAY:          return &pg_types[45];
-               case PG_TIMESTAMPARRAY:     return &pg_types[46];
-               case PG_TIMESTAMPTZARRAY:   return &pg_types[47];
-               case PG_TIMETZARRAY:        return &pg_types[48];
-               case PG_TINTERVALARRAY:     return &pg_types[49];
-               case PG_TSQUERYARRAY:       return &pg_types[50];
-               case PG_TSVECTORARRAY:      return &pg_types[51];
-               case PG_TXID_SNAPSHOTARRAY: return &pg_types[52];
-               case PG_UUIDARRAY:          return &pg_types[53];
-               case PG_VARBITARRAY:        return &pg_types[54];
-               case PG_VARCHARARRAY:       return &pg_types[55];
-               case PG_XIDARRAY:           return &pg_types[56];
-               case PG_XMLARRAY:           return &pg_types[57];
-               case PG_ABSTIME:            return &pg_types[58];
-               case PG_ACLITEM:            return &pg_types[59];
-               case PG_ANY:                return &pg_types[60];
-               case PG_ANYARRAY:           return &pg_types[61];
-               case PG_ANYELEMENT:         return &pg_types[62];
-               case PG_ANYENUM:            return &pg_types[63];
-               case PG_ANYNONARRAY:        return &pg_types[64];
-               case PG_BIT:                return &pg_types[65];
-               case PG_BOOL:               return &pg_types[66];
-               case PG_BOX:                return &pg_types[67];
-               case PG_BPCHAR:             return &pg_types[68];
-               case PG_BYTEA:              return &pg_types[69];
-               case PG_CHAR:               return &pg_types[70];
-               case PG_CID:                return &pg_types[71];
-               case PG_CIDR:               return &pg_types[72];
-               case PG_CIRCLE:             return &pg_types[73];
-               case PG_CSTRING:            return &pg_types[74];
-               case PG_DATE:               return &pg_types[75];
-               case PG_FLOAT4:             return &pg_types[76];
-               case PG_FLOAT8:             return &pg_types[77];
-               case PG_GTSVECTOR:          return &pg_types[78];
-               case PG_INET:               return &pg_types[79];
-               case PG_INT2:               return &pg_types[80];
-               case PG_INT2VECTOR:         return &pg_types[81];
-               case PG_INT4:               return &pg_types[82];
-               case PG_INT8:               return &pg_types[83];
-               case PG_INTERNAL:           return &pg_types[84];
-               case PG_INTERVAL:           return &pg_types[85];
-               case PG_LANGUAGE_HANDLER:   return &pg_types[86];
-               case PG_LINE:               return &pg_types[87];
-               case PG_LSEG:               return &pg_types[88];
-               case PG_MACADDR:            return &pg_types[89];
-               case PG_MONEY:              return &pg_types[90];
-               case PG_NAME:               return &pg_types[91];
-               case PG_NUMERIC:            return &pg_types[92];
-               case PG_OID:                return &pg_types[93];
-               case PG_OIDVECTOR:          return &pg_types[94];
-               case PG_OPAQUE:             return &pg_types[95];
-               case PG_PATH:               return &pg_types[96];
-               case PG_PG_ATTRIBUTE:       return &pg_types[97];
-               case PG_PG_CLASS:           return &pg_types[98];
-               case PG_PG_PROC:            return &pg_types[99];
-               case PG_PG_TYPE:            return &pg_types[100];
-               case PG_POINT:              return &pg_types[101];
-               case PG_POLYGON:            return &pg_types[102];
-               case PG_RECORD:             return &pg_types[103];
-               case PG_REFCURSOR:          return &pg_types[104];
-               case PG_REGCLASS:           return &pg_types[105];
-               case PG_REGCONFIG:          return &pg_types[106];
-               case PG_REGDICTIONARY:      return &pg_types[107];
-               case PG_REGOPER:            return &pg_types[108];
-               case PG_REGOPERATOR:        return &pg_types[109];
-               case PG_REGPROC:            return &pg_types[110];
-               case PG_REGPROCEDURE:       return &pg_types[111];
-               case PG_REGTYPE:            return &pg_types[112];
-               case PG_RELTIME:            return &pg_types[113];
-               case PG_SMGR:               return &pg_types[114];
-               case PG_TEXT:               return &pg_types[115];
-               case PG_TID:                return &pg_types[116];
-               case PG_TIME:               return &pg_types[117];
-               case PG_TIMESTAMP:          return &pg_types[118];
-               case PG_TIMESTAMPTZ:        return &pg_types[119];
-               case PG_TIMETZ:             return &pg_types[120];
-               case PG_TINTERVAL:          return &pg_types[121];
-               case PG_TRIGGER:            return &pg_types[122];
-               case PG_TSQUERY:            return &pg_types[123];
-               case PG_TSVECTOR:           return &pg_types[124];
-               case PG_TXID_SNAPSHOT:      return &pg_types[125];
-               case PG_UNKNOWN:            return &pg_types[126];
-               case PG_UUID:               return &pg_types[127];
-               case PG_VARBIT:             return &pg_types[128];
-               case PG_VARCHAR:            return &pg_types[129];
-               case PG_VOID:               return &pg_types[130];
-               case PG_XID:                return &pg_types[131];
-               case PG_XML:                return &pg_types[132];
+               case PG_RECORDARRAY:        return &pg_types[33];
+               case PG_REFCURSORARRAY:     return &pg_types[34];
+               case PG_REGCLASSARRAY:      return &pg_types[35];
+               case PG_REGCONFIGARRAY:     return &pg_types[36];
+               case PG_REGDICTIONARYARRAY: return &pg_types[37];
+               case PG_REGOPERARRAY:       return &pg_types[38];
+               case PG_REGOPERATORARRAY:   return &pg_types[39];
+               case PG_REGPROCARRAY:       return &pg_types[40];
+               case PG_REGPROCEDUREARRAY:  return &pg_types[41];
+               case PG_REGTYPEARRAY:       return &pg_types[42];
+               case PG_RELTIMEARRAY:       return &pg_types[43];
+               case PG_TEXTARRAY:          return &pg_types[44];
+               case PG_TIDARRAY:           return &pg_types[45];
+               case PG_TIMEARRAY:          return &pg_types[46];
+               case PG_TIMESTAMPARRAY:     return &pg_types[47];
+               case PG_TIMESTAMPTZARRAY:   return &pg_types[48];
+               case PG_TIMETZARRAY:        return &pg_types[49];
+               case PG_TINTERVALARRAY:     return &pg_types[50];
+               case PG_TSQUERYARRAY:       return &pg_types[51];
+               case PG_TSVECTORARRAY:      return &pg_types[52];
+               case PG_TXID_SNAPSHOTARRAY: return &pg_types[53];
+               case PG_UUIDARRAY:          return &pg_types[54];
+               case PG_VARBITARRAY:        return &pg_types[55];
+               case PG_VARCHARARRAY:       return &pg_types[56];
+               case PG_XIDARRAY:           return &pg_types[57];
+               case PG_XMLARRAY:           return &pg_types[58];
+               case PG_ABSTIME:            return &pg_types[59];
+               case PG_ACLITEM:            return &pg_types[60];
+               case PG_ANY:                return &pg_types[61];
+               case PG_ANYARRAY:           return &pg_types[62];
+               case PG_ANYELEMENT:         return &pg_types[63];
+               case PG_ANYENUM:            return &pg_types[64];
+               case PG_ANYNONARRAY:        return &pg_types[65];
+               case PG_BIT:                return &pg_types[66];
+               case PG_BOOL:               return &pg_types[67];
+               case PG_BOX:                return &pg_types[68];
+               case PG_BPCHAR:             return &pg_types[69];
+               case PG_BYTEA:              return &pg_types[70];
+               case PG_CHAR:               return &pg_types[71];
+               case PG_CID:                return &pg_types[72];
+               case PG_CIDR:               return &pg_types[73];
+               case PG_CIRCLE:             return &pg_types[74];
+               case PG_CSTRING:            return &pg_types[75];
+               case PG_DATE:               return &pg_types[76];
+               case PG_FLOAT4:             return &pg_types[77];
+               case PG_FLOAT8:             return &pg_types[78];
+               case PG_GTSVECTOR:          return &pg_types[79];
+               case PG_INET:               return &pg_types[80];
+               case PG_INT2:               return &pg_types[81];
+               case PG_INT2VECTOR:         return &pg_types[82];
+               case PG_INT4:               return &pg_types[83];
+               case PG_INT8:               return &pg_types[84];
+               case PG_INTERNAL:           return &pg_types[85];
+               case PG_INTERVAL:           return &pg_types[86];
+               case PG_LANGUAGE_HANDLER:   return &pg_types[87];
+               case PG_LINE:               return &pg_types[88];
+               case PG_LSEG:               return &pg_types[89];
+               case PG_MACADDR:            return &pg_types[90];
+               case PG_MONEY:              return &pg_types[91];
+               case PG_NAME:               return &pg_types[92];
+               case PG_NUMERIC:            return &pg_types[93];
+               case PG_OID:                return &pg_types[94];
+               case PG_OIDVECTOR:          return &pg_types[95];
+               case PG_OPAQUE:             return &pg_types[96];
+               case PG_PATH:               return &pg_types[97];
+               case PG_PG_ATTRIBUTE:       return &pg_types[98];
+               case PG_PG_CLASS:           return &pg_types[99];
+               case PG_PG_PROC:            return &pg_types[100];
+               case PG_PG_TYPE:            return &pg_types[101];
+               case PG_POINT:              return &pg_types[102];
+               case PG_POLYGON:            return &pg_types[103];
+               case PG_RECORD:             return &pg_types[104];
+               case PG_REFCURSOR:          return &pg_types[105];
+               case PG_REGCLASS:           return &pg_types[106];
+               case PG_REGCONFIG:          return &pg_types[107];
+               case PG_REGDICTIONARY:      return &pg_types[108];
+               case PG_REGOPER:            return &pg_types[109];
+               case PG_REGOPERATOR:        return &pg_types[110];
+               case PG_REGPROC:            return &pg_types[111];
+               case PG_REGPROCEDURE:       return &pg_types[112];
+               case PG_REGTYPE:            return &pg_types[113];
+               case PG_RELTIME:            return &pg_types[114];
+               case PG_SMGR:               return &pg_types[115];
+               case PG_TEXT:               return &pg_types[116];
+               case PG_TID:                return &pg_types[117];
+               case PG_TIME:               return &pg_types[118];
+               case PG_TIMESTAMP:          return &pg_types[119];
+               case PG_TIMESTAMPTZ:        return &pg_types[120];
+               case PG_TIMETZ:             return &pg_types[121];
+               case PG_TINTERVAL:          return &pg_types[122];
+               case PG_TRIGGER:            return &pg_types[123];
+               case PG_TSQUERY:            return &pg_types[124];
+               case PG_TSVECTOR:           return &pg_types[125];
+               case PG_TXID_SNAPSHOT:      return &pg_types[126];
+               case PG_UNKNOWN:            return &pg_types[127];
+               case PG_UUID:               return &pg_types[128];
+               case PG_VARBIT:             return &pg_types[129];
+               case PG_VARCHAR:            return &pg_types[130];
+               case PG_VOID:               return &pg_types[131];
+               case PG_XID:                return &pg_types[132];
+               case PG_XML:                return &pg_types[133];
                default: return NULL;
        }
 }
 
 static sql_type_info_t sql_types[] = {
- {SQL_BOOLEAN,"SQL_BOOLEAN",1,',', "none", quote_bool, dequote_bool, 
{PG_BOOL}, 0},
+ {SQL_BOOLEAN,"SQL_BOOLEAN",1,',', "none", quote_bool, dequote_bool, 
{PG_BOOL}, 3},
  {SQL_CHAR,"SQL_CHAR",1,',', "none", quote_string, dequote_char, {PG_BPCHAR}, 
0},
  {SQL_VARBINARY,"SQL_VARBINARY",1,',', "none", quote_bytea, dequote_bytea, 
{PG_BYTEA}, 0},
  {SQL_CHAR,"SQL_CHAR",1,',', "none", quote_string, dequote_char, {PG_CHAR}, 0},
@@ -368,6 +370,7 @@
 -d $arg or die qq{Sorry, but "$arg" is not a directory!\n};
 
 my $file = "$arg/src/include/catalog/pg_type.h";
+my $typefile = $file;
 
 open my $fh, '<', $file or die qq{Could not open file "$file": $!\n};
 my $maxlen = 1;
@@ -622,7 +625,7 @@
        chomp;
        my ($name,$q,$dq,$sql,$sqlc,$svtype) = split / +/ => $_;
        if (!exists $pgtype{$name}) {
-               die qq{Type ($name) was not found in source file!\n};
+               die qq{Type ($name) was not found in source file $typefile!\n};
        }
        $pgtype{$name}{quote}   = $q;
        $pgtype{$name}{dequote} = $dq;
@@ -729,7 +732,7 @@
 name     null_quote    null_dequote    SQL_VARCHAR               0  0 ## XXX 
Wrong
 
 ## Boolean
-bool     quote_bool    dequote_bool    SQL_BOOLEAN               1  0
+bool     quote_bool    dequote_bool    SQL_BOOLEAN               1  3
 
 ## Geometric types
 point    quote_geom    dequote_string  0                         0  0

Modified: DBD-Pg/trunk/types.h
==============================================================================
--- DBD-Pg/trunk/types.h        (original)
+++ DBD-Pg/trunk/types.h        Tue Mar 10 15:49:27 2009
@@ -128,6 +128,7 @@
 #define          PG_PATHARRAY  1019
 #define         PG_POINTARRAY  1017
 #define       PG_POLYGONARRAY  1027
+#define        PG_RECORDARRAY  2287
 #define     PG_REFCURSORARRAY  2201
 #define      PG_REGCLASSARRAY  2210
 #define     PG_REGCONFIGARRAY  3735

Reply via email to