论坛首页 Java企业应用论坛

面向组合子编程实验-SQL组合查询条件的简单实现

浏览 37517 次
该帖已经被评为精华帖
作者 正文
   发表时间:2006-08-18  
wantsong 写道
希望大家在做的时候,可以看看LinQ,MS希望在明年发布的技术,也许他山之石可以攻玉。


基本上是两码事。
JRC的任务是Parse and Combinate现有的SQL,并不创造任何新的QL
LINQ属于生造的不伦QL。

假若苍天无眼,LINQ这样的不伦不类的QL也能够流行起来,JRC说不定也只好出个NRC ( .net Relation Combinator) 来支持LINQ。

OO数据结构如此复杂,XPath这样的层次查询语言都不能完全对应(参见JXPath项目),更别说从RDB发展起来的SQL了(也许带有了OODB的OQL特性,但QL本身就是为RDB创造出来的)。
OO数据的查询,还是要依靠Traversal, Filter, Visitor, Iterator, Collector的组合,才是最自然、最贴切、最灵活的方式。

现在还有个项目叫做JQuery,采用类似于Prolog的语法作为Query Language来查询Java Source,倒是有点意思。

MS的OLAP MDX不错,多维数据的分组查询。如果能移植到编程语言里面直接支持,将大有作为。
当今的时代是tag分组满天飞的时代,多维数据的支持严重缺乏。

Muilti Keys -> Value 的 HashMap支持都弱的可怜。Apache Commons Collection做了一些初步工作。
层次HashMap很容易做,比如, JBoss Cache。
a/b/c/d -> value1
a/e/f -> value2
get by a,会返回a下面的所有child nodes.
如果删除了a, 那么下面的所有child nodes都会被删除。

而多维HashMap很难做。
(a, b, c, d) -> value1
(a, e, f) -> value2

get by a,应该返回 value1, value2。
如果删除了a,那么,
(b, c, d) -> value1
(e, f) -> value2
0 请登录后投票
   发表时间:2006-08-19  
也不能说一点没有自己造的吧?

比如,对表名,列名字的quote(以免空格或者keyword),我们可以用"[]",但是这个可能不是标准sql。

还有,对mssql的case语句,oracle的decode,mssql的isnull, coalesce, datepart, datediff函数,这些逻辑要不我们不支持,要不只好我们用自己一套标准的函数(比如可以抄mssql或者oracle),然后让visitor去翻译成mssql的或者oracle对应的语法。

因为这些东西ansi sql都不定义,但是很有用。
0 请登录后投票
   发表时间:2006-08-19  
ajoo 写道
项目批准了。

想参与的去java.net上申请一个账号吧。告诉我,我可以把你加进去。

cvs:
host: cvs.dev.java.net
repository: /cvs
module: /jrc


想学习学习,可以加一下我吗?
帐号:liuyxit
0 请登录后投票
   发表时间:2006-08-19  
加上了.
0 请登录后投票
   发表时间:2006-08-19  
帐号:intolong

学习下。
0 请登录后投票
   发表时间:2006-08-20  
加了
0 请登录后投票
   发表时间:2006-08-25  
ajoo 写道
还没有做过任何benchmark。如果哪位有心人愿意给做一个倒是非常欢迎。

我的猜测是,jparsec会比antlr慢一些的。毕竟,递归下降理论上就不如lr解析。

关键问题是,会慢多少。要是小于100%,我认为都可以接受。但是如果真是差百倍,那就确实是我的错了。

偶想做一个看看,但是download jparsec的时候有个问题,最新版本的是基于1.5的,貌似不能在1.4下面用...
如果针对旧版本做的performance benchmark有意义吗?
0 请登录后投票
   发表时间:2006-08-25  
可以的.两个版本效率上应该区别不大
0 请登录后投票
   发表时间:2006-08-25  
ajoo 写道
还没有做过任何benchmark。如果哪位有心人愿意给做一个倒是非常欢迎。

我的猜测是,jparsec会比antlr慢一些的。毕竟,递归下降理论上就不如lr解析。

关键问题是,会慢多少。要是小于100%,我认为都可以接受。但是如果真是差百倍,那就确实是我的错了。


ANTLR也是递归下降的, sablecc和javacc是LALR的.
0 请登录后投票
   发表时间:2006-08-25  
ajoo 写道
还没有做过任何benchmark。如果哪位有心人愿意给做一个倒是非常欢迎。

我的猜测是,jparsec会比antlr慢一些的。毕竟,递归下降理论上就不如lr解析。

关键问题是,会慢多少。要是小于100%,我认为都可以接受。但是如果真是差百倍,那就确实是我的错了。

做了一个benchmark,用的是
jparsec 0.5和antlr 2.7.6
解析的例子是jparsec的教程里面的计算器
结果
jparsec : antlr ~= 5:1

对于jparsec不了解,就是按照例子抄的,不过jparsec的性能没有偶想象中的差...不过对于复杂的HSQL解析,等你们做出来以后再跑一个对比看看会不会随着组合子的增加,性能会有一个下降。

附件是测试代码
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics