[svn:dbi] r15061 - dbi/trunk

[email protected] Mon, 2 Jan 2012 06:59:19 -0800 (PST)
Newsgroups perl.dbi.changes
Message-ID <[email protected]>
Author: timbo
Date: Mon Jan  2 06:59:18 2012
New Revision: 15061

Modified:
   dbi/trunk/Changes
   dbi/trunk/Driver_xst.h
   dbi/trunk/dbixs_rev.h

Log:
Clear ParamValues on bind_param param count error RT66127

Modified: dbi/trunk/Changes
==============================================================================
--- dbi/trunk/Changes	(original)
+++ dbi/trunk/Changes	Mon Jan  2 06:59:18 2012
@@ -19,6 +19,7 @@
   Enhanced and standardized driver trace level mechanism (Tim Bunce)
   Removed old code that was an inneffective attempt to detect
     people doing DBI->{Attrib}.
+  Clear ParamValues on bind_param param count error RT66127 (Tim Bunce)
 
   Added pod for default_user to DBI::DBD (Martin J. Evans)
   Added CON, ENC and DBD trace flags and extended 09trace.t (Martin J. Evans)

Modified: dbi/trunk/Driver_xst.h
==============================================================================
--- dbi/trunk/Driver_xst.h	(original)
+++ dbi/trunk/Driver_xst.h	Mon Jan  2 06:59:18 2012
@@ -61,10 +61,15 @@
 	&& DBIc_NUM_PARAMS(imp_sth) != DBIc_NUM_PARAMS_AT_EXECUTE
     ) {
 	char errmsg[99];
+        /* clear any previous ParamValues before error is generated */
+        SV **svp = hv_fetch((HV*)DBIc_MY_H(imp_sth),"ParamValues",11,FALSE));
+        if (svp && SvROK(*svp) && SvTYPE(SvRV(*svp)) == SVt_PVHV) {
+            HV *hv = (HV*)SvRV(*svp);
+            hv_clear(*svp);
+        }
 	sprintf(errmsg,"called with %d bind variables when %d are needed",
 		(int)items-1, DBIc_NUM_PARAMS(imp_sth));
-	sv_setpv(DBIc_ERRSTR(imp_sth), errmsg);
-	sv_setiv(DBIc_ERR(imp_sth), (IV)-1);
+        DBIh_SET_ERR_CHAR(sth, imp_sth, "-1", -1, errmsg, Nullch, Nullch);
 	return 0;
     }
     idx = sv_2mortal(newSViv(0));
@@ -90,8 +95,7 @@
     if (SvOK(slice)) {  /* should never get here */
 	char errmsg[99];
 	sprintf(errmsg,"slice param not supported by XS version of fetchall_arrayref");
-	sv_setpv(DBIc_ERRSTR(imp_sth), errmsg);
-	sv_setiv(DBIc_ERR(imp_sth), (IV)-1);
+        DBIh_SET_ERR_CHAR(sth, imp_sth, "-1", -1, errmsg, Nullch, Nullch);
 	return &PL_sv_undef;
     }
     else {

Modified: dbi/trunk/dbixs_rev.h
==============================================================================
--- dbi/trunk/dbixs_rev.h	(original)
+++ dbi/trunk/dbixs_rev.h	Mon Jan  2 06:59:18 2012
@@ -1,3 +1,4 @@
-/* Tue Feb 22 17:17:57 2011 */
+/* Mon Jan  2 14:56:41 2012 */
+/* Mixed revision working copy (15055M:15060) */
 /* Code modified since last checkin */
-#define DBIXS_REVISION 14701
+#define DBIXS_REVISION 15055