@@ -146,21 +146,24 @@ private void iterateReferences(CompositeMetadata root, List<Conjunct> unassigned
146
146
QueryPlanNode sourceNode = qplan .getNode (root );
147
147
for (Path childPath : childPaths ) {
148
148
ResolvedReferenceField rrf = root .getDescendantReference (childPath );
149
- QueryPlanNode destNode = qplan .getNode (rrf .getReferencedMetadata ());
150
- QueryPlanData qd = qplan .getEdgeData (sourceNode , destNode );
151
- if (qd == null ) {
152
- qplan .setEdgeData (sourceNode , destNode , qd = qplan .newData ());
153
- }
154
- qd .setReference (rrf );
155
- ReferenceField ref = rrf .getReferenceField ();
156
- if (ref .getQuery () != null ) {
157
- LOGGER .debug ("Association query:{}" , ref .getQuery ());
158
- List <Conjunct > refQueryClauses = new ArrayList <>();
159
- rewriteQuery (ref .getQuery (), refQueryClauses , qplan , rrf );
160
- LOGGER .debug ("Association query clauses:{}" , refQueryClauses );
161
- assignQueriesToPlanNodesAndEdges (refQueryClauses , unassignedClauses );
162
- }
163
- iterateReferences (rrf .getReferencedMetadata (), unassignedClauses );
149
+ if (rrf !=null ) {
150
+ QueryPlanNode destNode = qplan .getNode (rrf .getReferencedMetadata ());
151
+ QueryPlanData qd = qplan .getEdgeData (sourceNode , destNode );
152
+ if (qd == null ) {
153
+ qplan .setEdgeData (sourceNode , destNode , qd = qplan .newData ());
154
+ }
155
+ qd .setReference (rrf );
156
+ ReferenceField ref = rrf .getReferenceField ();
157
+ if (ref .getQuery () != null ) {
158
+ LOGGER .debug ("Association query:{}" , ref .getQuery ());
159
+ List <Conjunct > refQueryClauses = new ArrayList <>();
160
+ rewriteQuery (ref .getQuery (), refQueryClauses , qplan , rrf );
161
+ LOGGER .debug ("Association query clauses:{}" , refQueryClauses );
162
+ assignQueriesToPlanNodesAndEdges (refQueryClauses , unassignedClauses );
163
+ }
164
+ iterateReferences (rrf .getReferencedMetadata (), unassignedClauses );
165
+ } else
166
+ throw new RuntimeException ("Cannot retrieve descendant reference for " +childPath );
164
167
}
165
168
} catch (Error e ) {
166
169
// rethrow lightblue error
0 commit comments