Skip to content

Commit 04b9304

Browse files
committed
Fixed expand of single entity with no target
1 parent fde6e6a commit 04b9304

5 files changed

Lines changed: 38 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Development version 2.6.0
44

55
**New Features**
6+
* Fixed expand of single entity with no target returning an object.
67
* When using the Projects Plugin, generated Features now get the same restricted status and Projects as the Location they are generated from.
78

89
**Internal changes & Bugfixes**

FROST-Server.SQLjooq/src/main/java/de/fraunhofer/iosb/ilt/frostserver/persistence/pgjooq/QueryBuilder.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,9 +422,8 @@ private void handleEntityExpand(QueryState sqlState, Expand expand, NavigationPr
422422
Query subQuery = expand.getSubQuery();
423423
TableRef tableRef = sqlState.getTableRef();
424424
TableRef joinRef = tableRef.createJoin(navPropEntity.getName(), queryState);
425-
tableRef.addJoin(navPropEntity, joinRef);
426425
StaMainTable<?> joinedTable = joinRef.getTable();
427-
QueryState subState = new QueryState(joinedTable, sqlState, sqlState.getNextAlias());
426+
QueryState subState = new QueryState(joinedTable, joinRef, sqlState, sqlState.getCurrentAlias());
428427
Set<Property> subProperties = findSelectedProperties(subQuery);
429428
subState.setSelectedProperties(joinedTable.getPropertyFieldRegistry().getFieldsForProperties(subProperties));
430429
sqlState.addChildState(navPropEntity, subState);

FROST-Server.SQLjooq/src/main/java/de/fraunhofer/iosb/ilt/frostserver/persistence/pgjooq/relations/RelationOneToMany.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ public TableRef join(S joinSource, QueryState<?> queryState, TableRef sourceRef)
121121
Map<Field, Field> joinEquals = new HashMap<>();
122122
joinEquals.put(targetField, sourceField);
123123
return QueryBuilder.createJoinedRef(sourceRef, navProp, targetAliased)
124-
.setJoinEquals(joinEquals);
124+
.setJoinEquals(joinEquals)
125+
.setJoinedOnField(sourceField);
125126
}
126127

127128
@Override

FROST-Server.SQLjooq/src/main/java/de/fraunhofer/iosb/ilt/frostserver/persistence/pgjooq/utils/QueryState.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,18 +76,28 @@ public class QueryState<T extends StaMainTable<T>> {
7676
private final TableRef tableRef;
7777

7878
public QueryState(T table, QueryState parent, String staAlias) {
79-
this(parent.getPersistenceManager(), table, null);
79+
this(parent.getPersistenceManager(), table, new TableRef(table), null);
80+
this.parent = parent;
81+
this.staAlias = staAlias;
82+
}
83+
84+
public QueryState(T table, TableRef tableRef, QueryState parent, String staAlias) {
85+
this(parent.getPersistenceManager(), table, tableRef, null);
8086
this.parent = parent;
8187
this.staAlias = staAlias;
8288
}
8389

8490
public QueryState(JooqPersistenceManager pm, T table, Set<PropertyFields<T>> sqlSelectFields) {
91+
this(pm, table, new TableRef(table), sqlSelectFields);
92+
}
93+
94+
public QueryState(JooqPersistenceManager pm, T table, TableRef tableRef, Set<PropertyFields<T>> sqlSelectFields) {
8595
this.persistenceManager = pm;
8696
this.selectedProperties = sqlSelectFields;
97+
this.tableRef = tableRef;
8798
sqlFrom = table;
8899
mainTable = table;
89100
sqlMainPkFields = table.getPkFields();
90-
tableRef = new TableRef(table);
91101
staAlias = ALIAS_ROOT;
92102
}
93103

@@ -112,8 +122,11 @@ public Entity entityFromRecord(Record tuple, DataSize dataSize, Query staQuery)
112122
NavigationProperty expandPath = expand.getPath();
113123
if (expandPath instanceof NavigationPropertyEntity navPropEntity) {
114124
QueryState childState = getChildState(navPropEntity);
115-
Entity subEntity = childState.entityFromRecord(tuple, dataSize, expand.getSubQuery());
116-
mainEntity.setProperty(navPropEntity, subEntity);
125+
if (tuple.get(childState.getTableRef().getJoinedOnField()) != null) {
126+
// This navlink has a target.
127+
Entity subEntity = childState.entityFromRecord(tuple, dataSize, expand.getSubQuery());
128+
mainEntity.setProperty(navPropEntity, subEntity);
129+
}
117130
}
118131
}
119132
}
@@ -135,6 +148,13 @@ public QueryState findStateForAlias(String alias) {
135148
return parent.findStateForAlias(alias);
136149
}
137150

151+
public String getCurrentAlias() {
152+
if (parent == null) {
153+
return ALIAS_PREFIX + aliasNr;
154+
}
155+
return parent.getCurrentAlias();
156+
}
157+
138158
public String getNextAlias() {
139159
if (parent == null) {
140160
return ALIAS_PREFIX + (++aliasNr);

FROST-Server.SQLjooq/src/main/java/de/fraunhofer/iosb/ilt/frostserver/persistence/pgjooq/utils/TableRef.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class TableRef {
3434
private final StaMainTable<?> table;
3535
private final Map<NavigationProperty, TableRef> joins = new HashMap<>();
3636
private Map<Field, Field> joinEquals;
37+
private Field<?> joinedOnField;
3738

3839
public TableRef(StaMainTable<?> table) {
3940
this.type = table.getEntityType();
@@ -94,4 +95,13 @@ public Field getJoinEqual(Field requested) {
9495
return found;
9596
}
9697

98+
public Field<?> getJoinedOnField() {
99+
return joinedOnField;
100+
}
101+
102+
public TableRef setJoinedOnField(Field<?> joinedOnField) {
103+
this.joinedOnField = joinedOnField;
104+
return this;
105+
}
106+
97107
}

0 commit comments

Comments
 (0)