2012-12-20 63 views
4

背景

数百数据库对象(视图,包,存储过程等)中的系统的语义等价没有格式化和无源代码注释。我们希望:的重新格式化(PL /)SQL代码

  1. 自动重新格式化代码(使用General SQL Parser)。
  2. 自动将标准评论标题复制到每个对象的源文件中。

问题

我们不能把这种翻天覆地的变化到生产而不被测试。

问题

你会如何验证重新格式化源代码在功能上等同于未格式化的代码?

谢谢!

+2

我强烈建议你不要这样做。我不会相信任何SQL或PL/SQL解析器来执行此操作。自动格式化代码并不是一项简单的任务。 –

+1

这有什么可能的好处?可能有些代码(甚至可能是很多)永远不需要显着的工作,甚至看不到。与已知的收益相比,回归的风险肯定会太大。我宁愿使用缓慢但肯定的方法:无论何时需要更改对象,对其进行格式化并在*中为该对象添加标准标题*。然后,当您的更改经过测试时,重新格式化也会同时进行测试。 –

回答

2

简单:

  1. 运行格式化代码对一个全新的数据库
  2. 运行对一个全新的数据库格式的代码
  3. 执行完全外销并重,并比较两个文件

它们应该是相同的。

它们应该相同的原因是postgres将SQL解析为其标准的规范形式,所以即使添加不必要的括号也应该导致代码的内部版本相同。

0

我认为格式只需要那些需要修改的对象,如果是这样的话,我建议只格式化您正在处理的对象,最后结果应该投入生产。我使用Oracle SQL Developer,并且对我来说可以安全地处理程序单元并进行格式化。

0

对于你的问题:比较格式化的源代码与未格式化,你将不得不标记每个他们并比较结果。这实际上打败了你的原始目标。 ;-)