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
1 change: 1 addition & 0 deletions src/main/java/module-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
exports net.sf.jsqlparser.statement.create.sequence;
exports net.sf.jsqlparser.statement.create.synonym;
exports net.sf.jsqlparser.statement.create.table;
exports net.sf.jsqlparser.statement.create.trigger;
exports net.sf.jsqlparser.statement.create.user;
exports net.sf.jsqlparser.statement.create.view;
exports net.sf.jsqlparser.statement.delete;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import net.sf.jsqlparser.statement.create.sequence.CreateSequence;
import net.sf.jsqlparser.statement.create.synonym.CreateSynonym;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.create.trigger.CreateTrigger;
import net.sf.jsqlparser.statement.create.user.CreateUser;
import net.sf.jsqlparser.statement.create.view.AlterView;
import net.sf.jsqlparser.statement.create.view.CreateView;
Expand Down Expand Up @@ -146,6 +147,12 @@ default void visit(CreateTable createTable) {
this.visit(createTable, null);
}

<S> T visit(CreateTrigger createTrigger, S context);

default void visit(CreateTrigger createTrigger) {
this.visit(createTrigger, null);
}

<S> T visit(CreateView createView, S context);

default void visit(CreateView createView) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import net.sf.jsqlparser.statement.create.sequence.CreateSequence;
import net.sf.jsqlparser.statement.create.synonym.CreateSynonym;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.create.trigger.CreateTrigger;
import net.sf.jsqlparser.statement.create.user.CreateUser;
import net.sf.jsqlparser.statement.create.view.AlterView;
import net.sf.jsqlparser.statement.create.view.CreateView;
Expand Down Expand Up @@ -285,6 +286,11 @@ public <S> T visit(CreateTable createTable, S context) {
return createTable.getTable().accept(fromItemVisitor, context);
}

@Override
public <S> T visit(CreateTrigger createTrigger, S context) {
return null;
}

@Override
public <S> T visit(CreateView createView, S context) {
return null;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
/*-
* #%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.trigger;

import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitor;

/** MySQL {@code CREATE TRIGGER} statement with a structured trigger definition. */
public class CreateTrigger implements Statement {

public enum Timing {
BEFORE, AFTER
}

public enum Event {
INSERT, UPDATE, DELETE
}

public enum Order {
FOLLOWS, PRECEDES
}

private TriggerDefiner definer;
private Table trigger;
private Timing timing;
private Event event;
private Table table;
private Order order;
private Table otherTrigger;
private Statement body;

public TriggerDefiner getDefiner() {
return definer;
}

public void setDefiner(TriggerDefiner definer) {
this.definer = definer;
}

public Table getTrigger() {
return trigger;
}

public void setTrigger(Table trigger) {
this.trigger = trigger;
}

public Timing getTiming() {
return timing;
}

public void setTiming(Timing timing) {
this.timing = timing;
}

public Event getEvent() {
return event;
}

public void setEvent(Event event) {
this.event = event;
}

public Table getTable() {
return table;
}

public void setTable(Table table) {
this.table = table;
}

public Order getOrder() {
return order;
}

public void setOrder(Order order) {
this.order = order;
}

public Table getOtherTrigger() {
return otherTrigger;
}

public void setOtherTrigger(Table otherTrigger) {
this.otherTrigger = otherTrigger;
}

public Statement getBody() {
return body;
}

public void setBody(Statement body) {
this.body = body;
}

@Override
public <T, S> T accept(StatementVisitor<T> statementVisitor, S context) {
return statementVisitor.visit(this, context);
}

@Override
public String toString() {
StringBuilder builder = new StringBuilder("CREATE ");
if (definer != null) {
builder.append("DEFINER = ").append(definer).append(" ");
}
builder.append("TRIGGER ").append(trigger).append(" ").append(timing).append(" ")
.append(event).append(" ON ").append(table).append(" FOR EACH ROW ");
if (order != null) {
builder.append(order).append(" ").append(otherTrigger).append(" ");
}
return builder.append(body).toString();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*-
* #%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.trigger;

import java.io.Serializable;
import net.sf.jsqlparser.expression.StringValue;

/** Structured account used by a MySQL trigger {@code DEFINER} clause. */
public class TriggerDefiner implements Serializable {

private StringValue user;
private StringValue host;

public StringValue getUser() {
return user;
}

public void setUser(StringValue user) {
this.user = user;
}

public StringValue getHost() {
return host;
}

public void setHost(StringValue host) {
this.host = host;
}

@Override
public String toString() {
StringBuilder builder = new StringBuilder().append(user);
if (host != null) {
builder.append("@").append(host);
}
return builder.toString();
}

public TriggerDefiner withUser(StringValue user) {
setUser(user);
return this;
}

public TriggerDefiner withHost(StringValue host) {
setHost(host);
return this;
}
}
15 changes: 15 additions & 0 deletions src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@
import net.sf.jsqlparser.statement.create.sequence.CreateSequence;
import net.sf.jsqlparser.statement.create.synonym.CreateSynonym;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.create.trigger.CreateTrigger;
import net.sf.jsqlparser.statement.create.user.CreateUser;
import net.sf.jsqlparser.statement.create.view.AlterView;
import net.sf.jsqlparser.statement.create.view.CreateView;
Expand Down Expand Up @@ -1595,6 +1596,20 @@ public void visit(CreateTable createTable) {
StatementVisitor.super.visit(createTable);
}

@Override
public <S> Void visit(CreateTrigger createTrigger, S context) {
createTrigger.getTable().accept(this, context);
if (createTrigger.getBody() != null) {
createTrigger.getBody().accept(this, context);
}
return null;
}

@Override
public void visit(CreateTrigger createTrigger) {
StatementVisitor.super.visit(createTrigger);
}

@Override
public <S> Void visit(CreateView create, S context) {
visit(create.getView(), null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import net.sf.jsqlparser.statement.create.sequence.CreateSequence;
import net.sf.jsqlparser.statement.create.synonym.CreateSynonym;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.create.trigger.CreateTrigger;
import net.sf.jsqlparser.statement.create.user.CreateUser;
import net.sf.jsqlparser.statement.create.view.AlterView;
import net.sf.jsqlparser.statement.create.view.CreateView;
Expand Down Expand Up @@ -137,6 +138,12 @@ public <S> StringBuilder visit(CreateTable createTable, S context) {
return builder;
}

@Override
public <S> StringBuilder visit(CreateTrigger createTrigger, S context) {
builder.append(createTrigger);
return builder;
}

@Override
public <S> StringBuilder visit(CreateView createView, S context) {
CreateViewDeParser createViewDeParser = new CreateViewDeParser(builder);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import net.sf.jsqlparser.statement.create.sequence.CreateSequence;
import net.sf.jsqlparser.statement.create.synonym.CreateSynonym;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.create.trigger.CreateTrigger;
import net.sf.jsqlparser.statement.create.user.CreateUser;
import net.sf.jsqlparser.statement.create.view.AlterView;
import net.sf.jsqlparser.statement.create.view.CreateView;
Expand Down Expand Up @@ -91,6 +92,14 @@ public <S> Void visit(CreateTable createTable, S context) {
return null;
}

@Override
public <S> Void visit(CreateTrigger createTrigger, S context) {
if (createTrigger.getBody() != null) {
createTrigger.getBody().accept(this, context);
}
return null;
}

@Override
public <S> Void visit(CreateView createView, S context) {
getValidator(CreateViewValidator.class).validate(createView);
Expand Down Expand Up @@ -447,6 +456,10 @@ public void visit(CreateTable createTable) {
visit(createTable, null);
}

public void visit(CreateTrigger createTrigger) {
visit(createTrigger, null);
}

public void visit(CreateView createView) {
visit(createView, null);
}
Expand Down
Loading
Loading