Skip to content

Commit c663d74

Browse files
edeadingtonclaude
andcommitted
Accept Snowflake COPY GRANTS in CREATE TABLE
COPY became a reserved keyword with the COPY statement support in #2643, so the generic CREATE TABLE option rule no longer accepts it and CREATE TABLE ... COPY GRANTS fails to parse. Add COPY GRANTS as an explicit table option. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent ac8a4f0 commit c663d74

2 files changed

Lines changed: 12 additions & 0 deletions

File tree

‎src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16055,6 +16055,10 @@ TableOption CreateTableOption():
1605516055
}
1605616056
|
1605716057
LOOKAHEAD({ isMySqlTableOptionAhead() }) option=MySqlTableOption()
16058+
|
16059+
// Snowflake: COPY is reserved because it starts the COPY statement
16060+
LOOKAHEAD({ getToken(1).kind == K_COPY && "GRANTS".equalsIgnoreCase(getToken(2).image) })
16061+
<K_COPY> ContextualKeyword("GRANTS") { option = TableOption.raw("COPY", "GRANTS"); }
1605816062
| tokens=CreateParameter() { option = TableOption.raw(tokens); } )
1605916063
{ return option; }
1606016064
}

‎src/test/java/net/sf/jsqlparser/statement/create/CreateTableTest.java‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@ public void testCreateTableOrReplace() throws JSQLParserException {
6060
assertSqlCanBeParsedAndDeparsed(statement);
6161
}
6262

63+
@Test
64+
public void testCreateTableCopyGrants() throws JSQLParserException {
65+
assertSqlCanBeParsedAndDeparsed(
66+
"CREATE OR REPLACE TABLE testtab COPY GRANTS AS (SELECT a FROM tbl)");
67+
assertSqlCanBeParsedAndDeparsed(
68+
"CREATE OR REPLACE TABLE testtab (a VARCHAR (255)) COPY GRANTS");
69+
}
70+
6371
@Test
6472
public void testCreateTable2() throws JSQLParserException {
6573
String statement = "CREATE TABLE testtab (\"test\" varchar (255))";

0 commit comments

Comments
 (0)