From 5c075bbb306ad5673023b0f7f59f12abe506e4a1 Mon Sep 17 00:00:00 2001 From: Alexander Ignatyev Date: Mon, 15 Dec 2025 20:20:28 +0000 Subject: [PATCH] SERVER-115523 Update expected output for golden test base_coll_reorder_md.js (#45276) GitOrigin-RevId: c249693db202164b7062fe81fe900c2ccebb3ce6 --- .../featureFlagSbeFull/base_coll_reorder.md | 228 +++++- .../sbeDisabled/base_coll_reorder.md | 748 +++++++++++++++++- .../sbeFull/base_coll_reorder.md | 748 +++++++++++++++++- .../sbeRestricted/base_coll_reorder.md | 748 +++++++++++++++++- 4 files changed, 2379 insertions(+), 93 deletions(-) diff --git a/jstests/query_golden/expected_output/featureFlagSbeFull/base_coll_reorder.md b/jstests/query_golden/expected_output/featureFlagSbeFull/base_coll_reorder.md index 1f35bc4fa41..97fe5fb3d96 100644 --- a/jstests/query_golden/expected_output/featureFlagSbeFull/base_coll_reorder.md +++ b/jstests/query_golden/expected_output/featureFlagSbeFull/base_coll_reorder.md @@ -92,13 +92,81 @@ Execution Engine: sbe ``` ### Random reordering with seed 0 -`(HJ _ = (HJ y = COLLSCAN, _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "y" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ### Random reordering with seed 7 -`(HJ _ = (HJ _ = COLLSCAN, y = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ## 2. 3-Node graph, base node connected to one node ### No join opt @@ -196,13 +264,81 @@ Execution Engine: sbe ``` ### Random reordering with seed 0 -`(HJ _ = (HJ y = COLLSCAN, x = COLLSCAN), _ = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "y" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ### Random reordering with seed 3 -`(HJ _ = (HJ x = COLLSCAN, y = COLLSCAN), _ = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "x" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ## 3. 3-Node graph + potentially inferred edge ### No join opt @@ -295,11 +431,79 @@ Execution Engine: sbe ``` ### Random reordering with seed 0 -`(HJ _ = (HJ y = COLLSCAN, _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "y" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ### Random reordering with seed 7 -`(HJ _ = (HJ _ = COLLSCAN, y = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` diff --git a/jstests/query_golden/expected_output/sbeDisabled/base_coll_reorder.md b/jstests/query_golden/expected_output/sbeDisabled/base_coll_reorder.md index 05c04270cce..4f37e46862f 100644 --- a/jstests/query_golden/expected_output/sbeDisabled/base_coll_reorder.md +++ b/jstests/query_golden/expected_output/sbeDisabled/base_coll_reorder.md @@ -98,13 +98,81 @@ Execution Engine: classic ``` ### Random reordering with seed 0 -`(HJ _ = (HJ y = COLLSCAN, _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "y" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ### Random reordering with seed 7 -`(HJ _ = (HJ _ = COLLSCAN, y = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ## 2. 3-Node graph, base node connected to one node ### No join opt @@ -208,13 +276,81 @@ Execution Engine: classic ``` ### Random reordering with seed 0 -`(HJ _ = (HJ y = COLLSCAN, x = COLLSCAN), _ = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "y" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ### Random reordering with seed 3 -`(HJ _ = (HJ x = COLLSCAN, y = COLLSCAN), _ = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "x" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ## 3. 3-Node graph + potentially inferred edge ### No join opt @@ -313,13 +449,81 @@ Execution Engine: classic ``` ### Random reordering with seed 0 -`(HJ _ = (HJ y = COLLSCAN, _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "y" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ### Random reordering with seed 7 -`(HJ _ = (HJ _ = COLLSCAN, y = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ## 4. 4-Node graph + potentially inferred edges & filters ### No join opt @@ -477,15 +681,145 @@ Execution Engine: classic ``` ### Random reordering with seed 0 -`(HJ _ = (HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN), z = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [y.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "z" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "base" : { "$gt" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN), z = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [y.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "z" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "base" : { "$gt" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 3 -`(HJ _ = (HJ _ = (HJ y = COLLSCAN, z = COLLSCAN), _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [y.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "y" + rightEmbeddingField: "z" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "base" : { "$gt" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 5 -`(HJ _ = (HJ _ = (HJ z = COLLSCAN, y = COLLSCAN), _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [y.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "z" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "base" : { "$gt" : 3 } } + direction: "forward" +``` ### Random reordering with seed 6 -`(HJ _ = (HJ _ = (HJ y = COLLSCAN, _ = COLLSCAN), x = COLLSCAN), z = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [y.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "z" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "base" : { "$gt" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "y" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ## 5. 5-Node graph + filters ### No join opt @@ -739,23 +1073,383 @@ Execution Engine: classic ``` ### Random reordering with seed 0 -`(HJ _ = (HJ _ = (HJ _ = (HJ ddd = COLLSCAN, _ = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN), bbb = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "ddd" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + filter: { "b" : { "$gt" : 0 } } + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ _ = (HJ _ = (HJ _ = COLLSCAN, aaa = COLLSCAN), ccc = COLLSCAN), bbb = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = (HJ _ = (HJ ccc = COLLSCAN, aaa = COLLSCAN), _ = COLLSCAN), bbb = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "ccc" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$lt" : 0 } } + direction: "forward" +``` ### Random reordering with seed 3 -`(HJ _ = (HJ _ = (HJ _ = (HJ aaa = COLLSCAN, ccc = COLLSCAN), _ = COLLSCAN), bbb = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "aaa" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + filter: { "base" : { "$in" : [ 22, 33 ] } } + direction: "forward" +``` ### Random reordering with seed 4 -`(HJ _ = (HJ _ = (HJ _ = (HJ _ = COLLSCAN, bbb = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 7 -`(HJ _ = (HJ _ = (HJ _ = (HJ _ = COLLSCAN, ddd = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN), bbb = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 8 -`(HJ _ = (HJ _ = (HJ _ = (HJ ccc = COLLSCAN, aaa = COLLSCAN), _ = COLLSCAN), ddd = COLLSCAN), bbb = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "ccc" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$lt" : 0 } } + direction: "forward" +``` ### Random reordering with seed 9 -`(HJ _ = (HJ _ = (HJ _ = (HJ _ = COLLSCAN, ddd = COLLSCAN), bbb = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [aaa.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 10 -`(HJ _ = (HJ _ = (HJ _ = (HJ bbb = COLLSCAN, _ = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "bbb" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + filter: { "base" : { "$gt" : 20 } } + direction: "forward" +``` ### Random reordering with seed 11 -`(HJ _ = (HJ _ = (HJ _ = (HJ aaa = COLLSCAN, _ = COLLSCAN), ddd = COLLSCAN), bbb = COLLSCAN), ccc = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [aaa.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "aaa" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + filter: { "base" : { "$in" : [ 22, 33 ] } } + direction: "forward" +``` diff --git a/jstests/query_golden/expected_output/sbeFull/base_coll_reorder.md b/jstests/query_golden/expected_output/sbeFull/base_coll_reorder.md index 82f15238ca8..0bee11c5bc4 100644 --- a/jstests/query_golden/expected_output/sbeFull/base_coll_reorder.md +++ b/jstests/query_golden/expected_output/sbeFull/base_coll_reorder.md @@ -92,13 +92,81 @@ Execution Engine: sbe ``` ### Random reordering with seed 0 -`(HJ _ = (HJ y = COLLSCAN, _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "y" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ### Random reordering with seed 7 -`(HJ _ = (HJ _ = COLLSCAN, y = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ## 2. 3-Node graph, base node connected to one node ### No join opt @@ -196,13 +264,81 @@ Execution Engine: sbe ``` ### Random reordering with seed 0 -`(HJ _ = (HJ y = COLLSCAN, x = COLLSCAN), _ = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "y" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ### Random reordering with seed 3 -`(HJ _ = (HJ x = COLLSCAN, y = COLLSCAN), _ = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "x" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ## 3. 3-Node graph + potentially inferred edge ### No join opt @@ -295,13 +431,81 @@ Execution Engine: sbe ``` ### Random reordering with seed 0 -`(HJ _ = (HJ y = COLLSCAN, _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "y" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ### Random reordering with seed 7 -`(HJ _ = (HJ _ = COLLSCAN, y = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ## 4. 4-Node graph + potentially inferred edges & filters ### No join opt @@ -455,15 +659,145 @@ Execution Engine: sbe ``` ### Random reordering with seed 0 -`(HJ _ = (HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN), z = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [y.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "z" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "base" : { "$gt" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN), z = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [y.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "z" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "base" : { "$gt" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 3 -`(HJ _ = (HJ _ = (HJ y = COLLSCAN, z = COLLSCAN), _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [y.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "y" + rightEmbeddingField: "z" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "base" : { "$gt" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 5 -`(HJ _ = (HJ _ = (HJ z = COLLSCAN, y = COLLSCAN), _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [y.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "z" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "base" : { "$gt" : 3 } } + direction: "forward" +``` ### Random reordering with seed 6 -`(HJ _ = (HJ _ = (HJ y = COLLSCAN, _ = COLLSCAN), x = COLLSCAN), z = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [y.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "z" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "base" : { "$gt" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "y" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ## 5. 5-Node graph + filters ### No join opt @@ -717,23 +1051,383 @@ Execution Engine: sbe ``` ### Random reordering with seed 0 -`(HJ _ = (HJ _ = (HJ _ = (HJ ddd = COLLSCAN, _ = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN), bbb = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "ddd" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + filter: { "b" : { "$gt" : 0 } } + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ _ = (HJ _ = (HJ _ = COLLSCAN, aaa = COLLSCAN), ccc = COLLSCAN), bbb = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = (HJ _ = (HJ ccc = COLLSCAN, aaa = COLLSCAN), _ = COLLSCAN), bbb = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "ccc" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$lt" : 0 } } + direction: "forward" +``` ### Random reordering with seed 3 -`(HJ _ = (HJ _ = (HJ _ = (HJ aaa = COLLSCAN, ccc = COLLSCAN), _ = COLLSCAN), bbb = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "aaa" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + filter: { "base" : { "$in" : [ 22, 33 ] } } + direction: "forward" +``` ### Random reordering with seed 4 -`(HJ _ = (HJ _ = (HJ _ = (HJ _ = COLLSCAN, bbb = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 7 -`(HJ _ = (HJ _ = (HJ _ = (HJ _ = COLLSCAN, ddd = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN), bbb = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 8 -`(HJ _ = (HJ _ = (HJ _ = (HJ ccc = COLLSCAN, aaa = COLLSCAN), _ = COLLSCAN), ddd = COLLSCAN), bbb = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "ccc" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$lt" : 0 } } + direction: "forward" +``` ### Random reordering with seed 9 -`(HJ _ = (HJ _ = (HJ _ = (HJ _ = COLLSCAN, ddd = COLLSCAN), bbb = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [aaa.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 10 -`(HJ _ = (HJ _ = (HJ _ = (HJ bbb = COLLSCAN, _ = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "bbb" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + filter: { "base" : { "$gt" : 20 } } + direction: "forward" +``` ### Random reordering with seed 11 -`(HJ _ = (HJ _ = (HJ _ = (HJ aaa = COLLSCAN, _ = COLLSCAN), ddd = COLLSCAN), bbb = COLLSCAN), ccc = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [aaa.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "aaa" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + filter: { "base" : { "$in" : [ 22, 33 ] } } + direction: "forward" +``` diff --git a/jstests/query_golden/expected_output/sbeRestricted/base_coll_reorder.md b/jstests/query_golden/expected_output/sbeRestricted/base_coll_reorder.md index 05c04270cce..4f37e46862f 100644 --- a/jstests/query_golden/expected_output/sbeRestricted/base_coll_reorder.md +++ b/jstests/query_golden/expected_output/sbeRestricted/base_coll_reorder.md @@ -98,13 +98,81 @@ Execution Engine: classic ``` ### Random reordering with seed 0 -`(HJ _ = (HJ y = COLLSCAN, _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "y" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ### Random reordering with seed 7 -`(HJ _ = (HJ _ = COLLSCAN, y = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ## 2. 3-Node graph, base node connected to one node ### No join opt @@ -208,13 +276,81 @@ Execution Engine: classic ``` ### Random reordering with seed 0 -`(HJ _ = (HJ y = COLLSCAN, x = COLLSCAN), _ = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "y" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ### Random reordering with seed 3 -`(HJ _ = (HJ x = COLLSCAN, y = COLLSCAN), _ = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [x.a = a] +leftEmbeddingField: "none" +rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "x" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ## 3. 3-Node graph + potentially inferred edge ### No join opt @@ -313,13 +449,81 @@ Execution Engine: classic ``` ### Random reordering with seed 0 -`(HJ _ = (HJ y = COLLSCAN, _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "y" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ### Random reordering with seed 7 -`(HJ _ = (HJ _ = COLLSCAN, y = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + direction: "forward" +``` ## 4. 4-Node graph + potentially inferred edges & filters ### No join opt @@ -477,15 +681,145 @@ Execution Engine: classic ``` ### Random reordering with seed 0 -`(HJ _ = (HJ _ = (HJ _ = COLLSCAN, x = COLLSCAN), y = COLLSCAN), z = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [y.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "z" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "base" : { "$gt" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ _ = (HJ x = COLLSCAN, _ = COLLSCAN), y = COLLSCAN), z = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [y.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "z" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "base" : { "$gt" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "x" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + direction: "forward" +``` ### Random reordering with seed 3 -`(HJ _ = (HJ _ = (HJ y = COLLSCAN, z = COLLSCAN), _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [y.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "y" + rightEmbeddingField: "z" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "base" : { "$gt" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ### Random reordering with seed 5 -`(HJ _ = (HJ _ = (HJ z = COLLSCAN, y = COLLSCAN), _ = COLLSCAN), x = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [y.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "z" + rightEmbeddingField: "y" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "base" : { "$gt" : 3 } } + direction: "forward" +``` ### Random reordering with seed 6 -`(HJ _ = (HJ _ = (HJ y = COLLSCAN, _ = COLLSCAN), x = COLLSCAN), z = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [y.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "z" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "base" : { "$gt" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "x" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "y" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + direction: "forward" +``` ## 5. 5-Node graph + filters ### No join opt @@ -739,23 +1073,383 @@ Execution Engine: classic ``` ### Random reordering with seed 0 -`(HJ _ = (HJ _ = (HJ _ = (HJ ddd = COLLSCAN, _ = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN), bbb = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "ddd" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + filter: { "b" : { "$gt" : 0 } } + direction: "forward" +``` ### Random reordering with seed 1 -`(HJ _ = (HJ _ = (HJ _ = (HJ _ = COLLSCAN, aaa = COLLSCAN), ccc = COLLSCAN), bbb = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 2 -`(HJ _ = (HJ _ = (HJ _ = (HJ ccc = COLLSCAN, aaa = COLLSCAN), _ = COLLSCAN), bbb = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "ccc" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$lt" : 0 } } + direction: "forward" +``` ### Random reordering with seed 3 -`(HJ _ = (HJ _ = (HJ _ = (HJ aaa = COLLSCAN, ccc = COLLSCAN), _ = COLLSCAN), bbb = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "aaa" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + filter: { "base" : { "$in" : [ 22, 33 ] } } + direction: "forward" +``` ### Random reordering with seed 4 -`(HJ _ = (HJ _ = (HJ _ = (HJ _ = COLLSCAN, bbb = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 7 -`(HJ _ = (HJ _ = (HJ _ = (HJ _ = COLLSCAN, ddd = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN), bbb = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 8 -`(HJ _ = (HJ _ = (HJ _ = (HJ ccc = COLLSCAN, aaa = COLLSCAN), _ = COLLSCAN), ddd = COLLSCAN), bbb = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [b = b] +leftEmbeddingField: "none" +rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "ccc" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$lt" : 0 } } + direction: "forward" +``` ### Random reordering with seed 9 -`(HJ _ = (HJ _ = (HJ _ = (HJ _ = COLLSCAN, ddd = COLLSCAN), bbb = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [aaa.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_base] + filter: { "b" : { "$eq" : 3 } } + direction: "forward" +``` ### Random reordering with seed 10 -`(HJ _ = (HJ _ = (HJ _ = (HJ bbb = COLLSCAN, _ = COLLSCAN), aaa = COLLSCAN), ccc = COLLSCAN), ddd = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [aaa.base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "none" + rightEmbeddingField: "aaa" + | | + | COLLSCAN [test.base_coll_reorder_md_a] + | filter: { "base" : { "$in" : [ 22, 33 ] } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "bbb" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_b] + filter: { "base" : { "$gt" : 20 } } + direction: "forward" +``` ### Random reordering with seed 11 -`(HJ _ = (HJ _ = (HJ _ = (HJ aaa = COLLSCAN, _ = COLLSCAN), ddd = COLLSCAN), bbb = COLLSCAN), ccc = COLLSCAN)` +``` +HASH_JOIN_EMBEDDING [aaa.base = base] +leftEmbeddingField: "none" +rightEmbeddingField: "ccc" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$lt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [b = b] + leftEmbeddingField: "none" + rightEmbeddingField: "bbb" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "base" : { "$gt" : 20 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [base = base] + leftEmbeddingField: "none" + rightEmbeddingField: "ddd" + | | + | COLLSCAN [test.base_coll_reorder_md_b] + | filter: { "b" : { "$gt" : 0 } } + | direction: "forward" + | + HASH_JOIN_EMBEDDING [a = a] + leftEmbeddingField: "aaa" + rightEmbeddingField: "none" + | | + | COLLSCAN [test.base_coll_reorder_md_base] + | filter: { "b" : { "$eq" : 3 } } + | direction: "forward" + | + COLLSCAN [test.base_coll_reorder_md_a] + filter: { "base" : { "$in" : [ 22, 33 ] } } + direction: "forward" +```