跳转至

文法解释

在附件 SQL.g4 中给出了 ANLTR 格式的参考文法,其内容包含大作业的全部基础内容与部分选做内容。自动测试与最终验收时助教提供的测例均满足本文法(注意,对于部分选做内容,并没有准备测例,例如哈希索引,你可以自行设计文法与测例)。

虽然理论上你可以根据实际需求扩展文法文件,但考虑到自动化测试的要求,你应当保证扩展后的文法仍然兼容旧的文法。

此处给出部分主要文法的含义与报错情形解释,这将作为线下验收时对测例处理的标准。但要注意关于自动化测试时输出的格式已经在 前端约定 一节中给出,应该遵循那一节的标准。

SQL.g4 中多数语句的行末使用 # 为其进行命名,方便起见在后文也将直接使用这些名称以指代对应文法。

鲁棒性要求

注意,你在执行这些语句的过程中应当充分考虑到逻辑的严谨性以处理各种可能的非法操作,对于识别出来的非法操作要给出报错并拒绝执行命令以表明你正确处理了这些错误,这是对你系统的鲁棒性要求,线下验收时也会重点检查这些部分。

可能的非法操作非常多而细,例如没有使用数据库时试图进行数据表的操作、对不存在的数据库或表或列进行操作、增改一行数据时值的类型与 schema 的声明不匹配等。另外破坏完整性约束的操作也是非法操作。

鲁棒性的要求是贯穿整个系统设计的,你的系统必须时刻注意细节,运行过程中程序不崩溃是一个基本要求,线下验收时任何符合文法要求且没有在文档中明确说明不会出现的输入都是有可能会出现的

Authors: Congyuan Rao