Postgres Extension for HipHop
This is an implementation of the
pdo_pgsql PHP extensions for
To run, this extension only requires the HipHop VM itself and the
library distributed with Postgres. Building it requires the HHVM header files,
the HHVM CMake files and the
libpq header files. These can usually be
installed with the
Pre-built versions of this extension are available in the releases branch.
Building & Installation
Building requires the
libpq-dev packages to be installed. Once
they have been installed, the following commands will build the extensions.
$ cd /path/to/extension $ hphpize $ cmake . $ make
This will produce a
pgsql.so file, the dynamically-loadable extension.
Copy this file to
To enable the extension, you need to have the following section in your hhvm config file:
extension_dir = /etc/hhvm hhvm.extensions[pgsql] = pgsql.so
This will cause the extension to be loaded when the virtual machine starts up.
Hack Friendly Mode
If you are using Hack, then you can use the provided
pgsql.hhi file to type
the functions. There is also a compile-time option that can be passed to cmake
that makes some minor adjustments to the API to make the Hack type checker more
useful with them. This mostly consists of altering functions that would normally
FALSE on error and making them return
null instead. This takes
advantage of the nullable types in Hack.
To enable Hack-friendly mode use this command instead of the
cmake one above:
$ cmake -DHACK_FRIENDLY=ON .
Differences from Zend
There are a few differences from the standard Zend implementation.
- The connection resource is not optional.
- The following functions are not implemented for various reasons:
There is a connection pool you can use with the
$connection_type parameter is ignored for both
There are a few new function:
pg_connection_pool_stat: It gives some information, eg. count of connections, free connections, etc.
pg_connection_pool_sweep_free: Closing all unused connection in all pool.
pg_pconnect function creates a different connection pool for each
pg_fetch_object function only supports returning
Otherwise, all functionality is (or should be) the same as the Zend implementation.
As always, bugs should be reported to the issue tracker and patches are very welcome.