爸爸可以用B或SQLite的简洁代码生成

图片



很快,在11月4日和5日,我们将开始新的SQL课程以进行数据分析C ++开发人员,特别是对于他们来说,我们从Facebook Engineering博客准备了此翻译,并提供了有用的工具概述。



SQLite被广泛使用,但是编写经过良好测试和受支持的数据访问层充其量可能是一个挑战。许多命令使用某种代码生成来避免每次添加列时都必须更改数十个序列号,但是这种方法会导致错误。CQL到CG / SQL编译器使您可以创建带有大查询的复杂存储过程,而语法帮助程序和强类型的组合使这些过程更易于获取和存储。语言的强类型输入和良好的单元测试工具的结合可以使您相信,即使非常复杂的逻辑也是正确的。






这是什么



CG / SQL是流行的SQLite库的代码生成系统,允许开发人员以Transact-SQL(T-SQL)变体编写存储过程,并将它们编译为使用SQLite API执行C操作的C代码。CG / SQL允许工程师使用大查询创建复杂的存储过程,而无需现有方法进行手动代码审查。



整个系统还包括用于管理和更新架构,为存储过程生成测试代码,获取过程查询计划以及与其他语言(例如Java和Objective-C)进行交互的功能。JSON输出允许解析或前端代码。该软件包包含大量的语言和系统文档。



该工具的作用



CQL编译器完成了大部分工作。它读取模式和过程,从而提供一种具有数百种编译错误的强类型语言,旨在防止SQLite运行时问题。编译器仔细监视变量数据类型和架构类型,报告不一致情况,例如尝试将可为空的列分配给不可为空的输出变量,并确保SQLite API始终正确使用。



生成的代码始终检查返回代码,并且在将数据绑定到SQLite或从SQLite读取数据时,它始终使用正确的序数和列类型。这正是很难获得和正确保持的东西。此外,模式注释使系统可以自动创建存储过程,以将数据库从模式的任何先前版本更新为当前版本。为了使之成为可能,进行了数十次检查。



过程注释也可以用于指示您想要维护用于创建模式片段并将数据插入该模式的测试代码。这种方法使您几乎不必大惊小怪地测试过程,也不必依赖于正在部署的系统。同样,这些工具可以创建在编译时验证查询计划的架构。



为什么需要这个?



SQLite被广泛使用,但是编写经过良好测试和受支持的数据访问层充其量可能是一个挑战。许多命令使用某种代码生成来避免每次添加列时都必须更改数十个序列号,但是这种方法会导致错误。通过CQL到CG / SQL编译器,您可以创建带有大查询的复杂存储过程,而语法助手和强类型的组合使这些过程更易于获取和存储。语言的强类型输入和良好的单元测试工具的结合可以使您确信,即使非常复杂的逻辑也是正确的。语法助手将安全代码转换为规范的SQL,因此工程师编写的代码更少,但是代码更正确,并且可以在任何地方运行。让我们看一个例子:



create procedure insert_a_row(like your_table)
begin
  insert into your_table from arguments;
end;


这段代码创建了一个过程,可以插入到任何表中(此处为your_table),该的参数正是该表的列。您不会忘记列,也不会以错误的顺序放置数十个参数。构造简洁明了且健壮,这使工程师可以更轻松地生成代码,而不必手动检查每个细节。



Github上的



CG / SQL CG / SQL当然是有用的,但是HABR折扣促销代码同样有用,它将为您提供标语上所示折扣的10%的额外折扣。



图片








推荐文章






All Articles