#1. 为什么会出现SQL语法树?
假设有一个SQL语句
select name,age,count(name) as count_name,
count(id) as count_id from mytable where id = ? and name = ?
这是一条sql语句,如果你想运行这个语句(下面写伪代码,具体实现肯定不是这样的但是这是人实现的思想)
1.找到数据库表mytable
,这里要获取表名简单一个if判断
2.假设里面有1000条数据,那么我们先获取1000条
id name age sex birthday
1 梁川川 23 男 2015-04-08
2 梁川川1 23 男 2015-04-08
3 梁川川2 23 男 2015-04-08
。。。。。
3.然后根据语句获取我们需要的列,根据name,age,count(name) as count_name,count(id) as count_id
获得id name age
,这里我们可能需要些很多if去判断
id name age
1 梁川川 23
2 梁川川1 23
3 梁川川2 23
。。。。。
4.然后开始过滤 ,后面的就不说了
对于这个问题,开始的设想比较简单,大致过程是:把Sql语句中不相同的关键字和函数名替换掉,如Oracle中的To_Date换成SqlServer的Convert,就可以在SqlServer上执行了.对一些简单的Sql语句这样确实可以,可是对复杂的应用来说,Sql语句可能多层嵌套,函数也有多层嵌套,如果只是简单的替换,代码中必然会有无数的if else,并且出错后的修改和调试几乎是不可能的。
通过对Oracle和SqlServer两种数据库的Sql语法的研究比较,认为必须采用语法分析,把Sql语句解析为一棵语法树,然后再按照语法的转换规