2006-08-17
ajoo JRC
http://jrc.dev.java.net
ajoo项目批准了。
想参与的去java.net上申请一个账号吧。告诉ajoo,可以把你加进去。
cvs:
host: cvs.dev.java.net
repository: /cvs
module: /jrc
项目的缘起可以看这里。
http://forum.javaeye.com/viewtopic.php?p=132021#132021
项目总共分3部分。
1. jrc的组合子部分,可以生成AST。
checked out code。看到这部分ajoo已经做了。Relation,
这部分就是SQL的语法元素组合子。ajoo称之为AST。
2. 写parser,把ansi sql翻译成ast。准备用jparsec来写。
这部分是我的任务。要写一个Parser,根据SQL的解析结果产生AST。
jparsec的基本思想参见 Java Functional In Action
http://forum.javaeye.com/viewtopic.php?t=7951
jparsec项目参见
http://jparsec.codehaus.org/
3. Visitor
通过实现ast的visitor接口来针对具体dbms生成sql代码。(这里面应该还是有一些设计的技巧可用,来尽量在不同dbms之间重用代码。)
DB Dialect, native SQL.
---------------
JRC的使用过程:
Relation r = parser.parse(sql);
Relation r1 = r.top(n).where(...);
String sql = oracleVisitor.visit(r1);
ajoo项目批准了。
想参与的去java.net上申请一个账号吧。告诉ajoo,可以把你加进去。
cvs:
host: cvs.dev.java.net
repository: /cvs
module: /jrc
项目的缘起可以看这里。
http://forum.javaeye.com/viewtopic.php?p=132021#132021
项目总共分3部分。
1. jrc的组合子部分,可以生成AST。
checked out code。看到这部分ajoo已经做了。Relation,
这部分就是SQL的语法元素组合子。ajoo称之为AST。
2. 写parser,把ansi sql翻译成ast。准备用jparsec来写。
这部分是我的任务。要写一个Parser,根据SQL的解析结果产生AST。
jparsec的基本思想参见 Java Functional In Action
http://forum.javaeye.com/viewtopic.php?t=7951
jparsec项目参见
http://jparsec.codehaus.org/
3. Visitor
通过实现ast的visitor接口来针对具体dbms生成sql代码。(这里面应该还是有一些设计的技巧可用,来尽量在不同dbms之间重用代码。)
DB Dialect, native SQL.
---------------
JRC的使用过程:
Relation r = parser.parse(sql);
Relation r1 = r.top(n).where(...);
String sql = oracleVisitor.visit(r1);
评论
jxb8901
2006-12-16
ajoo 写道
明白了。
觉得这种需求还是用jdbc分两个query来得稳当。
大不了做个抽象,对两个数据库相同的情况用一下join来优化。
觉得这种需求还是用jdbc分两个query来得稳当。
大不了做个抽象,对两个数据库相同的情况用一下join来优化。
貌似ajoo倾向于我在关于多数据库SQL操作的问题中提到的2.B方案?即将SQL折分为两条,再用JDBC逐笔处理。
暂不考虑这个方案的执行效率问题,我在想如何实现上述的SQL语句拆分?或者这种拆分是否可以实现?
两种方案:
1、组装Relation的代码不变,在Relation组装时或SQL生成时检测是否跨数据库,然后根据情况生成一条或多条SQL语句,考虑如下的jrc调用
Relation r = Relations.table("customer@mssql").alias("customer");
r = r.join(JoinType.Inner, Relations.table("trans@oracle").alias("trans"),
Predicates.comparison(Expressions.column("customer", "id"),
BoolOperator.Eq, Expressions.column("trans", "customerid"), false));
r = r.where(Predicates.between(Expressions.column("customer", "age"),
Expressions.literal("20"), Expressions.literal("30")));
r = r.where(Predicates.in(Expressions.column("trans", "type"),
new Expression[]{Expressions.literal("1"), Expressions.literal("2")}));
r = r.groupBy("customer.id, sum(trans.amount)", "customer.id");
当不考虑多数据库的情况时,Generator将产生如下的SQL语句
select [customer].[id], sum([trans].[amount])
from [customer@mssql] AS [customer]
inner join [trans@oracle] AS [trans]
on [customer].[id]=[trans].[customerid]
where ([customer].[age] between '20' and '30' and [trans].[type] in ('1','2'))
group by [customer].[id]
假设用@符号表示表所在的数据库,那么上述Relation实际是跨两个数据库的,这时Generator必须生成出以下的两条SQL语句
select [customer].[id]
from [customer] AS [customer]
where ([customer].[age] between '20' and '30')
select sum([trans].[amount])
from [trans] AS [trans]
where ([trans].[type] in ('1','2') and [trans].[customerid]=?)
2、第二种方案是组装的时候每张表单独组装,一张表组装为一个Relation,该Relation中只包括本表的条件,最后由一个Relation的合并器根据表所在数据库的不同将多个Relation合并,不过这块应该和jrc没什么关系了。
总的来讲,多数据库操作就是相当麻烦,也许从理论上能够实现SQL的拆分,但以我目前的能力估计也要付出相当大的代价。
ajoo
2006-12-16
就是bsd
floating
2006-12-16
最近做一个项目需要对sql语句进行分析。本来已经打算用antlr来做,偶然看到ajoo在做jrc。抱着学习的态度快速地看了一遍JParse和jrc的文档。现在初步的想法是想利用jrc里面的源码进行改造。但是还不了解JParse的License到底是怎么回事。ajoo能不能解释一下Zephyr License?我看了license的原文,好像没有任何限制啊,只要保留license和源代码中的相关注释就可以了。请问ajoo是不是这样?
ajoo
2006-12-15
jxb8901 写道
1、对update/insert/delete的封装以及Generator接口正是我想要的。
2、关于多数据库的问题,可能是我没有讲清楚(具体情况在这个帖子中有说明:关于多数据库SQL操作的问题),现在感觉也许在Relation的中很难实现,直接使用从一个数据库中访问另一个数据库的功能也许更好。
谢谢ajoo的解答!
2、关于多数据库的问题,可能是我没有讲清楚(具体情况在这个帖子中有说明:关于多数据库SQL操作的问题),现在感觉也许在Relation的中很难实现,直接使用从一个数据库中访问另一个数据库的功能也许更好。
谢谢ajoo的解答!
明白了。
觉得这种需求还是用jdbc分两个query来得稳当。
大不了做个抽象,对两个数据库相同的情况用一下join来优化。
jxb8901
2006-12-15
1、对update/insert/delete的封装以及Generator接口正是我想要的。
2、关于多数据库的问题,可能是我没有讲清楚(具体情况在这个帖子中有说明:关于多数据库SQL操作的问题),现在感觉也许在Relation的中很难实现,直接使用从一个数据库中访问另一个数据库的功能也许更好。
谢谢ajoo的解答!
2、关于多数据库的问题,可能是我没有讲清楚(具体情况在这个帖子中有说明:关于多数据库SQL操作的问题),现在感觉也许在Relation的中很难实现,直接使用从一个数据库中访问另一个数据库的功能也许更好。
谢谢ajoo的解答!
ajoo
2006-12-15
jxb8901 写道
使用JRC的过程中遇到如下问题
1、目标是计算客户得分,大体步骤如下:
第一步从交易表中根据一定的条件计算出客户得分
第二步将前面计算的客户得分保存到客户得分表
2、因为计算条件很复杂,因此使用JRC来实现SQL的生成.
具体实现分两部分:一部分负责组装Relation, 另一部分执行Relation
组装Relation的示例代码如下:
系统有一个RelationExecutor执行Relation, 它的职责是从Relation中生成SQL,并执行
3、因为目标数据库环境不确定,可能存在如下三种情况.
A.所有的表都在一个数据库.
B.步骤一中计算得分的表在一个数据库,步骤二中更新得分的表在另一个数据库.
C.步骤一中涉及的两个表分别在两个不同的数据库.更新表又在另一个数据库.
我们希望不论是那种情况,组装Relation的代码不变,所有的变化希望能由RelationExecutor负责处理。
4、问题:
A、如何实现UpdateRelation?
目前的JRC可以将一个查询的Select语句用一个Relation来表示,但不能表示用于更新数据库的UPDATE
B、是否能实现一个RelationExecutor以处理上述三种数据库环境?如何实现?
1、目标是计算客户得分,大体步骤如下:
第一步从交易表中根据一定的条件计算出客户得分
select customer.id, sum(pos.value/10*2) from customer, pos where customer.id=pos.customerid and pos.date between '20060101' and '20061231' and ... group by customer.id
第二步将前面计算的客户得分保存到客户得分表
update points set point = point + :2: where id = :1:
2、因为计算条件很复杂,因此使用JRC来实现SQL的生成.
具体实现分两部分:一部分负责组装Relation, 另一部分执行Relation
组装Relation的示例代码如下:
Relation r = Relations.table("customer");
r = r.join(...);
r = r.where(where);
r = r.groupBy(...);
r = r.project(...);
UpdateRelation update = Relations.update("point", ExpressionUtil.parse("point + :2:"), r);
系统有一个RelationExecutor执行Relation, 它的职责是从Relation中生成SQL,并执行
3、因为目标数据库环境不确定,可能存在如下三种情况.
A.所有的表都在一个数据库.
B.步骤一中计算得分的表在一个数据库,步骤二中更新得分的表在另一个数据库.
C.步骤一中涉及的两个表分别在两个不同的数据库.更新表又在另一个数据库.
我们希望不论是那种情况,组装Relation的代码不变,所有的变化希望能由RelationExecutor负责处理。
4、问题:
A、如何实现UpdateRelation?
目前的JRC可以将一个查询的Select语句用一个Relation来表示,但不能表示用于更新数据库的UPDATE
B、是否能实现一个RelationExecutor以处理上述三种数据库环境?如何实现?
1。组装relation除了用jrc api,还可以用jrc parser的。如果你不需要动态地用各种逻辑来组装的话,直接写jrc支持的跨数据库的sql最方便。然后用SqlParser
2。确实。现在jrc的parser和ast都不包括update/insert/delete。
如果自制的话。可以写这么个接口:
interface Generator {
CodeBuilder generateRelation(Relation rel);
CodeBuilder generateUpdate(Update stmt);
CodeBuilder generateDelete(Delete stmt);
CodeBuilder generateInsert(Insert stmt);
}
然后,
1。把各个不同的CodeGenerator都adapt到Generator接口(或者可以修改jrc代码,让MsSqlGenerator, PostgreSqlGenerator都实现这个接口)
2。自己写一个简单的java bean来封装update,insert,delete,可以叫做Insert, Update, Delete。(建议用immutable数据结构)。
这个Generator应该就是你的RelationExecutor,它负责封装不同dbms系统的语法差别。
Relation, Expression, Update, Delete, Insert等等代表不同的statement。
不知道这个解决方法是否符合你的要求?
为什么现在jrc没有封装update这些dml呢?因为dml都很简单,可以很直接地从relation的基础上生成。relation和它们也没有递归依赖关系。(不可能一个子查询包含dml,一个dml也不会包含一个子dml)
但是,进一步地把dml封装进jrc看来也是很实用的想法。这两天如果有时间我会开始写dml部分的代码的。
jxb8901
2006-12-15
使用JRC的过程中遇到如下问题
1、目标是计算客户得分,大体步骤如下:
第一步从交易表中根据一定的条件计算出客户得分
第二步将前面计算的客户得分保存到客户得分表
2、因为计算条件很复杂,因此使用JRC来实现SQL的生成.
具体实现分两部分:一部分负责组装Relation, 另一部分执行Relation
组装Relation的示例代码如下:
系统有一个RelationExecutor执行Relation, 它的职责是从Relation中生成SQL,并执行
3、因为目标数据库环境不确定,可能存在如下三种情况.
A.所有的表都在一个数据库.
B.步骤一中计算得分的表在一个数据库,步骤二中更新得分的表在另一个数据库.
C.步骤一中涉及的两个表分别在两个不同的数据库.更新表又在另一个数据库.
我们希望不论是那种情况,组装Relation的代码不变,所有的变化希望能由RelationExecutor负责处理。
4、问题:
A、如何实现UpdateRelation?
目前的JRC可以将一个查询的Select语句用一个Relation来表示,但不能表示用于更新数据库的UPDATE
B、是否能实现一个RelationExecutor以处理上述三种数据库环境?如何实现?
1、目标是计算客户得分,大体步骤如下:
第一步从交易表中根据一定的条件计算出客户得分
select customer.id, sum(pos.value/10*2) from customer, pos where customer.id=pos.customerid and pos.date between '20060101' and '20061231' and ... group by customer.id
第二步将前面计算的客户得分保存到客户得分表
update points set point = point + :2: where id = :1:
2、因为计算条件很复杂,因此使用JRC来实现SQL的生成.
具体实现分两部分:一部分负责组装Relation, 另一部分执行Relation
组装Relation的示例代码如下:
Relation r = Relations.table("customer");
r = r.join(...);
r = r.where(where);
r = r.groupBy(...);
r = r.project(...);
UpdateRelation update = Relations.update("point", ExpressionUtil.parse("point + :2:"), r);
系统有一个RelationExecutor执行Relation, 它的职责是从Relation中生成SQL,并执行
3、因为目标数据库环境不确定,可能存在如下三种情况.
A.所有的表都在一个数据库.
B.步骤一中计算得分的表在一个数据库,步骤二中更新得分的表在另一个数据库.
C.步骤一中涉及的两个表分别在两个不同的数据库.更新表又在另一个数据库.
我们希望不论是那种情况,组装Relation的代码不变,所有的变化希望能由RelationExecutor负责处理。
4、问题:
A、如何实现UpdateRelation?
目前的JRC可以将一个查询的Select语句用一个Relation来表示,但不能表示用于更新数据库的UPDATE
B、是否能实现一个RelationExecutor以处理上述三种数据库环境?如何实现?
ajoo
2006-12-13
swfeye 写道
很高兴能加入这个项目,就是不知怎么贡献自己的一份力.我的java.net帐号是firebirdswf.请求加入.
不知怎么将疑问发给你,是直接在这个贴子里回吗?
再次感谢!!!
不知怎么将疑问发给你,是直接在这个贴子里回吗?
再次感谢!!!
你要在java.net上申请加入jrc项目,这样我才能把你加进来。
关于疑问,有代表性的发帖子,一般的可以可能给我发信。ajoo . email 在 gmail.com
swfeye
2006-12-13
很高兴能加入这个项目,就是不知怎么贡献自己的一份力.我的java.net帐号是firebirdswf.请求加入.
不知怎么将疑问发给你,是直接在这个贴子里回吗?
再次感谢!!!
不知怎么将疑问发给你,是直接在这个贴子里回吗?
再次感谢!!!
ajoo
2006-12-13
swfeye 写道
非常感谢ajoo百忙中抽出时间来解惑!!!
我刚才试了下,
己能成功生成一个比较复杂的join sql.
不过,
还有几点关于设计上的疑问:
1.为什么不建一个SQLGenerator的接口,以此来统一各种数据库Generator的接口.这样,用户要生成指定数据库的sql就直接从factory取得一个相应数据库的SQLGenerato,然后就在这个接口上调generate.这样,应用在不同数据库中迁移就直接可能在配置文件中更改目标数据库名即可.更有甚者,可能在同一个应用中要同时面对一个以上的不同数据库.我现在就面临一个这样的项目.
2.jrc是否有一个比较完整的AST关系图,最好是一个最复杂的AST图,里面包含所有元素.http://docs.codehaus.org/display/JPARSEC/Jrc+AST感觉是比较简单的一些情况.对照其看源码时,还是有些不懂.
比如为什么OrderRelation总是会包括GroupByRelation?所有Relation之间的包括关系是怎样了.好想有一个比较全一点的文档啊...
呵呵,说了这么多,再次感谢各位的付出...
我刚才试了下,
己能成功生成一个比较复杂的join sql.
不过,
还有几点关于设计上的疑问:
1.为什么不建一个SQLGenerator的接口,以此来统一各种数据库Generator的接口.这样,用户要生成指定数据库的sql就直接从factory取得一个相应数据库的SQLGenerato,然后就在这个接口上调generate.这样,应用在不同数据库中迁移就直接可能在配置文件中更改目标数据库名即可.更有甚者,可能在同一个应用中要同时面对一个以上的不同数据库.我现在就面临一个这样的项目.
2.jrc是否有一个比较完整的AST关系图,最好是一个最复杂的AST图,里面包含所有元素.http://docs.codehaus.org/display/JPARSEC/Jrc+AST感觉是比较简单的一些情况.对照其看源码时,还是有些不懂.
比如为什么OrderRelation总是会包括GroupByRelation?所有Relation之间的包括关系是怎样了.好想有一个比较全一点的文档啊...
呵呵,说了这么多,再次感谢各位的付出...
1。开发中还没有遇到要进行这样的抽象的需求。目前还仅仅是给不同的dbms生成代码,没有到屏蔽数据库差异的这个地步。你可以看看AstPrinter这个接口,所有的codegen都实现这个接口的。
不过,确实还没有实现一个facade来负责给不同数据库给出不同的codegen。(实现起来应该是不难的)
从swfeye的描述来看,似乎你们要面临这样的需求,甚至还要处理不同的数据库。不知道swfeye有没有意加入这个项目?这样可以方便地把你的修改共享出来。
2。OrderRelation没有总包括GroupByRelation啊。关于文档。opensource永远的痛啊。:-)
一个可行的方案是你把你的疑问发给我,我来解答。最后还可以把疑问整理成文档。不知你觉得怎么样?
swfeye
2006-12-13
非常感谢ajoo百忙中抽出时间来解惑!!!
我刚才试了下,
己能成功生成一个比较复杂的join sql.
不过,
还有几点关于设计上的疑问:
1.为什么不建一个SQLGenerator的接口,以此来统一各种数据库Generator的接口.这样,用户要生成指定数据库的sql就直接从factory取得一个相应数据库的SQLGenerato,然后就在这个接口上调generate.这样,应用在不同数据库中迁移就直接可能在配置文件中更改目标数据库名即可.更有甚者,可能在同一个应用中要同时面对一个以上的不同数据库.我现在就面临一个这样的项目.
2.jrc是否有一个比较完整的AST关系图,最好是一个最复杂的AST图,里面包含所有元素.http://docs.codehaus.org/display/JPARSEC/Jrc+AST感觉是比较简单的一些情况.对照其看源码时,还是有些不懂.
比如为什么OrderRelation总是会包括GroupByRelation?所有Relation之间的包括关系是怎样了.好想有一个比较全一点的文档啊...
呵呵,说了这么多,再次感谢各位的付出...
我刚才试了下,
己能成功生成一个比较复杂的join sql.
不过,
还有几点关于设计上的疑问:
1.为什么不建一个SQLGenerator的接口,以此来统一各种数据库Generator的接口.这样,用户要生成指定数据库的sql就直接从factory取得一个相应数据库的SQLGenerato,然后就在这个接口上调generate.这样,应用在不同数据库中迁移就直接可能在配置文件中更改目标数据库名即可.更有甚者,可能在同一个应用中要同时面对一个以上的不同数据库.我现在就面临一个这样的项目.
2.jrc是否有一个比较完整的AST关系图,最好是一个最复杂的AST图,里面包含所有元素.http://docs.codehaus.org/display/JPARSEC/Jrc+AST感觉是比较简单的一些情况.对照其看源码时,还是有些不懂.
比如为什么OrderRelation总是会包括GroupByRelation?所有Relation之间的包括关系是怎样了.好想有一个比较全一点的文档啊...
呵呵,说了这么多,再次感谢各位的付出...
ajoo
2006-12-12
swfeye 写道
刚刚下了jrc,体验了下,有几个不太明白的地方,请高手帮下忙.
1.如何使用jrc生成update语句?
2.可不可以用jrc生成一个expression对应的sql片断?
谢谢!
1.如何使用jrc生成update语句?
2.可不可以用jrc生成一个expression对应的sql片断?
谢谢!
1. MsSqlGenerator.generateUpdate
2. MsSqlGenerator.generate
swfeye
2006-12-12
刚刚下了jrc,体验了下,有几个不太明白的地方,请高手帮下忙.
1.如何使用jrc生成update语句?
2.可不可以用jrc生成一个expression对应的sql片断?
谢谢!
1.如何使用jrc生成update语句?
2.可不可以用jrc生成一个expression对应的sql片断?
谢谢!
bigpanda
2006-11-10
ajoo 写道
bigpanda 写道
我在上一贴所指的工具,是指lex, yacc, flex, bison(C语言), mllex, mlyacc(ML)这些语法词法生成器。
恩。还有jparsec的。跟我说这些yacc什么的而不说jparsec偶会生气地。
呵呵,我在编译器上的功力实在太浅,孤陋寡闻,知道的这点东西都是上大学时老师讲的,还没学好。刚买了本Appel的书打算修炼修炼,回头涨点功力了,再向你请教。
ajoo
2006-11-07
bigpanda 写道
我在上一贴所指的工具,是指lex, yacc, flex, bison(C语言), mllex, mlyacc(ML)这些语法词法生成器。
恩。还有jparsec的。跟我说这些yacc什么的而不说jparsec偶会生气地。
bigpanda
2006-11-07
ajoo 写道
bigpanda 写道
给Oracle写一个SQL语法解释器,要是Oracle生成了mssql的sql dialect,肯定通不过去。生成个Lexical Analyzer和grammer parser就够了吧。因为都有现成的工具,写这些挺快的吧。
有现成的工具自然好。否则自己写,麻烦不说,(几乎相当于另外一个项目了,还要写mysql, postgresql, mssql等的parser),又怎么测试自己写的这个parser符合oracle/mssql的标准呢?
如何保证代码的正确性,回答是写测试,那如何保证测试代码的正确性?这是个鸡生蛋,蛋生鸡的问题。
怎么定义代码的正确性? 比如说我手里有一份specification, 要写代码来实现这个specification, 我可以把这个specification用predicate logic来完整的表达出来,如果代码违反了predicate logic的property,那么代码肯定有问题。搞Formal Method的人弄的就是这些东西吧,他们的理想是给出一组prodicate logic的表达式,自动生成程序,保证程序绝对正确。
如果specification里面有逻辑错误,那么完全符合specification的代码当然也有逻辑错误。这种错误可以用严格的数学证明来排除。
好好研究一下precondition, postcondition和invariant还是很有意义的。
我们现在手里有一份language specification, 要检查程序生成的language是否正确,如果specification没有逻辑错误,就只剩人为错误要预防,可以让n个人写parser检查,n个人在同一地方(predicate logic property)犯个人为的错误,可能性随着n的增大而递减。
麻烦吧,天下没有免费的午餐,除了写航天飞机的控制程序一般人也没有时间,财力保证程序100%正确。
我在上一贴所指的工具,是指lex, yacc, flex, bison(C语言), mllex, mlyacc(ML)这些语法词法生成器。搞编译器的弄这些不难吧,我功夫可不够。刚买了本Modern Compiler Implementation in Java 2nd Edition打算修炼修炼。
ajoo
2006-11-07
bigpanda 写道
ajoo 写道
jrc的基本框架都搭好了,基本上剩下就是给不同的dbms填进去各个不同的code generator。
就是有一个问题有点头疼:
怎样测试生成的sql的合法性?比如我如果不小心给oracle生成了mssql的语法,怎样能够自动测试来找出错误?莫非必须要建立一个oracle db,然后建立相关表?
就是有一个问题有点头疼:
怎样测试生成的sql的合法性?比如我如果不小心给oracle生成了mssql的语法,怎样能够自动测试来找出错误?莫非必须要建立一个oracle db,然后建立相关表?
给Oracle写一个SQL语法解释器,要是Oracle生成了mssql的sql dialect,肯定通不过去。生成个Lexical Analyzer和grammer parser就够了吧。因为都有现成的工具,写这些挺快的吧。
有现成的工具自然好。否则自己写,麻烦不说,(几乎相当于另外一个项目了,还要写mysql, postgresql, mssql等的parser),又怎么测试自己写的这个parser符合oracle/mssql的标准呢?
bigpanda
2006-11-07
ajoo 写道
jrc的基本框架都搭好了,基本上剩下就是给不同的dbms填进去各个不同的code generator。
就是有一个问题有点头疼:
怎样测试生成的sql的合法性?比如我如果不小心给oracle生成了mssql的语法,怎样能够自动测试来找出错误?莫非必须要建立一个oracle db,然后建立相关表?
就是有一个问题有点头疼:
怎样测试生成的sql的合法性?比如我如果不小心给oracle生成了mssql的语法,怎样能够自动测试来找出错误?莫非必须要建立一个oracle db,然后建立相关表?
给Oracle写一个SQL语法解释器,要是Oracle生成了mssql的sql dialect,肯定通不过去。生成个Lexical Analyzer和grammer parser就够了吧。因为都有现成的工具,写这些挺快的吧。
ajoo
2006-11-07
jrc的基本框架都搭好了,基本上剩下就是给不同的dbms填进去各个不同的code generator。
就是有一个问题有点头疼:
怎样测试生成的sql的合法性?比如我如果不小心给oracle生成了mssql的语法,怎样能够自动测试来找出错误?莫非必须要建立一个oracle db,然后建立相关表?
就是有一个问题有点头疼:
怎样测试生成的sql的合法性?比如我如果不小心给oracle生成了mssql的语法,怎样能够自动测试来找出错误?莫非必须要建立一个oracle db,然后建立相关表?
ajoo
2006-10-22
jrc的sql parser已经做好了.整个框架也搭好了. mssql的code generator也写了,postgresql的code generator也有了.
现在还差oracle, mysql的codegen.没人报名做么?难度不高的.
现在还差oracle, mysql的codegen.没人报名做么?难度不高的.
- 浏览: 585664 次
- 性别:

- 来自: china

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
网上银行的安全操作设计探 ...
有道理,不知道建设银行的UKey有啥用?
-- by sjz209 -
网上银行的安全操作设计探 ...
有道理,不知道建设银行的UKey有啥用?
-- by sjz209 -
网上银行的安全操作设计探 ...
1、据了解,动态口令采用的就是楼主说的第2种机制,所以动态口令发生器会有一个容错 ...
-- by jxb8901 -
谁说搞技术的没有幽默感?
yyliuliang 写道部门老大宣布放一年长假,大伙欢呼雀跃,连作三个俯卧撑表 ...
-- by hongfei3 -
谁说搞技术的没有幽默感?
幸存者 写道为什么我觉得不好笑?是因为我没有幽默感么? bingoo
-- by roger






评论排行榜