モジュール database

データベースを操作する述語です

目次

述語


Top of this page Contents Index of this package LiLFeS Documents LiLFeS Home Page Tsujii laboratory

述語

db_open_env/3

書式db_open_env(+Home, +Info, -Handle) db_config(+Info)
引数
+Homestring 環境のディレクトリ名
+Info'ldbm:info_env'環境に対する設定
-Handleこの環境に対するハンドル
+Info'ldbm:info_env'環境に対する設定
注意Info は下記の素性構造であることが想定されています.

(ldbm:info_env&
ldbm:mode\ +Mode& (オプション)
ldbm:bdbm_page_size\ +Pagesize& (オプション)
ldbm:bdbm_cache_size\ +Cachesize& (オプション)
ldbm:flags\ +Flags)

+Mode:integerこの環境に対応するディレクトリのパーミッション(オプション、デフォルトはユーザー指定のファイルパーミッション)
+Pagesize:integerこの環境の中で開かれるファイルのBerkeley DBのページサイズ (オプション、デフォルトは1024)
+Cachesize:integerこの環境の中で開かれるファイルのBerkeley DBのキャッシュサイズ (オプション, デフォルトは 32768)
+Flags:list of stringBerkeley DBに渡すオプション。普通は["CREATE", "INIT_MPOOL", "PRIVATE"]を指定しておけばよい。これらをリスト形式で指定します。環境を指定せずにファイルを開いた場合にはデフォルト環境が生成されますが、そのデフォルト環境は["CREATE", "INIT_MPOOL", "PRIVATE"]が指定されています。
LiLDBM 環境をオープンします。(今のところは必要のない機能。将来マルチユーザー処理、トランザクション処理の機能が導入された時に必要になる。)
> :- db_open_env("myenv", (ldbm:bdbm_page_size\ 1024 &
 ldbm:bdbm_cache_size\ 32768 &
 ldbm:flags\ ["CREATE", "INIT_MPOOL", "PRIVATE"]), $H).

db_open/4

書式db_open(+Pred) db_open(+File, +Info, +Pred) db_open(+Env, +file, +Info, +Pred)
引数
+Predpred
+Filestring ファイル名.
+Infoldbminfo_db : DBの設定
+Predpred
+Envldbmhandle_env : ファイルを開く場合の環境を指定します.
+Infoldbminfo_db : DBの設定
+Predpred
注意配列名は、予め、述語(pred型の subtype)として定義されている必要があります。また、配列名と ( の間には空白を置くことはできません。 Predの表記方法 :
任意の次元のキーの定義, 任意の数のデータの定義をカンマで区切って列挙します。但し、配列は述語として扱われるため、合計の引数は15個までになります。キーには次の6種類があります.
key_integer整数のキー。素性 ARRAY_BASE\(添字の始まりの数), ARRAY_SIZE\(添字の数) を必ず指定すること。
key_inthash整数ハッシュのキー。素性 ARRAY_SIZE\ を指定することができる.
key_float floatの実数のキー
key_string文字列のキー。連想配列のように使える。ARRAY_SIZE\ を指定することができる。
key_type型のキー
key_fs素性構造のキー。連想配列のように使える。ARRAY_SIZE\ を指定することができる。
 また、データには、次の5種類があります。
array_value任意の素性構造
array_value_integer整数値
array_value_floatfloatの実数値
array_value_string文字列
array_value_type
Infoは下記の素性構造であることが想定されています.

(ldbm:info_db&
ldbm:mode\ +Mode& (オプション)
ldbm:flags\ +Flags& (オプション)
ldbm:type\ +Type& (オプション)
ldbm:cache_size\ +Cache (オプション))

+Mode:integerこの環境に対応するファイルのパーミッション(オプション、デフォルトはユーザー指定のファイルパーミッション)
+Type: string ファイルのデータ構造のタイプを指定。ハッシュ("HASH")かB+Tree("BTREE")が選べる。(オプション、デフォルトは"BTREE")
+Flags: list of string Berkeley DBにわたすオプション。普通は"CREATE"だけ指定しておけばよい。"CREATE"(ファイルが存在しない場合はファイルを作成。存在しない場合はファイルをただ開く)、"DIRTY_READ"(??)、"EXCL"(??)、"NOMMAP"(??)、"RDONLY"(リードオンリーでファイルを開きます)、"THREAD"(??)、"TRUNCATE"(ファイルが存在しない場合はファイルを作成。存在する場合はそのファイルを削除します。)。これらをリスト形式で指定します。
+Cache : integer BerkeleyDBのキャッシュではなくて、LiLDBのヒープのキャッシュサイズ。単位はByte。16,384Byte以上を指定しないとエラー。デフォルトは 10 * 1048576 Byte (=~ 10MB)
open_db/1は静的に値を保持するDBをメモリ上に作ります. open_db/3もしくはopen_db\4は静的に値を保持するDBをファイル上に作ります。
>  myarr <- [pred].
 >  :- db_open("mydata.db", (ldbm:flags\ ["CREATE"]),
 myarr(key_integer & ARRAY_BASE\0 & ARRAY_SIZE\2000,
 array_value)).
 >  myarr2 <- [pred].
 >  :- db_open(myarr2(key_inthash, array_value_string)).<BR><BR>
 >  myarr3 <- [pred].
 >  :- db_open(myarr3((key_integer & ARRAY_BASE\ 0 & ARRAY_SIZE\ 100),
 (key_integer & ARRAY_BASE\ 0 & ARRAY_SIZE\ 200),
 array_value_integer,
 array_value_integer,
 array_value_string)).
 最初の例では、整数がキーで素性構造が値になっているファイルDBを宣言しています。
   次の例では、整数がキーで文字列を値としてもつメモリDBを宣言しています。
  最後の例では、100 x 200の2次元配列を定義しています。C言語での
 struct arr1{
 int a;
 int b;
 char *c;
 }arr1[100][200];
 という定義と似ています。

db_sync/1

書式db_sync(+Pred)
引数
+Predpred 配列名
ファイルDBをsyncします.
>  myarr <- [pred].
 >  :- db_open("mydata.db", (ldbm:flags\ ["CREATE"]),
 myarr(key_integer & ARRAY_BASE\0 & ARRAY_SIZE\2000,
 array_value)).
 >  :- db_sync(myarr(_, _)).                        

db_close/1

書式db_close(+Pred)
引数
+Predpred 配列名
ファイルDBを閉じます.
>  myarr <- [pred].
 >  :- db_open("mydata.db", (ldbm:flags\ ["CREATE"]),
 myarr(key_integer & ARRAY_BASE\0 & ARRAY_SIZE\2000,
 array_value)).
 >  :- db_close(myarr(_, _)).                        

db_find/2

書式db_find(+Pred) db_find(+Iter, +Pred)
引数
+Predpred 配列名
+Predpred 配列名
db_find/1はキーで指定されたエントリーの値をDBから取り出してきます。db_find/2はIterで指定されたエントリーを取り出してきます。
>  myarr <- [pred].
 >  :- db_open("hoge.db", ldbm:flags\ ["CREATE"],
 myarr(key_inthash, array_value)).
 >  :- db_insert(my_arr(10, [1,2,3])).
 >  :- db_find(my_arr(10, X)), printAVM(X).
 >  :- db_first(my_arr(_, _), I), db_find(I, X), printAVM(X).

db_insert/1

書式db_insert(+Pred)
引数
+Predpred 配列名
db_insertはDBにエントリーを格納/上書きします.
>  myarr <- [pred].
 >  :- db_open("hoge.db", ldbm:flags\ ["CREATE"],
 myarr(key_inthash, array_value)).
 >  :- db_insert(my_arr(10, [1,2,3])).
 >  :- db_find(my_arr(10, X)), printAVM(X).
 >  :- db_first(my_arr(_, _), I), db_find(I, X), printAVM(X).

db_delete/1

書式db_delete(+Pred)
引数
+Predpred 配列名
db_deleteはDBのエントリーを削除します.
>  myarr <- [pred].
 >  :- db_open("hoge.db", ldbm:flags\ ["CREATE"],
 myarr(key_inthash, array_value)).
 >  :- db_insert(my_arr(10, [1,2,3])).
 >  :- db_delete(my_arr(10, _)).

db_clear/1

書式db_clear(+Pred)
引数
+Predpred 配列名
データベースの内容を空にします。(全エントリーが消えます。)
>  myarr <- [pred].
 >  :- db_open("hoge.db", ldbm:flags\ ["CREATE"],
 myarr(key_inthash, array_value)).
 >  :- db_insert(my_arr(10, [1,2,3])).
 >  :- db_clear(my_arr(_, _)).

db_findall/2

書式db_findall(+Pred, -EntryList)
引数
+Predpred 配列名
データベースの全エントリーをリストにして返します.
>  myarr <- [pred].
 >  :- db_declare("hoge.db", ldbm:flags\ ["CREATE"],
 myarr(key_inthash, array_value)).
 >  :- db_insert(my_arr(10, [1,2,3])).
 >  :- db_insert(my_arr(20, [4,5])).
 >  :- db_insert(my_arr(30, [6,7,8,9])).
 >  :- db_findall(my_arr(_, _), X), printAVM(X).

db_first/2

書式db_first(+Pred, -Iter)
引数
+Predpred 配列名
-IterID
データベースの先頭のエントリーのIDを返します。先頭のエントリーがない場合はfailします。
>  :- db_declare("hoge.db", ldbm:flags\ ["CREATE"],
 myarr(key_inthash, array_value)).
 >  :- db_insert(my_arr(10, [1,2,3])).
 >  :- db_first(my_arr(_, _), I), db_find(I, X), printAVM(X).

db_last/2

書式db_last(+Pred, -Iter)
引数
+Predpred 配列名
-IterID
データベースの末尾のエントリーのIDを返します。先頭のエントリーがない場合はfailします。
>  :- db_declare("hoge.db", ldbm:flags\ ["CREATE"],
 myarr(key_inthash, array_value)).
 >  :- db_insert(my_arr(10, [1,2,3])).
 >  :- db_last(my_arr(_, _), I), db_find(I, X), printAVM(X).

db_next/2

書式db_next(+Iter1, -Iter2)
引数
+Iter1エントリーのID
-Iter2Iter1の次のエントリーのID
Iter1の次のエントリーのIDをIter2に返します.次のエントリーがない場合はfailします.
>  myarr <- [pred].
 >  :- db_declare("hoge.db", ldbm:flags\ ["CREATE"],
 myarr(key_inthash, array_value)).
 >  :- db_insert(my_arr(10, [1,2,3])).
 >  :- db_insert(my_arr(30, [4,5,6,7])).
 >  :- db_first(my_arr(_, _), I), db_next(I, J), db_find(J, X), printAVM(X).

db_prev/2

書式db_prev(+Iter1, -Iter2)
引数
+Iter1エントリーのID
-Iter2Iter1の次のエントリーのID
Iter1の前のエントリーのIDをIter2に返します.前のエントリーがない場合はfailします.
>  myarr <- [pred].
 >  :- db_declare("hoge.db", ldbm:flags\ ["CREATE"],
 myarr(key_inthash, array_value)).
 >  :- db_insert(my_arr(10, [1,2,3])).
 >  :- db_insert(my_arr(30, [4,5,6,7])).
 >  :- db_first(my_arr(_, _), I), db_prev(I, J), db_find(J, X), printAVM(X).

db_save/2

書式db_save(+FILE, +NAME)
引数
+FILEstring ファイル名
+NAMEpred 対象となるDB
DBの内容をファイルに保存します。
 :- db_save("array1", arr1(_, _, _, _, _)).

db_load/2

書式db_load(+FILE, +NAME)
引数
+FILEstring ファイル名
+NAMEpred 対象となるDB
DBの内容をファイルから取り込みます。
 :- db_load("array1", arr1(_, _, _, _, _)).

declare_array/1

書式declare_array(+INFO)
引数
+INFOpred 配列名(……)
……の部分の表記方法 :
任意の次元のキーの定義, 任意の数のデータの定義をカンマで区切って列挙します。但し、配列は述語として扱われるため、合計の引数は15個までになります。
キーには、次の2種類があります。 key_integer 整数のキー。素性 ARRAY_BASE\(添字の始まりの数), ARRAY_SIZE\(添字の数) を必ず指定すること。
key_integer整数のキー。素性 ARRAY_BASE\(添字の始まりの数), ARRAY_SIZE\(添字の数) を必ず指定すること。
key_inthash整数ハッシュのキー。素性 ARRAY_SIZE\ を指定することができる.
key_string文字列のキー。連想配列のように使える。ARRAY_SIZE\ を指定することができる。
key_fs素性構造のキー。連想配列のように使える。ARRAY_SIZE\ を指定することができる。
 また、データには、次の3種類があります。
array_value任意の素性構造
array_value_integer整数値
array_value_string文字列
注意配列名は、予め、述語(pred型の subtype)として定義されている必要があります。また、配列名と ( の間には空白を置くことはできません。
静的に値を保持する配列を作ります.
> :- declare_array(arr1((key_integer & ARRAY_BASE\ 0 & ARRAY_SIZE\ 100),
 (key_integer & ARRAY_BASE\ 0 & ARRAY_SIZE\ 200),
 array_value_integer,
 array_value_integer,
 array_value_string)).
 > :- declare_array(arr2(key_string,
 array_value)).
  
  上記の例の1番目は、100×200の2次元配列で、2つの整数値と1つの文字列を保持するものです。およそ、C言語における 
 struct arr1{
 int a;
 int b;
 char *c;
 }arr1[100][200];
 に相当します。
  2番目の例は、文字列をキーとする配列で、1つの素性構造を保持します。 

delete_array/1

書式delete_array(+NAME)
引数
+NAMEpred 対象となる配列
NAMEという名前の配列を削除します.
 :- delete_array(arr1(_, _, _, _, _)).

get_array/1

書式get_array(+INFO)
引数
+INFOpred 配列名(……)
関連項目set_array/1
配列の値を取得します.

set_array/1

書式set_array(+INFO)
引数
+INFOpred 配列名(……)
……の部分の表記方法 :
declare_arrayで設定したキーとデータに従って、入力する場所と値を記述します.
関連項目get_array/1
配列に値を代入します.
> :- set_array(arr1(3,4,200,55,"abc")).
 > :- set_array(arr2("foo", abc & F1\aa)).
 > ?- get_array(arr1(3,4,X,Y,Z)).
 X: 200
 Y: 55
 Z: "abc"
 > ?- get_array(arr2("foo",X)).
 X: |~abc  ~|
 |_F1:aa_|
  
  上記の例の1番目は、arr1[3][4]の値として、 200, 100, "abc" を代入したものです。
  2番目の例は、"foo" をキーとして、素性構造 abc & F1\aa を登録したものです。
  配列の値を参照するには、配列名を述語としたクエリーを記述します。 

unset_array/1

書式unset_array(+INFO)
引数
+INFOpred 配列名(……)
……の部分の表記方法 :
declare_arrayで設定したキーを指定します.
配列の値を消去します.
> :- unset_array(arr1(3,4,_,_,_)).
 > ?- get_array(arr1(3,4,X,Y,Z)).
 no

clear_array/1

書式clear_array(+NAME)
引数
+NAMEpred 対象となる配列
NAMEという名前の配列の内容をクリアします.
 :- clear_array(arr1(_, _, _, _, _)).

save_array/2

書式save_array(+FILE, +NAME)
引数
+FILEstring ファイル名
+NAMEpred 対象となる配列
配列の内容をファイルに保存します。
 :- save_array("array1", arr1(_, _, _, _, _)).

load_array/2

書式load_array(+FILE, +NAME)
引数
+FILEstring ファイル名
+NAMEpred 対象となる配列
配列の内容をファイルから取り込みます。
 :- load_array("array1", arr1(_, _, _, _, _)).

Top of this page Contents Index of this package LiLFeS Documents LiLFeS Home Page Tsujii laboratory

This document is automatically created by lildoc on Fri Sep 24 14:13:59 2004