如何减少从不同数据源获取与整合信息的复杂性,是当前的一项挑战。然而,.NET 已经拥有了 LINQ ,Ruby 却没有相似的解决方案。虽然已有一些 DSL 项目使用 Rub 语言进行查询,却并非以 Ruby 的语法形式进行查询。
Chris Wanstrath 为此设计了新的解决方案: Ambition 。Ambition 利用了 ParseTree 来处理解析树,并将纯 Ruby 查询转换成 SQL 查询(在目标数据库为关系型数据库时),最终您可以使用 Ruby 编写如下的查询语句:
User.first<br></br># which will translate into "SELECT * FROM users LIMIT 1"<br></br>User.select { |u| u.karma > 20 }.sort_by(&:karma).first(5)<br></br># which will translate into "SELECT * FROM users WHERE (users.
karma> 20)<br></br># 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
评论