Hi Chris, Cc-ing Internals
> In case you don't log IRC chats, below are some comments from today. > The intent is to prevent externally maintained PDO drivers (e.g. IBM's) > from being used with PDO unless they have been updated to any > new API changes. > > I believe simply updating PDO_DRIVER_API is not sufficient. Here's a proposal: http://www.beccati.com/misc/php/pdo_streams_v4.diff The idea is to add a new #define PDO_DRIVER_API_CHECK which is verified at compile time by the C preprocessor. If its value doesn't match the main PDO_DRIVER_API an #error is triggered, e.g: In file included from /tmp/PDO_PGSQL-1.0.2/pdo_pgsql.c:29: /usr/local/include/php/ext/pdo/php_pdo_driver.h:50:2: error: #error "PDO driver not compatible with the PDO API version in use" That said, being able to change a function signature made it very easy to cleanly fix the bug I was trying to squash (i.e. PDO not able to distinguish between stream and empty string LOBs returned by the driver because both have 0 as len parameter). As a result PDO now now returns all LOBs as streams, unless instructed to do otherwise (STRINGIFY). Previously only non-empty LOBs were streams: I know that the change breaks BC but seems more consistent to me. If it's not desirable most likely I'd need some help with streams... IRC conversation excerpt follows: > ---------------- > > cjorcl: Spritz, johannes_ the pdo api version for PDO_DRIVER_API check > seems to be a binary runtime check. The macro is only defined > in PDO and is used in all drivers built against that PDO code. > This doesn't guarantee the driver code was designed for that > PDO API. Perhaps pdo_driver_t can have a field added at the > end. Each driver would need to set this to a driver-specific > hard coded value equal to the value of PDO_DRIVER_API. Then > php_pdo_register_driver could verify the value matches the API > version. This is still a runtime check, but stops any > externally maintained driver from being used. Also a compile > time check could be added to drivers under the control of the > PHP community. > > johannes_: cjorcl: jut make sure that API changes are backwards > compatible or break compiling :-p > > cjorcl: johannes_, that's why the pdo_driver_t field would beed to be > added at the end fo the struct > > johannes_: and making it part of the structure is bad if you have lot > of additions not breaking BC, it wuld have to be a callback > function > > cjorcl: johannes_, adding a register time callback is a bigger task - > but would break compilation compatibility nicely for > non-updated drivers > > Cheers -- Matteo Beccati OpenX - http://www.openx.org -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php