未验证 提交 50e8abca 编写于 作者: J JingShang Lu 提交者: GitHub

fix rewrite for subquery in from (#6259)

上级 4d54d595
......@@ -26,6 +26,11 @@
<input sql="SELECT * FROM t_account WHERE account_id = 100" />
<output sql="SELECT * FROM t_account_0 WHERE account_id = 100" />
</rewrite-assertion>
<rewrite-assertion id="select_with_subquery" db-type="MySQL">
<input sql="SELECT * FROM (select * from t_account where account_id=?) a WHERE account_id = 100" />
<output sql="SELECT * FROM (select * from t_account_0 where account_id=?) a WHERE account_id = 100" />
</rewrite-assertion>
<rewrite-assertion id="select_without_sharding_value_for_parameters">
<input sql="SELECT * FROM db.t_account WHERE amount = ?" parameters="1000" />
......
......@@ -56,6 +56,7 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.WhereSegme
import org.apache.shardingsphere.sql.parser.sql.segment.generic.OwnerAvailable;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.OwnerSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.table.SimpleTableSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.table.SubqueryTableSegment;
import org.apache.shardingsphere.sql.parser.sql.statement.dml.SelectStatement;
import org.apache.shardingsphere.sql.parser.sql.util.SQLUtil;
......@@ -311,6 +312,13 @@ public final class SelectStatementContext extends CommonSQLStatementContext<Sele
if (null != tableFactorSegment.getTable() && tableFactorSegment.getTable() instanceof SimpleTableSegment) {
result.add((SimpleTableSegment) tableFactorSegment.getTable());
}
// TODO subquery in from support not use alias
if (null != tableFactorSegment.getTable() && tableFactorSegment.getTable() instanceof SubqueryTableSegment) {
SelectStatement subselect = ((SubqueryTableSegment) tableFactorSegment.getTable()).getSubquery().getSelect();
for (TableReferenceSegment each : subselect.getTableReferences()) {
result.addAll(getTablesFromTableReference(each));
}
}
if (null != tableFactorSegment.getTableReferences() && !tableFactorSegment.getTableReferences().isEmpty()) {
for (TableReferenceSegment each: tableFactorSegment.getTableReferences()) {
result.addAll(getTablesFromTableReference(each));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册