DBD::Fileモジュール(日本語チョー訳)

by Hippo2000(1999/11/2)

DBD::Fileモジュールなのです。使ったことがないモジュールなのですが...。(未確認なだけ)

なおこのドキュメントではDBD::Fileモジュールを入れると入ってくるFile.htmlを日本語化したものです。わかりにくい部分は本物を見てください。(^^;;

原本の著作権は Jochen Wiedmannさんがお持ちです。Jochen Wiedmannさんにはメールで了解をいただきました。

なお内容等が間違っていたら修正します。ご連絡ください


目次


名前

DBD::File - プレーンなファイルのためのDBIドライバの基礎となるクラス


概要

    use DBI;
    $dbh = DBI->connect("DBI:File:f_dir=/home/joe/csvdb";)
        or die "Cannot connect: " . $DBI::errstr;
    $sth = $dbh->prepare("CREATE TABLE a (id INTEGER, name CHAR(10))")
        or die "Cannot prepare: " . $dbh->errstr();
    $sth->execute() or die "Cannot execute: " . $sth->errstr();
    $sth->finish();
    $dbh->disconnect();

説明

DBD::Fileモジュールは本当のDBIドライバではなく、実際のDBIドライバをそこから作る基礎となる抽象クラスです。プレーンなファイルに対して機能するこれらのドライバの実装には、例えばCSVファイルやINIファイルがあります。このモジュールは、シンプルなSQLエンジンであるSQL::Statementモジュールを基礎としています。

DBIの詳細についてはDBI(3) を、SQL::Statementの詳細についてはSQL::Statement(3) 、具体的なドライバについてはDBD::CSV(3)またはDBD::IniFile(3)をご覧ください。


メタデータ

これらの属性はDBD::FileではなくDBIそのもので扱われます、そのためこれらは期待する通りの動きをします。

    Active
    ActiveKids
    CachedKids
    CompatMode             (未使用)
    InactiveDestroy
    Kids
    PrintError
    RaiseError
    Warn                   (未使用)

以下のDBI属性はDBD::Fileによって扱われます:

AutoCommit
常にオン
ChopBlanks
機能します
NUM_OF_FIELDS
$sth->execute以降、適正です
NUM_OF_PARAMS
$sth->prepare以降、適正です
NAME
$sth->execute以降、適正です;Selectステートメント以外ではundefです。
NULLABLE
実際には機能しません。DBD::CSVが入力データを検査しないので、常にその配列リファレンスを返します。$sth->execute以降、適正です。SELECTステートメント以外ではundefです。
 

以下の属性、メソッドはサポートされていません:

    bind_param_inout
    CursorName
    LongReadLen
    LongTruncOk

追加のDBI属性として、以下のdbh属性を使うことができます:

f_dir
この属性はCSVファイルが開かれるディレクトリを設定するために使われます。通常、これはdbhで設定します。デフォルトは現在のディレクトリ("")です。 しかし、ステートメント・ハンドルで置きかえることができます。

ドライバ独自のメソッド

data_sources
data_sources メソッドは現在のディレクトリのサブディレクトリのリストを"DBI:CSV:f_dir=$dirname"という形式で返します。

もし他のディレクトリのサブディレクトリを読みたければ、以下のようにしてください:

    my($drh) = DBI->install_driver("CSV");
    my(@list) = $drh->data_sources('f_dir' => '/usr/local/csv_data' );
list_tables
このメソッドは$dbh->{'f_dir'}の中のファイル名のリストを返します。例えば:
    my($dbh) = DBI->connect("DBI:CSV:f_dir=/usr/local/csv_data");
    my(@list) = $dbh->func('list_tables');

SQLの観点からはテーブル名として適切でないものも含めて、ディレクトリに入っている全てのファイルがリストに含まれることに注意してください。上記の「テーブルの作成、削除」のご覧ください。


今後の予定

結合(join)
このモジュールの現行のバージョンでは、SQL::Statementモジュールの基本的な設計が結合とlikeを可能にしているにもかかわらず、1つのテーブルに対するSELECTだけが機能します。
 
テーブル名マッピング
現在はnames.csvのような名前を持っているファイルを使うことはできません。代わりにファイルのソフトリンクまたは名前の変更をしなければいけません。この代替方法として、例えばdbh属性'table_map'というようなものを考えています。それはハッシュ・リファレンスで、キーがテーブル名なり、値がファイル名になります。

既知のバグ


作者と著作権

(原文のまま)

This module is Copyright (C) 1998 by

    Jochen Wiedmann
    Am Eisteich 9
    72555 Metzingen
    Germany
    Email: joe@ispsoft.de
    Phone: +49 7123 14887

All rights reserved.

You may distribute this module under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.


参考資料

DBI(3), Text::CSV_XS(3), SQL::Statement(3)


ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。