Database Access

A feature of Apache 2 known to few is mod_dbd. Using that you can configure a SQL database connection within the Apache.conf and use that within all your Apache modules/handlers. Apache does proper and reliable pooling and connection management.

2019-08-14: Homebrew has removed support for apr-util DBD drivers except SQLite: PR #31799. To fix that, you can manually install apr-util with the --with-pgsql option (or any other driver you want to build). Then just hack-link the driver you want into the Homebrew install, e.g.:

pushd /usr/local//opt/apr-util/libexec/lib/apr-util-1/
ln -s /usr/local/apr/lib/apr-util-1/apr_dbd_pgsql*.so .

ApacheExpress comes with the mod_dbd middleware which hooks up the Swift ZeeQL database access toolkit with Apache. ZeeQL provides convenient low level database access as well as high level object relation mapping feature. Database schemas can be provided directly from within Swift code, using CoreData models, and you can even automatically generate them from existing databases using ZeeQL's extensive schema reflection feature.

WORK IN PROGRESS, STAY TUNED

mod_dbd Configuration

To access a database from within Apache the database connection parameters need to be configured in the Apache configuration. Depending on how the ApacheExpress application was prepared, that may be already setup.

If not, the easiest way to do this is to use a mod_swift configuration template. If there is none, simply create a file called $module-template.conf, e.g. mods_hellodb-template.conf. Example:

LoadModule dbd_module %APACHE_MODULE_DIR%/mod_dbd.so

<IfModule dbd_module>
  DBDriver  sqlite3
  DBDParams "%SRCROOT%/data/MyDatabase.sqlite3"
</IfModule>

PostgreSQL example:

<IfModule dbd_module>
  DBDriver  pgsql
  DBDParams "host=127.0.0.1 port=5432 dbname=OGo user=OGo password=OGo"

  # Connection Pool Management
  DBDMin      1
  DBDKeep     2
  DBDMax     10
  DBDExptime 60
</IfModule>

If you want to run PostgreSQL on Homebrew, make sure you have it installed, e.g.:

brew install apr-util --with-postgresql --with-sqlite

WORK IN PROGRESS, STAY TUNED