Skip to content

Conversation

@MQMMMQM
Copy link
Contributor

@MQMMMQM MQMMMQM commented Sep 3, 2025

优化SQL查询的行数限制实现方法与新增SQL详情展示功能

功能描述

提交主要包含两个核心功能的优化与新增:

  1. 优化SQL查询的limit限制实现方法:使用sqlglot的方言转换统一处理不同SQL,提高行数限制及数据导出工单统计语句处理的准确性和兼容性,同时也间接修复了原本有的filter_sql方法处理limit导致的结果错误问题。
  2. 新增SQL详情展示功能:提供模态框展示原始SQL和实际执行SQL的对比视图,优化原加号展开的SQL详情内容,添加复制功能
  3. CTE(with)查询语句的支持(查询、脱敏、数据导出工单)

所有修改均已通过基本测试,兼容多种数据库引擎。

修改内容

1. 依赖更新

  • requirements.txt:添加sqlglot依赖,用于SQL方言解析和处理

2. 数据库模型修改

  • sql/models.py:添加original_sql字段,用于存储原始SQL语句

3. SQL处理逻辑优化

  • sql/offlinedownload.py:修改引用新的方法包装count语句,提高准确性和通用性
  • sql/query.py:添加判断逻辑使用limit和count语句
  • sql/utils/sql_utils.py:新增SqlglotUtils工具类,统一处理SQL的limit和count语句以及方言适配的判断

4. 数据库引擎增强

  • sql/engines/odps.py:添加CTE支持,去除冗余limit代码
  • sql/engines/goinception.py:修复SQL脱敏问题
  • sql/engines/mssql.py:添加CTE语法支持
  • sql/engines/mysql.py:添加CTE语法支持
  • sql/engines/oracle.py:添加CTE语法支持
  • sql/engines/pgsql.py:添加CTE语法支持

5. 前端界面改进

  • sql/templates/sqlexportsubmit.html:添加工单导出参数和original_sql内容
  • sql/templates/sqlquery.html:新增SQL详情弹出框,展示原始SQL和执行SQL

6. 测试用例更新

  • sql/tests.py:更新或添加测试用例
  • sql/test_offlinedownload.py:更新或添加测试用例
  • sql/utils/test_sql_utils.py:更新或添加测试用例

7. sql变更

#添加original_sql,存储原始语句
alter table query_log add original_sql longtext not null after sqllog;
#将历史数据空的original_sql更新成sqllog的内容
update query_log set original_sql=sqllog where original_sql = '';

测试验证

本次修改已对以下数据库进行实际的测试:

✅ 支持SELECT和CTE查询及数据导出工单

  • Oracle
  • MySQL
  • MSSQL
  • PostgreSQL
  • ClickHouse
  • ODPS
  • Doris

✅ 支持SELECT查询及数据导出工单

  • Phoenix:本身不支持CTE语法

⚠️ 部分支持

  • Cassandra:支持SELECT查询,但不支持数据导出工单(无子查询功能无法包装count)
  • Elasticsearch:支持SELECT/GET查询,但仅支持SELECT语句的数据导出工单
  • OpenSearch:支持SELECT/GET查询,但仅支持SELECT语句的数据导出工单

展开显示原语句和执行语句及复制
展开显示原语句和执行语句及复制

SQL详情显示原语句和执行语句及复制
SQL详情显示原语句和执行语句及复制

- 添加sqlglot工具类用于SQL方言来处理行数限制和数据导出的统计语句
- 新增SQL详情展示模态框,支持查看原始SQL和实际执行的SQL
- 优化查询日志记录,增加original_sql字段(原语句)
- 改进SQL处理逻辑,支持CTE语法(WITH)查询
- 修复测试用例以匹配新功能
@codecov
Copy link

codecov bot commented Sep 3, 2025

Codecov Report

❌ Patch coverage is 92.81437% with 12 lines in your changes missing coverage. Please review.
✅ Project coverage is 79.04%. Comparing base (5377b42) to head (e529d5a).
⚠️ Report is 8 commits behind head on master.

Files with missing lines Patch % Lines
sql/utils/sql_utils.py 89.55% 7 Missing ⚠️
sql/query.py 77.77% 2 Missing ⚠️
sql/engines/goinception.py 0.00% 1 Missing ⚠️
sql/engines/mssql.py 66.66% 1 Missing ⚠️
sql/engines/mysql.py 83.33% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #3044      +/-   ##
==========================================
+ Coverage   78.92%   79.04%   +0.11%     
==========================================
  Files         129      129              
  Lines       18690    18834     +144     
==========================================
+ Hits        14752    14888     +136     
- Misses       3938     3946       +8     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

- 添加sqlglot工具类用于SQL方言来处理行数限制和数据导出的统计语句
- 新增SQL详情展示模态框,支持查看原始SQL和实际执行的SQL
- 优化查询日志记录,增加original_sql字段(原语句)
- 改进SQL处理逻辑,支持CTE语法(WITH)查询
- 修复测试用例以匹配新功能
@LeoQuote LeoQuote force-pushed the pr-limit-with-count branch from 2c9f1d9 to 4f606ae Compare September 3, 2025 10:32
@MQMMMQM MQMMMQM changed the title 优化SQL查询的行数限制、数据导出工单统计语句实现方法和新增SQL详情展示功能 优化SQL查询的行数限制、数据导出工单统计语句实现方法,CTE语句支持和新增SQL详情展示功能 Sep 4, 2025
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.

1 participant