dba_open
データベースをオープンする
&reftitle.description;
Dba\Connectionfalsedba_open
stringpath
stringmode
stringnullhandler&null;
intpermission0644
intmap_size0
intnullflags&null;
dba_open は、handler を用いて
mode を指定し、path
にデータベースインスタンスを生成します。
&reftitle.parameters;
path
通常のファイルシステムのパス。
mode
既存のデータベースへの読み込みアクセスには "r"、読込み/書き込み
アクセスには "w" を指定します。
読み込み/書き込みアクセスおよび存在しない場合にデータベースの作成を
するには "c" を、そして作成、削除、読込み/書き込みアクセス用には
"n" を指定します。データベースは BTree モードで作られます。
その他のモード (Hash や Queue) には対応していません。
さらに、次の文字でデータベースのロック方法を指定することができます。
.lck でデータベースをロックする場合には "l"、
データベースファイル自体をロックする場合は "d" を使用してください。
アプリケーション全体で統一した方法を用いることが重要です。
アクセスのテストを行う際にロックのために待ちたくない場合、"t" を
3 番目の文字に追加することができます。明らかにデータベースのロックが
不要な場合には、"l" や "d" の代わりに "-" を使用してロックを
行わないことができます。"d"、"l" または "-" のどれも指定されない場合、
"d"が指定されたものとしてデータベースファイルをロックします。
ひとつのデータベースファイルに同時に書き込めるのは、ひとつだけです。
dba を Web サーバーで使用している際に複数のリクエストが書き込み処理を
行う必要がある場合、他の書き込みが終わってからでないと次の書き込みを
行うことができません。また、書き込み中に読み込むことはできません。
dba 拡張モジュールは、このようなことを防止するためにロックを使用します。
以下の表を参照ください:
DBA のロック処理
既にオープンしているデータベース
mode = "rl"
mode = "rlt"
mode = "wl"
mode = "wlt"
mode = "rd"
mode = "rdt"
mode = "wd"
mode = "wdt"
not open
ok
ok
ok
ok
ok
ok
ok
ok
mode = "rl"
ok
ok
wait
false
illegal
illegal
illegal
illegal
mode = "wl"
wait
false
wait
false
illegal
illegal
illegal
illegal
mode = "rd"
illegal
illegal
illegal
illegal
ok
ok
wait
false
mode = "wd"
illegal
illegal
illegal
illegal
wait
false
wait
false
ok: 2 番目のコールは成功します。
wait: 2 番目のコールは、最初のデータベースで dba_close がコールされるまで待ちます。
false: 2 番目のコールは、false を返します。
illegal: mode パラメータで "l" および "d" を同時に使用することはできません。
handler
path にアクセスする際に使用する
ハンドラの名前。
dba_open に指定したすべてのオプションが渡され、
その機能を用いることができます。
handler が &null; の場合、
デフォルトのハンドラが使われます。
permission
ドライバに渡されるオプションの整数パラメータ。
chmod の
permissions を同じ意味です。
デフォルトは 0644 です。
db1, db2, db3,
db4, dbm, gdbm,
ndbm, lmdb ドライバが
permission パラメータをサポートしています。
map_size
ドライバに渡されるオプションの整数パラメータ。
OS のページサイズの倍数を指定すべきです。
ゼロを指定すると、デフォルトのマップサイズが使われます。
lmdb ドライバだけが
map_size パラメータを受け入れます。
flags
データベースドライバに渡すフラグ。
&null; の場合、
デフォルトのフラグが渡されます。
現状、LMDB ドライバだけが
DBA_LMDB_USE_SUB_DIR と
DBA_LMDB_NO_SUB_DIR をサポートしています。
&reftitle.returnvalues;
成功した場合に Dba\Connection インスタンスを返します。
&return.falseforfailure;。
&reftitle.errors;
handler
に &null; が指定されているのにデフォルトのハンドラが存在しない場合、
E_WARNING レベルのエラーが発生し、
&false; が返されます。
&reftitle.changelog;
&Version;
&Description;
8.4.0
Dba\Connection インスタンスを返すようになりました。
これより前のバージョンでは、&resource; を返していました。
8.2.0
flags が追加されました。
8.2.0
handler は、nullable になりました。
7.3.14, 7.4.2
lmdb ドライバは、
map_size パラメータを追加でサポートしました。
&reftitle.seealso;
dba_popen
dba_close