Skip to content
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

自动识别Oracle SQL上线文本中的PLSQL程序块 #2071

Merged
merged 19 commits into from
Mar 22, 2023

Conversation

songtao12
Copy link
Contributor

@songtao12 songtao12 commented Mar 3, 2023

自动识别Oracle SQL上线文本中的PLSQL程序块,原代码逻辑要求在PLSQL块开始和结尾处手动添加指定符号,很难满足产线实际上线要求,新功能在原来基础上实现自动识别和分割PLSQL代码块。

feat-自动识别分割SQL文本中PLSQL程序块
@songtao12 songtao12 changed the title Songtao12 patch 2 自动识别Oracle SQL上线文本中的PLSQL程序块 Mar 3, 2023
Copy link
Collaborator

@LeoQuote LeoQuote left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这一段程序比较复杂, 单元测试和单元测试覆盖率必须达标

@songtao12
Copy link
Contributor Author

这一段程序比较复杂, 单元测试和单元测试覆盖率必须达标

这部分代码需要修改和优化下,后面我会重新提交

修改、优化代码
修改优化代码
处理如下报错:
f"Oracle 语句执行报错,第{line}个SQL:{sqlitem.statement},错误信息{traceback.format_exc()}"
UnboundLocalError: local variable 'sqlitem' referenced before assignment
处理如下报错:
UnboundLocalError: local variable 'tmp_list' referenced before assignment
@codecov
Copy link

codecov bot commented Mar 14, 2023

Codecov Report

Patch coverage: 100.00% and project coverage change: +0.49 🎉

Comparison is base (db971d1) 75.02% compared to head (17ca8dd) 75.51%.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #2071      +/-   ##
==========================================
+ Coverage   75.02%   75.51%   +0.49%     
==========================================
  Files         102      102              
  Lines       14819    14906      +87     
==========================================
+ Hits        11118    11257     +139     
+ Misses       3701     3649      -52     
Impacted Files Coverage Δ
sql/engines/oracle.py 50.68% <100.00%> (+2.04%) ⬆️
sql/engines/tests.py 99.79% <100.00%> (+<0.01%) ⬆️
sql/utils/sql_utils.py 90.90% <100.00%> (+27.82%) ⬆️
sql/utils/tests.py 100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report in Codecov by Sentry.
📢 Do you have feedback about the report comment? Let us know in this issue.

调整代码书写规范
优化代码
@songtao12
Copy link
Contributor Author

这一段程序比较复杂, 单元测试和单元测试覆盖率必须达标

这部分代码需要修改和优化下,后面我会重新提交

代码已重新修改和优化

@LeoQuote
Copy link
Collaborator

能否增加一些单元测试?

@songtao12
Copy link
Contributor Author

能否增加一些单元测试?

能否增加一些单元测试?

我开发完成后是在本地环境,用公司实际上线的SQL脚本做了SQL检测,检测了20个SQL文本,每个文本平均在3万行,累计60万行左右的SQL脚本,其中包括各种SQL语句以及PLSQL块,检测结果暂时没有发现分割错乱的情况。
SQL文本处理这部分比较复杂,会存在各种各样的情况,我在写代码过程中是根据Oracle执行SQL的书写规范(参照PLSQL Developer与SQL * PLUS工具),尽量覆盖到可能存在的各种情况,但也很难保证100%覆盖到所有可能的场景。
原代码逻辑我在测试过程中也发现即使在PLSQL块前后强制添加指定符号作为开始和结尾标识符,也会在特定情况下出现分割错乱(如:PLSQL块内部文本内容包含"$$"符号时,会被从中间切分开)。
目前我能想到的场景都已经测试通过,有问题的也进行了代码修复和优化,对于可能存在的其他特定场景下触发的问题,发现之后可以再单独作为一个BUG修补下。

@nick2wang
Copy link
Collaborator

能否增加一些单元测试?

能否增加一些单元测试?

我开发完成后是在本地环境,用公司实际上线的SQL脚本做了SQL检测,检测了20个SQL文本,每个文本平均在3万行,累计60万行左右的SQL脚本,其中包括各种SQL语句以及PLSQL块,检测结果暂时没有发现分割错乱的情况。 SQL文本处理这部分比较复杂,会存在各种各样的情况,我在写代码过程中是根据Oracle执行SQL的书写规范(参照PLSQL Developer与SQL * PLUS工具),尽量覆盖到可能存在的各种情况,但也很难保证100%覆盖到所有可能的场景。 原代码逻辑我在测试过程中也发现即使在PLSQL块前后强制添加指定符号作为开始和结尾标识符,也会在特定情况下出现分割错乱(如:PLSQL块内部文本内容包含"$$"符号时,会被从中间切分开)。 目前我能想到的场景都已经测试通过,有问题的也进行了代码修复和优化,对于可能存在的其他特定场景下触发的问题,发现之后可以再单独作为一个BUG修补下。

单元测试的目的是防止后续其他开发者提交的代码影响到你原本正常运行的功能,可以在这里补充
https://github.com/hhyo/Archery/blob/master/sql/engines/tests.py

@songtao12
Copy link
Contributor Author

能否增加一些单元测试?

能否增加一些单元测试?

我开发完成后是在本地环境,用公司实际上线的SQL脚本做了SQL检测,检测了20个SQL文本,每个文本平均在3万行,累计60万行左右的SQL脚本,其中包括各种SQL语句以及PLSQL块,检测结果暂时没有发现分割错乱的情况。 SQL文本处理这部分比较复杂,会存在各种各样的情况,我在写代码过程中是根据Oracle执行SQL的书写规范(参照PLSQL Developer与SQL * PLUS工具),尽量覆盖到可能存在的各种情况,但也很难保证100%覆盖到所有可能的场景。 原代码逻辑我在测试过程中也发现即使在PLSQL块前后强制添加指定符号作为开始和结尾标识符,也会在特定情况下出现分割错乱(如:PLSQL块内部文本内容包含"$$"符号时,会被从中间切分开)。 目前我能想到的场景都已经测试通过,有问题的也进行了代码修复和优化,对于可能存在的其他特定场景下触发的问题,发现之后可以再单独作为一个BUG修补下。

单元测试的目的是防止后续其他开发者提交的代码影响到你原本正常运行的功能,可以在这里补充 https://github.com/hhyo/Archery/blob/master/sql/engines/tests.py

好的,我研究下怎么写

SQL文本分割测试代码
Oracle执行SQL部分测试代码
优化测试代码书写规范
优化测试代码书写规范
优化测试代码书写规范
调整测试代码书写规范
调整测试代码书写规范
调整测试代码书写规范
@songtao12
Copy link
Contributor Author

能否增加一些单元测试?

能否增加一些单元测试?

我开发完成后是在本地环境,用公司实际上线的SQL脚本做了SQL检测,检测了20个SQL文本,每个文本平均在3万行,累计60万行左右的SQL脚本,其中包括各种SQL语句以及PLSQL块,检测结果暂时没有发现分割错乱的情况。 SQL文本处理这部分比较复杂,会存在各种各样的情况,我在写代码过程中是根据Oracle执行SQL的书写规范(参照PLSQL Developer与SQL * PLUS工具),尽量覆盖到可能存在的各种情况,但也很难保证100%覆盖到所有可能的场景。 原代码逻辑我在测试过程中也发现即使在PLSQL块前后强制添加指定符号作为开始和结尾标识符,也会在特定情况下出现分割错乱(如:PLSQL块内部文本内容包含"$$"符号时,会被从中间切分开)。 目前我能想到的场景都已经测试通过,有问题的也进行了代码修复和优化,对于可能存在的其他特定场景下触发的问题,发现之后可以再单独作为一个BUG修补下。

单元测试的目的是防止后续其他开发者提交的代码影响到你原本正常运行的功能,可以在这里补充 https://github.com/hhyo/Archery/blob/master/sql/engines/tests.py

好的,我研究下怎么写

已补充单元测试

@LeoQuote LeoQuote merged commit c873c38 into hhyo:master Mar 22, 2023
@yangjule126
Copy link

这个功能是没有完成吧?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants