-- { echo }
create table values_01564(
    a int,
    constraint c1 check a < 10) engine Memory;

-- client error hint after broken insert values
insert into values_01564 values ('f'); -- { clientError CANNOT_PARSE_TEXT }

insert into values_01564 values ('f'); -- { clientError CANNOT_PARSE_TEXT }
select 1;

insert into values_01564 values ('f'); -- { clientError CANNOT_PARSE_TEXT }
select nonexistent column; -- { serverError UNKNOWN_IDENTIFIER }

-- syntax error hint after broken insert values
insert into values_01564 this is bad syntax values ('f'); -- { clientError SYNTAX_ERROR }

insert into values_01564 this is bad syntax values ('f'); -- { clientError SYNTAX_ERROR }
select 1;

insert into values_01564 this is bad syntax values ('f'); -- { clientError SYNTAX_ERROR }
select nonexistent column; -- { serverError UNKNOWN_IDENTIFIER }

-- server error hint after broken insert values (violated constraint)
insert into values_01564 values (11); -- { serverError VIOLATED_CONSTRAINT }

insert into values_01564 values (11); -- { serverError VIOLATED_CONSTRAINT }
select 1;

insert into values_01564 values (11); -- { serverError VIOLATED_CONSTRAINT }
select nonexistent column; -- { serverError UNKNOWN_IDENTIFIER }

-- query after values on the same line
insert into values_01564 values (1); select 1;

-- even this works (not sure why we need it lol)
-- insert into values_01564 values (11) /*{ serverError VIOLATED_CONSTRAINT }*/; select 1;

-- syntax error, where the last token we can parse is long before the semicolon.
select this is too many words for an alias; -- { clientError SYNTAX_ERROR }
OPTIMIZE TABLE values_01564 DEDUPLICATE BY; -- { clientError SYNTAX_ERROR }
OPTIMIZE TABLE values_01564 DEDUPLICATE BY a EXCEPT a; -- { clientError SYNTAX_ERROR }
select 'a' || distinct one || 'c' from system.one; -- { clientError SYNTAX_ERROR }

-- a failing insert and then a normal insert (#https://github.com/ClickHouse/ClickHouse/issues/19353)
CREATE TABLE t0 (c0 String, c1 Int32) ENGINE = Memory() ;
INSERT INTO t0(c0, c1) VALUES ("1",1) ; -- { clientError UNKNOWN_IDENTIFIER }
INSERT INTO t0(c0, c1) VALUES ('1', 1) ;

-- the return code must be zero after the final query has failed with expected error
insert into values_01564 values (11); -- { serverError VIOLATED_CONSTRAINT }

drop table t0;
drop table values_01564;
