通过 Ambition 实现 Ruby 抽象数据查询

阅读数:151 2007 年 9 月 27 日

话题:Ruby数据库DevOps语言 & 开发架构

如何减少从不同数据源获取与整合信息的复杂性,是当前的一项挑战。然而,.NET 已经拥有了LINQ,Ruby 却没有相似的解决方案。虽然已有一些 DSL 项目使用 Rub 语言进行查询,却并非以 Ruby 的语法形式进行查询。

Chris Wanstrath 为此设计了新的解决方案:Ambition。Ambition 利用了ParseTree来处理解析树,并将纯 Ruby 查询转换成 SQL 查询(在目标数据库为关系型数据库时),最终您可以使用 Ruby 编写如下的查询语句:

User.first

# which will translate into "SELECT * FROM users LIMIT 1"

User.select { |u| u.karma > 20 }.sort_by(&:karma).first(5)

# which will translate into "SELECT * FROM users WHERE (users.`karma` > 20)

# ORDER BY users.karma LIMIT 5"

Chris 最初打算以Rack项目为目标的,但在他研究了 LINQ之后,便转变了原先的目标。

我们的注意力从 Rack 转向了 LINQ。更确切地说,我们不想仅是支持其他的 ORMs—我们期望 Ambition 成为面向 SQL、LDAP、XPath 的查询语言。Ambition 的 1.0 版本将是后端无关的(backend-agnostic)。或许因此我们将考虑把项目的名称改为 Hubris?时间会说明一切。

感兴趣的读者可以使用Git在如下地址获取最新的程序源代码:git://errtheblog.com/git/ambition

查看英文原文:Abstracting Data Query in Ruby with Ambition