New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MySQL SQL文件审核定位行数错误 #2240
Comments
Closed
This was referenced Apr 18, 2024
Closed
问题3备注背景目前使用的是 parser.lexer.r.pos().Line 的值用作当前行号,parser.lexer.r.pos().Line的值实际是指当前解析的字符的行号,而不是开始行数.所以当遇到有换行符且不能解析的sql时, 解析器的行号会停在出错的行号,导致行号不准确.例如有如下sql,解析器会停在第3行,而不是第2行,导致开始行号不准确 select 1;
select *
fromd
tt; 一些尝试思路既然通过解析器的 parser.lexer.r.pos().Line 值来获取开始行号不准确,那么可以换一种思路,先获取当前行数解析点之前的sql, 实现步骤
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
verison
UI: main aeee2f9d
DMS: main-ee 19ee2c1ea2
SQLE: main-ee 342c635080
错误复现
发现两个错误
1. 不能解析的SQL会被认为是同一行(github不能上传.sql文件,将下面的sql复制到sql文件复现)
2. sql末尾有“;”的sql,影响行数错误
3 当有语法错误时,展示的行数应该是sql的起始行数,而不是语法出错的行数
有语法错误的sql起始行数是第2行
这里应该显示sql定位行数为2,但显示为出错的行数
问题1原因
问题背景:问题一中的第一到四条sql都属于解析器无法解析的sql,第5到8条属于解析器可以解析的sql.
当解析器遇到不能解析的sql时,会走到图1不能解析sql的逻辑,在这个逻辑中,会将Line值设为默认值1,遇到\n时解析器会默认将Line值加1,每次遇到解析解析器不支持的sql时,解析器都会将Line值设为1,所以第二到四条sql的行数都为2.
问题1解决方案
每次当解析器遇到不能解析的sql时,累加startLineOffset行数的值,这样就可以解决问题1
问题1影响面
问题1中的开始行数显示正常
问题3原因
因为为Line值是由\n的个数决定的,问题3的sql存在两个\n,所以Line值为3,导致页面行号行号显示为3
问题3解决方案
The text was updated successfully, but these errors were encountered: