SQL解析器之词法分析--预扫描

简介: 我设计的在SQL语句解析之前,先必须进行预扫描,其作用是 去除注释 去除前导空格 并且将各单词之间的多个空格压缩成一个 并且去掉所有的换行符便于语法分析 1 function TSCanner.

我设计的在SQL语句解析之前,先必须进行预扫描,其作用是

  • 去除注释
  • 去除前导空格
  • 并且将各单词之间的多个空格压缩成一个
  • 并且去掉所有的换行符便于语法分析
 1 function TSCanner.Pro_Process(str: string): string;
2 var
3 sTemp, sTemp1: string;
4 sList: TStringList;
5 iPos, iPos1, i: Integer;
6 begin
7 sList := TStringList.Create;
8 sList :=SplitString(str,#13#10);
9 for i := 0 to sList.Count - 1 do
10 begin
11 sTemp := sList[i];
12 iPos := Pos('//', stemp);
13 if iPos > 0 then
14 begin
15 sTemp1 := Copy(sTemp, 1, iPos - 1);
16 sList[i] := sTemp1;
17 end;
18 end;
19
20 sTemp := sList.Text;
21 sList.Free;
22
23 sTemp := StringReplace(sTemp, #13#10, ' ', [rfReplaceAll]);
24 while Pos(' ', sTemp) > 0 do
25 sTemp := StringReplace(sTemp, ' ', ' ', [rfReplaceAll]);
26 sTemp := Trim(StringReplace(sTemp, ', ', ',', [rfReplaceAll]));
27 iPos :=Pos('/*',sTemp);
28 if iPos>0 then
29 begin
30 iPos1 :=Pos('*/',sTemp);
31 if iPos1>0 then
32 begin
33 sTemp :=Trim(Copy(sTemp, 1,iPos-1)+copy(sTemp,iPos1+2,Length(sTemp)-ipos1-1));
34 end;
35 end;
36 sTemp1 := UpdateAllKey(sTemp);
37 Result := sTemp1;
38 end;
39
40
41 function TSCanner.UpdateAllKey(sWords:string):string;
42 var
43 i,j:Integer;
44 sList:TStringList;
45 sTemp:string;
46 begin
47 sTemp :=sWords;
48 sList :=TStringList.Create;
49 sList.CommaText :=StringReplace(sTemp,' ',#13#10,[rfReplaceAll]);
50 for i:=0 to sList.Count -1 do
51 begin
52 for j:=Low(SQLKEY) to High(SQLKEY) do
53 begin
54 if LowerCase(sList[i])=LowerCase(SQLKEY[j].Content) then
55 begin
56 sTemp :=StringReplace(sTemp,sList[i],UpperCase(SQLKEY[j].Content),[rfReplaceAll]);
57 Break;
58 end;
59 end;
60 end;
61 sList.Free;
62 Result :=sTemp;
63 end;


 

相关文章
|
16天前
|
SQL 安全 网络安全
DVWA SQL Injection (Blind) 通关解析
DVWA SQL Injection (Blind) 通关解析
|
20天前
|
SQL 运维 监控
MSSQL性能调优深度解析:索引优化策略、SQL查询优化技巧与高效并发管理实践
在Microsoft SQL Server(MSSQL)的运维与优化领域,性能调优是确保数据库高效运行、满足业务需求的关键环节
|
20天前
|
SQL 存储 监控
MSSQL性能调优深度解析:索引策略优化、SQL语句精炼与并发管理技巧
在Microsoft SQL Server(MSSQL)的性能调优领域,索引策略的优化、SQL语句的精炼以及高效的并发管理技巧是提升数据库性能不可或缺的三大方面
|
20天前
|
SQL 运维 监控
MSSQL性能调优深度解析:索引精细调整、SQL查询优化与并发控制策略
在Microsoft SQL Server(MSSQL)的运维实践中,性能调优是确保数据库高效、稳定运行的核心任务
|
21天前
|
SQL 运维 监控
MSSQL性能调优深度解析:索引精细管理、SQL查询优化技巧与高效并发控制
在Microsoft SQL Server(MSSQL)的运维与性能调优过程中,针对索引、SQL查询和并发控制的有效管理是提高数据库性能和稳定性的关键
|
1月前
|
SQL Java 数据库连接
Mybatis日志SQL解析
Mybatis日志SQL解析
22 0
|
1月前
|
SQL 算法 大数据
深入解析力扣177题:第N高的薪水(SQL子查询与LIMIT详解及模拟面试问答)
深入解析力扣177题:第N高的薪水(SQL子查询与LIMIT详解及模拟面试问答)
|
2月前
|
SQL 关系型数据库 MySQL
你写的每条SQL都是全表扫描吗
你写的每条SQL都是全表扫描吗?如果是,那MySQL可太感谢你了,每一次SQL执行都是在给MySQL上压力、上对抗。MySQL有苦难言:你不知道索引吗?你写的SQL索引都失效了不知道吗?慢查询不懂啊?建那么多索引干嘛呢。。。
|
2月前
|
SQL XML 安全
Pikachu SQL 注入通关解析
Pikachu SQL 注入通关解析
|
2月前
|
SQL 安全 前端开发
Go语言Gin框架安全加固:全面解析SQL注入、XSS与CSRF的解决方案
Go语言Gin框架安全加固:全面解析SQL注入、XSS与CSRF的解决方案

推荐镜像

更多