by Hippo2000(2001/7/10)
JSpriteモジュールなのです。PurePerlなSQLデータベースなのです。
著作権はJim Turner氏がお持ちです(詳しくは著作権情報を見てください)。Jim Turner's SpriteだからJSpriteなのです。なおJSpriteは単独ではなくDBD-Spriteのディストリビューションに同梱されます。お気をつけを!
内容等が間違っていたら修正します。ご連絡ください。
JSprite - 区切られたフラットなテキストファイルをOracleをエミュレートしSQLを使うデータベースとして扱うようSpriteを修正。残りのドキュメントSpriteをベースにしています。
use JSprite;
$rdb = new JSprite;
$rdb->set_delimiter (-read => '::') ## OR: ('read', '::');
$rdb->set_delimiter (-write => '::') ## OR: ('write', '::');
$rdb->set_delimiter (-record => '\n') ## OR: ('record', '::');
$rdb->set_os ('Win95');
## 適切な引数には以下のものがあります(大文字小文字の区別はありません):
##
## Unix, Win95, Windows95, MSDOS, NT, WinNT, OS2, VMS,
## MacOS or Macintosh. デフォルトは$^Oにより決まります。
#$rdb->set_lock_file ('c:\win95\tmp\Sprite.lck', 10);
$rdb->set_lock_file ('Sprite.lck', 10);
$rdb->set_db_dir ('Mac OS:Perl 5:Data') || die "Can't access dir!\n";
$data = $rdb->sql (<<Query); ## もしくは: @data = $rdb->sql (<<Query);
.
. (SQL)
.
Query
foreach $row (@$data) { ## もしくは: foreach $row (@data) {
@columns = @$row; ## 区切られた文字にnullはありません -- v3.2
}
$rdb->xclose; $rdb->close ($database); ## 更新されたデータベースを保存する
二重のコロンでフィールドが区切られた簡単なデータベースがあるとします:
PLAYER=VARCHAR2(16)::YEARS=NUMBER::POINTS=NUMBER::REBOUNDS=NUMBER::ASSISTS=NUMBER::Championships=NUMBER ... Larry Bird::13::25::11::7::3 Michael Jordan::14::29::6::5::5 Magic Johnson::13::22::7::11::5 ...
注意: 最初の行にはフィールド名(大文字・小文字は区別されません)、Oracleデータ型と長さが入らなければなりません。現在のところ意味があるデータ型はNUMBERとVARCHARだけです。他のすべての型はVARCHARとして扱われます(比較のため、Perl文字列として)
以下にJSpriteでサポートされるSQLコマンドのリストを示します:
select col1 [,col2] from database
where (cond1 OPERATOR value1)
[and|or (cond2 OPERATOR value2) ...]
order by col1 [,col2]
databaseは単純にデータの入っているファイルです。もしファイルがカレント・ディレクトリになければ、パスを指定しなければなりません。でふぉるといでは実際のファイル名は拡張子".sdb"で終わります。
Spriteは複数のテーブル(あるいは結合("join")としてよく知られている)をサポートしていません。
適切なカラム名は[cond1..n]と[value1..n] が予想されているところで使うことができます。以下のようになります:
例 1:
select Player, Points from my_db
where (Rebounds > Assists)
注意: カラム名はPerl文字列またはブール演算子つまり( lt, gt, eq, and, or, など)であってはいけません、そして大文字小文字は区別されません。
以下のSQLオペレータを使うことができます:=, <, >, <=, >=, <>。またPerlの特別なオペレータ: =~ と !~ も同様に使うことができます。 =~ と !~ オペレータは以下のように正規表現を指定するために使うことができます:
例 2:
select * from my_db
where (Name =~ /Bird$/i)
Nameカラムが"Bird"(大文字/小文字を無視して)で終っているレコードをSELECTします。詳細については、正規表現についてのマニュアルをご覧ください。
注意: データベースへのパスには以下の文字しか入れることができません。
\w, \x80-\xFF, -, /, \, ., :
もし空白や他の'適切でない'文字が入っているディレクトリをもっているならば、set_db_dirメソッドを使わなければなりません。
update - 指定された条件にあうレコードを更新します:
update database
set cond1 = (value1)[,cond2 = (value2) ...]
where (cond1 OPERATOR value1)
[and|or (cond2 OPERATOR value2) ...]
update my_db
set Championships = (Championships + 1)
where (Player = 'Larry Bird')
update my_db
set Championships = (Championships + 1),
Years = (12)
where (Player = 'Larry Bird')
delete from database
where (cond1 OPERATOR value1)
[and|or (cond2 OPERATOR value2) ...]
delete from my_db
where (Player =~ /Johnson$/i) or
(Years > 12)
alter table database drop (column-name [, column-name2...])
alter table database add ([position] column-name datatype
[, [position2] column-name2 datatype2...]
[primary key (column-name [, column-name2...]) ])
例
alter table my_db drop (Years)
alter table my_db add (Legend VARCHAR(40) default "value", Mapname CHAR(5))
alter table my_db add (1 Maptype VARCHAR(40))
この例は新しいカラムをテーブルの2番目のカラムとして追加しています(最初のカラムは0)。デフォルトでは新しいフィールドはテーブルの一番右(最後)のカラムとして追加されます。このJSprite拡張は標準のSQLによってサポートされていません。
alter table my_db modify (Legend VARCHAR(40))
alter table my_db modify (0 Legend default 1)
最後の例は"Ledend"カラムをテーブルの最初のカラムに移動し、それ以上のものをシフトします。そして後のすべてのレコードには"Legend"フィールドに値が入っていなければ、デフォルト値"1"が追加されます。この"Position"フィールド(この例では0)はJSprite拡張で標準SQLにはありません。
insert into database
[(col1, col2, ... coln) ]
values
(val1, val2, ... valn)
insert into my_db
(Player, Years, Points, Championships)
values
('Kareem Abdul-Jabbar', 21, 26, 6)
データベースでのすべてのフィールドを指定する必要はありません!Spriteはデータベースものと同じ順序で指定することも要求しません。
注意: 文字列をクォートすることを習慣にしなければなりません。
利用できるメソッドを以下に示します:
戻り値
なし
注意: Windows95/NTまたはOS2でSpriteを使っているのであれば、set_db_dir や set_lock_fileへのパスを指定するさいに、普通のスラッシュではなく、バックスラッシュを使うようにしてください!
戻り値
なし
指定されなければ、'Sprite.lck' (set_db_dirによって指定されたディレクトリまたはカレント・ディレクトリのどちらかにある)がデフォルトのロック・ファイルとして使われます。
戻り値
なし
\w, \x80-\xFF, -, /, \, ., :
もしあなたのパスに上記に上げたもの以外の文字が入っているのであれば、メソッドを使ってデフォルト・ディレクトリを設定することができます。例を以下にあげます:
$rdb->set_db_dir ("Mac OS:Perl 5:Data");
$data = $rdb->sql ("select * from phone.db");
Spriteはファイル"Mac OS:Perl 5:Data:phone.db"を探します。ちょっと注意してください、データベース・ファイル名には上記にあげた文字しかもつことができません!
戻り値
0 - 失敗 1 - 成功
$rdb->set_db_ext ('.sdb');
戻り値
なし
戻り値 1 - 成功 0 - エラー
&rdb->commit('filename');
戻り値
なし
Spriteはあなたのすべてのデータ操作の必要性の解決策ではありません。これは小さなデータベース(1000レコードよりも小さい)に向いていますが、それを越えると、Spriteがポコポコ動いている間..そして何秒間かそれ以上経過して返ってくるまで、そこに座って退屈のあまり指をひねくり回さなければなりません.
Spriteの主な利点は個人のマシンで(もしくはOracleライセンスやその他の"主流の"データーベースを持っていないほかのマシンで)、"本当の"データベースを持っている"製品"マシンにリリースする前にプロトタイプ・アプリケーションを作成し、テストできることです。
さらなるSpriteの利点は、データを検索するためにPerlの正規表現が使えることです。ウヒョー!
DBD::Spriteはフラットファイルを通して、基本的なデ−タベーステーブルとSQL呼び出しをエミュレートする能力を提供します。想定している基礎的な使い方は、Oracleライセンスを購入する余裕がないWebサイトの開発者に自分自身の道具で、後でOracleが使われているより大きい顧客のサイトでホスティングするためのプロトタイプやPerlアプリケーションの開発を可能とさせることです。 :-)
DBD::Spriteはできるだけデータベースに依存しない方法でことを行おうとしますが、違いがあるとJSpriteはOracleを最も近くエミュレートします。例えば"シーケンス/自動番号付け"。JSpriteは"シーケンスファイル"(.seq)という小さな1行のテキストファイルと自動的に番号がふられるフィールドに挿入するための"seq_file_name.NEXTVAL"関数を使います。
JSpriteはOracleシーケンスと関数をサポートしています。現在のところサポートされているOracle関数は"SYSTIME",NEXTVALそして"NULL"です。"fn_register" を使ってユーザーは独自の関数を"登録"することができます。
メソッドは2つの引数を取ります:関数名とオプションのパッケージ名です(デフォルトは"main")
$rdb->fn_register ('myfn','mypackage');
-もしくは-
JSprite::fn_register ('myfn',__PACKAGE__);
すると以下のように呼び出すことができます:
insert into mytable values (myfn(?))
そして値を"?"にバインドします、それは"myfn"に渡され、返された値がデータベースに登録されます。バインドなしに呼び出すこともできます。:
insert into mytable values (myfn('mystring'))
-もしくは (もし関数が数値をとるのであれば)-
select field1, field2 from mytable where field3 = myfn(123)
戻り値
なし
JSprite は新しいテーブルやシーケンスを作るためのSQL"create"関数を追加しています。
例:
create table table1 (
field1 number,
field2 varchar(20),
field3 number(5,3) default 3.143)
create sequence sequence-name [increment by 1] start with 0
DBD::Sprite, Sprite, Text::CSV, RDB
以下の方々に特にRod Whitby に Jim Esten、バグの発見と提案の提供に感謝します:
Shishir Gundavaram (shishir@ora.com) (オリジナルのSpriteの作者) Rod Whitby (rwhitby@geocities.com) Jim Esten (jesten@wdynamic.com) Dave Moore (dmoore@videoactv.com) Shane Hutchins (hutchins@ctron.com) Josh Hochman (josh@bcdinc.com) Barry Harrison (barryh@topnet.net) Lisa Farley (lfarley@segue.com) Loyd Gore (lgore@ascd.org) Tanju Cataltepe (tanju@netlabs.net) Haakon Norheim (hanorhei@online.no)
(原文のまま)
JSprite Copyright (c) 1998-2000, Jim Turner
Sprite Copyright (c) 1995-1998, Shishir Gundavaram
All Rights Reserved
Permission to use, copy, and distribute is hereby granted, providing that the above copyright notice and this permission appear in all copies and in supporting documentation.
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。