对于比赛和训练营测试后台,需要做一些输出约定,才能正确的进行测试。

*** 注意: 后台测试环境,依赖本章节的输出要求。如果输出格式不满足要求,有些case将无法通过***

输出是指服务端返回给客户端的数据。为了可以做测试,需要对输出的格式做约定。 NOTE:后台测试程序,是将预先编辑好的Case执行后,将执行结果与预期输出结果(预先编写完成)做对比,与mysql test工作原理类似,因此需要严格按照输出约束来输出。

这里虽然列出了很多约束条件,但是同学们并不需要担心,当前的实现已经满足了这些约束条件,或者给出了满足约束的帮助函数,只要按照要求使用即可。

  1. 语法解析错误,返回 FAILURE(只返回这个字符串,不带任何多余字符)。

  2. 对于DML和DDL操作,执行成功返回SUCCESS,失败返回FAILURE。更新和删除操作时没有数据变更,只要没有错误,输出也是SUCCESS。

  3. 对于QUERY操作,如果执行失败,返回FAILURE(包括语法错误)。否则按照下面的格式要求输出:列名显示和顺序说明:

    • 单表查询,没有指定列名(select * from t) ,按照建表语句的顺序列出列名,列名不需要带表明
    • 单表查询,指定了列名,按照指定的顺序输出列名,列名不需要带表名
    • 表查询,没有指定列名(select * from t,t1),列名需要带表明,使用'.'分开。每张表的列名与建表时顺序保持一致,多张表按照from后指定的顺序依次排列
    • 多表查询,指定列名,就按照指定的顺序排列
    • 多表查询,有些指定列名,有些没有指定(select t1.*, t2.id from t1,t2)。没有指定的与建表时保持一致,否则按照指定的顺序排列 输出格式: 列名之间使用 ' | '分开,注意 '|'左右各有一个空格。输出列名后,第二行开始输出列值,值之间也使用' | '隔开。 注意:第一列和最后一列没有分隔符,也没有空格 如果没有数据,显示列名即可。
    • 聚合函数字段输出,保留与输入相似的格式。比如select max(age) from t; 那么输出时,列名输出max(age)。注意,圆括号内没有空格。
  4. 所有输出不区分大小写

  5. 日期(date)输出格式使用:"YYYY-mm-DD"

  6. 输出的字符串不使用单引号双引号或其它括起来

  7. 浮点数输出,不要带后面多余的0,可以参考C sprintf的%g格式输出,保留两位小数。参考函数 double_to_str

FAQ

  • 某张表或者某个查询结果一行数据都没有,但是依然需要输出表头信息
  • 查询语句输入的字段名带了表名,比如select t.id from t; ,因为只有一张表,还是仅输出字段名称
  • 测试不考察大小写,所以输入输出都不区分大小写