Skip to content

Commit 3c3c8bc

Browse files
committed
added possibility to query correlated outer tables in select statements
1 parent 5bbebda commit 3c3c8bc

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

src/main/java/org/citydb/sqlbuilder/select/Select.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,29 @@ public Set<Table> getInvolvedTables() {
378378
return tables;
379379
}
380380

381+
public Set<Table> getOuterTables() {
382+
Set<Table> tables = new LinkedHashSet<>();
383+
384+
for (PredicateToken token : predicateTokens)
385+
token.getInvolvedTables(tables);
386+
387+
for (HavingToken token : havingTokens)
388+
token.getInvolvedTables(tables);
389+
390+
for (OrderByToken token : orderByTokens)
391+
token.getInvolvedTables(tables);
392+
393+
if (offsetToken != null)
394+
offsetToken.getInvolvedTables(tables);
395+
396+
if (fetchToken != null)
397+
fetchToken.getInvolvedTables(tables);
398+
399+
tables.removeAll(getInvolvedTables());
400+
401+
return tables;
402+
}
403+
381404
@Override
382405
public List<PlaceHolder<?>> getInvolvedPlaceHolders() {
383406
List<PlaceHolder<?>> statements = new ArrayList<>();

src/main/java/org/citydb/sqlbuilder/select/operator/comparison/AbstractComparisonOperator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.citydb.sqlbuilder.schema.Table;
2626
import org.citydb.sqlbuilder.select.PredicateToken;
2727
import org.citydb.sqlbuilder.select.ProjectionToken;
28+
import org.citydb.sqlbuilder.select.Select;
2829
import org.citydb.sqlbuilder.select.operator.Operator;
2930

3031
import java.util.List;
@@ -37,6 +38,8 @@ public void getInvolvedTables(Expression operand, Set<Table> tables) {
3738
((ProjectionToken) operand).getInvolvedTables(tables);
3839
else if (operand instanceof PredicateToken)
3940
((PredicateToken) operand).getInvolvedTables(tables);
41+
else if (operand instanceof Select)
42+
tables.addAll(((Select) operand).getOuterTables());
4043
}
4144

4245
public void getInvolvedPlaceHolders(Expression operand, List<PlaceHolder<?>> statements) {

src/main/java/org/citydb/sqlbuilder/select/projection/ColumnExpression.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public String getAsName() {
5050

5151
@Override
5252
public void getInvolvedTables(Set<Table> tables) {
53-
// nothing to do here
53+
tables.addAll(select.getOuterTables());
5454
}
5555

5656
@Override

0 commit comments

Comments
 (0)