diff --git a/src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java b/src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java index 4f9b44f91..c15690b85 100644 --- a/src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java +++ b/src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java @@ -1949,8 +1949,13 @@ public void visit(Execute execute) { @Override public Void visit(SetStatement setStatement, S context) { - if (setStatement.getOnOffOptions() == null) { - throwUnsupported(setStatement); + for (int i = 0; i < setStatement.getCount(); i++) { + List expressions = setStatement.getExpressions(i); + if (expressions != null) { + for (Expression expression : expressions) { + expression.accept(this, context); + } + } } return null; } diff --git a/src/test/java/net/sf/jsqlparser/util/TablesNamesFinderTest.java b/src/test/java/net/sf/jsqlparser/util/TablesNamesFinderTest.java index 721a2d849..aeac09906 100644 --- a/src/test/java/net/sf/jsqlparser/util/TablesNamesFinderTest.java +++ b/src/test/java/net/sf/jsqlparser/util/TablesNamesFinderTest.java @@ -392,6 +392,27 @@ public void testAlterSequenceHasNoTableReferences() throws JSQLParserException { assertThat(tablesNamesFinder.getTables(stmt)).isEmpty(); } + @Test + public void testSetStatementFindsTablesInValues() throws JSQLParserException { + assertThat(TablesNamesFinder + .findTables("SET @a = (SELECT MAX(id) FROM MY_TABLE1), @b = 2")) + .containsExactlyInAnyOrder("MY_TABLE1"); + assertThat(TablesNamesFinder.findTables("SET search_path TO s1")).isEmpty(); + } + + @Test + public void testMySqlTriggerWithSetBody() throws JSQLParserException { + String sqlStr = "CREATE TRIGGER trg BEFORE INSERT ON MY_TABLE1 FOR EACH ROW " + + "SET NEW.a = (SELECT MAX(id) FROM MY_TABLE2)"; + assertThat(TablesNamesFinder.findTables(sqlStr)).containsExactlyInAnyOrder("MY_TABLE1", + "MY_TABLE2"); + + sqlStr = "CREATE TRIGGER trg BEFORE UPDATE ON MY_TABLE1 FOR EACH ROW " + + "BEGIN SET NEW.updated_at = NOW(); INSERT INTO MY_TABLE2 VALUES (NEW.id); END"; + assertThat(TablesNamesFinder.findTables(sqlStr)).containsExactlyInAnyOrder("MY_TABLE1", + "MY_TABLE2"); + } + @Test public void testCreateSynonym_throwsException() throws JSQLParserException { String sql = "CREATE SYNONYM foo FOR bar";