通过快速搜索,我得到了2004 年 1 月的 Parrot DBDI 公告和一个似乎早已死去的dbdi-dev 邮件列表。Parrot DBDI 还在开发中吗?有人在为 Parrot 开发不同的数据库 API 或接口吗?
2 回答
来自DBI::Roadmap 1.607手册,日期为 2004 年 11 月:
大部分工作将把 DBI C 和 Perl 基类代码翻译成 Parrot PIR,或生成 PIR 的合适语言。由于 Parrot 当时没有关键功能,该项目停滞不前。问题已解决,但项目尚未重新启动。
达伦·邓肯在 2005 年 5 月发表的这篇文章:
我相信它现在很快就会重新开始。看,一些主要缺失的先决条件现在都上线了,所以有了这些,我们就可以开始工作了。
我找不到比这更近的东西了。Parrot 本身的进展有点缓慢,所以也许为了与 Parrot 平台保持兼容,DBDI 也是如此。:-)
DBDI 致力于创建一个数据库驱动程序接口,就像当前的 DBI 和 DBD 模块一样。它死了,所以开发人员现在改用现有的接口——Java JDBI。两个这样的开发者是 Tim Bunce(他曾参与 DBI 1,但没有太多时间参与其续集)和 Simon Cozens:
http://perlbuzz.com/2008/12/database-access-in-perl-6-is-coming-along-nicely.html
use DBDI;
my $conn = DBDI::DriverManager.getConnection(
"dbdi:SQLite3:test.db", "", "");
my $stm = $conn.createStatement();
my $rs = $stm.executeUpdate("CREATE TABLE foo (bar, baz)");
my $stm = $conn.prepareStatement(
" INSERT INTO foo (bar, baz) VALUES (?, ?)");
$stm.setColumn(1, 123);
$stm.setColumn(2, "Thingy");
$stm.executeUpdate();
这个模块应该适用于所有 Parrot 语言,而不仅仅是 Perl 6。
实际上,对于 Perl 6,我们可能会看到一个 SQL 引用运算符,因此您可以执行以下操作:
$conn.prepareStatement( Q:sql<INSERT INTO foo (bar, baz) VALUES($bar, $baz)> );
当然,在 Perl 6 中,像 Q:sql 这样的引号修饰符可以缩写,例如 qs<> 或 sql<>