1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-02-02 11:09:29 +00:00

Fix critical compatibility issue which breaks INSERTs in the new version of

the module it is used with servers that implement 3.0 version of the postgres
protocol, particularly 7.4.7 is affected.

Bump PORTREVISION.

Obtained from:	DBD::Pg CVS
References:	https://rt.cpan.org/NoAuth/Bug.html?id=11744
		http://gborg.postgresql.org/project/dbdpg/cvs/diff.php/dbdpg/dbdimp.c?r1=1.101&r2=1.102&ty=h&Horde=12014eaeef6c96c2fead3bcfa53ac92e
This commit is contained in:
Maxim Sobolev 2005-03-18 13:21:41 +00:00
parent 44ff373a2a
commit 47b4fe2e10
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=131562
4 changed files with 134 additions and 0 deletions

View File

@ -7,6 +7,7 @@
PORTNAME= DBD-Pg
PORTVERSION= 1.40
PORTREVISION= 1
CATEGORIES= databases perl5
MASTER_SITES= ${MASTER_SITE_PERL_CPAN}
MASTER_SITE_SUBDIR= DBD

View File

@ -0,0 +1,66 @@
===================================================================
RCS file: /usr/local/cvsroot/dbdpg/dbdpg/dbdimp.c,v
retrieving revision 1.101
retrieving revision 1.102
diff -p --unified=3 -r1.101 -r1.102
--- dbdimp.c 2005/03/11 15:37:31 1.101
+++ dbdimp.c 2005/03/15 01:51:13 1.102
@@ -1034,6 +1019,7 @@ void dbd_st_split_statement (sth, imp_st
newph->value = NULL;
newph->quoted = NULL;
newph->referenced = 0;
+ newph->defaultval = 1;
New(0, newph->fooname, newsize+1, char); /* freed in dbd_st_destroy */
if (!newph->fooname)
croak("No memory");
@@ -1124,6 +1110,7 @@ void dbd_st_split_statement (sth, imp_st
newph->value = NULL;
newph->quoted = NULL;
newph->referenced = 0;
+ newph->defaultval = 1;
newph->fooname = NULL;
/* Let the correct segment point to it */
while (!currseg->placeholder)
@@ -1269,7 +1256,7 @@ int dbd_st_prepare_statement (sth, imp_s
params = imp_sth->numphs;
paramTypes = calloc(imp_sth->numphs, sizeof(*paramTypes));
for (x=0,currph=imp_sth->ph; NULL != currph; currph=currph->nextph) {
- paramTypes[x++] = currph->bind_type->type_id;
+ paramTypes[x++] = currph->defaultval ? 0 : currph->bind_type->type_id;
}
}
result = PQprepare(imp_dbh->conn, imp_sth->prepare_name, statement, params, paramTypes);
@@ -1424,12 +1410,14 @@ int dbd_bind_ph (sth, imp_sth, ph_name,
}
}
else if (NULL == currph->bind_type) { /* "sticky" data type */
+ /* This is the default type, but we will honor defaultval if we can */
currph->bind_type = pg_type_data(VARCHAROID);
if (!currph->bind_type)
croak("Default type is bad!!!!???");
}
if (pg_type || sql_type) {
+ currph->defaultval = 0;
/* Possible re-prepare, depending on whether the type name also changes */
if (imp_sth->prepared_by_us && NULL != imp_sth->prepare_name)
reprepare=1;
@@ -1685,7 +1673,7 @@ int dbd_st_execute (sth, imp_sth) /* <=
/* Populate paramTypes */
paramTypes = calloc(imp_sth->numphs, sizeof(*paramTypes));
for (x=0,currph=imp_sth->ph; NULL != currph; currph=currph->nextph) {
- paramTypes[x++] = currph->bind_type->type_id;
+ paramTypes[x++] = currph->defaultval ? 0 : currph->bind_type->type_id;
}
if (dbis->debug >= 10) {
--- dbdimp.h 2005/03/18 13:10:05 1.1
+++ dbdimp.h 2005/03/18 13:10:32
@@ -59,6 +59,7 @@
char *quoted; /* quoted version of the value, for PQexec only */
STRLEN quotedlen; /* length of the quoted value */
bool referenced; /* used for PREPARE AS construction */
+ bool defaultval; /* is it using a generic 'default' value? */
sql_type_info_t* bind_type; /* type information for this placeholder */
struct ph_st *nextph; /* more linked list goodness */
};

View File

@ -7,6 +7,7 @@
PORTNAME= DBD-Pg
PORTVERSION= 1.40
PORTREVISION= 1
CATEGORIES= databases perl5
MASTER_SITES= ${MASTER_SITE_PERL_CPAN}
MASTER_SITE_SUBDIR= DBD

View File

@ -0,0 +1,66 @@
===================================================================
RCS file: /usr/local/cvsroot/dbdpg/dbdpg/dbdimp.c,v
retrieving revision 1.101
retrieving revision 1.102
diff -p --unified=3 -r1.101 -r1.102
--- dbdimp.c 2005/03/11 15:37:31 1.101
+++ dbdimp.c 2005/03/15 01:51:13 1.102
@@ -1034,6 +1019,7 @@ void dbd_st_split_statement (sth, imp_st
newph->value = NULL;
newph->quoted = NULL;
newph->referenced = 0;
+ newph->defaultval = 1;
New(0, newph->fooname, newsize+1, char); /* freed in dbd_st_destroy */
if (!newph->fooname)
croak("No memory");
@@ -1124,6 +1110,7 @@ void dbd_st_split_statement (sth, imp_st
newph->value = NULL;
newph->quoted = NULL;
newph->referenced = 0;
+ newph->defaultval = 1;
newph->fooname = NULL;
/* Let the correct segment point to it */
while (!currseg->placeholder)
@@ -1269,7 +1256,7 @@ int dbd_st_prepare_statement (sth, imp_s
params = imp_sth->numphs;
paramTypes = calloc(imp_sth->numphs, sizeof(*paramTypes));
for (x=0,currph=imp_sth->ph; NULL != currph; currph=currph->nextph) {
- paramTypes[x++] = currph->bind_type->type_id;
+ paramTypes[x++] = currph->defaultval ? 0 : currph->bind_type->type_id;
}
}
result = PQprepare(imp_dbh->conn, imp_sth->prepare_name, statement, params, paramTypes);
@@ -1424,12 +1410,14 @@ int dbd_bind_ph (sth, imp_sth, ph_name,
}
}
else if (NULL == currph->bind_type) { /* "sticky" data type */
+ /* This is the default type, but we will honor defaultval if we can */
currph->bind_type = pg_type_data(VARCHAROID);
if (!currph->bind_type)
croak("Default type is bad!!!!???");
}
if (pg_type || sql_type) {
+ currph->defaultval = 0;
/* Possible re-prepare, depending on whether the type name also changes */
if (imp_sth->prepared_by_us && NULL != imp_sth->prepare_name)
reprepare=1;
@@ -1685,7 +1673,7 @@ int dbd_st_execute (sth, imp_sth) /* <=
/* Populate paramTypes */
paramTypes = calloc(imp_sth->numphs, sizeof(*paramTypes));
for (x=0,currph=imp_sth->ph; NULL != currph; currph=currph->nextph) {
- paramTypes[x++] = currph->bind_type->type_id;
+ paramTypes[x++] = currph->defaultval ? 0 : currph->bind_type->type_id;
}
if (dbis->debug >= 10) {
--- dbdimp.h 2005/03/18 13:10:05 1.1
+++ dbdimp.h 2005/03/18 13:10:32
@@ -59,6 +59,7 @@
char *quoted; /* quoted version of the value, for PQexec only */
STRLEN quotedlen; /* length of the quoted value */
bool referenced; /* used for PREPARE AS construction */
+ bool defaultval; /* is it using a generic 'default' value? */
sql_type_info_t* bind_type; /* type information for this placeholder */
struct ph_st *nextph; /* more linked list goodness */
};