>From <[email protected]>:

[email protected] has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19291 )


Change subject: [ASTERIXDB-3538][COMP] Remove subplan operators that produce 
empty variables
......................................................................

[ASTERIXDB-3538][COMP] Remove subplan operators that produce empty variables

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
Subplans that dont produce any variables are redundant, we can eliminate them 
and optimize the query plan.

Ext-ref: MB-64328
Change-Id: Ie123ccaafbd528d127bd91ecf0a6b5e93c497683
---
M asterixdb/NOTICE
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.1.ddl.sqlpp
M 
hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java
M hyracks-fullstack/NOTICE
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.5.plan
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.2.update.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.4.query.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.3.plan
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.6.query.sqlpp
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.4.adm
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.3.query.sqlpp
M 
hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/utils/FrameDebugUtils.java
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.6.adm
M asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
A 
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.5.query.sqlpp
15 files changed, 303 insertions(+), 3 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/91/19291/1

diff --git a/asterixdb/NOTICE b/asterixdb/NOTICE
index 06d538d..5118782 100644
--- a/asterixdb/NOTICE
+++ b/asterixdb/NOTICE
@@ -1,5 +1,5 @@
 Apache AsterixDB
-Copyright 2015-2024 The Apache Software Foundation
+Copyright 2015-2025 The Apache Software Foundation

 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.1.ddl.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.1.ddl.sqlpp
new file mode 100644
index 0000000..92ebdfd
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.1.ddl.sqlpp
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use test;
+
+create type t1 as {
+    _id: uuid
+    };
+
+create dataset dat1(t1) primary key _id autogenerated;
+
+CREATE VIEW dat2 (id STRING, a STRING) DEFAULT NULL PRIMARY KEY (id) NOT 
ENFORCED AS
+SELECT
+    s.id,
+    a
+FROM dat1  s
+    LET
+        w1 = (
+            SELECT SUM(x.a) , COUNT(x) , SUM(x.b) ,
+                SUM(x.c), SUM(x.d)
+            FROM s.a x
+        )[0],
+        w2 = (
+            SELECT SUM(x.a) , COUNT(x)
+            FROM s.b x
+        )[0],
+        w3 = (SELECT SUM(x.a) FROM s.c x),
+        w4= (SELECT count(*) FROM dat1);
+
+CREATE VIEW dat3 (id STRING, a STRING, d INT) DEFAULT NULL PRIMARY KEY (id) 
NOT ENFORCED AS
+SELECT
+    s.id,
+    a,
+    s.d
+FROM dat1  s
+    LET
+        w1 = (
+            SELECT SUM(x.a) , COUNT(x) , SUM(x.b) ,
+                SUM(x.c), SUM(x.d)
+            FROM s.a x
+        )[0],
+        w2 = (
+            SELECT SUM(x.a) , COUNT(x)
+            FROM s.b x
+        )[0],
+        w3 = (SELECT SUM(x.a) FROM s.c x),
+        w4= (SELECT RAW count(*) FROM s.e)[0]
+WHERE s.d <= w4;
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.2.update.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.2.update.sqlpp
new file mode 100644
index 0000000..5901544
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.2.update.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use test;
+
+insert into dat1 ([
+{ "id": "1", "a": "2", "c":{ "b": 111 } , "d" :8  , "e" : [1] },
+    { "id": "2", "a": "3", "c":{ "b": 222 }  , "d" :7 , "e" : [2,3]  },
+    { "id": "3", "a": "4", "c":{ "b": 333 } , "d" :6 , "e" : [4,5,6]  },
+    { "id": "4", "a": "5","c": { "b": 444 } , "d" :5  , "e" : [7,8,9,10] },
+    { "id": "5", "a": "6", "c":{ "b": 555 } , "d" :4 , "e" : [10,11,12,13,14]  
},
+    { "id": "6", "a": "7","c": { "b": 666 } , "d" :3 , "e" : 
[13,14,15,16,17,18]  },
+    { "id": "7", "a": "8","c": { "b": 777 } , "d" :2 , "e" : 
[16,17,18,19,20,21,22] },
+    { "id": "8", "a": "9", "c":{ "b": 888 } , "d" :1 , "e" : 
[19,20,21,22,23,24,25,26] }
+    ]);
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.3.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.3.query.sqlpp
new file mode 100644
index 0000000..a7397a0
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.3.query.sqlpp
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+use test;
+
+
+EXPLAIN
+SELECT id FROM dat2;
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.4.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.4.query.sqlpp
new file mode 100644
index 0000000..7aa5872
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.4.query.sqlpp
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+use test;
+
+
+
+SELECT * FROM dat2 order by id;
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.5.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.5.query.sqlpp
new file mode 100644
index 0000000..d71470c
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.5.query.sqlpp
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+use test;
+
+EXPLAIN
+SELECT * FROM dat3;
+
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.6.query.sqlpp
 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.6.query.sqlpp
new file mode 100644
index 0000000..deacf2f
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.6.query.sqlpp
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+use test;
+
+
+SELECT * FROM dat3 order by id;
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.3.plan
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.3.plan
new file mode 100644
index 0000000..c5f8436
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.3.plan
@@ -0,0 +1,24 @@
+distribute result [$$297] [cardinality: 2.1, op-cost: 0.0, total-cost: 2.1]
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  exchange [cardinality: 2.1, op-cost: 0.0, total-cost: 2.1]
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    project ([$$297]) [cardinality: 2.1, op-cost: 0.0, total-cost: 2.1]
+    -- STREAM_PROJECT  |PARTITIONED|
+      assign [$$297] <- [{"id": $$331}] [cardinality: 2.1, op-cost: 0.0, 
total-cost: 2.1]
+      -- ASSIGN  |PARTITIONED|
+        select (not(is-null($$331))) [cardinality: 2.1, op-cost: 0.0, 
total-cost: 2.1]
+        -- STREAM_SELECT  |PARTITIONED|
+          project ([$$331]) [cardinality: 1000000.0, op-cost: 0.0, total-cost: 
2.1]
+          -- STREAM_PROJECT  |PARTITIONED|
+            assign [$$331] <- [string-default-null($$s.getField("id"))] 
[cardinality: 1000000.0, op-cost: 0.0, total-cost: 2.1]
+            -- ASSIGN  |PARTITIONED|
+              project ([$$s]) [cardinality: 1000000.0, op-cost: 0.0, 
total-cost: 2.1]
+              -- STREAM_PROJECT  |PARTITIONED|
+                exchange [cardinality: 1000000.0, op-cost: 0.0, total-cost: 
2.1]
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  data-scan []<-[$$300, $$s] <- test.dat1 [cardinality: 
1000000.0, op-cost: 2.1, total-cost: 2.1]
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      empty-tuple-source [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.4.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.4.adm
new file mode 100644
index 0000000..934eb579
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.4.adm
@@ -0,0 +1,8 @@
+{ "dat2": { "id": "1", "a": "2" } }
+{ "dat2": { "id": "2", "a": "3" } }
+{ "dat2": { "id": "3", "a": "4" } }
+{ "dat2": { "id": "4", "a": "5" } }
+{ "dat2": { "id": "5", "a": "6" } }
+{ "dat2": { "id": "6", "a": "7" } }
+{ "dat2": { "id": "7", "a": "8" } }
+{ "dat2": { "id": "8", "a": "9" } }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.5.plan
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.5.plan
new file mode 100644
index 0000000..3029611
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.5.plan
@@ -0,0 +1,41 @@
+distribute result [$$303] [cardinality: 2.1, op-cost: 0.0, total-cost: 2.1]
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  exchange [cardinality: 2.1, op-cost: 0.0, total-cost: 2.1]
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    project ([$$303]) [cardinality: 2.1, op-cost: 0.0, total-cost: 2.1]
+    -- STREAM_PROJECT  |PARTITIONED|
+      assign [$$303] <- [{"dat3": {"id": $$337, "a": 
string-default-null($$331), "d": int64-default-null($$304)}}] [cardinality: 
2.1, op-cost: 0.0, total-cost: 2.1]
+      -- ASSIGN  |PARTITIONED|
+        project ([$$337, $$331, $$304]) [cardinality: 2.1, op-cost: 0.0, 
total-cost: 2.1]
+        -- STREAM_PROJECT  |PARTITIONED|
+          select (le($$304, get-item($$281, 0))) [cardinality: 2.1, op-cost: 
0.0, total-cost: 2.1]
+          -- STREAM_SELECT  |PARTITIONED|
+            project ([$$337, $$331, $$304, $$281]) [cardinality: 1000000.0, 
op-cost: 0.0, total-cost: 2.1]
+            -- STREAM_PROJECT  |PARTITIONED|
+              subplan {
+                        aggregate [$$281] <- [listify($$316)] [cardinality: 
0.0, op-cost: 0.0, total-cost: 0.0]
+                        -- AGGREGATE  |LOCAL|
+                          aggregate [$$316] <- [agg-sql-count(1)] 
[cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                          -- AGGREGATE  |LOCAL|
+                            unnest $$319 <- scan-collection($$329) 
[cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+                            -- UNNEST  |LOCAL|
+                              nested tuple source [cardinality: 0.0, op-cost: 
0.0, total-cost: 0.0]
+                              -- NESTED_TUPLE_SOURCE  |LOCAL|
+                     } [cardinality: 1000000.0, op-cost: 0.0, total-cost: 2.1]
+              -- SUBPLAN  |PARTITIONED|
+                select (not(is-null($$337))) [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
+                -- STREAM_SELECT  |PARTITIONED|
+                  project ([$$337, $$331, $$304, $$329]) [cardinality: 
1000000.0, op-cost: 0.0, total-cost: 2.1]
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    assign [$$337, $$331, $$304, $$329] <- 
[string-default-null($$s.getField("id")), $$s.getField("a"), $$s.getField("d"), 
$$s.getField("e")] [cardinality: 1000000.0, op-cost: 0.0, total-cost: 2.1]
+                    -- ASSIGN  |PARTITIONED|
+                      project ([$$s]) [cardinality: 1000000.0, op-cost: 0.0, 
total-cost: 2.1]
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        exchange [cardinality: 1000000.0, op-cost: 0.0, 
total-cost: 2.1]
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          data-scan []<-[$$305, $$s] <- test.dat1 
[cardinality: 1000000.0, op-cost: 2.1, total-cost: 2.1]
+                          -- DATASOURCE_SCAN  |PARTITIONED|
+                            exchange [cardinality: 0.0, op-cost: 0.0, 
total-cost: 0.0]
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              empty-tuple-source [cardinality: 0.0, op-cost: 
0.0, total-cost: 0.0]
+                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.6.adm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.6.adm
new file mode 100644
index 0000000..65999fc
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/subquery/query-ASTERIXDB-3538/query-ASTERIXDB-3538.6.adm
@@ -0,0 +1,4 @@
+{ "dat3": { "id": "5", "a": "6", "d": 4 } }
+{ "dat3": { "id": "6", "a": "7", "d": 3 } }
+{ "dat3": { "id": "7", "a": "8", "d": 2 } }
+{ "dat3": { "id": "8", "a": "9", "d": 1 } }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml 
b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index a9fbbe3..216e485 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -11509,6 +11509,11 @@
         <output-dir compare="Text">query-ASTERIXDB-3006</output-dir>
       </compilation-unit>
     </test-case>
+    <test-case FilePath="subquery">
+      <compilation-unit name="query-ASTERIXDB-3538">
+        <output-dir compare="Text">query-ASTERIXDB-3538</output-dir>
+      </compilation-unit>
+    </test-case>
   </test-group>
   <test-group name="subset-collection">
     <test-case FilePath="subset-collection">
diff --git a/hyracks-fullstack/NOTICE b/hyracks-fullstack/NOTICE
index e9bb9a4..722db88 100644
--- a/hyracks-fullstack/NOTICE
+++ b/hyracks-fullstack/NOTICE
@@ -1,5 +1,5 @@
 Apache Hyracks and Algebricks
-Copyright 2015-2024 The Apache Software Foundation
+Copyright 2015-2025 The Apache Software Foundation

 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
diff --git 
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java
 
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java
index 956f0b7..0eca91b 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java
@@ -262,6 +262,10 @@
                     isTransformed = true;
                 }
                 return winOp.getVariables().size() + 
winOp.getNestedPlans().size();
+            case SUBPLAN:
+                ListSet<LogicalVariable> producedVars = new ListSet<>();
+                VariableUtilities.getProducedVariables(op, producedVars);
+                return producedVars.size();
             default:
                 break;
         }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/utils/FrameDebugUtils.java
 
b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/utils/FrameDebugUtils.java
index d09b890..66ba62c 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/utils/FrameDebugUtils.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/utils/FrameDebugUtils.java
@@ -147,7 +147,7 @@
             }
             sb.append("}");
         }
-        sb.append("\n");
+        sb.append("]\n");
     }

     /**

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19291
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb
Gerrit-Branch: neo
Gerrit-Change-Id: Ie123ccaafbd528d127bd91ecf0a6b5e93c497683
Gerrit-Change-Number: 19291
Gerrit-PatchSet: 1
Gerrit-Owner: [email protected]
Gerrit-MessageType: newchange

Reply via email to