開発

このドキュメントではPGroongaの開発方法を説明します。

ビルド

PostgreSQLもPGroonaもどちらもデバッグオプション付きでビルドすることをオススメします。

Groongaもデバッグオプション(Groongaのconfigureには--enable-debugオプションがある)でビルドした方が便利なことが多いです。Groongaのパッケージを使う場合は、開発用パッケージをインストールする必要があります。Debian系のディストリビューションではlibgroonga-devで、Red Hat系のディストリビューションではgroonga-develです。

PostgreSQLのビルド方法

PostgreSQLのサイトからソースをダウンロードします。以下はPostgreSQL 9.6.4のソースをダウンロードして展開するコマンドラインです。

% wget https://ftp.postgresql.org/pub/source/v9.6.4/postgresql-9.6.4.tar.bz2
% tar xf postgresql-9.6.4.tar.bz2
% cd postgresql-9.6.4

CFLAGS="-O0 -g3"引数付きでconfigureを実行します。これでデバッグビルドになります。--prefix=/tmp/localは指定してもしなくてもどちらでもよいです。

% ./configure CFLAGS="-O0 -g3" --prefix=/tmp/local

PostgreSQLをビルドしてインストールします。

% make -j8 > /dev/null
% make install > /dev/null

PostgreSQLを初期化して実行します。

% mkdir -p /tmp/local/var/lib
% /tmp/local/bin/initdb --locale C --encoding UTF-8 -D /tmp/local/var/lib/postgresql
% /tmp/local/bin/postgres -D /tmp/local/var/lib/postgresql

以下のワンライナーはPostgreSQL関連のすべてのデータをリセットするときに便利です。このワンライナーをシェルのヒストリーに入れておけば、すぐにこのワンライナーを再実行できます。

% rm -rf /tmp/local/var/lib/postgresql && \
    mkdir -p /tmp/local/var/lib/postgresql &&
    /tmp/local/bin/initdb \
      --locale C \
      --encoding UTF-8 \
      -D /tmp/local/var/lib/postgresql && \
   /tmp/local/bin/postgres -D /tmp/local/var/lib/postgresql

PGroongaのビルド・テスト方法

リリース版のPGroongaではなく最新のPGroongaを使うことをオススメします。以下は最新のPGroongaのソースをクローンするコマンドラインです。

% git clone git@github.com:pgroonga/pgroonga.git
% cd pgroonga

PGroongaのテストは2種類あります。

通常、前者だけを使います。test/run-sql-test.shは前者用のテストランナーです。このスクリプトはPGroongaをビルド・インストールし、続けてSQLベースのリグレッションテストも実行します。PATH=/tmp/local/bin:$PATHが必要なのはPostgreSQLを--prefix=/tmp/localオプションを指定してビルドしたからです。この場合はpg_config/tmp/local/binにあります。

% PATH=/tmp/local/bin:$PATH test/run-sql-test.sh

テスト

新しい機能を実装した時・バグを直した時は、リグレッションテストを作ります。

概要

リグレッションテストはsql/ディレクトリー以下にあります。例えば、sql/full-text-search/text/single/match-v2/indexscan.sqlは次のケース用のテストです。

出力の期待値はexpected/ディレクトリー以下にあります。ディレクトリー構造はsql/と同じですが、拡張子は.outになります。たとえば、expected/full-text-search/text/single/match-v2/indexscan.outとなります。

リグレッションテストの作成方法

新しいファイルをsql/以下に作り、SQLで作ったテストシナリオをそのファイルに書きます。それからこのファイルを次のように実行します。

% PATH=/tmp/local/bin:$PATH test/run-sql-test.sh sql/.../XXX.sql

この新しく作ったテストは失敗します。test/run-sql-test.shはこのテストシナリオの出力を表示します。出力が正しければ、出力をコピーしてexpected/.../XXX.outに貼ります。

expected/.../XXX.outを更新してテストがパスするようになったかを確認してください。

% PATH=/tmp/local/bin:$PATH test/run-sql-test.sh sql/.../XXX.sql