论坛首页 Java企业应用论坛

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

浏览 37520 次
该帖已经被评为精华帖
作者 正文
   发表时间:2006-08-14  
yimlin 写道
是不是可以从domain object的角度
考虑限制组合的范围在如下:
1. where
2. order by
另外还有和domain object无关的
3. 分页
4. top n
这样不考虑select和from,当然也不考虑join了。
这样问题简单了。对于同一domain object其where和order的组合是简单的。
DDD一书中的and,or和not操作是容易支持的。
那么对于那些确实复杂的sql查询怎么办?简单。单独写一个,我的观点是太复杂的东东复用的可能性也不大,日后出现类似的东东可以考虑用OO的继承的方式搞定,CO和OO本来就不是相互排斥的。

不过不考虑join明显是个问题,我估计应用系统中:普通的sql,join的sql以及更复杂的sql语句的比例是4:4:2。只是如果应用specification的话,join处理实在麻烦。


这个DDD到底是什么书啊?晕了。

在domain层次上搞,也许是个有意义的思路。只不过需要具体分析domain logic能否适合co,或者说,这个co搞出来,是真的能完全应对变化的关键性技术,还是只是一个摆设?这方面我觉得我还没有把握。需要一个domain方面的专家并且理解co的人来说话。

在sql上搞组合子,抛开到底多有用不说,至少我知道是可行的。relational algebra就是那么多东西,尽管演绎出来可以千变万化,基本演算就是那么几个,所以非常适合用co。
0 请登录后投票
   发表时间:2006-08-14  
不能光说不做。
这不,刚刚写了jrc的组合子部分,可以生成ast。

还剩下两部分:
1。通过实现ast的visitor接口来针对具体dbms生成sql代码。(这里面应该还是有一些设计的技巧可用,来尽量在不同dbms之间重用代码。)
2。写parser,把ansi sql翻译成ast。我准备用jparsec来写。

两部分都实现了,这个sql组合子就能真正使用了。

布娃娃有没有兴趣合作?
0 请登录后投票
   发表时间:2006-08-14  
ajoo 写道
不能光说不做。
这不,刚刚写了jrc的组合子部分,可以生成ast。

还剩下两部分:
1。通过实现ast的visitor接口来针对具体dbms生成sql代码。(这里面应该还是有一些设计的技巧可用,来尽量在不同dbms之间重用代码。)
2。写parser,把ansi sql翻译成ast。我准备用jparsec来写。

两部分都实现了,这个sql组合子就能真正使用了。

布娃娃有没有兴趣合作?


在那个回答问题的帖子里面。
给你3个月的时间,学习一门相对新的技术,你会学什么?
nihongye的回答是,jaskell。

跟ajoo偶像学习的机会,求之不得阿。
有了这样的好机会,正好把haskell的语法熟悉一下,那个臭名昭著的monad到现在还没有完全理解。
parser也是,参考jfun的parser,我把fastm parser翻来覆去重构了几次,也达不到那么优雅的程度。这次正好深入学习借鉴。
而且ajoo这么一说,感到sql拼装确实还是个大有可为的领域。

我早就加了ajoo的MSN。不过,很少见到ajoo上线。我再给你发个站内短信,确认一下。

--------------------

那个model代码的处理,和Relation的代码很类似。
里面也需要出现 top, where, group之类的控制,用来对应query template。所以query template会非常复杂,
0 请登录后投票
   发表时间:2006-08-14  
羡慕布娃娃,能和偶像合作。
0 请登录后投票
   发表时间:2006-08-14  
buaawhl 写道
ajoo 写道
不能光说不做。
这不,刚刚写了jrc的组合子部分,可以生成ast。

还剩下两部分:
1。通过实现ast的visitor接口来针对具体dbms生成sql代码。(这里面应该还是有一些设计的技巧可用,来尽量在不同dbms之间重用代码。)
2。写parser,把ansi sql翻译成ast。我准备用jparsec来写。

两部分都实现了,这个sql组合子就能真正使用了。

布娃娃有没有兴趣合作?


在那个回答问题的帖子里面。
给你3个月的时间,学习一门相对新的技术,你会学什么?
nihongye的回答是,jaskell。

跟ajoo偶像学习的机会,求之不得阿。
有了这样的好机会,正好把haskell的语法熟悉一下,那个臭名昭著的monad到现在还没有完全理解。
parser也是,参考jfun的parser,我把fastm parser翻来覆去重构了几次,也达不到那么优雅的程度。这次正好深入学习借鉴。
而且ajoo这么一说,感到sql拼装确实还是个大有可为的领域。

我早就加了ajoo的MSN。不过,很少见到ajoo上线。我再给你发个站内短信,确认一下。

--------------------

那个model代码的处理,和Relation的代码很类似。
里面也需要出现 top, where, group之类的控制,用来对应query template。所以query template会非常复杂,


还缺人否?
0 请登录后投票
   发表时间:2006-08-14  
ajoo 写道
yimlin 写道
是不是可以从domain object的角度
考虑限制组合的范围在如下:
1. where
2. order by
另外还有和domain object无关的
3. 分页
4. top n
这样不考虑select和from,当然也不考虑join了。
这样问题简单了。对于同一domain object其where和order的组合是简单的。
DDD一书中的and,or和not操作是容易支持的。
那么对于那些确实复杂的sql查询怎么办?简单。单独写一个,我的观点是太复杂的东东复用的可能性也不大,日后出现类似的东东可以考虑用OO的继承的方式搞定,CO和OO本来就不是相互排斥的。

不过不考虑join明显是个问题,我估计应用系统中:普通的sql,join的sql以及更复杂的sql语句的比例是4:4:2。只是如果应用specification的话,join处理实在麻烦。


这个DDD到底是什么书啊?晕了。

在domain层次上搞,也许是个有意义的思路。只不过需要具体分析domain logic能否适合co,或者说,这个co搞出来,是真的能完全应对变化的关键性技术,还是只是一个摆设?这方面我觉得我还没有把握。需要一个domain方面的专家并且理解co的人来说话。

在sql上搞组合子,抛开到底多有用不说,至少我知道是可行的。relational algebra就是那么多东西,尽管演绎出来可以千变万化,基本演算就是那么几个,所以非常适合用co。


DDD=Domain.Driven.Design
0 请登录后投票
   发表时间:2006-08-15  
1.重用sql语句没有意义
2.和直接使用sql语句相比,如此实现显得更为复杂,功能也不如sql语句强大
0 请登录后投票
   发表时间:2006-08-16  
我正在想法弄一个svn host。
然后布娃娃有兴趣搞一个sql parser。

还缺人做sql code generator。就是实现几个visitor,根据不同数据库产生不同的sql。

对了,回楼上的。
1。任何代码重复都是有害的。
2。并不排斥使用sql,只不过在sql的基础上增加组合支持。实际上,query的基本骨架并不推荐用组合子从头组合,而是通过写sql让parser给parse成语法树。所以使用起来不会更复杂。
3。我们这个sql会用"where date between $startdate and $enddate"而不是传统jdbc的语法"where date between ? and ?"。绑定参数不是按照顺序,而是按照名字。
前者现在几乎是很多脚本系统的标准语法,更容易读,也容易使用。
当然,最终sql代码生成的时候,还是会生成?的。
0 请登录后投票
   发表时间:2006-08-16  
ajoo 写道

还缺人做sql code generator。就是实现几个visitor,根据不同数据库产生不同的sql。


我报名,不过我的sql功力一般。

很想和偶像一起体验组合子。
0 请登录后投票
   发表时间:2006-08-16  
引用
在那个回答问题的帖子里面。
给你3个月的时间,学习一门相对新的技术,你会学什么?
nihongye的回答是,jaskell。

这都让buaawhl记得,ajoo咱偶像啊,我已经强迫我的一个朋友开始在学jaskell咯。
0 请登录后投票
论坛首页 Java企业应用版

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