Fix issue849.

Change-Id: I4d2933c94c4139a6c8e2cf15e3cd1f6a52335f6b
Reviewed-on: http://fulliautomatix.ics.uci.edu:8443/217
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Young-Seok Kim <kisskys@gmail.com>
Reviewed-by: Steven Jacobs <sjaco002@ucr.edu>
diff --git a/asterix-app/src/test/resources/optimizerts/queries/query_issue849-2.aql b/asterix-app/src/test/resources/optimizerts/queries/query_issue849-2.aql
new file mode 100644
index 0000000..929c5f1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/queries/query_issue849-2.aql
@@ -0,0 +1,24 @@
+/*
+ * Description  : This test case is to verify the fix for issue827
+ * https://code.google.com/p/asterixdb/issues/detail?id=849
+ * Expected Res : SUCCESS
+ * Date         : 2nd Feb. 2015
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+create type sType as closed{b : int32};
+create dataset s(sType) primary key b;
+
+insert into dataset s ({ "b" : 1});
+insert into dataset s ({ "b" : 3});
+
+for $x in dataset s
+for $y in (
+ for $z in {{ {"a":1, "c":1},{"a":2, "c":2},{"a":1, "c":null} }} where $x.b=$z.a
+    return $z.c
+)
+return {"x":$x,"y":$y}
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/optimizerts/queries/query_issue849.aql b/asterix-app/src/test/resources/optimizerts/queries/query_issue849.aql
new file mode 100644
index 0000000..5e45938
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/queries/query_issue849.aql
@@ -0,0 +1,24 @@
+/*
+ * Description  : This test case is to verify the fix for issue827
+ * https://code.google.com/p/asterixdb/issues/detail?id=849
+ * Expected Res : SUCCESS
+ * Date         : 2nd Feb. 2015
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+create type sType as closed{b : int32};
+create dataset s(sType) primary key b;
+
+insert into dataset s ({ "b" : 1});
+insert into dataset s ({ "b" : 3});
+
+for $x in {{ {"a":1},{"a":2} }}
+for $y in (
+ for $z in dataset s where $x.a=$z.b
+    return $z.b
+)
+return {"x":$x,"y":$y}
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/optimizerts/results/query_issue849-2.plan b/asterix-app/src/test/resources/optimizerts/results/query_issue849-2.plan
new file mode 100644
index 0000000..df5d477
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/query_issue849-2.plan
@@ -0,0 +1,33 @@
+-- COMMIT  |PARTITIONED|
+  -- STREAM_PROJECT  |PARTITIONED|
+    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+      -- INSERT_DELETE  |PARTITIONED|
+        -- HASH_PARTITION_EXCHANGE [$$3]  |PARTITIONED|
+          -- ASSIGN  |UNPARTITIONED|
+            -- ASSIGN  |UNPARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
+-- COMMIT  |PARTITIONED|
+  -- STREAM_PROJECT  |PARTITIONED|
+    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+      -- INSERT_DELETE  |PARTITIONED|
+        -- HASH_PARTITION_EXCHANGE [$$3]  |PARTITIONED|
+          -- ASSIGN  |UNPARTITIONED|
+            -- ASSIGN  |UNPARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$15][$$17]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$17]  |PARTITIONED|
+                -- STREAM_PROJECT  |UNPARTITIONED|
+                  -- ASSIGN  |UNPARTITIONED|
+                    -- STREAM_SELECT  |UNPARTITIONED|
+                      -- UNNEST  |UNPARTITIONED|
+                        -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/query_issue849.plan b/asterix-app/src/test/resources/optimizerts/results/query_issue849.plan
new file mode 100644
index 0000000..db12ea3
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/query_issue849.plan
@@ -0,0 +1,33 @@
+-- COMMIT  |PARTITIONED|
+  -- STREAM_PROJECT  |PARTITIONED|
+    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+      -- INSERT_DELETE  |PARTITIONED|
+        -- HASH_PARTITION_EXCHANGE [$$3]  |PARTITIONED|
+          -- ASSIGN  |UNPARTITIONED|
+            -- ASSIGN  |UNPARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
+-- COMMIT  |PARTITIONED|
+  -- STREAM_PROJECT  |PARTITIONED|
+    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+      -- INSERT_DELETE  |PARTITIONED|
+        -- HASH_PARTITION_EXCHANGE [$$3]  |PARTITIONED|
+          -- ASSIGN  |UNPARTITIONED|
+            -- ASSIGN  |UNPARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$17][$$14]  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$17]  |PARTITIONED|
+                -- ASSIGN  |UNPARTITIONED|
+                  -- UNNEST  |UNPARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- DATASOURCE_SCAN  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/query-issue838.plan b/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/query-issue838.plan
index 34c71b9..56f292c 100644
--- a/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/query-issue838.plan
+++ b/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/query-issue838.plan
@@ -2,25 +2,22 @@
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
-        -- SORT_MERGE_EXCHANGE [$$18(ASC) ]  |PARTITIONED|
-          -- STABLE_SORT [$$18(ASC)]  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- STREAM_SELECT  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- BTREE_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- STABLE_SORT [$$29(ASC)]  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- STREAM_PROJECT  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- RTREE_SEARCH  |PARTITIONED|
-                                    -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- ASSIGN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- BTREE_SEARCH  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STABLE_SORT [$$29(ASC)]  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- RTREE_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ASSIGN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- DATASOURCE_SCAN  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849-2/query_issue849-2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849-2/query_issue849-2.1.ddl.aql
new file mode 100644
index 0000000..3dfda04
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849-2/query_issue849-2.1.ddl.aql
@@ -0,0 +1,14 @@
+/*
+ * Description  : This test case is to verify the fix for issue827
+ * https://code.google.com/p/asterixdb/issues/detail?id=849
+ * Expected Res : SUCCESS
+ * Date         : 2nd Feb. 2015
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+create type sType as closed{b : int32};
+create dataset s(sType) primary key b;
diff --git a/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849-2/query_issue849-2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849-2/query_issue849-2.2.update.aql
new file mode 100644
index 0000000..94bcec2
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849-2/query_issue849-2.2.update.aql
@@ -0,0 +1,12 @@
+/*
+ * Description  : This test case is to verify the fix for issue827
+ * https://code.google.com/p/asterixdb/issues/detail?id=849
+ * Expected Res : SUCCESS
+ * Date         : 2nd Feb. 2015
+ */
+
+use dataverse test;
+
+insert into dataset s ({ "b" : 1});
+insert into dataset s ({ "b" : 3});
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849-2/query_issue849-2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849-2/query_issue849-2.3.query.aql
new file mode 100644
index 0000000..6a56624
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849-2/query_issue849-2.3.query.aql
@@ -0,0 +1,15 @@
+/*
+ * Description  : This test case is to verify the fix for issue827
+ * https://code.google.com/p/asterixdb/issues/detail?id=849
+ * Expected Res : SUCCESS
+ * Date         : 2nd Feb. 2015
+ */
+
+use dataverse test;
+
+for $x in dataset s
+for $y in (
+ for $z in {{ {"a":1, "c":1},{"a":2, "c":2},{"a":1, "c":null} }} where $x.b=$z.a
+    return $z.c
+)
+return {"x":$x,"y":$y}
diff --git a/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849/query_issue849.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849/query_issue849.1.ddl.aql
new file mode 100644
index 0000000..3dfda04
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849/query_issue849.1.ddl.aql
@@ -0,0 +1,14 @@
+/*
+ * Description  : This test case is to verify the fix for issue827
+ * https://code.google.com/p/asterixdb/issues/detail?id=849
+ * Expected Res : SUCCESS
+ * Date         : 2nd Feb. 2015
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+create type sType as closed{b : int32};
+create dataset s(sType) primary key b;
diff --git a/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849/query_issue849.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849/query_issue849.2.update.aql
new file mode 100644
index 0000000..94bcec2
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849/query_issue849.2.update.aql
@@ -0,0 +1,12 @@
+/*
+ * Description  : This test case is to verify the fix for issue827
+ * https://code.google.com/p/asterixdb/issues/detail?id=849
+ * Expected Res : SUCCESS
+ * Date         : 2nd Feb. 2015
+ */
+
+use dataverse test;
+
+insert into dataset s ({ "b" : 1});
+insert into dataset s ({ "b" : 3});
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849/query_issue849.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849/query_issue849.3.query.aql
new file mode 100644
index 0000000..19fb6ca
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue849/query_issue849.3.query.aql
@@ -0,0 +1,15 @@
+/*
+ * Description  : This test case is to verify the fix for issue827
+ * https://code.google.com/p/asterixdb/issues/detail?id=849
+ * Expected Res : SUCCESS
+ * Date         : 2nd Feb. 2015
+ */
+
+use dataverse test;
+
+for $x in {{ {"a":1},{"a":2} }}
+for $y in (
+ for $z in dataset s where $x.a=$z.b
+    return $z.b
+)
+return {"x":$x,"y":$y}
diff --git a/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue849-2/query_issue849-2.1.adm b/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue849-2/query_issue849-2.1.adm
new file mode 100644
index 0000000..1a5a7c0
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue849-2/query_issue849-2.1.adm
@@ -0,0 +1,3 @@
+[ { "x": { "b": 1 }, "y": 1 }
+, { "x": { "b": 1 }, "y": null }
+ ]
diff --git a/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue849/query_issue849.1.adm b/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue849/query_issue849.1.adm
new file mode 100644
index 0000000..ba46ac2
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue849/query_issue849.1.adm
@@ -0,0 +1,2 @@
+[ { "x": { "a": 1 }, "y": 1 }
+ ]
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterix-app/src/test/resources/runtimets/testsuite.xml
index 06829ad..e5ea4d3 100644
--- a/asterix-app/src/test/resources/runtimets/testsuite.xml
+++ b/asterix-app/src/test/resources/runtimets/testsuite.xml
@@ -5403,6 +5403,16 @@
                 <output-dir compare="Text">query_issue285-2</output-dir>
             </compilation-unit>
         </test-case>
+        <test-case FilePath="leftouterjoin">
+            <compilation-unit name="query_issue849">
+                <output-dir compare="Text">query_issue849</output-dir>
+            </compilation-unit>
+        </test-case>
+        <test-case FilePath="leftouterjoin">
+            <compilation-unit name="query_issue849-2">
+                <output-dir compare="Text">query_issue849-2</output-dir>
+            </compilation-unit>
+        </test-case>
     </test-group>
     <test-group name="index-leftouterjoin">
         <test-case FilePath="index-leftouterjoin">