Tim Bunce wrote:
>
> I'd rather not go that way (I don't like solutions that require
> mangling the sql in odd ways).
Hmm, ok then.
> I think I'd rather optionally ignore placeholders named ':old' and ':new'.
> Also, I think there was a patch floating around that optionally
> disabled :foo style placeholders. That would also suffice.
Ok, here it is, it ignores and passes through stuff that starts out like
a : placeholder and ends with a ., as far as I know there is no use for
a dot right after a placeholder so this ought to be 100% safe and
transparent.
This means that there is no need to have :: in the SAPDB code, whee!
--- orig/DBD-ODBC-0.29/dbdimp.c Thu Nov 8 10:48:01 2001
+++ DBD-ODBC-0.29/dbdimp.c Tue Dec 4 19:51:27 2001
@@ -183,16 +183,15 @@
* and level 2+ just to indicate that we are trying SQLConnect.
*/
if (!SQL_ok(rc)) {
+ if (DBIS->debug > 3) {
#ifdef DBD_ODBC_NO_SQLDRIVERCONNECT
PerlIO_printf(DBILOGFP, "SQLDriverConnect unsupported.\n");
#else
- if (DBIS->debug > 3) {
PerlIO_printf(DBILOGFP, "SQLDriverConnect failed:\n");
AllODBCErrors(imp_dbh->henv, imp_dbh->hdbc, 0, 1);
- }
-
#endif /* DriverConnect supported */
-
+ }
+
if (DBIS->debug >= 2)
PerlIO_printf(DBILOGFP, "SQLConnect '%s', '%s', '%s'\n",
dbname, uid, pwd);
@@ -488,18 +487,27 @@
while(isDIGIT(*src))
*p++ = *src++;
*p = 0;
+
style = 1;
}
else if (isALNUM(*src)) { /* ':foo' */
char *p = name;
- *dest++ = '?';
while(isALNUM(*src)) /* includes '_' */
*p++ = *src++;
*p = 0;
+
+ if (*src == '.') { /* Ignore :new.field, for sapdb triggers
*/
+ *dest++ = ':';
+ strcpy(dest, name);
+ dest += strlen(name);
+ continue;
+ }
+
+ *dest++ = '?';
style = 2;
}
--
Regards Flemming Frandsen aka. Dion/Swamp http://dion.swamp.dk