Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -2556,6 +2556,7 @@ String NonReservedWord() :
| tk=<K_STARTING:"STARTING">
| tk=<K_STEP: "STEP">
| tk=<K_STORED: "STORED">
| tk=<K_STATEMENT:"STATEMENT">
| tk=<K_STORAGE: "STORAGE">
| tk=<K_STREAM: "STREAM">
| tk=<K_STRICT: "STRICT">
Expand Down Expand Up @@ -2687,7 +2688,6 @@ TOKEN: /* Reserved SQL Keywords and structural tokens */
| <K_IN:"IN">
| <K_INCLUDES:"INCLUDES"> /* Salesforce SOQL */
| <K_INNER:"INNER">
| <K_STATEMENT:"STATEMENT">
| <K_STRAIGHT:"STRAIGHT_JOIN">
| <K_INTERSECT:"INTERSECT">
| <K_INTERVAL:"INTERVAL">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*-
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2026 JSQLParser
* %%
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
* #L%
*/
package net.sf.jsqlparser.statement.create;

import static org.junit.jupiter.api.Assertions.*;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.parser.AbstractJSqlParser.Dialect;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.create.trigger.CreateTrigger;
import net.sf.jsqlparser.util.deparser.StatementDeParser;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;

class StatementIdentifierTest {
@ParameterizedTest
@EnumSource(value = Dialect.class, names = {"POSTGRESQL", "MYSQL"})
void statementIsAnUnquotedIdentifier(Dialect dialect) throws JSQLParserException {
CreateTable table = (CreateTable) CCJSqlParserUtil.parse(
"CREATE TABLE statement (statement INT)", p -> p.withDialect(dialect));
assertEquals("statement", table.getTable().getName());
assertEquals("statement", table.getColumnDefinitions().get(0).getColumnName());
for (String sql : new String[] {"SELECT statement FROM statement",
"ALTER TABLE statement ADD COLUMN statement INT"}) {
Statement statement = CCJSqlParserUtil.parse(sql, p -> p.withDialect(dialect));
StringBuilder buffer = new StringBuilder();
statement.accept(new StatementDeParser(buffer), null);
assertEquals(sql, buffer.toString());
}
}

@Test
void triggerOrientationRemainsAKeyword() throws JSQLParserException {
CreateTrigger trigger = (CreateTrigger) CCJSqlParserUtil.parse(
"CREATE TRIGGER tr AFTER INSERT ON t FOR EACH STATEMENT EXECUTE FUNCTION f()",
p -> p.withDialect(Dialect.POSTGRESQL));
assertEquals(CreateTrigger.Orientation.STATEMENT, trigger.getOrientation());
assertTrue(trigger.toString().contains("FOR EACH STATEMENT"));
}
}
Loading