Simple Database
题号:NC14116
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小Q同学受SQL启发,设计了更为简单更易上手的QAQL,该语言拥有如下语法:
 
1.创建表:
CREATE 表名称 (列名称1, 列名称2, 列名称3, ...)
该语句创建了一个表。保证语句中至少有一个列名称,至多有十个列名称,且表中的列名称互不相同。
例如:
CREATE person (name, age, gender)
该语句创建了一个如下所示的数据表:
person表

 
 
 
 
请注意,QAQL中所有数据均为字符串类型,判断数据相等时要求全字符匹配。
 
2.删除表:
DROP 表名称
该语句删除了一个表。
例如:
DROP person
该语句删除了表名称为person的表。
 
3.插入数据:
INSERT 表名称 ("值1", "值2", "值3", ...)
该语句向表尾插入一行数据,并且每个INSERT语句只插入一行数据,数据值要由引号引起。保证语句中至少有一个值,至多有十个值,如果表存在,保证值的数量等于表中列的数量。
例如:
INSERT person ("quailty", "20", "male")
该语句向person表尾中插入一行name="quailty",age="20",gender="male"的数据,
 
4.删除数据:
DELETE 表名称 WHERE 列名称1 = "值1", 列名称2 = "值2", ...
该语句删除表中满足条件的数据行,其中WHERE语句表示对表中所有满足条件的数据行进行操作,如省略,则对表中所有数据行进行操作。
例如:
DELETE person WHERE name = "quailty"
该语句删除person表中所有满足name="quailty"的数据行。
 
5.修改数据:
UPDATE 表名称 SET 列名称1 = "新值1", 列名称2 = "新值2", ... WHERE 列名称1 = "值1", 列名称2 = "值2", ...
该语句修改表中满足条件的数据行的指定列的值。保证进行修改的列不少于一个,不多于十个,且这些列的列名称互不相同。
例如:
UPDATE person SET name = "fzirsqh" WHERE age = "20", gender = "male"
该语句将person表中所有满足age="20"且gender="male"的数据行的"name"列改为"fzirsqh"。
 
6.查询数据:
SELECT 表名称 WHERE 列名称1 = "值1", 列名称2 = "值2", ...
该语句查询表中所有满足条件的数据行。
例如:
SELECT person WHERE age = "20"
该语句查询person表中所有满足age="20"的数据行。
 
对于所有语句,如果使用WHERE子句增加限制条件,保证条件不少于一个,不多于十个,且这些条件的列名称互不相同。
 
现在你需要解析QAQL语句,并响应QAQL的操作,SELECT语句的查询结果按照给定格式输出,其他语句执行后无需任何输出。
保证语句严格符合上述语法,所有语句中的表名称、列名称、数据值均为长度不超过10的只包含英文字母、数字和下划线的非空字符串。但不保证逻辑合法,如果操作不合法,即创建的数据表已经存在,或者删除的数据表不存在,或者插入、删除、修改、查询的数据表名称或列名称不存在(无论表是否为空),则输出"error"(不含引号),并忽略该条语句,但如果查询结果为空(即没有满足条件的数据),则只需按照给定格式输出表中的列名称。
查询结果的输出格式如下:
第一行为查询的数据表的列名称,用一个空格隔开,
接下来若干行,按照数据表中的顺序,输出所有满足条件的数据行,用空格隔开每一列的值,一个数据行输出一行。

输入描述:

第一行是一个正整数T(≤ 10),表示测试数据的组数,
对于每组测试数据,
第一行是一个整数n(0 ≤ n ≤ 1000),表示操作语句的数量,
接下来n行,每行是一个字符串,表示操作语句。
请注意操作语句中空格位置及数量,保证操作语句严格符合语法。

输出描述:

对于第k组测试数据,先输出一行"Case #k:"(不含引号),
对于每个查询语句,按照给定的输出格式输出查询结果,
对于每个不合法操作,输出一行"error"(不含引号)。
保证输出文件大小不超过10MB。
示例1

输入

复制
1
10
CREATE person (name)
DROP person
CREATE person (name, age, gender)
INSERT person ("quailty", "20", "male")
SELECT person WHERE age = "20"
UPDATE person SET name = "fzirsqh" WHERE age = "20", gender = "male"
SELECT person WHERE name = "quailty"
DELETE person
SELECT person WHERE rating = "2323"
DROP person

输出

复制
Case #1:
name age gender
quailty 20 male
name age gender
error

说明

敢写敢过。