#1214. SQL语言

SQL语言

题目背景

SQL语言是一个后端工程师的必备技能,和数据库交互必须靠它。

最常用的命令,莫过于SELECT, INSERTUPDATE

例如: SELECT (password, ip) FROM user WHERE username = 'admin';

这条语句用于查询数据库中usernameadmin的密码和登录ip,没错,所有的登录都是这么实现的。

SQL语言当然也要注意语法,否则轻则报错,重则出现SQL注入,全数据库的数据全都泄露。

你的任务,就是简单的检查要执行的sql语句中,是否存在语法错误或不规范的语法。

题目描述

给定 n n 条查询语句。判断语法错误。 你需要检查的有:

  1. 括号是否匹配
  2. 单引号是否匹配
  3. 语句末是否以分号结尾
  4. 关键字是否大写

需要检测的关键字有: INSERT, SELECT, UPDATE, INTO, FROM, WHERE, SET, VALUES

输入

n n 行。每行一个语句 sqli {sql}_i

输出

n n 行。 通过检测,输出No Error

括号不匹配, 输出Bracket mismatch

单引号不匹配,输出Single quote mismatch

未以分号结尾,输出Missing semicolon

关键字未大写,输出Keyword not capitalized

特别地,如果一条语句包含多种错误类型,请单行输出,以;隔开错误提示

输出优先级为:Bracket mismatch>Keyword not capitalized>Missing semicolon>Single quote mismatch

样例输入

6
SELECT (password, ip FROM user WHERE username = 'admin';
SELECT (password, ip FROM user WHERE username = admin';
SELECT (password, ip) FROM user WHERE username = 'admin';
SELECT (password) FROM user WHERE name = 'admin';
INSERT INTO user (username, password) VALUES ('admin', '123456');
UPDATE user SET password = '123456' WHERE username = 'admin';

样例输出

Bracket mismatch
Bracket mismatch;Single quote mismatch
No Error
No Error
No Error
No Error

数据规模与约定

提交请使用C++14(O2)

对于40%的数据,保证无错误。

对于80%的数据,保证错误数 1 \leq 1

对于100%的数据,保证1n1×1051\leq n \leq 1 \times 10^5 , 0语句长度1000 \leq 语句长度 \leq 100