论文
AutoSQL:从大型存储库中的命令式 ORM 代码中提取 SQL 模板
AutoSQL: Extracting SQL Templates from Imperative ORM Code in Large-Scale Repositories
摘要
次优的 SQL 查询会显着降低云系统的性能,从而促使在部署之前提取和审核 SQL 语句。然而,Go ORM 框架通过分散的方法调用序列命令式地构造 SQL,这使得静态恢复生成的 SQL 模板变得困难。我们推出 AutoSQL,一个从 Go ORM 代码重建 SQL 模板的系统。 AutoSQL 构造了一个代码索引,这是一个有向图,它将函数、类型和全局变量之间的结构依赖关系捕获为可导航边。然后,它跟踪来自 ORM 调用站点的上游调用链,以将数据库交互函数识别为入口点。对于每个入口点,LLM 代理遍历代码索引以收集影响 SQL 生成的代码片,当图形无法解析检索目标时切换到基于模式的搜索。我们将此策略称为混合上下文检索。一旦收集到足够的上下文,代理就会合成 SQL 模板。对来自五个大型 Go 存储库的 579 个测试覆盖入口点和 1,186 个运行时跟踪 SQL 语句的基准评估表明,AutoSQL 实现了 68.04% 至 72.18% 的召回率,超出静态可达性基线 11.80% 至 15.94%,优于现有方法 8.52% 至 21.50%。