LakshSingla commented on a change in pull request #11809:
URL: https://github.com/apache/druid/pull/11809#discussion_r741574999
##########
File path: processing/src/main/java/org/apache/druid/query/UnionQueryRunner.java
##########
@@ -93,4 +102,25 @@ public UnionQueryRunner(
}
}
+ /**
+ * Appends and returns the name and the position of the individual
datasource in the union with the parent query id
+ * if preseent
+ *
+ * @param parentSubqueryId The subquery Id of the parent query which is
generating this subquery
+ * @param dataSourceName Name of the datasource for which the UnionRunner
is running
+ * @param dataSourceIndex Position of the datasource for which the
UnionRunner is running
+ * @return Subquery Id which needs to be populated
+ */
+ private String generateSubqueryId(String parentSubqueryId, String
dataSourceName, int dataSourceIndex)
+ {
+ final String DELIMITER = "-";
+ List<String> arr = new ArrayList<>();
Review comment:
Updated the code, was leftover from my previous implementation.
##########
File path:
server/src/main/java/org/apache/druid/server/ClientQuerySegmentWalker.java
##########
@@ -431,6 +448,101 @@ private DataSource inlineIfNecessary(
);
}
+ /**
+ * This method returns the datasource by populating all the {@link
QueryDataSource} with correct nesting level and
+ * sibling order of all the subqueries that are present.
+ * It also plumbs parent query's id and sql id in case the subqueries don't
have it set by default
+ *
+ * @param dataSource Datasource whose subqueries need to be populated
+ * @param parentQueryId Parent Query's ID, can be null if do not need to
update this in the subqueries
+ * @param parentSqlQueryId Parent Query's SQL Query ID, can be null if do
not need to update this in the subqueries
+ * @return DataSource populated with the subqueries
+ */
+ private DataSource generateSubqueryIds(
+ DataSource dataSource,
+ @Nullable final String parentQueryId,
+ @Nullable final String parentSqlQueryId
+ )
+ {
+ Queue<DataSource> queue = new LinkedList<>();
+ queue.add(dataSource);
+
+ /*
+ Performs BFS on the datasource tree to find the nesting level, and the
sibling order of the query datasource
+ */
+ Map<DataSource, Pair<Integer, Integer>> queryDataSourceToSubqueryIds = new
HashMap<>();
+ int level = 1;
+ while (!queue.isEmpty()) {
+ int size = queue.size();
+ int siblingOrder = 1;
+ for (int i = 0; i < size; ++i) {
+ DataSource currentDataSource = queue.poll();
+ if (currentDataSource instanceof QueryDataSource) {
+ queryDataSourceToSubqueryIds.put(currentDataSource, new
Pair<>(level, siblingOrder));
Review comment:
The `Query#withSubqueryId()` method returns a new subquery with modified
context, as does `Datasource#withChildren`. In order to actually modify the
subquery id, we would have to go in a bottom's up manner (from the innermost
datasource) and replace the child of the parent datasource, and then return
this new parent datasource to be replaced in it's own parent datasource and so
forth. I failed to come up with a way of doing that in a loop.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]