[发明专利]一种基于结构化查询语言语句的源信息追踪方法有效
| 申请号: | 201110434707.X | 申请日: | 2011-12-22 |
| 公开(公告)号: | CN102402615A | 公开(公告)日: | 2012-04-04 |
| 发明(设计)人: | 黄少滨;朴秀峰;申林山;毛瑞雪;刘国峰;刘建华 | 申请(专利权)人: | 哈尔滨工程大学 |
| 主分类号: | G06F17/30 | 分类号: | G06F17/30 |
| 代理公司: | 暂无信息 | 代理人: | 暂无信息 |
| 地址: | 150001 黑龙江省哈尔滨市南岗区*** | 国省代码: | 黑龙江;23 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 结构 查询 语言 语句 信息 追踪 方法 | ||
1.一种基于结构化查询语言语句的源信息追踪方法,其特征是:首先将SQL语句按其不同的结构进行分类,之后对不同类型的SQL语句进行逆向处理,在得到源信息后将源信息进行存储,并在源信息上再次执行原SQL语句,与之前得到的结果集进行对比,得出结论。
2.根据权利要求1所述的一种基于结构化查询语言语句的源信息追踪方法,其特征是具体实现步骤包括:
步骤1对SQL语句进行分类
1.1扫描SQL语句,根据其关键字将SQL语句内容存储到SQL语句结构表中;
1.2获取from及where字段值,并进行判断;
1.3如果from字段中不包括in或“(”或“,”字样或符号,且where字段中不包括>、<、=比较运算符及exists谓词,且join及on的字段值为空,则为简单类型SQL语句,执行步骤2;
1.4如果字段不包括in或“(”字样或符号,但包括“,”,或join及on的字段值不为空,且where字段中不包括>、<、=比较运算符及exists谓词,则为含多表操作的简单SQL语句,则执行步骤3;
1.5如果字段包括in或“(”字样或符号,或where字段中包括>、<、=比较运算符或exists谓词,则为嵌套含子查询的SQL语句,则执行步骤4;
步骤2简单类型SQL语句S1的逆向处理:
2.1输入:SQL语句S1;
2.2输出:S1的逆向SQL;
2.3扫描SQL语句,对结构进行存储;
2.4根据对SQL语句的扫描,得到FROM后的表名;
2.5如果语句中含有ORDER BY从句,则分析expression i是否含有TOP选项,其中1≤i≤n;如不含有TOP选项,则将ORDERBY从句忽略,转向2.7;如含有TOP选项,则获取相应字段,转向2.6;
2.6获取GROUP BY字段中的值,如果值为空,则转向2.7,如不为空,对GROUP BY字段中的expression i作为连接条件,写成嵌套形式的SQL,嵌套SQL语句的内部为原SQL语句除SELECT外的所有字段,SELECT字段为SELECT expression i;
2.7从SQL语句结构表中提取SQL语句的WHERE字段的属性值;
2.8将2.2、2.3、2.4或2.5中获得的各字段转换为相应的SQL语言,并与SELECT字段拼接形成SQL语句;
步骤3:含多表操作的简单SQL语句S2逆向处理
输入:SQL语句S2,
输出:S2的逆向SQL;
3.1获取FROM后及JOIN后的表名;
3.2分别对各个表进行源数据的查询,将WHERE后或ON后的与多表相关的匹配条件改写为逆向SQL中的嵌套SQL形式;
3.3判断WHERE后是否有对单表进行筛选的条件,如果有,则在对在筛选条件中出现的具体表进行源信息查询时,将筛选条件添加到WHERE筛选条件中;
3.4如果WHERE中的筛选条件含有对多个表的不同属性进行的计算,则对相关表进行逆向获取原数据时在子查询内要用JOIN…ON…进行关联运算,将需要进行多表计算的筛选条件加入;
3.5如果语句中含有ORDER BY从句,则分析expression i是否含有TOP选项,其中1≤i≤n,如不含有TOP选项,则在逆向处理时将ORDER BY从句忽略,如含有TOP选项,则获取字段;
3.6将3.3、3.4、3.5步骤所得多个字段改为SQL语言形式,并与SELECT字段进行拼接,形成逆向SQL语句;
步骤4嵌套含子查询的SQL语句S3逆向方法
输入:SQL语句S3,
输出:S3的逆向SQL;
4.1扫描SQL语句,将SQL语句分层,并存储层次结构;
4.2根据对SQL语句的扫描,得到FROM后或WHERE后的嵌套SQL语句的需要进行源信息查询的表名;
4.3由内而外,依次分析每层SQL语句的表名是否在外层SQL中出现,若不出现,且中间表的信息不在筛选条件中出现,则在层次内对表进行源信息的处理。如果层为简单的单表执行的SQL语句,则用步骤2进行处理;若层为多表执行的简单SQL语句,则用步骤3进行处理;
4.4从内而外,为最内层SQL语句建立一个视图,将视图作为中间表,代替原SQL语句中的中间表部分,依次对当前层SQL语句进行4.3的处理,直到SQL语句变为简单的无嵌套查询的形式;
4.5由于用中间视图代替中间表名,在对具体表进行逆向处理时,SQL语句中已经不存在表名,在表所在层次的SQL语句中找到表与层中间表之间的关系,将这个连接条件作为层视图和表之间的连接条件;
4.6分析4.4所得到的SQL语句的WHERE后的筛选条件,当含有中间表与实体表之间通过属性值相等而进行连接的筛选条件时,由于是对具体表进行属性查询,不能对中间表进行连接操作,因此将筛选条件改为嵌套子查询的形式,并在子查询内对4.4得到的中间视图进行连接;
4.7对WHERE后其他的筛选条件进行判断,在对筛选条件中出现的具体表进行源信息查询时,将与表对应的筛选条件加到WHERE筛选条件中;
4.8将得到的嵌套子查询,WHERE语句相关信息与SELECT语句进行拼接,得到逆向SQL语句。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于哈尔滨工程大学,未经哈尔滨工程大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110434707.X/1.html,转载请声明来源钻瓜专利网。





