---------- Input ----------
create table a.b (c integer not null 1, b float(10))
---------- Output ---------
error: 
  --> SQL:1:38
  |
1 | create table a.b (c integer not null 1, b float(10))
  | ------                               ^ unexpected `1`, expecting `)`, `NULL`, `NOT`, `DEFAULT`, `GENERATED`, `AS`, `CHECK`, `AUTOINCREMENT`, `IDENTITY`, `COMMENT`, or `,`
  | |                                     
  | while parsing `CREATE [OR REPLACE] TABLE [IF NOT EXISTS] [<database>.]<table> [<source>] [<table_options>]`


---------- Input ----------
SET SECONDARY ROLES
---------- Output ---------
error: 
  --> SQL:1:20
  |
1 | SET SECONDARY ROLES
  |                    ^ unexpected end of input, expecting `ALL`, `NONE`, <Ident>, <LiteralString>, or `IDENTIFIER`


---------- Input ----------
create table a (c float(10))
---------- Output ---------
error: 
  --> SQL:1:24
  |
1 | create table a (c float(10))
  | ------                 ^ unexpected `(`, expecting `)`, `NULL`, `NOT`, `DEFAULT`, `GENERATED`, `AS`, `CHECK`, `AUTOINCREMENT`, `IDENTITY`, `COMMENT`, or `,`
  | |                       
  | while parsing `CREATE [OR REPLACE] TABLE [IF NOT EXISTS] [<database>.]<table> [<source>] [<table_options>]`


---------- Input ----------
create table a (c varch)
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | create table a (c varch)
  | ------          - ^^^^^ unexpected `varch`, expecting `VARCHAR`, `CHAR`, `VARIANT`, `CHARACTER`, `VARBINARY`, `ARRAY`, `BINARY`, `VECTOR`, `GEOGRAPHY`, `STAGE_LOCATION`, `MAP`, `DATE`, `STRING`, `FLOAT32`, `FLOAT64`, `DECIMAL`, `NUMERIC`, `SMALLINT`, `DATETIME`, `INTERVAL`, `NULLABLE`, `TIMESTAMP_TZ`, `REAL`, `BOOLEAN`, `BOOL`, `UINT8`, `TINYINT`, `UINT16`, `UINT32`, `INT`, `INTEGER`, `UINT64`, `UNSIGNED`, `BIGINT`, `INT8`, `INT16`, `INT32`, `INT64`, `SIGNED`, `FLOAT`, `DOUBLE`, `BITMAP`, `TUPLE`, `TIMESTAMP`, `LONGBLOB`, `MEDIUMBLOB`, `TINYBLOB`, `BLOB`, `TEXT`, `JSON`, or `GEOMETRY`
  | |               |  
  | |               while parsing `<column name> <type> [DEFAULT <expr>] [AS (<expr>) VIRTUAL] [AS (<expr>) STORED] [CHECK (<expr>)] [COMMENT '<comment>']`
  | while parsing `CREATE [OR REPLACE] TABLE [IF NOT EXISTS] [<database>.]<table> [<source>] [<table_options>]`


---------- Input ----------
create table a (c tuple())
---------- Output ---------
error: 
  --> SQL:1:25
  |
1 | create table a (c tuple())
  | ------          - ----- ^ unexpected `)`, expecting `BOOLEAN`, `BOOL`, `UINT8`, `TINYINT`, `UINT16`, `SMALLINT`, `UINT32`, `INT`, `INTEGER`, `UINT64`, `UNSIGNED`, `BIGINT`, `INT8`, `INT16`, `INT32`, `INT64`, `SIGNED`, `FLOAT32`, `FLOAT`, `REAL`, `FLOAT64`, `DOUBLE`, `DECIMAL`, `ARRAY`, `MAP`, `BITMAP`, `TUPLE`, `DATE`, `TIMESTAMP`, `TIMESTAMP_TZ`, `DATETIME`, `INTERVAL`, `NUMERIC`, `BINARY`, `VARBINARY`, `LONGBLOB`, `MEDIUMBLOB`, `TINYBLOB`, `BLOB`, `STRING`, `VARCHAR`, `CHAR`, `CHARACTER`, `TEXT`, `VARIANT`, `JSON`, `GEOMETRY`, `GEOGRAPHY`, `NULLABLE`, `VECTOR`, `STAGE_LOCATION`, <Ident>, <LiteralString>, or `IDENTIFIER`
  | |               | |      
  | |               | while parsing type name
  | |               while parsing `<column name> <type> [DEFAULT <expr>] [AS (<expr>) VIRTUAL] [AS (<expr>) STORED] [CHECK (<expr>)] [COMMENT '<comment>']`
  | while parsing `CREATE [OR REPLACE] TABLE [IF NOT EXISTS] [<database>.]<table> [<source>] [<table_options>]`


---------- Input ----------
create table a (b tuple(c int, uint64));
---------- Output ---------
error: 
  --> SQL:1:38
  |
1 | create table a (b tuple(c int, uint64));
  | ------          - -----              ^ unexpected `)`, expecting `BOOLEAN`, `BOOL`, `UINT8`, `TINYINT`, `UINT16`, `SMALLINT`, `UINT32`, `INT`, `INTEGER`, `UINT64`, `UNSIGNED`, `BIGINT`, `INT8`, `INT16`, `INT32`, `INT64`, `SIGNED`, `FLOAT32`, `FLOAT`, `REAL`, `FLOAT64`, `DOUBLE`, `DECIMAL`, `ARRAY`, `MAP`, `BITMAP`, `TUPLE`, `DATE`, `TIMESTAMP`, `TIMESTAMP_TZ`, `DATETIME`, `INTERVAL`, `NUMERIC`, `BINARY`, `VARBINARY`, `LONGBLOB`, `MEDIUMBLOB`, `TINYBLOB`, `BLOB`, `STRING`, `VARCHAR`, `CHAR`, `CHARACTER`, `TEXT`, `VARIANT`, `JSON`, `GEOMETRY`, `GEOGRAPHY`, `NULLABLE`, `VECTOR`, or `STAGE_LOCATION`
  | |               | |                   
  | |               | while parsing TUPLE(<name> <type>, ...)
  | |               | while parsing type name
  | |               while parsing `<column name> <type> [DEFAULT <expr>] [AS (<expr>) VIRTUAL] [AS (<expr>) STORED] [CHECK (<expr>)] [COMMENT '<comment>']`
  | while parsing `CREATE [OR REPLACE] TABLE [IF NOT EXISTS] [<database>.]<table> [<source>] [<table_options>]`


---------- Input ----------
CREATE TABLE t(c1 NULLABLE(int) NOT NULL);
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | CREATE TABLE t(c1 NULLABLE(int) NOT NULL);
  | ------         -- ^^^^^^^^ ambiguous NOT NULL constraint
  | |              |   
  | |              while parsing `<column name> <type> [DEFAULT <expr>] [AS (<expr>) VIRTUAL] [AS (<expr>) STORED] [CHECK (<expr>)] [COMMENT '<comment>']`
  | while parsing `CREATE [OR REPLACE] TABLE [IF NOT EXISTS] [<database>.]<table> [<source>] [<table_options>]`


---------- Input ----------
create table a (c1 decimal(38), c2 int) partition by ();
---------- Output ---------
error: 
  --> SQL:1:55
  |
1 | create table a (c1 decimal(38), c2 int) partition by ();
  | ------                                                ^ unexpected `)`, expecting <Ident>, <LiteralString>, or `IDENTIFIER`
  | |                                                      
  | while parsing `CREATE [OR REPLACE] TABLE [IF NOT EXISTS] [<database>.]<table> [<source>] [<table_options>]`


---------- Input ----------
CREATE TABLE t(c1 int, c2 int) partition by (c1, c2) PROPERTIES ("read.split.target-size"='134217728', "read.split.metadata-target-size"=33554432);
---------- Output ---------
error: 
  --> SQL:1:138
  |
1 | CREATE TABLE t(c1 int, c2 int) partition by (c1, c2) PROPERTIES ("read.split.target-size"='134217728', "read.split.metadata-target-size"=33554432);
  | ------                                                                                                                                   ^^^^^^^^ unexpected `33554432`, expecting `)` or <LiteralString>
  | |                                                                                                                                         
  | while parsing `CREATE [OR REPLACE] TABLE [IF NOT EXISTS] [<database>.]<table> [<source>] [<table_options>]`


---------- Input ----------
drop table if a.b
---------- Output ---------
error: 
  --> SQL:1:15
  |
1 | drop table if a.b
  | ----          ^ unexpected `a`, expecting `EXISTS`
  | |              
  | while parsing `DROP TABLE [IF EXISTS] [<database>.]<table>`


---------- Input ----------
show table
---------- Output ---------
error: 
  --> SQL:1:11
  |
1 | show table
  |           ^ unexpected end of input. Did you mean `SHOW TABLE FUNCTIONS` or `SHOW TABLES`?


---------- Input ----------
show column
---------- Output ---------
error: 
  --> SQL:1:6
  |
1 | show column
  |      ^^^^^^ unexpected `column`. Did you mean `SHOW COLUMNS`?


---------- Input ----------
show function
---------- Output ---------
error: 
  --> SQL:1:6
  |
1 | show function
  |      ^^^^^^^^ unexpected `function`. Did you mean `SHOW FUNCTIONS`?


---------- Input ----------
show database
---------- Output ---------
error: 
  --> SQL:1:6
  |
1 | show database
  |      ^^^^^^^^ unexpected `database`. Did you mean `SHOW DATABASES`?


---------- Input ----------
create table if test
---------- Output ---------
error: 
  --> SQL:1:17
  |
1 | create table if test
  | ------          ^^^^ unexpected `test`, expecting `NOT`
  | |                
  | while parsing `CREATE [OR REPLACE] TABLE [IF NOT EXISTS] [<database>.]<table> [<source>] [<table_options>]`


---------- Input ----------
truncate table a.b.c.d
---------- Output ---------
error: 
  --> SQL:1:21
  |
1 | truncate table a.b.c.d
  |                     ^ unexpected `.`, expecting `FORMAT` or `;`


---------- Input ----------
insert table t select * from t2;
---------- Output ---------
error: 
  --> SQL:1:1
  |
1 | insert table t select * from t2;
  | ^^^^^^
  | |
  | INSERT statement must be followed by 'overwrite' or 'into'
  | while parsing `INSERT INTO [TABLE] <table> [(<column>, ...)] (VALUES <values> | <query>)`


---------- Input ----------
truncate a
---------- Output ---------
error: 
  --> SQL:1:10
  |
1 | truncate a
  | -------- ^ unexpected `a`, expecting `TABLE`
  | |         
  | while parsing `TRUNCATE TABLE [<database>.]<table>`


---------- Input ----------
drop a
---------- Output ---------
error: 
  --> SQL:1:6
  |
1 | drop a
  |      ^ unexpected `a`, expecting `TASK`, `TABLE`, `CATALOG`, `MASKING`, `DATABASE`, `PASSWORD`, `WAREHOUSE`, `AGGREGATING`, `WORKLOAD`, `SCHEMA`, `DICTIONARY`, `VIEW`, `INVERTED`, `NGRAM`, `VECTOR`, `STAGE`, `TAG`, `FILE`, `PIPE`, `NOTIFICATION`, `CONNECTION`, `ROW`, `USER`, `ROLE`, `FUNCTION`, `NETWORK`, `PROCEDURE`, `STREAM`, or `SEQUENCE`


---------- Input ----------
insert into t format
---------- Output ---------
error: 
  --> SQL:1:15
  |
1 | insert into t format
  | ------        ^^^^^^ unexpected `format`. it's reserved keyword, you may avoid using it, expecting `FROM`, `ORDER`, `LIMIT`, `OFFSET`, `IGNORE_RESULT`, `WITH`, `VALUES`, `EXCEPT`, `SELECT`, `INTERSECT`, `(`, `UNION`, or `.`
  | |              
  | while parsing `INSERT INTO [TABLE] <table> [(<column>, ...)] (VALUES <values> | <query>)`


---------- Input ----------
show tables format
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | show tables format
  |                   ^ unexpected end of input. Did you mean `SHOW TABLE FUNCTIONS`?


---------- Input ----------
alter database system x rename to db
---------- Output ---------
error: 
  --> SQL:1:23
  |
1 | alter database system x rename to db
  |                       ^ unexpected `x`, expecting `SET`, `UNSET`, `RENAME`, `REFRESH`, or `.`


---------- Input ----------
create user 'test-e' identified bi 'password';
---------- Output ---------
error: 
  --> SQL:1:33
  |
1 | create user 'test-e' identified bi 'password';
  |                                 ^^ unexpected `bi`, expecting `BY`, `WITH`, `FORMAT`, or `;`


---------- Input ----------
create user 'test-e'@'localhost' identified by 'password';
---------- Output ---------
error: 
  --> SQL:1:22
  |
1 | create user 'test-e'@'localhost' identified by 'password';
  | ------               ^^^^^^^^^^^ unexpected `'localhost'`, expecting `'%'` or `IDENTIFIED`
  | |                     
  | while parsing `CREATE [OR REPLACE] USER [IF NOT EXISTS] '<username>' IDENTIFIED [WITH <auth_type>] [BY <password>] [WITH <user_option>, ...]`


---------- Input ----------
drop usar if exists 'test-j';
---------- Output ---------
error: 
  --> SQL:1:6
  |
1 | drop usar if exists 'test-j';
  |      ^^^^ unexpected `usar`, expecting `USER`, `STREAM`, `STAGE`, `PASSWORD`, `WAREHOUSE`, `AGGREGATING`, `TAG`, `ROLE`, `TABLE`, `SCHEMA`, `VECTOR`, `CATALOG`, `NETWORK`, `WORKLOAD`, `DATABASE`, `INVERTED`, `FUNCTION`, `PROCEDURE`, `TASK`, `NOTIFICATION`, `NGRAM`, `MASKING`, `SEQUENCE`, `DICTIONARY`, `VIEW`, `FILE`, `PIPE`, `CONNECTION`, or `ROW`


---------- Input ----------
alter user 'test-e' identifies by 'new-password';
---------- Output ---------
error: 
  --> SQL:1:21
  |
1 | alter user 'test-e' identifies by 'new-password';
  |                     ^^^^^^^^^^ unexpected `identifies`, expecting `IDENTIFIED`, `WITH`, `FORMAT`, `@`, or `;`


---------- Input ----------
create role 'test'@'%';
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | create role 'test'@'%';
  |                   ^ unexpected `@`, expecting `COMMENT`, `FORMAT`, or `;`


---------- Input ----------
drop role 'test'@'%';
---------- Output ---------
error: 
  --> SQL:1:17
  |
1 | drop role 'test'@'%';
  |                 ^ unexpected `@`, expecting `FORMAT` or `;`


---------- Input ----------
create role `a"a`
---------- Output ---------
error: 
  --> SQL:1:13
  |
1 | create role `a"a`
  | ------      ^^^^^
  | |           |
  | |           ' or " or \f or \b are not allowed in role name
  | |           while parsing <role_name>
  | while parsing `CREATE ROLE [IF NOT EXISTS] <role_name> [COMMENT ='<string_literal>']`


---------- Input ----------
create role `a'a`
---------- Output ---------
error: 
  --> SQL:1:13
  |
1 | create role `a'a`
  | ------      ^^^^^
  | |           |
  | |           ' or " or \f or \b are not allowed in role name
  | |           while parsing <role_name>
  | while parsing `CREATE ROLE [IF NOT EXISTS] <role_name> [COMMENT ='<string_literal>']`


---------- Input ----------
create role `a\ba`
---------- Output ---------
error: 
  --> SQL:1:13
  |
1 | create role `a\ba`
  | ------      ^^^^^^
  | |           |
  | |           ' or " or \f or \b are not allowed in role name
  | |           while parsing <role_name>
  | while parsing `CREATE ROLE [IF NOT EXISTS] <role_name> [COMMENT ='<string_literal>']`


---------- Input ----------
create role `a\fa`
---------- Output ---------
error: 
  --> SQL:1:13
  |
1 | create role `a\fa`
  | ------      ^^^^^^
  | |           |
  | |           ' or " or \f or \b are not allowed in role name
  | |           while parsing <role_name>
  | while parsing `CREATE ROLE [IF NOT EXISTS] <role_name> [COMMENT ='<string_literal>']`


---------- Input ----------
drop role `a\fa`
---------- Output ---------
error: 
  --> SQL:1:11
  |
1 | drop role `a\fa`
  | ----      ^^^^^^
  | |         |
  | |         ' or " or \f or \b are not allowed in role name
  | |         while parsing <role_name>
  | while parsing `DROP ROLE [IF EXISTS] <role_name>`


---------- Input ----------
SHOW GRANT FOR ROLE 'role1';
---------- Output ---------
error: 
  --> SQL:1:6
  |
1 | SHOW GRANT FOR ROLE 'role1';
  |      ^^^^^ unexpected `GRANT`. it's reserved keyword, you may avoid using it, expecting `GRANTS`, `CREATE`, `VIRTUAL`, `NETWORK`, `CATALOGS`, `STREAMS`, `FUNCTIONS`, `DATABASES`, `CONNECTIONS`, `TABLE_FUNCTIONS`, `TAGS`, `DROP`, `TASKS`, `TABLE`, `ROLES`, `ONLINE`, `INDEXES`, `COLUMNS`, `WORKLOAD`, `PASSWORD`, `SEQUENCES`, `PROCEDURES`, `PROCESSLIST`, `STAGES`, `TABLES`, `DICTIONARIES`, `METRICS`, `ENGINES`, `SETTINGS`, `VARIABLES`, `WAREHOUSES`, `STATISTICS`, `USER`, `LOCKS`, `SCHEMAS`, `FIELDS`, `VIEWS`, `USERS`, `FILE`, or `FULL`


---------- Input ----------
GRANT ROLE 'test' TO ROLE test-user;
---------- Output ---------
error: 
  --> SQL:1:31
  |
1 | GRANT ROLE 'test' TO ROLE test-user;
  |                               ^ unexpected `-`, expecting `FORMAT` or `;`


---------- Input ----------
GRANT SELECT, ALL PRIVILEGES, CREATE ON * TO 'test-grant';
---------- Output ---------
error: 
  --> SQL:1:15
  |
1 | GRANT SELECT, ALL PRIVILEGES, CREATE ON * TO 'test-grant';
  | ----- ------  ^^^ unexpected `ALL`. it's reserved keyword, you may avoid using it, expecting `ALTER`, `APPLY`, `SELECT`, `DELETE`, `ACCESS`, `USAGE`, `INSERT`, `UPDATE`, `SUPER`, `CREATE`, `DROP`, `GRANT`, or `SET`
  | |     |        
  | |     while parsing <privileges> ON <privileges_level>
  | while parsing `GRANT { ROLE <role_name> | schemaObjectPrivileges | ALL [ PRIVILEGES ] ON <privileges_level> } TO { [ROLE <role_name>] | [USER] <user> }`


---------- Input ----------
GRANT SELECT, CREATE ON *.c TO 'test-grant';
---------- Output ---------
error: 
  --> SQL:1:27
  |
1 | GRANT SELECT, CREATE ON *.c TO 'test-grant';
  | -----                     ^ unexpected `c`, expecting `TO` or `*`
  | |                          
  | while parsing `GRANT { ROLE <role_name> | schemaObjectPrivileges | ALL [ PRIVILEGES ] ON <privileges_level> } TO { [ROLE <role_name>] | [USER] <user> }`


---------- Input ----------
GRANT select ON UDF a TO 'test-grant';
---------- Output ---------
error: 
  --> SQL:1:17
  |
1 | GRANT select ON UDF a TO 'test-grant';
  | ----- ------    ^^^ unexpected `UDF`. it's reserved keyword, you may avoid using it, expecting `IDENTIFIER`, <Ident>, `FALSE`, `*`, <LiteralString>, <LiteralInteger>, <MySQLLiteralHex>, <PGLiteralHex>, `TRUE`, `MASKING`, or `ROW`
  | |     |          
  | |     while parsing <privileges> ON <privileges_level>
  | while parsing `GRANT { ROLE <role_name> | schemaObjectPrivileges | ALL [ PRIVILEGES ] ON <privileges_level> } TO { [ROLE <role_name>] | [USER] <user> }`


---------- Input ----------
REVOKE SELECT, CREATE, ALL PRIVILEGES ON * FROM 'test-grant';
---------- Output ---------
error: 
  --> SQL:1:24
  |
1 | REVOKE SELECT, CREATE, ALL PRIVILEGES ON * FROM 'test-grant';
  | ------ ------          ^^^ unexpected `ALL`. it's reserved keyword, you may avoid using it, expecting `ALTER`, `APPLY`, `SELECT`, `DELETE`, `ACCESS`, `USAGE`, `INSERT`, `UPDATE`, `SUPER`, `CREATE`, `DROP`, `GRANT`, or `SET`
  | |      |                
  | |      while parsing <privileges> ON <privileges_level>
  | while parsing `REVOKE { ROLE <role_name> | schemaObjectPrivileges | ALL [ PRIVILEGES ] ON <privileges_level> } FROM { [ROLE <role_name>] | [USER] <user> }`


---------- Input ----------
REVOKE SELECT, CREATE ON * TO 'test-grant';
---------- Output ---------
error: 
  --> SQL:1:28
  |
1 | REVOKE SELECT, CREATE ON * TO 'test-grant';
  | ------                     ^^ unexpected `TO`. it's reserved keyword, you may avoid using it, expecting `FROM` or `.`
  | |                           
  | while parsing `REVOKE { ROLE <role_name> | schemaObjectPrivileges | ALL [ PRIVILEGES ] ON <privileges_level> } FROM { [ROLE <role_name>] | [USER] <user> }`


---------- Input ----------
COPY INTO mytable FROM 's3://bucket' CONECTION= ();
---------- Output ---------
error: 
  --> SQL:1:38
  |
1 | COPY INTO mytable FROM 's3://bucket' CONECTION= ();
  |                                      ^^^^^^^^^ unexpected `CONECTION`, expecting `CONNECTION`, `ON_ERROR`, `COLUMN_MATCH_MODE`, `RETURN_FAILED_ONLY`, `FORMAT`, `FORCE`, `PATTERN`, `FILES`, `PURGE`, `SIZE_LIMIT`, `FILE_FORMAT`, `MAX_FILES`, `DISABLE_VARIANT_CHECK`, `SPLIT_SIZE`, or `;`


---------- Input ----------
COPY INTO mytable FROM @mystage CONNECTION = ();
---------- Output ---------
error: 
  --> SQL:1:33
  |
1 | COPY INTO mytable FROM @mystage CONNECTION = ();
  |                                 ^^^^^^^^^^ unexpected `CONNECTION`. it's reserved keyword, you may avoid using it, expecting `ON_ERROR`, `COLUMN_MATCH_MODE`, `RETURN_FAILED_ONLY`, `FORMAT`, `FORCE`, `FILES`, `PURGE`, `SIZE_LIMIT`, `FILE_FORMAT`, `DISABLE_VARIANT_CHECK`, `PATTERN`, `MAX_FILES`, `SPLIT_SIZE`, or `;`


---------- Input ----------
CALL system$test
---------- Output ---------
error: 
  --> SQL:1:17
  |
1 | CALL system$test
  | ----            ^ unexpected end of input, expecting `(`
  | |               
  | while parsing `CALL <procedure_name>(<parameter>, ...)`


---------- Input ----------
CALL system$test(a
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | CALL system$test(a
  | ----              ^ unexpected end of input, expecting `)` or `,`
  | |                 
  | while parsing `CALL <procedure_name>(<parameter>, ...)`


---------- Input ----------
show settings ilike 'enable%'
---------- Output ---------
error: 
  --> SQL:1:15
  |
1 | show settings ilike 'enable%'
  |               ^^^^^ unexpected `ilike`. Did you mean `SHOW SETTINGS`?


---------- Input ----------
PRESIGN INVALID @my_stage/path/to/file
---------- Output ---------
error: 
  --> SQL:1:9
  |
1 | PRESIGN INVALID @my_stage/path/to/file
  | ------- ^^^^^^^ unexpected `INVALID`, expecting `DOWNLOAD`, <LiteralString>, `UPLOAD`, or `LiteralAtString`
  | |        
  | while parsing `PRESIGN [{DOWNLOAD | UPLOAD}] <location> [EXPIRE = 3600]`


---------- Input ----------
show columns from db1.t from ctl.db
---------- Output ---------
error: 
  --> SQL:1:25
  |
1 | show columns from db1.t from ctl.db
  |                         ^^^^ unexpected `from`. Did you mean `SHOW COLUMNS`?


---------- Input ----------
SELECT c a as FROM t
---------- Output ---------
error: 
  --> SQL:1:12
  |
1 | SELECT c a as FROM t
  |            ^^ an alias without `AS` keyword has already been defined before this one, please remove one of them


---------- Input ----------
SELECT c a as b FROM t
---------- Output ---------
error: 
  --> SQL:1:12
  |
1 | SELECT c a as b FROM t
  |            ^^ an alias without `AS` keyword has already been defined before this one, please remove one of them


---------- Input ----------
SELECT top -1 c a as b FROM t
---------- Output ---------
error: 
  --> SQL:1:12
  |
1 | SELECT top -1 c a as b FROM t
  | ------ --- ^ expecting a literal number after keyword `TOP`, if you were referring to a column with name `top`, please quote it like `"top"`
  | |      |    
  | |      while parsing TOP <limit>
  | while parsing `SELECT ...`


---------- Input ----------
SELECT top c a as b FROM t
---------- Output ---------
error: 
  --> SQL:1:12
  |
1 | SELECT top c a as b FROM t
  | ------ --- ^ expecting a literal number after keyword `TOP`, if you were referring to a column with name `top`, please quote it like `"top"`
  | |      |    
  | |      while parsing TOP <limit>
  | while parsing `SELECT ...`


---------- Input ----------
SELECT * FROM t GROUP BY GROUPING SETS a, b
---------- Output ---------
error: 
  --> SQL:1:35
  |
1 | SELECT * FROM t GROUP BY GROUPING SETS a, b
  |                                   ^^^^ unexpected `SETS`. it's reserved keyword, you may avoid using it, expecting `SELECT`, `INTERSECT`, `WITH`, `EXCEPT`, `VALUES`, `OFFSET`, `IGNORE_RESULT`, `,`, `HAVING`, `WINDOW`, `QUALIFY`, `(`, `UNION`, `FROM`, `ORDER`, `LIMIT`, `FORMAT`, or `;`


---------- Input ----------
SELECT * FROM t GROUP BY GROUPING SETS ()
---------- Output ---------
error: 
  --> SQL:1:41
  |
1 | SELECT * FROM t GROUP BY GROUPING SETS ()
  | ------                                  ^ expecting `<LiteralString>`, '<LiteralCodeString>', '<LiteralInteger>', '<LiteralFloat>', 'TRUE', 'FALSE', or more ...
  | |                                        
  | while parsing `SELECT ...`


---------- Input ----------
select * from aa.bb limit 10 order by bb;
---------- Output ---------
error: 
  --> SQL:1:30
  |
1 | select * from aa.bb limit 10 order by bb;
  | ------                       ^^^^^ ORDER BY must appear before LIMIT
  | |                             
  | while parsing `SELECT ...`


---------- Input ----------
select * from aa.bb offset 10 order by bb;
---------- Output ---------
error: 
  --> SQL:1:31
  |
1 | select * from aa.bb offset 10 order by bb;
  | ------                        ^^^^^ ORDER BY must appear before OFFSET
  | |                              
  | while parsing `SELECT ...`


---------- Input ----------
select * from aa.bb offset 10 limit 1;
---------- Output ---------
error: 
  --> SQL:1:31
  |
1 | select * from aa.bb offset 10 limit 1;
  | ------                        ^^^^^ LIMIT must appear before OFFSET
  | |                              
  | while parsing `SELECT ...`


---------- Input ----------
select * from aa.bb order by a order by b;
---------- Output ---------
error: 
  --> SQL:1:32
  |
1 | select * from aa.bb order by a order by b;
  | ------                         ^^^^^ duplicated ORDER BY clause
  | |                               
  | while parsing `SELECT ...`


---------- Input ----------
select * from aa.bb offset 10 offset 20;
---------- Output ---------
error: 
  --> SQL:1:31
  |
1 | select * from aa.bb offset 10 offset 20;
  | ------                        ^^^^^^ duplicated OFFSET clause
  | |                              
  | while parsing `SELECT ...`


---------- Input ----------
select * from aa.bb limit 10 limit 20;
---------- Output ---------
error: 
  --> SQL:1:30
  |
1 | select * from aa.bb limit 10 limit 20;
  | ------                       ^^^^^ duplicated LIMIT clause
  | |                             
  | while parsing `SELECT ...`


---------- Input ----------
select * from aa.bb limit 10,2 offset 2;
---------- Output ---------
error: 
  --> SQL:1:32
  |
1 | select * from aa.bb limit 10,2 offset 2;
  | ------                         ^^^^^^ LIMIT n,m should not appear OFFSET
  | |                               
  | while parsing `SELECT ...`


---------- Input ----------
select * from aa.bb limit 10,2,3;
---------- Output ---------
error: 
  --> SQL:1:21
  |
1 | select * from aa.bb limit 10,2,3;
  | ------              ^^^^^ [LIMIT n OFFSET m] or [LIMIT n,m]
  | |                    
  | while parsing `SELECT ...`


---------- Input ----------
with a as (select 1) with b as (select 2) select * from aa.bb;
---------- Output ---------
error: 
  --> SQL:1:43
  |
1 | with a as (select 1) with b as (select 2) select * from aa.bb;
  | ----                                      ^^^^^^ duplicated WITH clause
  | |                                          
  | while parsing `SELECT ...`


---------- Input ----------
with as t2(tt) as (select a from t) select t2.tt from t2
---------- Output ---------
error: 
  --> SQL:1:6
  |
1 | with as t2(tt) as (select a from t) select t2.tt from t2
  |      ^^ unexpected `as`. it's reserved keyword, you may avoid using it, expecting <LiteralString>, <Ident>, `IDENTIFIER`, or `RECURSIVE`


---------- Input ----------
copy into t1 from "" FILE
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | copy into t1 from "" FILE
  | ----              ^^ unexpected `""`, expecting <LiteralString>, `LiteralAtString`, or `(`
  | |                  
  | while parsing `COPY
                INTO { [<database_name>.]<table_name> { ( <columns> ) } }
                FROM { @<stage_name>[/<path>]
                    | '<uri>'
                    | ( select <expr>, [ <expr> ...] from {@<stage_name>[/<path>]( <args> ) | '<uri>'} ) }
                [ FILE_FORMAT = ( { TYPE = { CSV | NDJSON | PARQUET | TSV | AVRO } [ formatTypeOptions ] } ) ]
                [ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
                [ PATTERN = '<regex_pattern>' ]
                [ copyOptions ]`


---------- Input ----------
select $1 from @data/csv/books.csv (file_format => 'aa' bad_arg => 'x', pattern => 'bb')
---------- Output ---------
error: 
  --> SQL:1:57
  |
1 | select $1 from @data/csv/books.csv (file_format => 'aa' bad_arg => 'x', pattern => 'bb')
  | ------                                                  ^^^^^^^ unexpected `bad_arg`, expecting `PATTERN`, `FILE_FORMAT`, `CASE_SENSITIVE`, `)`, `,`, `FILES`, or `CONNECTION`
  | |                                                        
  | while parsing `SELECT ...`


---------- Input ----------
copy into t1 from "" FILE_FORMAT
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | copy into t1 from "" FILE_FORMAT
  | ----              ^^ unexpected `""`, expecting <LiteralString>, `LiteralAtString`, or `(`
  | |                  
  | while parsing `COPY
                INTO { [<database_name>.]<table_name> { ( <columns> ) } }
                FROM { @<stage_name>[/<path>]
                    | '<uri>'
                    | ( select <expr>, [ <expr> ...] from {@<stage_name>[/<path>]( <args> ) | '<uri>'} ) }
                [ FILE_FORMAT = ( { TYPE = { CSV | NDJSON | PARQUET | TSV | AVRO } [ formatTypeOptions ] } ) ]
                [ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
                [ PATTERN = '<regex_pattern>' ]
                [ copyOptions ]`


---------- Input ----------
copy into t1 from "" FILE_FORMAT = 
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | copy into t1 from "" FILE_FORMAT = 
  | ----              ^^ unexpected `""`, expecting <LiteralString>, `LiteralAtString`, or `(`
  | |                  
  | while parsing `COPY
                INTO { [<database_name>.]<table_name> { ( <columns> ) } }
                FROM { @<stage_name>[/<path>]
                    | '<uri>'
                    | ( select <expr>, [ <expr> ...] from {@<stage_name>[/<path>]( <args> ) | '<uri>'} ) }
                [ FILE_FORMAT = ( { TYPE = { CSV | NDJSON | PARQUET | TSV | AVRO } [ formatTypeOptions ] } ) ]
                [ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
                [ PATTERN = '<regex_pattern>' ]
                [ copyOptions ]`


---------- Input ----------
copy into t1 from "" FILE_FORMAT = (
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | copy into t1 from "" FILE_FORMAT = (
  | ----              ^^ unexpected `""`, expecting <LiteralString>, `LiteralAtString`, or `(`
  | |                  
  | while parsing `COPY
                INTO { [<database_name>.]<table_name> { ( <columns> ) } }
                FROM { @<stage_name>[/<path>]
                    | '<uri>'
                    | ( select <expr>, [ <expr> ...] from {@<stage_name>[/<path>]( <args> ) | '<uri>'} ) }
                [ FILE_FORMAT = ( { TYPE = { CSV | NDJSON | PARQUET | TSV | AVRO } [ formatTypeOptions ] } ) ]
                [ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
                [ PATTERN = '<regex_pattern>' ]
                [ copyOptions ]`


---------- Input ----------
copy into t1 from "" FILE_FORMAT = (TYPE
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | copy into t1 from "" FILE_FORMAT = (TYPE
  | ----              ^^ unexpected `""`, expecting <LiteralString>, `LiteralAtString`, or `(`
  | |                  
  | while parsing `COPY
                INTO { [<database_name>.]<table_name> { ( <columns> ) } }
                FROM { @<stage_name>[/<path>]
                    | '<uri>'
                    | ( select <expr>, [ <expr> ...] from {@<stage_name>[/<path>]( <args> ) | '<uri>'} ) }
                [ FILE_FORMAT = ( { TYPE = { CSV | NDJSON | PARQUET | TSV | AVRO } [ formatTypeOptions ] } ) ]
                [ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
                [ PATTERN = '<regex_pattern>' ]
                [ copyOptions ]`


---------- Input ----------
copy into t1 from "" FILE_FORMAT = (TYPE =
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | copy into t1 from "" FILE_FORMAT = (TYPE =
  | ----              ^^ unexpected `""`, expecting <LiteralString>, `LiteralAtString`, or `(`
  | |                  
  | while parsing `COPY
                INTO { [<database_name>.]<table_name> { ( <columns> ) } }
                FROM { @<stage_name>[/<path>]
                    | '<uri>'
                    | ( select <expr>, [ <expr> ...] from {@<stage_name>[/<path>]( <args> ) | '<uri>'} ) }
                [ FILE_FORMAT = ( { TYPE = { CSV | NDJSON | PARQUET | TSV | AVRO } [ formatTypeOptions ] } ) ]
                [ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
                [ PATTERN = '<regex_pattern>' ]
                [ copyOptions ]`


---------- Input ----------
copy into t1 from "" FILE_FORMAT = (TYPE =
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | copy into t1 from "" FILE_FORMAT = (TYPE =
  | ----              ^^ unexpected `""`, expecting <LiteralString>, `LiteralAtString`, or `(`
  | |                  
  | while parsing `COPY
                INTO { [<database_name>.]<table_name> { ( <columns> ) } }
                FROM { @<stage_name>[/<path>]
                    | '<uri>'
                    | ( select <expr>, [ <expr> ...] from {@<stage_name>[/<path>]( <args> ) | '<uri>'} ) }
                [ FILE_FORMAT = ( { TYPE = { CSV | NDJSON | PARQUET | TSV | AVRO } [ formatTypeOptions ] } ) ]
                [ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
                [ PATTERN = '<regex_pattern>' ]
                [ copyOptions ]`


---------- Input ----------
COPY INTO t1 FROM "" PATTERN = '.*[.]csv' FILE_FORMAT = (type = TSV field_delimiter = '\t' skip_headerx = 0);
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | COPY INTO t1 FROM "" PATTERN = '.*[.]csv' FILE_FORMAT = (type = TSV field_delimiter = '\t' skip_headerx = 0);
  | ----              ^^ unexpected `""`, expecting <LiteralString>, `LiteralAtString`, or `(`
  | |                  
  | while parsing `COPY
                INTO { [<database_name>.]<table_name> { ( <columns> ) } }
                FROM { @<stage_name>[/<path>]
                    | '<uri>'
                    | ( select <expr>, [ <expr> ...] from {@<stage_name>[/<path>]( <args> ) | '<uri>'} ) }
                [ FILE_FORMAT = ( { TYPE = { CSV | NDJSON | PARQUET | TSV | AVRO } [ formatTypeOptions ] } ) ]
                [ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
                [ PATTERN = '<regex_pattern>' ]
                [ copyOptions ]`


---------- Input ----------
COPY INTO mytable
                FROM @my_stage
                FILE_FORMAT = (
                    type = CSV,
                    error_on_column_count_mismatch = 1
                )
---------- Output ---------
error: 
  --> SQL:5:54
  |
1 | COPY INTO mytable
  | ---- while parsing `COPY
                INTO { [<database_name>.]<table_name> { ( <columns> ) } }
                FROM { @<stage_name>[/<path>]
                    | '<uri>'
                    | ( select <expr>, [ <expr> ...] from {@<stage_name>[/<path>]( <args> ) | '<uri>'} ) }
                [ FILE_FORMAT = ( { TYPE = { CSV | NDJSON | PARQUET | TSV | AVRO } [ formatTypeOptions ] } ) ]
                [ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
                [ PATTERN = '<regex_pattern>' ]
                [ copyOptions ]`
2 |                 FROM @my_stage
3 |                 FILE_FORMAT = (
4 |                     type = CSV,
5 |                     error_on_column_count_mismatch = 1
  |                                                      ^ unexpected `1`, expecting `TRUE` or `FALSE`


---------- Input ----------
CREATE CONNECTION IF NOT EXISTS my_conn
---------- Output ---------
error: 
  --> SQL:1:40
  |
1 | CREATE CONNECTION IF NOT EXISTS my_conn
  | ------                                 ^ unexpected end of input, expecting `STORAGE_TYPE`
  | |                                      
  | while parsing `CREATE [OR REPLACE] CONNECTION [IF NOT EXISTS] <connection_name> STORAGE_TYPE = <type> <storage_configs>`


---------- Input ----------
select $0 from t1
---------- Output ---------
error: 
  --> SQL:1:8
  |
1 | select $0 from t1
  | ------ ^^
  | |      |
  | |      column position must be greater than 0
  | |      while parsing expression
  | while parsing `SELECT ...`


---------- Input ----------
GRANT OWNERSHIP, SELECT ON d20_0014.* TO ROLE 'd20_0015_owner';
---------- Output ---------
error: 
  --> SQL:1:16
  |
1 | GRANT OWNERSHIP, SELECT ON d20_0014.* TO ROLE 'd20_0015_owner';
  | -----          ^ unexpected `,`, expecting `ON`
  | |               
  | while parsing GRANT OWNERSHIP ON <privileges_level> TO ROLE <role_name>


---------- Input ----------
GRANT OWNERSHIP ON d20_0014.* TO USER A;
---------- Output ---------
error: 
  --> SQL:1:34
  |
1 | GRANT OWNERSHIP ON d20_0014.* TO USER A;
  | -----                            ^^^^ unexpected `USER`. it's reserved keyword, you may avoid using it, expecting `ROLE`
  | |                                 
  | while parsing GRANT OWNERSHIP ON <privileges_level> TO ROLE <role_name>


---------- Input ----------
REVOKE OWNERSHIP, SELECT ON d20_0014.* FROM ROLE 'd20_0015_owner';
---------- Output ---------
error: 
  --> SQL:1:8
  |
1 | REVOKE OWNERSHIP, SELECT ON d20_0014.* FROM ROLE 'd20_0015_owner';
  | ------ ^^^^^^^^^ unexpected `OWNERSHIP`. it's reserved keyword, you may avoid using it, expecting `INSERT`, `ALTER`, `SUPER`, `ROLE`, `ACCESS`, `WRITE`, `SET`, `SELECT`, `UPDATE`, `DELETE`, `DROP`, `READ`, `USAGE`, `GRANT`, `CREATE`, `ALL`, or `APPLY`
  | |       
  | while parsing `REVOKE { ROLE <role_name> | schemaObjectPrivileges | ALL [ PRIVILEGES ] ON <privileges_level> } FROM { [ROLE <role_name>] | [USER] <user> }`


---------- Input ----------
REVOKE OWNERSHIP ON d20_0014.* FROM USER A;
---------- Output ---------
error: 
  --> SQL:1:8
  |
1 | REVOKE OWNERSHIP ON d20_0014.* FROM USER A;
  | ------ ^^^^^^^^^ unexpected `OWNERSHIP`. it's reserved keyword, you may avoid using it, expecting `INSERT`, `ALTER`, `SUPER`, `ROLE`, `ACCESS`, `WRITE`, `SET`, `SELECT`, `UPDATE`, `DELETE`, `DROP`, `READ`, `USAGE`, `GRANT`, `CREATE`, `ALL`, or `APPLY`
  | |       
  | while parsing `REVOKE { ROLE <role_name> | schemaObjectPrivileges | ALL [ PRIVILEGES ] ON <privileges_level> } FROM { [ROLE <role_name>] | [USER] <user> }`


---------- Input ----------
REVOKE OWNERSHIP ON d20_0014.* FROM ROLE A;
---------- Output ---------
error: 
  --> SQL:1:8
  |
1 | REVOKE OWNERSHIP ON d20_0014.* FROM ROLE A;
  | ------ ^^^^^^^^^ unexpected `OWNERSHIP`. it's reserved keyword, you may avoid using it, expecting `INSERT`, `ALTER`, `SUPER`, `ROLE`, `ACCESS`, `WRITE`, `SET`, `SELECT`, `UPDATE`, `DELETE`, `DROP`, `READ`, `USAGE`, `GRANT`, `CREATE`, `ALL`, or `APPLY`
  | |       
  | while parsing `REVOKE { ROLE <role_name> | schemaObjectPrivileges | ALL [ PRIVILEGES ] ON <privileges_level> } FROM { [ROLE <role_name>] | [USER] <user> }`


---------- Input ----------
GRANT OWNERSHIP ON *.* TO ROLE 'd20_0015_owner';
---------- Output ---------
error: 
  --> SQL:1:21
  |
1 | GRANT OWNERSHIP ON *.* TO ROLE 'd20_0015_owner';
  | -----               ^ unexpected `.`, expecting `TO`
  | |                    
  | while parsing GRANT OWNERSHIP ON <privileges_level> TO ROLE <role_name>


---------- Input ----------
CREATE FUNCTION IF NOT EXISTS isnotempty AS(p) -> not(is_null(p)
---------- Output ---------
error: 
  --> SQL:1:51
  |
1 | CREATE FUNCTION IF NOT EXISTS isnotempty AS(p) -> not(is_null(p)
  | ------                                   --       ^^^
  | |                                        |        |
  | |                                        |        expecting an operand
  | |                                        |        while parsing expression
  | |                                        while parsing AS (<parameter [parameter type]>, ...) -> <definition expr>
  | while parsing `CREATE [OR REPLACE] FUNCTION [IF NOT EXISTS] <udf_name> <udf_definition> [DESC = <description>]`


---------- Input ----------
CREATE FUNCTION my_agg (INT) STATE { s STRING } RETURNS BOOLEAN LANGUAGE javascript HANDLER = 'my_agg' ADDRESS = 'http://0.0.0.0:8815';
---------- Output ---------
error: 
  --> SQL:1:85
  |
1 | CREATE FUNCTION my_agg (INT) STATE { s STRING } RETURNS BOOLEAN LANGUAGE javascript HANDLER = 'my_agg' ADDRESS = 'http://0.0.0.0:8815';
  | ------                 -                                                            ^^^^^^^ unexpected `HANDLER`. it's reserved keyword, you may avoid using it, expecting `HEADERS`, `ADDRESS`, `PACKAGES`, `AS`, or `IMPORTS`
  | |                      |                                                             
  | |                      while parsing (<[arg_name] arg_type>, ...) STATE {<state_field>, ...} RETURNS <return_type> LANGUAGE <language> { ADDRESS=<udf_server_address> | AS <language_codes> } 
  | while parsing `CREATE [OR REPLACE] FUNCTION [IF NOT EXISTS] <udf_name> <udf_definition> [DESC = <description>]`


---------- Input ----------
CREATE FUNCTION my_agg (INT) STATE { s STRIN } RETURNS BOOLEAN LANGUAGE javascript ADDRESS = 'http://0.0.0.0:8815';
---------- Output ---------
error: 
  --> SQL:1:40
  |
1 | CREATE FUNCTION my_agg (INT) STATE { s STRIN } RETURNS BOOLEAN LANGUAGE javascript ADDRESS = 'http://0.0.0.0:8815';
  | ------                 -               ^^^^^ unexpected `STRIN`, expecting `STRING`, `SIGNED`, `INTERVAL`, `TINYINT`, `VARIANT`, `SMALLINT`, `TINYBLOB`, `VARBINARY`, `INT8`, `JSON`, `INT16`, `INT32`, `INT64`, `UINT8`, `BIGINT`, `UINT16`, `UINT32`, `UINT64`, `BINARY`, `INTEGER`, `DATETIME`, `NUMERIC`, `TIMESTAMP`, `UNSIGNED`, `STAGE_LOCATION`, `TIMESTAMP_TZ`, `REAL`, `DATE`, `CHAR`, `TEXT`, `ARRAY`, `TUPLE`, `VECTOR`, `BOOLEAN`, `DECIMAL`, `VARCHAR`, `LONGBLOB`, `NULLABLE`, `CHARACTER`, `GEOGRAPHY`, `MEDIUMBLOB`, `BITMAP`, `}`, `BOOL`, `INT`, `FLOAT32`, `FLOAT`, `FLOAT64`, `DOUBLE`, `MAP`, `BLOB`, or `GEOMETRY`
  | |                      |                
  | |                      while parsing (<[arg_name] arg_type>, ...) STATE {<state_field>, ...} RETURNS <return_type> LANGUAGE <language> { ADDRESS=<udf_server_address> | AS <language_codes> } 
  | while parsing `CREATE [OR REPLACE] FUNCTION [IF NOT EXISTS] <udf_name> <udf_definition> [DESC = <description>]`


---------- Input ----------
drop table :a
---------- Output ---------
error: 
  --> SQL:1:12
  |
1 | drop table :a
  | ----       ^ unexpected `:`, expecting <Ident>, <LiteralString>, `IDENTIFIER`, or `IF`
  | |           
  | while parsing `DROP TABLE [IF EXISTS] [<database>.]<table>`


---------- Input ----------
drop table IDENTIFIER(a)
---------- Output ---------
error: 
  --> SQL:1:23
  |
1 | drop table IDENTIFIER(a)
  | ----                  ^ unexpected `a`, expecting `IdentVariable` or `:`
  | |                      
  | while parsing `DROP TABLE [IF EXISTS] [<database>.]<table>`


---------- Input ----------
drop table IDENTIFIER(:a)
---------- Output ---------
error: 
  --> SQL:1:23
  |
1 | drop table IDENTIFIER(:a)
  | ----                  ^ variable is only available in SQL template
  | |                      
  | while parsing `DROP TABLE [IF EXISTS] [<database>.]<table>`


---------- Input ----------
SHOW GRANTS ON task t1;
---------- Output ---------
error: 
  --> SQL:1:16
  |
1 | SHOW GRANTS ON task t1;
  |                ^^^^ unexpected `task`. it's reserved keyword, you may avoid using it, expecting `MASKING`, `STAGE`, `TABLE`, `SEQUENCE`, `WAREHOUSE`, `DATABASE`, `UDF`, `CONNECTION`, `PROCEDURE`, or `ROW`


---------- Input ----------
CREATE OR REPLACE DICTIONARY my_catalog.my_database.my_dictionary
            (
                user_name String,
                age Int16
            );
---------- Output ---------
error: 
  --> SQL:5:14
  |
1 | CREATE OR REPLACE DICTIONARY my_catalog.my_database.my_dictionary
  | ------ while parsing `CREATE [OR REPLACE] DICTIONARY [IF NOT EXISTS] <dictionary_name> [(<column>, ...)] PRIMARY KEY [<primary_key>, ...] SOURCE (<source_name> ([<source_options>])) [COMMENT <comment>] `
2 |             (
3 |                 user_name String,
4 |                 age Int16
5 |             );
  |              ^ unexpected `;`, expecting `PRIMARY`


---------- Input ----------
CREATE OR REPLACE DICTIONARY my_catalog.my_database.my_dictionary
        (
            user_name tuple(),
            age Int16
        )
        PRIMARY KEY username
        SOURCE ()
        COMMENT 'This is a comment';
---------- Output ---------
error: 
  --> SQL:3:29
  |
1 | CREATE OR REPLACE DICTIONARY my_catalog.my_database.my_dictionary
  | ------ while parsing `CREATE [OR REPLACE] DICTIONARY [IF NOT EXISTS] <dictionary_name> [(<column>, ...)] PRIMARY KEY [<primary_key>, ...] SOURCE (<source_name> ([<source_options>])) [COMMENT <comment>] `
2 |         (
3 |             user_name tuple(),
  |             --------- ----- ^ unexpected `)`, expecting `BOOLEAN`, `BOOL`, `UINT8`, `TINYINT`, `UINT16`, `SMALLINT`, `UINT32`, `INT`, `INTEGER`, `UINT64`, `UNSIGNED`, `BIGINT`, `INT8`, `INT16`, `INT32`, `INT64`, `SIGNED`, `FLOAT32`, `FLOAT`, `REAL`, `FLOAT64`, `DOUBLE`, `DECIMAL`, `ARRAY`, `MAP`, `BITMAP`, `TUPLE`, `DATE`, `TIMESTAMP`, `TIMESTAMP_TZ`, `DATETIME`, `INTERVAL`, `NUMERIC`, `BINARY`, `VARBINARY`, `LONGBLOB`, `MEDIUMBLOB`, `TINYBLOB`, `BLOB`, `STRING`, `VARCHAR`, `CHAR`, `CHARACTER`, `TEXT`, `VARIANT`, `JSON`, `GEOMETRY`, `GEOGRAPHY`, `NULLABLE`, `VECTOR`, `STAGE_LOCATION`, <Ident>, <LiteralString>, or `IDENTIFIER`
  |             |         |      
  |             |         while parsing type name
  |             while parsing `<column name> <type> [DEFAULT <expr>] [AS (<expr>) VIRTUAL] [AS (<expr>) STORED] [CHECK (<expr>)] [COMMENT '<comment>']`


---------- Input ----------
desc procedure p1
---------- Output ---------
error: 
  --> SQL:1:18
  |
1 | desc procedure p1
  | ----             ^ unexpected end of input, expecting `(`
  | |                
  | while parsing `DESC PROCEDURE <procedure_name>()`


---------- Input ----------
desc procedure p1(array, c int)
---------- Output ---------
error: 
  --> SQL:1:24
  |
1 | desc procedure p1(array, c int)
  | ----             ------^ unexpected `,`, expecting `(`
  | |                ||     
  | |                |while parsing type name
  | |                while parsing (<type_name>, ...)
  | while parsing `DESC PROCEDURE <procedure_name>()`


---------- Input ----------
drop procedure p1
---------- Output ---------
error: 
  --> SQL:1:18
  |
1 | drop procedure p1
  | ----             ^ unexpected end of input, expecting `(`
  | |                
  | while parsing `DROP PROCEDURE <procedure_name>()`


---------- Input ----------
drop procedure p1(a int)
---------- Output ---------
error: 
  --> SQL:1:19
  |
1 | drop procedure p1(a int)
  | ----              ^ unexpected `a`, expecting `DATE`, `ARRAY`, `VARCHAR`, `VARIANT`, `SMALLINT`, `DATETIME`, `VARBINARY`, `CHARACTER`, `STAGE_LOCATION`, `)`, `BOOLEAN`, `BOOL`, `UINT8`, `TINYINT`, `UINT16`, `UINT32`, `INT`, `INTEGER`, `UINT64`, `UNSIGNED`, `BIGINT`, `INT8`, `INT16`, `INT32`, `INT64`, `SIGNED`, `FLOAT32`, `FLOAT`, `REAL`, `FLOAT64`, `DOUBLE`, `DECIMAL`, `MAP`, `BITMAP`, `TUPLE`, `TIMESTAMP`, `TIMESTAMP_TZ`, `INTERVAL`, `NUMERIC`, `BINARY`, `LONGBLOB`, `MEDIUMBLOB`, `TINYBLOB`, `BLOB`, `STRING`, `CHAR`, `TEXT`, `JSON`, `GEOMETRY`, `GEOGRAPHY`, `NULLABLE`, or `VECTOR`
  | |                  
  | while parsing `DROP PROCEDURE <procedure_name>()`


---------- Input ----------
call procedure p1
---------- Output ---------
error: 
  --> SQL:1:18
  |
1 | call procedure p1
  | ----             ^ unexpected end of input, expecting `(`
  | |                
  | while parsing `CALL PROCEDURE <procedure_name>()`


---------- Input ----------
create PROCEDURE p1() returns table(string not null, int null) language sql comment = 'test' as $$
            BEGIN
                LET sum := 0;
                FOR x IN SELECT * FROM numbers(100) DO
                    sum := sum + x.number;
                END FOR;
                RETURN sum;
            END;
            $$;
---------- Output ---------
error: 
  --> SQL:1:44
  |
1 | create PROCEDURE p1() returns table(string not null, int null) language sql comment = 'test' as $$
  | ------                        -----        ^^^ unexpected `not`. it's reserved keyword, you may avoid using it, expecting `INT8`, `INT16`, `INT32`, `INT64`, `UINT16`, `UINT32`, `UINT64`, `INTEGER`, `FLOAT32`, `FLOAT64`, `INTERVAL`, `GEOMETRY`, `INT`, `BOOL`, `DATE`, `BLOB`, `TEXT`, `JSON`, `UINT8`, `FLOAT`, `TUPLE`, `DOUBLE`, `BITMAP`, `BINARY`, `STRING`, `VECTOR`, `BOOLEAN`, `NUMERIC`, `UNSIGNED`, `DATETIME`, `NULLABLE`, `TIMESTAMP`, `GEOGRAPHY`, `TIMESTAMP_TZ`, `TINYINT`, `LONGBLOB`, `TINYBLOB`, `STAGE_LOCATION`, `SMALLINT`, `BIGINT`, `SIGNED`, `REAL`, `DECIMAL`, `ARRAY`, `MAP`, `VARBINARY`, `MEDIUMBLOB`, `VARCHAR`, `CHAR`, `CHARACTER`, or `VARIANT`
  | |                             |             
  | |                             while parsing TABLE(<var_name> <type_name>, ...)
  | while parsing `CREATE [ OR REPLACE ] PROCEDURE <procedure_name>() RETURNS { <result_data_type> [ NOT NULL ] | TABLE(<var_name> <data_type>, ...)} LANGUAGE SQL [ COMMENT = '<string_literal>' ] AS <procedure_definition>`


---------- Input ----------
create PROCEDURE p1(int, string) returns table(string not null, int null) language sql comment = 'test' as $$
            BEGIN
                LET sum := 0;
                FOR x IN SELECT * FROM numbers(100) DO
                    sum := sum + x.number;
                END FOR;
                RETURN sum;
            END;
            $$;
---------- Output ---------
error: 
  --> SQL:1:24
  |
1 | create PROCEDURE p1(int, string) returns table(string not null, int null) language sql comment = 'test' as $$
  | ------             -   ^ unexpected `,`, expecting `BOOLEAN`, `BOOL`, `UINT8`, `TINYINT`, `UINT16`, `SMALLINT`, `UINT32`, `INT`, `INTEGER`, `UINT64`, `UNSIGNED`, `BIGINT`, `INT8`, `INT16`, `INT32`, `INT64`, `SIGNED`, `FLOAT32`, `FLOAT`, `REAL`, `FLOAT64`, `DOUBLE`, `DECIMAL`, `ARRAY`, `MAP`, `BITMAP`, `TUPLE`, `DATE`, `TIMESTAMP`, `TIMESTAMP_TZ`, `DATETIME`, `INTERVAL`, `NUMERIC`, `BINARY`, `VARBINARY`, `LONGBLOB`, `MEDIUMBLOB`, `TINYBLOB`, `BLOB`, `STRING`, `VARCHAR`, `CHAR`, `CHARACTER`, `TEXT`, `VARIANT`, `JSON`, `GEOMETRY`, `GEOGRAPHY`, `NULLABLE`, `VECTOR`, or `STAGE_LOCATION`
  | |                  |    
  | |                  while parsing (<var_name> <type_name>, ...)
  | while parsing `CREATE [ OR REPLACE ] PROCEDURE <procedure_name>() RETURNS { <result_data_type> [ NOT NULL ] | TABLE(<var_name> <data_type>, ...)} LANGUAGE SQL [ COMMENT = '<string_literal>' ] AS <procedure_definition>`


---------- Input ----------
copy into t1 from (select a from @data/not_exists where a = 1)
---------- Output ---------
error: 
  --> SQL:1:51
  |
1 | copy into t1 from (select a from @data/not_exists where a = 1)
  | ----                                              ^^^^^ unexpected `where`. it's reserved keyword, you may avoid using it, expecting `IDENTIFIER`, <LiteralString>, <Ident>, `)`, or `AS`
  | |                                                  
  | while parsing `COPY
                INTO { [<database_name>.]<table_name> { ( <columns> ) } }
                FROM { @<stage_name>[/<path>]
                    | '<uri>'
                    | ( select <expr>, [ <expr> ...] from {@<stage_name>[/<path>]( <args> ) | '<uri>'} ) }
                [ FILE_FORMAT = ( { TYPE = { CSV | NDJSON | PARQUET | TSV | AVRO } [ formatTypeOptions ] } ) ]
                [ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
                [ PATTERN = '<regex_pattern>' ]
                [ copyOptions ]`


