是否存在独立于编程语言的任意集的通用查询语言?

时间:2014-03-28 14:08:30

标签: set cross-platform cross-language

我正在寻找一种独立于编程语言或集合类型定义集合查询的方法。

详细说明,这将是Java,C ++,Python等常用语言的语言定义和实现。

如评论所述,我正在寻找数据库或集合表示的任何实现,而只是定义对来自例如的元素的查询的方法。一个std::set/vector一个Python set()或任何可以看作一组的线性结构。

一个接近的例子就像jLinq,但没有绑定到JSON或javascript以及定义良好的字符串表示。

当然,在不知道数据结构类型的情况下,您必须为每个问题和每种编程语言实现任何条件过滤器,但是构建查询字符串的方式以及如何评估它们将是明确的,您不必编写分析器。

所以我想用Java或C ++写的是

q = query()
.created_after("14.03.2010")
.and(contains("hello")
     .or(contains("hallo")))
.sort("caption")

或写成字符串:

"(created_after("14.03.2010") and ( contains("hello") or contains("hallo"))) sort("caption")"

(这不是通过 - 只是为了显示界面的外观)

针对不同问题的一个很好的例子是JSON或XML:清晰的语言定义和适用于任何平台或编程语言的解析器/工具。

1 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但我想我知道你的意思,我实际上在寻找类似的东西。你需要的是一个“搜索查询解析器”。

我为nodejs找到search-query-parser(我不是作者)。还没有尝试过,但看起来很有前途。文档中的示例很简单,您将从UI接收输入字符串

from:hi@retrace.io,foo@gmail.com to:me subject:vacations date:1/10/2013-15/04/2014 photos

并且库会将其解析为结构化的json对象

{
  from: ['hi@retrace.io', 'foo@gmail.com'],
  to: 'me',
  subject: 'vacations',
  date: {
    from: '1/10/2013',
    to: '15/04/2014'
    },
  text: 'photos'
}

您可以从该对象构造并向数据库发出查询命令。正如您所看到的,它处理列表和范围。马上我看不到任何布尔运算符(AND,OR),但我想可以很容易地实现。

希望这有帮助。