php / php-src

The PHP Interpreter
https://www.php.net
Other
38.17k stars 7.75k forks source link

Look into supported driver managers for ODBC extension and how we handle them #15630

Open NattyNarwhal opened 2 months ago

NattyNarwhal commented 2 months ago

Currently, we have a different set of supported driver managers on Unix platforms between the two ODBC extensions. On Windows, they just use the system driver manager.

PDO_ODBC supports:

Procedural supports (those flags are out of date, birdstep and openlink are gone at least, should file doc-en bug):

They also handle driver (manager) variance differently; procedural has a lot more ifdef for using things directly.

A common pattern I noticed is procedural has grown many special case build and ifdef options for using an ODBC driver directly. I'm not sure if this is something we want to encourage, since a driver manager has a lot of benefits (tracing, runtime switching of drivers, etc), though linking directly to a driver might be useful with those embedded databases. We could limit support for linking with a driver directly to only the generic case; this would put PDO and procedural at parity and simplify documentation and build system. I'm also unsure of how many of these are still in popular use to justify special casing them.

tl;dr: For 8.5/9.0, we should consider probably paring down the supported libraries to use ODBC on Unix with down to unixODBC, iODBC, and specifying an ODBC driver manually. I'd like to hear from users of drivers too.

cmb69 commented 2 months ago

I don't really know, but I guess we have a similar issue to #15176 here; apparently, it has just been forgotten to remove some out-dated stuff. Especially that ext/odbc supports way more options that ext/pdo_odbc may hint at what may be no longer needed nowadays.

  • Adabas D directly (some German RDBMS?)

See https://en.wikipedia.org/wiki/Adabas_D (not to be confused with Adabas, though).

  • SAP DB directly (does this still exist/rebranded? results for HANA massively overshadow this)

I think this is now https://en.wikipedia.org/wiki/MaxDB, which once was Adabas D, but apparently they're now different products.

NattyNarwhal commented 2 months ago

I'm going through the ifdefs in php_odbc.c, and there's a surprising amount of workarounds for i.e. Solid et al., but also possibly standard functionality (i.e. timestamp type?) under specific drivers. You wouldn't be getting those though, if you were using a generic driver manager.

I'll come up with a draft PR for next release at least.