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, greg-738XdyZ4GzZWk0Htik3J/[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.