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