我有一堆C代码通过嵌入式SQL访问数据库(Oracle,DB2和Sybase):基本代码相同,但有三个不同的预编译器,构建了三种可执行文件,每个数据库/平台一个。
我工作得非常好,但我们现在需要使用ODBC访问迁移到解决方案。
问题是:可以使用哪些工具/ api?直接的方法似乎是编写自定义预编译器(或修改现有的)来包装所有SQL和主机变量调用ODBC连接上的调用。
有人可以推荐用于该任务的工具或api来保持简单吗?
或者它是一种更简单的方法,另一种方法吗?
谢谢
答案 0 :(得分:1)
正如这种情况一样,很可能没有现成的答案;人们的代码库总是有很多惊喜,这种组合可以防止COTs工具在个别情况下变得经济。
你想要的是一个带有C前端的program transformation system(PTS),可以自定义来解析嵌入式SQL。这些工具可以应用源到源重写规则(“如果你看到这个模式,然后用 模式替换它”)来解决问题。
这些工具需要一些非常技术性的工作才能配置。在您的情况下,您必须调整C前端来处理嵌入式SQL;这通常不在C语法分析器中。 (你怎么能以当前的形式处理这些东西呢?)你会遇到C预处理器的问题,因为人们用它来侮辱真正违反解析器嵌套结构的宇宙视图。然后你必须编写并测试规则。
这项工作是与手工完成工作或一些更临时的脚本(例如Perl)进行交易的沉没成本,这些脚本部分地完成了让您清理它的工作。我们的经验是,它不值得低于100K SLOC的麻烦,并且您没有机会/临时补救超过1M SLOC,并且在您的里程之间会有所不同。
在这些中等规模的情况下,你可以为这些权衡而烦恼;这也耗费精力和时间。有时它只是更好地咬住子弹并以任何方式做它你可以清理它。
我们的DMS软件再造工具包就是这些PTS之一。它有一个可定制的C解析器和预处理器,正是为了帮助处理这些配置问题。维基百科文章中提到的其他PTS,我相信,没有任何严重的C解析器与它们相关联。 (我是DMS背后的人)。