[Tokyo.pm] [rfc] Net::MySQL & DBD::mysqlPP
Hiroyuki OYAMA
oyama @ crayfish.co.jp
2002年 3月 31日 (日) 09:04:39 CST
クレイフィッシュの小山です。
# また無駄な物を書いてみました
MySQLの通信プロトコルをなんとなくPure Perlで実装したモ
ジュールNet::MySQLと、それを利用したDBIのドライバ
DBD::mysqlPPを書きました。
# JDBCで言うところのType4 driver
http://ymca.infoware.ne.jp/dist/Net-MySQL-0.01.tar.gz
http://ymca.infoware.ne.jp/dist/DBD-mysqlPP-0.01.tar.gz
libmysqlを使わずにPerlだけで実装したので、perl5.6.0以降で
IO::Socketが使える環境であれば基本的にOSを問わずMySQLの
daemonと*直接*通信できます。既に動作を検証できている環境は
以下の通りです。
* FreeBSD 3.4 with perl 5.6.1 build for i386-freebsd
* FreeBSD 4.5 with perl 5.6.1 build for i386-freebsd
* FreeBSD 4.0 with perl 5.005_03 build for i386-freebsd
* Windows2000 with ActivePerl 5.6.1-build631
* MacOS X with perl 5.6.0 build for darwin
* MacOS 9.x with MacPerl 5.6.1r1
NULL passwordで良ければもっと動作できる環境は広がります。さ
らにIO::Socket.pmではなくSocket.pmを使うように書き換えれば
WindowsCEでも動くはずです。
御意見など頂けると幸いです。
Net::MySQL
==========
対応していないもの
* 圧縮プロトコル
* UNIX Socketによる接続
* データベースの作成などmysqladminがやりそうな処理
#!perl
use Net::MySQL;
use strict;
my $mysql = Net::MySQL->new(
hostname => 'mysqld.example.jp',
database => 'database',
user => 'username',
password => 'password'
);
$mysql->query(q{SELECT id, name FROM table});
my $record = $mysql->create_record_iterator;
while (my $column = $record->each) {
printf "id=%s, name=%s\n",
$column->[0], $column->[1];
}
$mysql->close;
__END__
DBD::mysqlPP
============
対応していないもの
* メタデータの取得
* プレースホルダの解析はテキトウ
#!perl
use DBI;
use strict;
my $dbh = DBI->connect(
'dbi:mysqlPP:hostname=mysqld.example.jp;database=database',
'username', 'password'
);
my $sth = $dbh->prepare(q{SELECT id, name FROM table});
$sth->execute;
while (my $col = $sth->fetchrow_arrayref) {
printf "id=%s, name=%s\n", $col->[0], $col->[1];
}
$dbh->disconnect;
__END__
______________
Hiroyuki OYAMA <oyama @ crayfish.co.jp>
System Operations Dept.
Crayfish Co.,Ltd. <http://Crayfish.CO.JP/>
"PerlとRubyでYahoo!メッセンジャー"
-> http://ymca.infoware.ne.jp/
Tokyo-pm メーリングリストの案内