From f38a3ccc59d3bb0404c5610c8bc38e9872137f6f Mon Sep 17 00:00:00 2001 From: qingchen <413935740@qq.com> Date: Wed, 10 Jun 2026 22:35:34 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dfeature-service=E6=B6=89?= =?UTF-8?q?=E5=8F=8A=E5=88=B0=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/java/sql/internal/SqlNameContext.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/client-java/sql/src/main/java/org/evomaster/client/java/sql/internal/SqlNameContext.java b/client-java/sql/src/main/java/org/evomaster/client/java/sql/internal/SqlNameContext.java index edabbacf62..e0d28af5c5 100644 --- a/client-java/sql/src/main/java/org/evomaster/client/java/sql/internal/SqlNameContext.java +++ b/client-java/sql/src/main/java/org/evomaster/client/java/sql/internal/SqlNameContext.java @@ -144,9 +144,8 @@ public void visit(Table table) { @Override public void visit(ParenthesedSelect selectBody) { - PlainSelect plainSelect = selectBody.getPlainSelect(); - SqlNameContext subContext = new SqlNameContext(plainSelect); - tableAliases.putAll(subContext.tableAliases); + names.add(UNNAMED_TABLE); + handleAlias(tableAliases, selectBody); } @Override @@ -240,7 +239,7 @@ public void visit(Table table) { @Override public void visit(ParenthesedSelect selectBody) { - handleAlias(aliases, selectBody.getPlainSelect()); + handleAlias(aliases, selectBody); } @Override @@ -262,8 +261,8 @@ public void visit(ParenthesedFromItem aThis) { } - private static void handleAlias(Map aliases, PlainSelect plainSelect) { - Alias alias = plainSelect.getFromItem().getAlias(); + private static void handleAlias(Map aliases, ParenthesedSelect select) { + Alias alias = select.getAlias(); if (alias != null) { String aliasName = alias.getName(); if (aliasName != null) { @@ -290,3 +289,4 @@ private static void handleAlias(Map aliases, Table table) { } } } + From 8e3f9e9f6d29131d5c940fd6f4ba9b4ca1367bc0 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Thu, 18 Jun 2026 15:14:28 +0800 Subject: [PATCH 2/2] add a unit test to reproduce the bug --- .../java/sql/internal/SqlNameContextTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 client-java/sql/src/test/java/org/evomaster/client/java/sql/internal/SqlNameContextTest.java diff --git a/client-java/sql/src/test/java/org/evomaster/client/java/sql/internal/SqlNameContextTest.java b/client-java/sql/src/test/java/org/evomaster/client/java/sql/internal/SqlNameContextTest.java new file mode 100644 index 0000000000..1a8b4283c8 --- /dev/null +++ b/client-java/sql/src/test/java/org/evomaster/client/java/sql/internal/SqlNameContextTest.java @@ -0,0 +1,31 @@ +package org.evomaster.client.java.sql.internal; + +import net.sf.jsqlparser.schema.Column; +import net.sf.jsqlparser.schema.Table; +import net.sf.jsqlparser.statement.Statement; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class SqlNameContextTest { + + @Test + public void handlesAliasOnParenthesizedUnionSubquery() { + String sql = "SELECT derived.id\n" + + "FROM (\n" + + " SELECT id FROM constraint_requires\n" + + " UNION ALL\n" + + " SELECT id FROM constraint_excludes\n" + + ") derived\n" + + "WHERE derived.id = 2"; + + Statement statement = SqlParserUtils.parseSqlCommand(sql); + SqlNameContext context = assertDoesNotThrow(() -> new SqlNameContext(statement)); + + assertEquals( + SqlNameContext.UNNAMED_TABLE, + context.getFullyQualifiedTableName(new Column(new Table("derived"), "id")) + ); + } +}