miniob-output-convention.md 2.6 KB
Newer Older
羽飞's avatar
羽飞 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

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

*** 注意: 后台测试环境,依赖本章节的输出要求。如果输出格式不满足要求,有些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格式输出,保留两位小数。

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