2

我有一堆通过嵌入式 SQL 访问数据库(Oracle、DB2 和 Sybase)的 C 代码:基本代码是相同的,但是使用三种不同的预编译器,构建了三种可执行文件,每个数据库/平台一个。

我工作得很好,但我们现在需要迁移到使用 ODBC 访问的解决方案。

问题是:可以使用哪些工具/api?一种直接的方法似乎是编写一个自定义预编译器(或修改一个存在的)来包装所有 SQL 和主机变量调用,以调用 ODBC 连接上的调用。

有人可以推荐用于该任务的工具或 api 以使其保持简单吗?

或者它是一种更简单的方法,另一种方法?

谢谢

4

1 回答 1

1

对于这种情况,通常情况下,可能没有现成的答案;人们的代码库中总是有许多惊喜,而这种组合使 COT 工具在个别情况下变得不经济。

您需要的是一个程序转换系统(PTS),它带有 C 前端,可以定制以解析嵌入式 SQL。这样的工具可以应用源到源重写规则(“如果你看到这个模式,然后用那个模式替换它”)来解决问题。

这些工具需要一些技术上的努力来配置。在您的情况下,您必须调整 C 前端来处理嵌入式 SQL;这通常不在 C 解析器中。(如何以当前形式处理这些东西?)C 预处理器会有问题,因为人们用它做滥用的事情,这确实违反了解析器对宇宙的嵌套结构视图。然后你必须编写和测试规则。

这种努力是一种沉没成本,可以与手工完成工作的努力或一些更多的临时脚本(例如,Perl)进行交易,后者部分完成工作,让您清理它。我们的经验是,低于 100K SLOC 的麻烦是不值得的,并且您没有机会手动/临时修复高于 1M SLOC,并且您的里程会有所不同。

在这些中等大小的情况下,您可以为权衡取舍而苦恼;这也需要精力和时间。有时它只是更好地咬紧牙关,做任何你可以清理它的方式。

我们的 DMS 软件再造工具包就是这些 PTS 之一。它有一个可定制的 C 解析器和预处理器,正是为了帮助处理这些配置问题。我相信,维基百科文章中提到的其他 PTS 没有任何与它们相关的严重 C 解析器。(我是 DMS 背后的人)。

于 2013-01-20T20:37:20.417 回答